diff --git a/DEPS b/DEPS
index ef3efb4..72a66b04 100644
--- a/DEPS
+++ b/DEPS
@@ -285,11 +285,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': '2d0b05335104bfe49bb219af1ba111ee0e9a6b03',
+  'skia_revision': '03c8e529196d901b7b1e6a7c0094d55fb8edeb1d',
   # 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': 'def49d3eed33221e91ffb11d45a2a8f33f7eebf6',
+  'v8_revision': '4ec400cc550b172765737049901d6258923f3755',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
@@ -312,7 +312,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Fuchsia sdk
   # and whatever else without interference from each other.
-  'fuchsia_version': 'version:12.20230416.0.1',
+  'fuchsia_version': 'version:12.20230416.3.1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling google-toolbox-for-mac
   # and whatever else without interference from each other.
@@ -372,7 +372,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': 'f3de8a4541393a1253b29a2613c6f3af7802a104',
+  'devtools_frontend_revision': '800573f8f3f4b4c21a5329120cb4b5486e19f0ff',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -412,7 +412,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '4bfdd18e7dd444d27fb439c4888d87b86281c03d',
+  'dawn_revision': '63aa15467e9c0262912ea2d49aa807f2b3a2c456',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -456,11 +456,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.
-  'libcxxabi_revision':    'e33143c8c06000c3fe12fe3cf88d775f5f3f5b5a',
+  'libcxxabi_revision':    '0123281f7b7aebd09d5309cacf3d61758ac1ecbc',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'libunwind_revision':    'f2d62ea5af23f5d734725a7b11ea17ad961fa5d7',
+  'libunwind_revision':    '8d636e6233d2fe155486728f1080b901a1e84da3',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -771,7 +771,7 @@
 
   'src/clank': {
     'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' +
-    'fa13b0a4f62ca82ff90a2db4d5fec12899673ef9',
+    '0bf94de2439089afb4641e4e1fc8c5bdd23c66b6',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -870,7 +870,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': 'GTmhew7QPPd8PV-NrJuk7NbwCKhD-vhMvF4c9EsL8yAC',
+          'version': 'OtyPp_Zu_JTK_nS9SF_wlTi6cYXudLEoOC6lGDhqGyMC',
         },
       ],
       'dep_type': 'cipd',
@@ -881,7 +881,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'qdlIw---NekxjCVzcQkHyAB-aHZrbOSpotGBi4UjQMIC',
+          'version': 'TYmsEM3qPLpCpMMGc3k2kLn1TRTgFoTdI-82OEirMuQC',
         },
       ],
       'dep_type': 'cipd',
@@ -892,7 +892,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': 'wcp-1v5v8-TF1AdRRo-QZ6MHBqErxIWXhFCO3WKXqrQC',
+          'version': '8V1vHmgKtgeJSb_IqTUG7agNIrufdWlqAahoj94isRcC',
         },
       ],
       'dep_type': 'cipd',
@@ -1201,7 +1201,7 @@
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '386544b8650fe6565f663e74c28ff8d5395345bd',
+      'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '36ec3790011899da3f767b23d65bfc0a70f34ee9',
     'condition': 'checkout_src_internal',
   },
 
@@ -1951,7 +1951,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': Var('chrome_git') + '/chrome/src-internal.git@64529753f43f862e96c0bae560f70056dcd0f952',
+    'url': Var('chrome_git') + '/chrome/src-internal.git@a861ec8d219f4cbc040baed9b76fba70dcb7858a',
     'condition': 'checkout_src_internal',
   },
 
@@ -1981,7 +1981,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'c9vTnBYaO1ijEB63xHRis-5XaA1myiMRIO8vCuYTvS8C',
+        'version': '4oiFCfHNDAstgZ1nUJ0V-TmdfgR86Zazci3aU5ReHgcC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1992,7 +1992,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'TmF_BE4yuQjofhnuDyEoQ5g27UrDSbXneqBjyNNckGsC',
+        'version': 'YI-mdXtWXig0ftYGtsN1F85NYwa4PVVr2UUbjxKNqbgC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -2014,7 +2014,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'oTQaM4-sJj85sRANLSJZ2kF3S5oEK-07Jj0GQUD8uTsC',
+        'version': 'Hx0G5uIOuENptiODYVAfTmdVf1ICdQG7QK5F5ekWPREC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/ash_prefs.cc b/ash/ash_prefs.cc
index 97b8058d..a805dbf 100644
--- a/ash/ash_prefs.cc
+++ b/ash/ash_prefs.cc
@@ -35,7 +35,6 @@
 #include "ash/system/camera/autozoom_controller_impl.h"
 #include "ash/system/camera/autozoom_nudge_controller.h"
 #include "ash/system/camera/camera_effects_controller.h"
-#include "ash/system/geolocation/geolocation_controller.h"
 #include "ash/system/gesture_education/gesture_education_notification_controller.h"
 #include "ash/system/human_presence/snooping_protection_controller.h"
 #include "ash/system/input_device_settings/input_device_settings_controller_impl.h"
@@ -99,7 +98,6 @@
   DockedMagnifierController::RegisterProfilePrefs(registry);
   FeatureDiscoveryDurationReporterImpl::RegisterProfilePrefs(registry);
   FullscreenController::RegisterProfilePrefs(registry);
-  GeolocationController::RegisterProfilePrefs(registry);
   GestureEducationNotificationController::RegisterProfilePrefs(registry,
                                                                for_test);
   holding_space_prefs::RegisterProfilePrefs(registry);
diff --git a/ash/constants/ash_pref_names.cc b/ash/constants/ash_pref_names.cc
index d852e22..c822cba 100644
--- a/ash/constants/ash_pref_names.cc
+++ b/ash/constants/ash_pref_names.cc
@@ -1009,16 +1009,6 @@
 // session. Values are from PrivacyHubController::AccessLevel.
 const char kDeviceGeolocationAllowed[] = "ash.device.geolocation_allowed";
 
-// Double prefs storing the most recent valid geoposition, which is only used
-// when the device lacks connectivity and we're unable to retrieve a valid
-// geoposition to calculate the sunset / sunrise times.
-//
-// Note the night light feature will be migrated to use `GeolocationController`
-// eventually, at which time `kNightLightCachedLatitude|Longitude` will be
-// superseded by these prefs.
-const char kDeviceGeolocationCachedLatitude[] = "ash.device.cached_latitude";
-const char kDeviceGeolocationCachedLongitude[] = "ash.device.cached_longitude";
-
 // A boolean pref which determines whether tap-dragging is enabled.
 const char kTapDraggingEnabled[] = "settings.touchpad.enable_tap_dragging";
 
diff --git a/ash/constants/ash_pref_names.h b/ash/constants/ash_pref_names.h
index 9b0a1ed0..00131c1 100644
--- a/ash/constants/ash_pref_names.h
+++ b/ash/constants/ash_pref_names.h
@@ -465,10 +465,6 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kUserMicrophoneAllowed[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kUserGeolocationAllowed[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kDeviceGeolocationAllowed[];
-COMPONENT_EXPORT(ASH_CONSTANTS)
-extern const char kDeviceGeolocationCachedLatitude[];
-COMPONENT_EXPORT(ASH_CONSTANTS)
-extern const char kDeviceGeolocationCachedLongitude[];
 
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kTapDraggingEnabled[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kTouchpadEnabled[];
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index cfda2cde..8909f08e 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -225,6 +225,7 @@
 <translation id="1978498689038657292">Text input</translation>
 <translation id="1980808257969311265">Join <ph name="EVENT_SUMMARY" /></translation>
 <translation id="1982717156487272186">Show previous week</translation>
+<translation id="1986150224850161328">Make sure your phone and Chromebook are on the same network and then try again. <ph name="LEARN_MORE" /></translation>
 <translation id="1989113344093894667">Can't capture content</translation>
 <translation id="1990046457226896323">Speech files downloaded</translation>
 <translation id="1993072747612765854">Learn more about the latest <ph name="SYSTEM_APP_NAME" /> update</translation>
@@ -374,6 +375,7 @@
 <translation id="2761723519669354964">Open highlighted item from shelf</translation>
 <translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> managed by <ph name="MANAGER" /></translation>
 <translation id="2782591952652094792">Exit capture mode</translation>
+<translation id="2785499565474703580">One device connected</translation>
 <translation id="2791421900609674576">You’ll see recommendations so that you can continue where you left off. You can touch &amp; hold to remove recommendations.</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
 <translation id="2797741504905337289">Shelf Party</translation>
@@ -1278,6 +1280,7 @@
 <translation id="6941333068993625698">Submit feedback</translation>
 <translation id="6942518653766415536">Recording format menu</translation>
 <translation id="6945221475159498467">Select</translation>
+<translation id="6945922087561257829">Your phone is using a mobile network. Make sure your phone and Chromebook are on the same Wi-Fi network and then try again. <ph name="LEARN_MORE" /></translation>
 <translation id="6960565108681981554">Not activated. Contact your operator.</translation>
 <translation id="6961121602502368900">Silence phone is not available on work profile</translation>
 <translation id="6961840794482373852">The Alt + up arrow keyboard shortcut has changed. To use the page up key, press the <ph name="LAUNCHER_KEY_NAME" /> key + up arrow.</translation>
@@ -1332,6 +1335,7 @@
 <translation id="7188494361780961876">Menu moved to the top-left corner of the screen.</translation>
 <translation id="7189412385142492784">How far is Venus</translation>
 <translation id="7198435252016571249">Camera snapped to the bottom-right corner. Conflict with system surface.</translation>
+<translation id="7219573373513695352">No devices connected</translation>
 <translation id="7246071203293827765"><ph name="UPDATE_TEXT" />. This Chromebook needs to restart to apply an update. This can take up to one minute.</translation>
 <translation id="7256634071279256947">Rear microphone</translation>
 <translation id="7258828758145722155">Edited yesterday</translation>
@@ -1482,6 +1486,7 @@
 <translation id="7902625623987030061">Touch the fingerprint sensor</translation>
 <translation id="7904094684485781019">The administrator for this account has disallowed multiple sign-in.</translation>
 <translation id="7911118814695487383">Linux</translation>
+<translation id="7917760201509801422"><ph name="DEVICECOUNT" /> devices connected</translation>
 <translation id="7930731167419639574">Speech is now processed locally and dictation works offline</translation>
 <translation id="7932451802722951285">Open in Google Calendar</translation>
 <translation id="7933084174919150729">The Google Assistant is only available for primary profile.</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index e1e3b27..a894d89 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -1362,7 +1362,7 @@
 <translation id="7382680553121047388">Күйүк</translation>
 <translation id="7384028040782072252">Колдонмолоруңуздун иретин өзгөртүү үчүн каалаган жерде оң баскычты чыкылдатыңыз</translation>
 <translation id="7386767620098596324">Тармакка туташууну өчүрүү/күйгүзүү. <ph name="STATE_TEXT" />.</translation>
-<translation id="7392563512730092880">Кийинчерээк Жөндөөлөргө өтүп, бул функцияны жөндөсөңүз болот.</translation>
+<translation id="7392563512730092880">Кийинчерээк Параметрлерге өтүп, бул функцияны жөндөсөңүз болот.</translation>
 <translation id="7401222354741467707">Толук скриншотту тартуу же экрандан видео жаздырып алуу</translation>
 <translation id="7405710164030118432">Бул түзмөктүн кулпусун ачуу үчүн Family Link'теги ата-эненин кирүү кодун териңиз</translation>
 <translation id="7406608787870898861">Мобилдик тармагыңызды жөндөп бүтүрүңүз</translation>
diff --git a/ash/system/geolocation/geolocation_controller.cc b/ash/system/geolocation/geolocation_controller.cc
index c881893..bdcd4665 100644
--- a/ash/system/geolocation/geolocation_controller.cc
+++ b/ash/system/geolocation/geolocation_controller.cc
@@ -16,7 +16,6 @@
 #include "base/time/clock.h"
 #include "chromeos/ash/components/geolocation/geoposition.h"
 #include "chromeos/ash/components/geolocation/simple_geolocation_provider.h"
-#include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 #include "third_party/icu/source/i18n/astro.h"
 
@@ -49,8 +48,7 @@
                 std::move(factory),
                 SimpleGeolocationProvider::DefaultGeolocationProviderURL()),
       backoff_delay_(kMinimumDelayAfterFailure),
-      timer_(std::make_unique<base::OneShotTimer>()),
-      scoped_session_observer_(this) {
+      timer_(std::make_unique<base::OneShotTimer>()) {
   auto* timezone_settings = system::TimezoneSettings::GetInstance();
   current_timezone_id_ = timezone_settings->GetCurrentTimezoneID();
   timezone_settings->AddObserver(this);
@@ -70,12 +68,6 @@
   return controller;
 }
 
-// static
-void GeolocationController::RegisterProfilePrefs(PrefRegistrySimple* registry) {
-  registry->RegisterDoublePref(prefs::kDeviceGeolocationCachedLatitude, 0.0);
-  registry->RegisterDoublePref(prefs::kDeviceGeolocationCachedLongitude, 0.0);
-}
-
 void GeolocationController::AddObserver(Observer* observer) {
   const bool is_first_observer = observers_.empty();
   observers_.AddObserver(observer);
@@ -124,16 +116,6 @@
   return primary_user_prefs->GetBoolean(ash::prefs::kUserGeolocationAllowed);
 }
 
-void GeolocationController::OnActiveUserPrefServiceChanged(
-    PrefService* pref_service) {
-  if (pref_service == active_user_pref_service_.get()) {
-    return;
-  }
-
-  active_user_pref_service_ = pref_service;
-  LoadCachedGeopositionIfNeeded();
-}
-
 // static
 base::TimeDelta
 GeolocationController::GetNextRequestDelayAfterSuccessForTesting() {
@@ -181,9 +163,6 @@
   geoposition_->latitude = position.latitude;
   geoposition_->longitude = position.longitude;
 
-  is_current_geoposition_from_cache_ = false;
-  StoreCachedGeoposition();
-
   if (previous_sunset && previous_sunrise) {
     // If the change in geoposition results in an hour or more in either sunset
     // or sunrise times indicates of a possible timezone change.
@@ -252,53 +231,4 @@
   return base::Time::FromDoubleT(sun_rise_set_ms / 1000.0);
 }
 
-void GeolocationController::LoadCachedGeopositionIfNeeded() {
-  DCHECK(active_user_pref_service_);
-
-  // Even if there is a geoposition, but it's coming from a previously cached
-  // value, switching users should load the currently saved values for the
-  // new user. This is to keep users' prefs completely separate. We only ignore
-  // the cached values once we have a valid non-cached geoposition from any
-  // user in the same session.
-  if (geoposition_ && !is_current_geoposition_from_cache_) {
-    return;
-  }
-
-  if (!active_user_pref_service_->HasPrefPath(
-          prefs::kDeviceGeolocationCachedLatitude) ||
-      !active_user_pref_service_->HasPrefPath(
-          prefs::kDeviceGeolocationCachedLongitude)) {
-    LOG(ERROR)
-        << "No valid current geoposition and no valid cached geoposition"
-           " are available. Will use default times for sunset / sunrise.";
-    geoposition_.reset();
-    return;
-  }
-
-  geoposition_ = std::make_unique<SimpleGeoposition>();
-  geoposition_->latitude = active_user_pref_service_->GetDouble(
-      prefs::kDeviceGeolocationCachedLatitude);
-  geoposition_->longitude = active_user_pref_service_->GetDouble(
-      prefs::kDeviceGeolocationCachedLongitude);
-  is_current_geoposition_from_cache_ = true;
-}
-
-void GeolocationController::StoreCachedGeoposition() const {
-  CHECK(geoposition_);
-  const SessionControllerImpl* session_controller =
-      Shell::Get()->session_controller();
-  for (const auto& user_session : session_controller->GetUserSessions()) {
-    PrefService* pref_service = session_controller->GetUserPrefServiceForUser(
-        user_session->user_info.account_id);
-    if (!pref_service) {
-      continue;
-    }
-
-    pref_service->SetDouble(prefs::kDeviceGeolocationCachedLatitude,
-                            geoposition_->latitude);
-    pref_service->SetDouble(prefs::kDeviceGeolocationCachedLongitude,
-                            geoposition_->longitude);
-  }
-}
-
 }  // namespace ash
diff --git a/ash/system/geolocation/geolocation_controller.h b/ash/system/geolocation/geolocation_controller.h
index e25c998b..24393ec 100644
--- a/ash/system/geolocation/geolocation_controller.h
+++ b/ash/system/geolocation/geolocation_controller.h
@@ -9,8 +9,6 @@
 #include <string>
 
 #include "ash/ash_export.h"
-#include "ash/public/cpp/session/session_observer.h"
-#include "base/memory/raw_ptr.h"
 #include "base/observer_list.h"
 #include "base/observer_list_types.h"
 #include "base/time/time.h"
@@ -20,9 +18,6 @@
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
-class PrefRegistrySimple;
-class PrefService;
-
 namespace base {
 class Clock;
 }  // namespace base
@@ -53,7 +48,6 @@
 class ASH_EXPORT GeolocationController
     : public system::TimezoneSettings::Observer,
       public chromeos::PowerManagerClient::Observer,
-      public SessionObserver,
       public SimpleGeolocationProvider::Delegate {
  public:
   class Observer : public base::CheckedObserver {
@@ -74,10 +68,13 @@
   ~GeolocationController() override;
 
   static GeolocationController* Get();
-  static void RegisterProfilePrefs(PrefRegistrySimple* registry);
 
   const base::OneShotTimer& timer() const { return *timer_; }
 
+  base::Time last_successful_geo_request_time() const {
+    return last_successful_geo_request_time_;
+  }
+
   const std::u16string& current_timezone_id() const {
     return current_timezone_id_;
   }
@@ -94,12 +91,8 @@
   // SimpleGeolocationProvider::Delegate:
   bool IsPreciseGeolocationAllowed() const override;
 
-  // SessionObserver:
-  void OnActiveUserPrefServiceChanged(PrefService* pref_service) override;
-
-  // Returns sunset and sunrise time calculated from the most recently observed
-  // geoposition. If a geoposition has not been observed, defaults to sunset
-  // 6 PM and sunrise 6 AM.
+  // Returns sunset and sunrise time calculated from `geoposition_`. If the
+  // position is not set, returns the default sunset 6 PM and sunrise 6 AM.
   base::Time GetSunsetTime() const { return GetSunRiseSet(/*sunrise=*/false); }
   base::Time GetSunriseTime() const { return GetSunRiseSet(/*sunrise=*/true); }
 
@@ -152,20 +145,8 @@
   // the chances of getting inaccurate values, especially around DST changes.
   base::Time GetSunRiseSet(bool sunrise) const;
 
-  // Called only when the active user changes in order to see if we need to use
-  // a previously cached geoposition value from the active user's prefs.
-  void LoadCachedGeopositionIfNeeded();
-
-  // Called whenever we receive a new geoposition update to cache it in all
-  // logged-in users' prefs so that it can be used later in the event of not
-  // being able to retrieve a valid geoposition.
-  void StoreCachedGeoposition() const;
-
   network::SharedURLLoaderFactory* const factory_;
 
-  // May be null if a user has not logged in yet.
-  base::raw_ptr<PrefService> active_user_pref_service_;
-
   // The IP-based geolocation provider.
   SimpleGeolocationProvider provider_;
 
@@ -177,22 +158,15 @@
   // Optional Used in tests to override the time of "Now".
   base::Clock* clock_ = nullptr;  // Not owned.
 
+  // Last successful geoposition coordinates and its timestamp.
+  base::Time last_successful_geo_request_time_;
+
   // The ID of the current timezone in the format similar to "America/Chicago".
   std::u16string current_timezone_id_;
 
   base::ObserverList<Observer> observers_;
 
-  // True if the current `geoposition_` is from a previously cached value in the
-  // user prefs of any of the users in the current session. It is reset to false
-  // once we receive a newly-updated geoposition. This is used to treat the
-  // current geoposition as temporary until we receive a valid geoposition
-  // update, and also not to let a cached geoposition value to leak to another
-  // user for privacy reasons.
-  bool is_current_geoposition_from_cache_ = false;
-
   std::unique_ptr<SimpleGeoposition> geoposition_;
-
-  ScopedSessionObserver scoped_session_observer_;
 };
 
 }  // namespace ash
diff --git a/ash/system/geolocation/geolocation_controller_unittest.cc b/ash/system/geolocation/geolocation_controller_unittest.cc
index 2ed2137..943558f 100644
--- a/ash/system/geolocation/geolocation_controller_unittest.cc
+++ b/ash/system/geolocation/geolocation_controller_unittest.cc
@@ -4,24 +4,18 @@
 
 #include "ash/system/geolocation/geolocation_controller.h"
 
-#include "ash/constants/ash_pref_names.h"
-#include "ash/session/session_controller_impl.h"
-#include "ash/session/test_session_controller_client.h"
 #include "ash/shell.h"
 #include "ash/system/geolocation/geolocation_controller_test_util.h"
 #include "ash/system/geolocation/test_geolocation_url_loader_factory.h"
 #include "ash/system/time/time_of_day.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/test_shell_delegate.h"
-#include "base/check.h"
-#include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/simple_test_clock.h"
 #include "base/time/clock.h"
 #include "base/time/time.h"
 #include "base/timer/mock_timer.h"
 #include "chromeos/dbus/power/fake_power_manager_client.h"
-#include "components/prefs/pref_service.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "third_party/icu/source/i18n/unicode/timezone.h"
 
@@ -29,26 +23,6 @@
 
 namespace {
 
-constexpr char kUser1Email[] = "user1@geolocation";
-constexpr char kUser2Email[] = "user2@geolocation";
-
-// Sets of test longitudes/latitude and the corresponding sunrise/sunset times
-// for testing. They all assume the clock's current time is `kTestNow`.
-constexpr base::StringPiece kTestNow = "23 Dec 2021 12:00:00";
-
-constexpr double kTestLatitude1 = 23.5;
-constexpr double kTestLongitude1 = 35.88;
-constexpr base::StringPiece kTestSunriseTime1 = "23 Dec 2021 04:14:36.626";
-constexpr base::StringPiece kTestSunsetTime1 = "23 Dec 2021 14:59:58.459";
-
-constexpr double kTestLatitude2 = 37.5;
-constexpr double kTestLongitude2 = -100.5;
-constexpr base::StringPiece kTestSunriseTime2 = "23 Dec 2021 13:55:13.306";
-constexpr base::StringPiece kTestSunsetTime2 = "23 Dec 2021 23:33:46.855";
-
-constexpr int kDefaultSunsetTimeOffsetMinutes = 18 * 60;
-constexpr int kDefaultSunriseTimeOffsetMinutes = 6 * 60;
-
 // Constructs a TimeZone object from the given `timezone_id`.
 std::unique_ptr<icu::TimeZone> CreateTimezone(const char* timezone_id) {
   return base::WrapUnique(icu::TimeZone::createTimeZone(
@@ -59,13 +33,6 @@
   return system::TimezoneSettings::GetTimezoneID(timezone);
 }
 
-base::Time ToUTCTime(base::StringPiece utc_time_str) {
-  base::Time time;
-  CHECK(base::Time::FromUTCString(utc_time_str.data(), &time))
-      << "Invalid UTC time string specified: " << utc_time_str;
-  return time;
-}
-
 // Base test fixture.
 class GeolocationControllerTest : public AshTestBase {
  public:
@@ -80,7 +47,6 @@
   // AshTestBase:
   void SetUp() override {
     AshTestBase::SetUp();
-    CreateTestUserSessions();
     controller_ = std::make_unique<GeolocationController>(
         static_cast<scoped_refptr<network::SharedURLLoaderFactory>>(
             base::MakeRefCounted<TestGeolocationUrlLoaderFactory>()));
@@ -113,27 +79,6 @@
   base::OneShotTimer* timer_ptr() const { return timer_ptr_; }
   const Geoposition& position() const { return position_; }
 
-  PrefService* user1_pref_service() {
-    return Shell::Get()->session_controller()->GetUserPrefServiceForUser(
-        AccountId::FromUserEmail(kUser1Email));
-  }
-
-  PrefService* user2_pref_service() {
-    return Shell::Get()->session_controller()->GetUserPrefServiceForUser(
-        AccountId::FromUserEmail(kUser2Email));
-  }
-
-  void CreateTestUserSessions() {
-    GetSessionControllerClient()->Reset();
-    GetSessionControllerClient()->AddUserSession(kUser1Email);
-    GetSessionControllerClient()->AddUserSession(kUser2Email);
-  }
-
-  void SwitchActiveUser(const std::string& email) {
-    GetSessionControllerClient()->SwitchActiveUser(
-        AccountId::FromUserEmail(email));
-  }
-
   // Fires the timer of the scheduler to request geoposition and wait for all
   // observers to receive the latest geoposition from the server.
   void FireTimerToFetchGeoposition() {
@@ -151,7 +96,6 @@
   // `GeolocationController` request.
   void SetServerPosition(const Geoposition& position) {
     position_ = position;
-    factory_->ClearResponses();
     factory_->set_position(position_);
   }
 
@@ -278,6 +222,11 @@
 // Tests obtaining sunset/sunrise time when there is no valid geoposition, for
 // example, due to lack of connectivity.
 TEST_F(GeolocationControllerTest, SunsetSunriseDefault) {
+  // Default sunset time at 6:00 PM as an offset from 00:00.
+  constexpr int kDefaultSunsetTimeOffsetMinutes = 18 * 60;
+  // Default sunrise time at 6:00 AM as an offset from 00:00.
+  constexpr int kDefaultSunriseTimeOffsetMinutes = 6 * 60;
+
   // If geoposition is unset, the controller should return the default sunset
   // and sunrise time .
   EXPECT_EQ(controller()->GetSunsetTime(),
@@ -289,32 +238,39 @@
 // Tests the behavior when there is a valid geoposition, sunrise and sunset
 // times are calculated correctly.
 TEST_F(GeolocationControllerTest, GetSunRiseSet) {
-  test_clock()->SetNow(ToUTCTime(kTestNow));
+  base::Time now;
+  EXPECT_TRUE(base::Time::FromUTCString("23 Dec 2021 12:00:00", &now));
+  test_clock()->SetNow(now);
+
+  base::Time sunrise;
+  EXPECT_TRUE(base::Time::FromUTCString("23 Dec 2021 04:14:36.626", &sunrise));
+  base::Time sunset;
+  EXPECT_TRUE(base::Time::FromUTCString("23 Dec 2021 14:59:58.459", &sunset));
 
   // Add an observer and make sure that sunset and sunrise time are not
   // updated until the timer is fired.
   GeolocationControllerObserver observer1;
   controller()->AddObserver(&observer1);
   EXPECT_TRUE(timer_ptr()->IsRunning());
-  EXPECT_NE(controller()->GetSunsetTime(), ToUTCTime(kTestSunsetTime1));
-  EXPECT_NE(controller()->GetSunriseTime(), ToUTCTime(kTestSunriseTime1));
+  EXPECT_NE(controller()->GetSunsetTime(), sunset);
+  EXPECT_NE(controller()->GetSunriseTime(), sunrise);
   EXPECT_EQ(0, observer1.position_received_num());
 
   // Prepare a valid geoposition.
   Geoposition position;
-  position.latitude = kTestLatitude1;
-  position.longitude = kTestLongitude1;
+  position.latitude = 23.5;
+  position.longitude = 35.88;
   position.status = Geoposition::STATUS_OK;
   position.accuracy = 10;
-  position.timestamp = ToUTCTime(kTestNow);
+  position.timestamp = now;
 
   // Test that after sending the new position, sunrise and sunset time are
   // updated correctly.
   SetServerPosition(position);
   FireTimerToFetchGeoposition();
   EXPECT_EQ(1, observer1.position_received_num());
-  EXPECT_EQ(controller()->GetSunsetTime(), ToUTCTime(kTestSunsetTime1));
-  EXPECT_EQ(controller()->GetSunriseTime(), ToUTCTime(kTestSunriseTime1));
+  EXPECT_EQ(controller()->GetSunsetTime(), sunset);
+  EXPECT_EQ(controller()->GetSunriseTime(), sunrise);
   EXPECT_TRUE(timer_ptr()->IsRunning());
 }
 
@@ -357,92 +313,6 @@
   EXPECT_EQ(next_request_delay_after_success, timer_ptr()->GetCurrentDelay());
 }
 
-// Tests the behavior when there is no valid geoposition for example due to lack
-// of connectivity.
-TEST_F(GeolocationControllerTest, AbsentValidGeoposition) {
-  test_clock()->SetNow(ToUTCTime(kTestNow));
-
-  // Initially, no values are stored in either of the two users' prefs.
-  ASSERT_FALSE(user1_pref_service()->HasPrefPath(
-      prefs::kDeviceGeolocationCachedLatitude));
-  ASSERT_FALSE(user1_pref_service()->HasPrefPath(
-      prefs::kDeviceGeolocationCachedLongitude));
-  ASSERT_FALSE(user2_pref_service()->HasPrefPath(
-      prefs::kDeviceGeolocationCachedLatitude));
-  ASSERT_FALSE(user2_pref_service()->HasPrefPath(
-      prefs::kDeviceGeolocationCachedLongitude));
-
-  // Store fake geoposition in user 2's prefs.
-  user2_pref_service()->SetDouble(prefs::kDeviceGeolocationCachedLatitude,
-                                  kTestLatitude1);
-  user2_pref_service()->SetDouble(prefs::kDeviceGeolocationCachedLongitude,
-                                  kTestLongitude1);
-
-  // Switch to user 2 and expect that geoposition is loaded from pref.
-  SwitchActiveUser(kUser2Email);
-  EXPECT_EQ(controller()->GetSunsetTime(), ToUTCTime(kTestSunsetTime1));
-  EXPECT_EQ(controller()->GetSunriseTime(), ToUTCTime(kTestSunriseTime1));
-
-  // Switching to user 1 should ignore the current geoposition since it's
-  // a cached value from user 2's prefs rather than a newly-updated value.
-  SwitchActiveUser(kUser1Email);
-  EXPECT_EQ(controller()->GetSunsetTime(),
-            TimeOfDay(kDefaultSunsetTimeOffsetMinutes)
-                .SetClock(test_clock())
-                .ToTimeToday());
-  EXPECT_EQ(controller()->GetSunriseTime(),
-            TimeOfDay(kDefaultSunriseTimeOffsetMinutes)
-                .SetClock(test_clock())
-                .ToTimeToday());
-
-  // Now simulate receiving a live geoposition update.
-  Geoposition position;
-  position.latitude = kTestLatitude1;
-  position.longitude = kTestLongitude1;
-  position.status = Geoposition::STATUS_OK;
-  position.accuracy = 10;
-  position.timestamp = ToUTCTime(kTestNow);
-  SetServerPosition(position);
-  FireTimerToFetchGeoposition();
-  EXPECT_EQ(controller()->GetSunsetTime(), ToUTCTime(kTestSunsetTime1));
-  EXPECT_EQ(controller()->GetSunriseTime(), ToUTCTime(kTestSunriseTime1));
-
-  // Update user 2's prefs with different geoposition.
-  user2_pref_service()->SetDouble(prefs::kDeviceGeolocationCachedLatitude,
-                                  kTestLatitude2);
-  user2_pref_service()->SetDouble(prefs::kDeviceGeolocationCachedLongitude,
-                                  kTestLongitude2);
-
-  // Now switching to user 2 should completely ignore their cached geopsoition,
-  // since from now on we have a valid newly-retrieved value.
-  SwitchActiveUser(kUser2Email);
-  EXPECT_EQ(controller()->GetSunsetTime(), ToUTCTime(kTestSunsetTime1));
-  EXPECT_EQ(controller()->GetSunriseTime(), ToUTCTime(kTestSunriseTime1));
-
-  // Clear all cached geoposition prefs for all users, just to make sure getting
-  // a new geoposition will persist it for all users not just the active one.
-  user1_pref_service()->ClearPref(prefs::kDeviceGeolocationCachedLatitude);
-  user1_pref_service()->ClearPref(prefs::kDeviceGeolocationCachedLongitude);
-  user2_pref_service()->ClearPref(prefs::kDeviceGeolocationCachedLatitude);
-  user2_pref_service()->ClearPref(prefs::kDeviceGeolocationCachedLongitude);
-
-  // Now simulate receiving another live geoposition update.
-  position.latitude = kTestLatitude2;
-  position.longitude = kTestLongitude2;
-  SetServerPosition(position);
-  FireTimerToFetchGeoposition();
-  EXPECT_EQ(controller()->GetSunsetTime(), ToUTCTime(kTestSunsetTime2));
-  EXPECT_EQ(controller()->GetSunriseTime(), ToUTCTime(kTestSunriseTime2));
-  EXPECT_EQ(kTestLatitude2, user1_pref_service()->GetDouble(
-                                prefs::kDeviceGeolocationCachedLatitude));
-  EXPECT_EQ(kTestLongitude2, user1_pref_service()->GetDouble(
-                                 prefs::kDeviceGeolocationCachedLongitude));
-  EXPECT_EQ(kTestLatitude2, user2_pref_service()->GetDouble(
-                                prefs::kDeviceGeolocationCachedLatitude));
-  EXPECT_EQ(kTestLongitude2, user2_pref_service()->GetDouble(
-                                 prefs::kDeviceGeolocationCachedLongitude));
-}
-
 }  // namespace
 
 }  // namespace ash
diff --git a/ash/webui/common/resources/smb_shares/add_smb_share_dialog.html b/ash/webui/common/resources/smb_shares/add_smb_share_dialog.html
index 21135fc..557e32e 100644
--- a/ash/webui/common/resources/smb_shares/add_smb_share_dialog.html
+++ b/ash/webui/common/resources/smb_shares/add_smb_share_dialog.html
@@ -1,4 +1,30 @@
     <style include="cr-shared-style md-select">
+      :host-context([theme='legacy']) cr-dialog::part(wrapper) {
+        /* Subtract the internal padding in <cr-dialog>. */
+        padding: calc(24px - 20px);
+      }
+
+      :host-context([theme='legacy']) cr-dialog::part(dialog) {
+        background-color: var(--cros-bg-color-elevation-3);
+      }
+
+      :host-context([theme='refresh23']) cr-dialog::part(dialog) {
+        background-color: var(--cros-sys-dialog_container);
+      }
+
+      :host-context([theme='legacy']) [slot=title] {
+        --cr-primary-text-color: var(--cros-text-color-primary);
+      }
+
+      :host-context([theme='refresh23']) [slot=title] {
+        --cr-dialog-title-slot-padding-bottom: 32px;
+        --cr-dialog-title-slot-padding-end: 32px;
+        --cr-dialog-title-slot-padding-start: 32px;
+        --cr-dialog-title-slot-padding-top: 32px;
+        --cr-primary-text-color: var(--cros-sys-on_surface);
+        font-weight: 500;
+      }
+
       :host-context([theme='legacy']) [slot='button-container']  {
         padding-bottom: 20px;
         padding-top: 32px;
@@ -10,8 +36,9 @@
         padding-top: 0;
       }
 
-      #dialog [slot=body] {
-        height: 390px;
+      :host-context([theme='refresh23']) #dialog [slot=body] {
+        --cr-dialog-body-padding-horizontal: 32px;
+        --cr-form-field-bottom-spacing: 8px;
       }
 
       :host-context([theme='legacy']) .md-select {
@@ -22,9 +49,12 @@
       }
 
       :host-context([theme='refresh23']) .md-select {
-        --md-select-bg-color: var(--cros-sys-input-field_on_base);
+        --md-select-bg-color: var(--cros-sys-input_field_on_base);
         --md-select-focus-shadow-color: var(--cros-sys-focus_ring);
-        --md-select-text-color: var(--cros-sys-primary);
+        --md-select-text-color: var(--cros-sys-on_surface);
+        --md-select-side-padding: 16px;
+        border-radius: 8px;
+        height: 36px;
         width: 100%;
       }
 
@@ -41,13 +71,16 @@
         --cr-searchable-drop-down-shadow: var(--cros-elevation-2-shadow);
         --cr-searchable-drop-down-spinner-color:
             var(--cros-icon-color-prominent);
+        /* cr_searchable_drop_down will hard code its width without this
+          variable. */
+        --cr-searchable-drop-down-width: auto;
         --cr-secondary-text-color: var(--cros-text-color-secondary);
         --iron-icon-fill-color: var(--cros-textfield-label-color);
         display: block;
       }
 
       :host-context([theme='refresh23']) cr-searchable-drop-down {
-        --cr-searchable-drop-down-bg-color: var(--cros-sys-input-field_on_base);
+        --cr-searchable-drop-down-bg-color: var(--cros-sys-base_elevated);
         --cr-searchable-drop-down-icon-color-focus:
             var(--cros-sys-on_surface);
         --cr-searchable-drop-down-list-item-color: var(--cros-sys-on_surface);
@@ -77,9 +110,13 @@
       :host-context([theme='refresh23']) cr-searchable-drop-down::part(input) {
         --cr-form-field-label-color: var(--cros-sys-on_surface);
         --cr-input-background-color: var(--cros-sys-input_field_on_base);
+        --cr-input-border-radius: 8px;
         --cr-input-color: var(--cros-sys-on_surface);
         --cr-input-error-color: var(--cros-sys-error);
         --cr-input-focus-color: var(--cros-sys-primary);
+        --cr-input-min-height: 36px;
+        --cr-input-padding-end: 16px;
+        --cr-input-padding-start: 16px;
         --cr-input-placeholder-color: var(--cros-sys-secondary);
       }
 
diff --git a/ash/webui/common/resources/smb_shares/add_smb_share_dialog.js b/ash/webui/common/resources/smb_shares/add_smb_share_dialog.js
index b5088e8..4cbb41de 100644
--- a/ash/webui/common/resources/smb_shares/add_smb_share_dialog.js
+++ b/ash/webui/common/resources/smb_shares/add_smb_share_dialog.js
@@ -169,6 +169,10 @@
   /** @override */
   created() {
     this.browserProxy_ = SmbBrowserProxyImpl.getInstance();
+
+    const jellyEnabled = loadTimeData.getBoolean('isJellyEnabled');
+    const theme = jellyEnabled ? 'refresh23' : 'legacy';
+    document.documentElement.setAttribute('theme', theme);
   },
 
   /** @override */
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index fb69e2c..e86b5b2 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-12.20230415.3.1
+12.20230416.2.1
diff --git a/chrome/VERSION b/chrome/VERSION
index b0696ba..4a4342c 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=114
 MINOR=0
-BUILD=5716
+BUILD=5717
 PATCH=0
diff --git a/chrome/android/java/res/layout/autofill_migrate_address_profile_prompt.xml b/chrome/android/java/res/layout/autofill_migrate_address_profile_prompt.xml
index 59923bb..b6830cf2 100644
--- a/chrome/android/java/res/layout/autofill_migrate_address_profile_prompt.xml
+++ b/chrome/android/java/res/layout/autofill_migrate_address_profile_prompt.xml
@@ -48,6 +48,7 @@
         android:layout_below="@+id/autofill_address_profile_prompt_source_notice"
         android:layout_toStartOf="@id/edit_button"
         android:paddingTop="12dp"
+        android:paddingBottom="32dp"
         android:paddingStart="@dimen/dialog_padding_sides"
         android:orientation="vertical">
 
@@ -55,7 +56,6 @@
           android:id="@+id/address"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
-          android:layout_marginBottom="12dp"
           android:textAppearance="@style/TextAppearance.TextLarge.Secondary"
           app:leading="@dimen/text_size_large_leading"
           tools:text="John Doe\n1600 Amphitheatre Parkway\nMountain View,, CA, 94043\nUnited States" />
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePrompt.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePrompt.java
index 343df72..cb004be 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePrompt.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePrompt.java
@@ -165,7 +165,7 @@
      */
     @CalledByNative
     @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
-    void setSaveDetails(String address, String email, String phone) {
+    void setSaveOrMigrateDetails(String address, String email, String phone) {
         showTextIfNotEmpty(mDialogView.findViewById(R.id.address), address);
         showTextIfNotEmpty(mDialogView.findViewById(R.id.email), email);
         showTextIfNotEmpty(mDialogView.findViewById(R.id.phone), phone);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePromptTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePromptTest.java
index dbefba7..aab8852 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePromptTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePromptTest.java
@@ -207,7 +207,7 @@
 
         View dialog = mPrompt.getDialogViewForTesting();
 
-        mPrompt.setSaveDetails("address", "email", "phone");
+        mPrompt.setSaveOrMigrateDetails("address", "email", "phone");
         validateTextView(dialog.findViewById(R.id.address), "address");
         validateTextView(dialog.findViewById(R.id.email), "email");
         validateTextView(dialog.findViewById(R.id.phone), "phone");
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 5a2728e..adea353 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -7965,17 +7965,11 @@
             <message name="IDS_INTENT_PICKER_SELECT_AN_APP_SUBTITLE" desc="The subtitle of a dialog containing a list of installed applications. The dialog allows the user to select an app to open a web link.">
               Select an app on your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> to open this link
             </message>
-            <message name="IDS_INTENT_CHIP_IPH_CHROME_OS" desc="The text for the In-Product Help bubble for the Intent Chip on ChromeOS devices.">
-              Open websites in apps installed on your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>
-            </message>
           </then>
           <else>
             <message name="IDS_INTENT_PICKER_SELECT_AN_APP_GENERIC_SUBTITLE" desc="The subtitle of a dialog containing a list of installed applications. The dialog allows the user to select an app to open a web link.">
               Select an app on your device to open this link
             </message>
-            <message name="IDS_INTENT_CHIP_IPH_GENERIC" desc="The text for the In-Product Help bubble for the Intent Chip.">
-              Open websites in apps installed on your device
-            </message>
           </else>
         </if>
       </if>
diff --git a/chrome/app/generated_resources_grd/IDS_INTENT_CHIP_IPH_CHROME_OS.png.sha1 b/chrome/app/generated_resources_grd/IDS_INTENT_CHIP_IPH_CHROME_OS.png.sha1
deleted file mode 100644
index c5e6d44f..0000000
--- a/chrome/app/generated_resources_grd/IDS_INTENT_CHIP_IPH_CHROME_OS.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5d3dd6117fa2efcab642934eee6470ad1b542721
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_INTENT_CHIP_IPH_GENERIC.png.sha1 b/chrome/app/generated_resources_grd/IDS_INTENT_CHIP_IPH_GENERIC.png.sha1
deleted file mode 100644
index 1afd457..0000000
--- a/chrome/app/generated_resources_grd/IDS_INTENT_CHIP_IPH_GENERIC.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-c489c7b5d26ffb97450e57c69a04ea388e8f8bba
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp
index 8636b6b2..95be652c 100644
--- a/chrome/app/os_settings_strings.grdp
+++ b/chrome/app/os_settings_strings.grdp
@@ -913,7 +913,10 @@
     Keep your files available when you're offline
   </message>
   <message name="IDS_SETTINGS_GOOGLE_DRIVE_OFFLINE_SUBTITLE" translateable="false" desc="Subtitle for the everything offline feature in Settings: Files: Google Drive.">
-    This will store your Google Drive files on this Chromebook so you can view and edit them without an internet connection. This will use about 12.2 GB leaving 96.8 GB available.
+    This will store your Google Drive files on this Chromebook so you can view and edit them without an internet connection.
+  </message>
+  <message name="IDS_SETTINGS_GOOGLE_DRIVE_OFFLINE_STORAGE_REQUIRED_SUBTITLE" translateable="false" desc="Subtitle to display the required and remaining space if all the google drive files are made available offline">
+    This will use about <ph name="REQUIRED_SPACE">$1<ex>12.2 GB</ex></ph> leaving <ph name="FREE_SPACE_LEFT">$2<ex>96.7 GB</ex></ph> available.
   </message>
   <message name="IDS_SETTINGS_GOOGLE_DRIVE_OFFLINE_CLEAR_TITLE" translateable="false" desc="Title for the Offline Storage row where users can clear their offline storage in Settings: Files: Google Drive.">
     Offline Storage
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb
index 204253a..26ebdf4 100644
--- a/chrome/app/resources/chromium_strings_en-GB.xtb
+++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -247,6 +247,7 @@
 <translation id="6442900851116057561">Restart Chromium OS</translation>
 <translation id="6455857529632101747">Welcome to Chromium profiles</translation>
 <translation id="6475912303565314141">It also controls what page is shown when you start Chromium.</translation>
+<translation id="648319183876919572">Enhanced Safe Browsing does more to protect you against dangerous websites and downloads</translation>
 <translation id="6510925080656968729">Uninstall Chromium</translation>
 <translation id="6542839706527980775">Each profile holds its own Chromium info, like bookmarks, history, passwords and more</translation>
 <translation id="6570579332384693436">To fix spelling errors, Chromium sends the text that you type in text fields to Google</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 04719ffa..72217c3 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -118,6 +118,7 @@
 <translation id="1090541560108055381">পেয়াৰ কৰাৰ পূৰ্বে, দুয়োটা ডিভাইচতে এই ক’ডটো একেই হোৱাটো নিশ্চিত কৰক</translation>
 <translation id="1091767800771861448">এৰি যাবলৈ ESCAPE টিপক (কেৱল অনানুষ্ঠানিক বিল্ড)।</translation>
 <translation id="1093457606523402488">দৃশ্যমান নেটৱর্ক:</translation>
+<translation id="1094219634413363886">এই পৰিচালিত ডিভাইচটোত ৰেকৰ্ডিং আৰম্ভ হ’লে আপুনি এটা জাননী দেখা পাব</translation>
 <translation id="1095761715416917775">নিশ্চিত হৈ লওক যে আপুনি যাতে নিজৰ ছিংক ডেটা সদায়ে এক্সেছ কৰিব পাৰে</translation>
 <translation id="1095879482467973146">ৱেবত Google Password Manager</translation>
 <translation id="109647177154844434">Parallels Desktop আনইনষ্টল কৰিলে আপোনাৰ Windowsৰ প্রতিচ্ছবিখন মচা যাব। ইয়াত এইটোৰ এপ্লিকেশ্বনসমূহ, ছেটিংসমূহ আৰু ডেটা অন্তৰ্ভুক্ত। আপুনি অব্যাহত ৰাখিবলৈ বিচৰাটো নিশ্চিতনে?</translation>
@@ -3863,6 +3864,7 @@
 <translation id="4340125850502689798">ব্যৱহাৰকাৰীৰ নামটো অমান্য</translation>
 <translation id="4340515029017875942"><ph name="ORIGIN" />এ "<ph name="EXTENSION_NAME" />" এপ্‌টোৰ সৈতে যোগাযোগ কৰিব বিচাৰিছে</translation>
 <translation id="4340799661701629185">ছাইটক জাননী পঠিওৱাৰ অনুমতি নিদিব</translation>
+<translation id="4341280816303414009">আপোনাৰ স্ক্ৰীনখন ৰেকৰ্ড কৰা হ’ব পাৰে</translation>
 <translation id="4341577178275615435">কেৰেট ব্ৰাউজিং অন অথবা অফ কৰিবলৈ শ্বৰ্টকাট F7 ব্যৱহাৰ কৰক</translation>
 <translation id="4341905082470253054">TPMৰ স্থিতি পৰীক্ষা কৰি থকা হৈছে...</translation>
 <translation id="434198521554309404">দ্ৰুত। সুৰক্ষিত। সহজ।</translation>
@@ -5686,6 +5688,7 @@
 <translation id="5979421442488174909"><ph name="LANGUAGE" />লৈ &amp;অনুবাদ কৰক</translation>
 <translation id="5979469435153841984">কোনো এটা পৃষ্ঠা বুকমাৰ্ক কৰিবলৈ ঠিকনাৰ বাৰত থকা তৰাচিহ্নত ক্লিক কৰক</translation>
 <translation id="5981362776161841923">এটা এক্সটেনশ্বনক অনুমতি দিবলৈ, তলত আপোনাৰ ডিফ’ল্ট ছেটিং সলনি কৰক।</translation>
+<translation id="5982578203375898585">ডাউনল’ডসমূহ কৰা হ’লে সেইবোৰ দেখুৱাওক</translation>
 <translation id="5984222099446776634">শেহতীয়াকৈ চোৱা</translation>
 <translation id="5985458664595100876">URLৰ ফর্মেট মান্য নহয়। সমৰ্থিত ফৰ্মেটসমূহ হৈছে \\server\share আৰু smb://server/share।</translation>
 <translation id="598810097218913399">আবণ্টন কৰা ছুইচটো আঁতৰাওক</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 9b6f174..86d56ec 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -118,6 +118,7 @@
 <translation id="1090541560108055381">Abans de fer la vinculació, comprova que aquest codi sigui el mateix en els dos dispositius</translation>
 <translation id="1091767800771861448">Premeu ESCAPE per ometre (només compilacions no oficials).</translation>
 <translation id="1093457606523402488">Xarxes visibles:</translation>
+<translation id="1094219634413363886">Veuràs una notificació si la gravació s'inicia en aquest dispositiu gestionat</translation>
 <translation id="1095761715416917775">Assegura't de poder accedir a les dades sincronitzades en qualsevol moment</translation>
 <translation id="1095879482467973146">Gestor de contrasenyes de Google al web</translation>
 <translation id="109647177154844434">Si desinstal·les Parallels Desktop, la imatge de Windows se suprimirà. Això inclou les aplicacions, la configuració i les dades. Confirmes que vols continuar?</translation>
@@ -3850,6 +3851,7 @@
 <translation id="4340125850502689798">Nom d'usuari no vàlid</translation>
 <translation id="4340515029017875942"><ph name="ORIGIN" /> es vol comunicar amb l'aplicació "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="4340799661701629185">No permetis que els llocs web enviïn notificacions</translation>
+<translation id="4341280816303414009">És possible que es gravi la pantalla</translation>
 <translation id="4341577178275615435">Per activar o desactivar la navegació amb cursor de text, utilitza la drecera F7</translation>
 <translation id="4341905082470253054">S'està comprovant l'estat del TPM...</translation>
 <translation id="434198521554309404">Ràpid. Segur. Senzill.</translation>
@@ -5671,6 +5673,7 @@
 <translation id="5979421442488174909">&amp;Tradueix a: <ph name="LANGUAGE" /></translation>
 <translation id="5979469435153841984">Per afegir pàgines a les adreces d'interès, fes clic a l'estrella de la barra d'adreces</translation>
 <translation id="5981362776161841923">Per permetre una extensió, canvia l'opció de configuració predeterminada més avall.</translation>
+<translation id="5982578203375898585">Mostra les baixades quan s'hagin completat</translation>
 <translation id="5984222099446776634">Visitats recentment</translation>
 <translation id="5985458664595100876">El format de l'URL no és vàlid. S'admeten els formats del tipus \\servidor\ús_compartit i smb://servidor\ús_compartit.</translation>
 <translation id="598810097218913399">Suprimeix l'assignació</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 94903a8..22e46ff 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -498,6 +498,7 @@
             <ph name="LINE_BREAKS" />
            Bookmarks, history and saved passwords won't be affected.</translation>
 <translation id="1425040197660226913">Can't upload. Use an image smaller than 20 MB.</translation>
+<translation id="1425282319410216613">Don't show when downloads are done</translation>
 <translation id="1426410128494586442">Yes</translation>
 <translation id="142655739075382478"><ph name="APP_NAME" /> is blocked</translation>
 <translation id="1426870617281699524">Click Try Again, and accept the prompt on your computer</translation>
@@ -1916,6 +1917,7 @@
 <translation id="25899519884572181">Exit reader mode</translation>
 <translation id="2593499352046705383">Before starting, make sure that you have a backup of your data. Installing <ph name="DEVICE_OS" /> will overwrite your hard drive. Learn more at g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">Search Google or type URL</translation>
+<translation id="2598710988533271874">New Chrome available</translation>
 <translation id="2599048253926156421">Username copied to clipboard</translation>
 <translation id="2602501489742255173">Swipe up to get started</translation>
 <translation id="2603115962224169880">Clean up computer</translation>
@@ -3681,6 +3683,7 @@
 <translation id="4144468798716165316">Quick commands</translation>
 <translation id="4146026355784316281">Always Open With System Viewer</translation>
 <translation id="4146785383423576110">Reset and clean up</translation>
+<translation id="4147099377280085053">Select a braille table</translation>
 <translation id="4147911968024186208">Please retry. If you see this error again, please contact your support representative.</translation>
 <translation id="4150201353443180367">Display</translation>
 <translation id="4150569944729499860">Screen context</translation>
@@ -3902,6 +3905,7 @@
 <translation id="4366138410738374926">Printing started</translation>
 <translation id="4367513928820380646">Review removed permissions</translation>
 <translation id="4369215744064167350">Website request approved</translation>
+<translation id="436926121798828366">You can change this at any time in <ph name="SETTINGS_LINK" /></translation>
 <translation id="4369735607080757018">Limited types of data are shared between sites to measure the performance of their ads, such as the time of day that an ad was shown to you</translation>
 <translation id="4370975561335139969">The email and password that you entered don't match.</translation>
 <translation id="4374805630006466253">Use a different phone or tablet</translation>
@@ -5239,6 +5243,7 @@
 <translation id="558170650521898289">Microsoft Windows Hardware Driver Verification</translation>
 <translation id="5581876958763461074">All notes</translation>
 <translation id="5581972110672966454">Can't join the device to the domain. Please try again or contact your device owner or administrator. Error code: <ph name="ERROR_CODE" />.</translation>
+<translation id="5582634344048669777">8-dot</translation>
 <translation id="5582839680698949063">Main menu</translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5584088138253955452">Save username?</translation>
@@ -5896,6 +5901,7 @@
 <translation id="6164832038898943453">Add languages to automatically translate</translation>
 <translation id="6165508094623778733">Learn more</translation>
 <translation id="6166185671393271715">Import Passwords To Chrome</translation>
+<translation id="6166659775803431">In your basket</translation>
 <translation id="6169040057125497443">Please check your microphone.</translation>
 <translation id="6169967265765719844">Permissions for games and apps installed via Steam can be managed in the <ph name="LINK_BEGIN" />Steam app settings<ph name="LINK_END" />.</translation>
 <translation id="6170470584681422115">Sandwich</translation>
@@ -6794,6 +6800,7 @@
 <translation id="6968288415730398122">Enter your password to configure screen lock</translation>
 <translation id="6969047215179982698">Turn off Nearby Share</translation>
 <translation id="6969216690072714773">Enter new or update existing information to be associated with this device.</translation>
+<translation id="696942486482903620">When you save passwords to your Google Account, you can use them on this device and any others where you're signed in</translation>
 <translation id="6970480684834282392">Startup type</translation>
 <translation id="6970543303783413625">Can't import passwords. You can only import up to <ph name="COUNT" /> passwords at a time.</translation>
 <translation id="6970856801391541997">Print Specific Pages</translation>
@@ -7058,6 +7065,7 @@
 <translation id="7222204278952406003">Chrome is your default browser</translation>
 <translation id="7222232353993864120">Email Address</translation>
 <translation id="7222235798733126207">Limited sharing between sites</translation>
+<translation id="7222335051802562841">Finish update</translation>
 <translation id="722408235435815623">{MEMBERS,plural, =1{1 site in <ph name="FPS_OWNER" />'s group}other{{MEMBERS} sites in <ph name="FPS_OWNER" />'s group}}</translation>
 <translation id="7225082563376899794">Use Windows Hello when filling passwords</translation>
 <translation id="7225179976675429563">Network type missing</translation>
@@ -7249,6 +7257,7 @@
 <translation id="7400447915166857470">Change back to <ph name="OLD_SEARCH_PROVIDER" />?</translation>
 <translation id="7400839060291901923">Set up connection on your <ph name="PHONE_NAME" /></translation>
 <translation id="7401778920660465883">Dismiss this message</translation>
+<translation id="7402198013420237102">Move saved passwords to your Google Account?</translation>
 <translation id="7403642243184989645">Downloading resources</translation>
 <translation id="7404065585741198296">Your phone with a USB cable</translation>
 <translation id="7405938989981604410">{NUM_HOURS,plural, =1{Safety check ran 1 hour ago}other{Safety check ran {NUM_HOURS} hours ago}}</translation>
@@ -9383,6 +9392,7 @@
 <translation id="952471655966876828">Device will connect automatically when it's turned on and is being used</translation>
 <translation id="953434574221655299">Allowed to know when you're actively using your device</translation>
 <translation id="956500788634395331">You're protected from potentially harmful extensions</translation>
+<translation id="957179356621191750">6-dot</translation>
 <translation id="957960681186851048">This site attempted to download multiple files automatically</translation>
 <translation id="960987915827980018">About 1 hour left</translation>
 <translation id="962802172452141067">Bookmark folder tree</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index 6a2974bdd..1349d383 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -564,7 +564,7 @@
 <translation id="1478340334823509079">Чоо-жайы: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Орнотуу иштетилген эмес</translation>
 <translation id="1480571698637441426">Суроо бергенде ылайыктуу жоопторду алуу үчүн Жардамчыңызга экраныңыздагы нерсенин скриншотуна мүмкүнчүлүк бериңиз. Буга учурда ойноп жаткан ырлар же видеолор жөнүндө маалымат да кириши мүмкүн.</translation>
-<translation id="1480663089572535854">Артка кайтып, “Тандоо” аракети үчүн дайындоону өзгөртүп койсоңуз болот. Жөндөөлөргө өтүп, автоматтык түрдө скандоону каалаган убакта өчүрө аласыз.</translation>
+<translation id="1480663089572535854">Артка кайтып, “Тандоо” аракети үчүн дайындоону өзгөртүп койсоңуз болот. Параметрлерге өтүп, автоматтык түрдө скандоону каалаган убакта өчүрө аласыз.</translation>
 <translation id="1481537595330271162">Дисктин өлчөмүн өзгөртүүдө ката кетти</translation>
 <translation id="1482626744466814421">Бул өтмөктү кыстарып коюу…</translation>
 <translation id="1482772681918035149">сырсөздөрдү түзөтүү</translation>
@@ -1626,7 +1626,7 @@
 <translation id="2336381494582898602">Жууп салуу</translation>
 <translation id="2337236196941929873">Chrome сизди баш багат деп болжолдогон барактарды алдын ала жүктөйт. Ал үчүн Chrome cookie файлдарын (эгер уруксат берсеңиз) колдонуп, өздүгүңүздү сайттардан жашыруу үчүн барактарды шифрлеп, Google аркылуу жөнөтүшү мүмкүн.</translation>
 <translation id="2340239562261172947"><ph name="FILE_NAME" /> файлын коопсуз жүктөп алууга болбойт</translation>
-<translation id="2342180549977909852">Бул түзмөктү ачуу үчүн балаңыз сырсөздүн ордуна номерди (PIN кодду) колдоно алат. PIN кодду кийинчерээк Жөндөөлөргө өтүп, жөндөңүз.</translation>
+<translation id="2342180549977909852">Бул түзмөктү ачуу үчүн балаңыз сырсөздүн ордуна номерди (PIN кодду) колдоно алат. PIN кодду кийинчерээк Параметрлерге өтүп, жөндөңүз.</translation>
 <translation id="2342740338116612727">Кыстармалар кошулду</translation>
 <translation id="2343747224442182863">Бул өтмөктү фокустоо</translation>
 <translation id="2344032937402519675">Серверге туташпай калды. Тармакка туташууңузду текшерип, дагы бир жолу аракет кылыңыз. Эгер маселе чечилбесе, Chromebook'ту өчүрүп күйгүзүп көрүңүз.</translation>
@@ -1798,7 +1798,7 @@
 <translation id="2487067538648443797">Жаңы кыстарма кошуу</translation>
 <translation id="2487268545026948104">Маалыматты калыбына келтирүү үчүн Интернетке туташыңыз</translation>
 <translation id="2489686758589235262">Дагы 2 которгучту дайындоо</translation>
-<translation id="2489829450872380594">Эми <ph name="DEVICE_TYPE" /> түзмөгүнүн кулпусун жаңы телефон менен ача аласыз. Жөндөөлөргө өтүп, Smart Lock'ту өчүрүп койсоңуз болот.</translation>
+<translation id="2489829450872380594">Эми <ph name="DEVICE_TYPE" /> түзмөгүнүн кулпусун жаңы телефон менен ача аласыз. Параметрлерге өтүп, Smart Lock'ту өчүрүп койсоңуз болот.</translation>
 <translation id="2489918096470125693">&amp;Куржун кошуу…</translation>
 <translation id="2489931062851778802">Бул ачкычтарды <ph name="DEVICE_NAME" /> түзмөгүндө киргизиңиз</translation>
 <translation id="2490481887078769936">"<ph name="FILE_NAME" />" тизмеден өчүрүлдү</translation>
@@ -5895,7 +5895,7 @@
 <translation id="6169040057125497443">Микрофонуңузду текшериңиз.</translation>
 <translation id="6169967265765719844">Steam аркылуу орнотулган оюндар менен колдонмолорго берилген урксаттарды <ph name="LINK_BEGIN" />Steam колдонмосунун параметрлеринен<ph name="LINK_END" /> башкарууга болот.</translation>
 <translation id="6170470584681422115">Сэндвич</translation>
-<translation id="6170498031581934115">ADB аркылуу мүчүлүштүктөрдү аныктоо иштетилген жок. Жөндөөлөргө өтүп, кайталап көрүңүз.</translation>
+<translation id="6170498031581934115">ADB аркылуу мүчүлүштүктөрдү аныктоо иштетилген жок. Параметрлерге өтүп, кайталап көрүңүз.</translation>
 <translation id="6171779718418683144">Сайтка кирген сайын суралсын</translation>
 <translation id="617213288191670920">Тилдер кошулган жок</translation>
 <translation id="6173623053897475761">PIN кодуңузду кайра териңиз</translation>
@@ -6224,7 +6224,7 @@
 <translation id="6474352027343282094">{COUNT,plural, =1{{COUNT} сырсөз ушул түзмөктө гана сакталат. Аны башка түзмөктөрдө колдонуу үчүн &lt;a target='_blank' href='chrome://password-manager/'&gt;Google аккаунтуңузда сактаңыз&lt;/a&gt;.}other{{COUNT} сырсөз ушул түзмөктө гана сакталат. Аларды башка түзмөктөрдө колдонуу үчүн &lt;a target='_blank' href='chrome://password-manager/'&gt;Google аккаунтуңузда сактаңыз&lt;/a&gt;.}}</translation>
 <translation id="6474498546677193336">Бөлүшүү токтотулган жок, анткени колдонмо ушул папканы иштетип жатат. Linux эмки жолу өчүрүлгөндө бул папканы бөлүшүү токтотулат.</translation>
 <translation id="6474884162850599008">Google Drive каттоо эсебин ажыратуу</translation>
-<translation id="6475294023568239942">Жөндөөлөргө өтүп, Linux дисктеги орунду бошотуп же өлчөмүн өзгөртүңүз</translation>
+<translation id="6475294023568239942">Параметрлерге өтүп, Linux дисктеги орунду бошотуп же өлчөмүн өзгөртүңүз</translation>
 <translation id="6476482583633999078">Кептин ылдамдыгы</translation>
 <translation id="6477822444490674459">Жумуш профилиндеги телефондордо билдирмелер шайкештирилбейт. <ph name="LINK_BEGIN" />Кеңири маалымат<ph name="LINK_END" /></translation>
 <translation id="6478248366783946499">Бул коркунучтуу файл сакталсынбы?</translation>
@@ -7322,7 +7322,7 @@
 <translation id="7458933488302148148">Аккаунтуңуздун коопсуздугун бекемдөө жана Интернетте коопсуздукту камсыздоо үчүн сакталган сырсөздөрүңүздү текшерип коюңуз</translation>
 <translation id="7460045493116006516">Сиз орнотуп алган учурдагы тема</translation>
 <translation id="7461924472993315131">Кадап коюу</translation>
-<translation id="746216226901520237">Эми <ph name="DEVICE_TYPE" /> түзмөгүнүн кулпусун телефонуңуз менен ачасыз. Жөндөөлөргө өтүп, Smart Lock'ту өчүрүп койсоңуз болот.</translation>
+<translation id="746216226901520237">Эми <ph name="DEVICE_TYPE" /> түзмөгүнүн кулпусун телефонуңуз менен ачасыз. Параметрлерге өтүп, Smart Lock'ту өчүрүп койсоңуз болот.</translation>
 <translation id="7464153996453281700">Компонент жаңыртылган</translation>
 <translation id="7464637891177137294">Аны <ph name="ACCOUNT" /> Google аккаунтуңузга сактаңыз</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# өтмөк ачык, өтмөк тасмасын өчүрүү же күйгүзүү үчүн басыңыз}other{# өтмөк ачык, өтмөк тасмасын өчүрүү же күйгүзүү үчүн басыңыз}}</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 2a8e6717..8403c25 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -118,6 +118,7 @@
 <translation id="1090541560108055381">ກ່ອນການຈັບຄູ່, ໃຫ້ກວດສອບວ່າລະຫັດນີ້ຄືກັນຢູ່ທັງສອງອຸປະກອນກ່ອນ</translation>
 <translation id="1091767800771861448">ກົດ ESCAPE ເພື່ອ​ຂ້າມໄປ (ສ້າງຂຶ້ນບໍ່​ເປັນ​ທາງ​ການ​ເທົ່າ​ນັ້ນ​)​.</translation>
 <translation id="1093457606523402488">ເຄືອ​ຂ່າຍ​ສາ​ມາດ​ເຫັນ​ໄດ້:</translation>
+<translation id="1094219634413363886">ທ່ານຈະເຫັນການແຈ້ງເຕືອນຫາກການບັນທຶກເລີ່ມຢູ່ອຸປະກອນທີ່ມີການຈັດການນີ້</translation>
 <translation id="1095761715416917775">ກວດໃຫ້ແນ່ໃຈວ່າທ່ານສາມາດເຂົ້າເຖິງຂໍ້ມູນການຊິ້ງຂອງທ່ານໄດ້ທຸກເວລາ</translation>
 <translation id="1095879482467973146">ຕົວຈັດການລະຫັດຜ່ານ Google ຢູ່ເວັບ</translation>
 <translation id="109647177154844434">ການຖອນການຕິດຕັ້ງ Parallels Desktop ຈະລຶບຮູບ Windows ຂອງທ່ານ. ນີ້ຮວມທັງແອັບພລິເຄຊັນ, ການຕັ້ງຄ່າ ແລະ ຂໍ້ມູນຂອງມັນນຳ. ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການສືບຕໍ່?</translation>
@@ -3865,6 +3866,7 @@
 <translation id="4340125850502689798">ຊື່ຜູ້ໃຊ້ບໍ່ຖືກຕ້ອງ</translation>
 <translation id="4340515029017875942"><ph name="ORIGIN" /> ຕ້ອງ​ການ​ສື່​ສານ​ກັບ​ແອັບ "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="4340799661701629185">ບໍ່ອະນຸຍາດໃຫ້ເວັບໄຊສົ່ງການແຈ້ງເຕືອນ</translation>
+<translation id="4341280816303414009">ໜ້າຈໍຂອງທ່ານອາດຖືກບັນທຶກ</translation>
 <translation id="4341577178275615435">ເພື່ອເປີດ ຫຼື ປິດການຮຽກເບິ່ງດ້ວຍແປ້ນພິມ, ກະລຸນາໃຊ້ທາງລັດ F7</translation>
 <translation id="4341905082470253054">ກຳລັງກວດສອບສະຖານະ TPM...</translation>
 <translation id="434198521554309404">ໄວ. ປອດໄພ. ງ່າຍ.</translation>
@@ -5687,6 +5689,7 @@
 <translation id="5979421442488174909">ແປເປັນ <ph name="LANGUAGE" /></translation>
 <translation id="5979469435153841984">ເພື່ອໝາຍໜ້າຕ່າງໆໄວ້, ໃຫ້ຄລິກດາວໃນແຖບທີ່ຢູ່</translation>
 <translation id="5981362776161841923">ເພື່ອອະນຸຍາດສ່ວນຂະຫຍາຍໃດໜຶ່ງ, ໃຫ້ປ່ຽນການຕັ້ງຄ່າເລີ່ມຕົ້ນຂອງທ່ານຢູ່ທາງລຸ່ມ.</translation>
+<translation id="5982578203375898585">ສະແດງລາຍການດາວໂຫຼດເມື່ອສຳເລັດການດາວໂຫຼດແລ້ວ</translation>
 <translation id="5984222099446776634">ເຂົ້າເບິ່ງບໍ່​ດົນ​ມາ​ນີ້</translation>
 <translation id="5985458664595100876">ຮູບແບບ URL ບໍ່ຖືກຕ້ອງ. ຮູບແບບທີ່ຮອງຮັບແມ່ນ \\server\share ແລະ smb://server/share.</translation>
 <translation id="598810097218913399">ລຶບການກຳນົດອອກ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 0ff65bc..7d0247e 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -3143,6 +3143,7 @@
 <translation id="369489984217678710">Slaptažodžiai ir kiti prisijungimo duomenys</translation>
 <translation id="369522892592566391">{NUM_FILES,plural, =0{Saugos patikros atliktos. Duomenys bus įkelti.}=1{Saugos patikros atliktos. Failas bus įkeltas.}one{Saugos patikros atliktos. Failai bus įkelti.}few{Saugos patikros atliktos. Failai bus įkelti.}many{Saugos patikros atliktos. Failai bus įkelti.}other{Saugos patikros atliktos. Failai bus įkelti.}}</translation>
 <translation id="3696817060563289264">Atsisiųsti teksto atpažinimo failai</translation>
+<translation id="3697716475445175867">paskutinį kartą atidaryta</translation>
 <translation id="3698471669415859717">Peržiūra baigta</translation>
 <translation id="3698825735945432002">Filtro tipas</translation>
 <translation id="3699624789011381381">El. pašto adresas</translation>
@@ -6378,6 +6379,7 @@
 <translation id="6596816719288285829">IP adresas</translation>
 <translation id="6597017209724497268">Duomenų imčių skaičius</translation>
 <translation id="6597331566371766302">Toliau nurodytus plėtinius užblokavo administratorius.</translation>
+<translation id="659894938503552850">naujausias</translation>
 <translation id="6601262427770154296">Tvarkyti naudotojo žodynus</translation>
 <translation id="6601612474695404578">Kai kuriose svetainėse naudojami trečiosios šalies slapukai puslapiams įkelti. Jei svetainė neveikia, galite pabandyti leisti slapukus.</translation>
 <translation id="6602937173026466876">Prieiga prie spausdintuvų</translation>
@@ -8161,6 +8163,7 @@
 <translation id="8161293209665121583">Tinklalapių skaitytojo režimą</translation>
 <translation id="8161604891089629425">Kontūrinis šriftas</translation>
 <translation id="8162984717805647492">{NUM_TABS,plural, =1{Skirtuko perkėlimas į naują langą}one{Skirtukų perkėlimas į naują langą}few{Skirtukų perkėlimas į naują langą}many{Skirtukų perkėlimas į naują langą}other{Skirtukų perkėlimas į naują langą}}</translation>
+<translation id="8163708146810922598">seniausias</translation>
 <translation id="8165997195302308593">„Crostini“ prievado numerio persiuntimas</translation>
 <translation id="816704878106051517">{COUNT,plural, =1{telefono numerį}one{# telefono numerį}few{# telefono numerius}many{# telefono numerio}other{# telefono numerių}}</translation>
 <translation id="8168071266284693455">Žymės, slaptažodžiai, istorija ir daugiau yra sinchronizuoti visuose jūsų įrenginiuose</translation>
@@ -8675,6 +8678,7 @@
 <translation id="8637688295594795546">Galimas sistemos naujinys. Ruošiamasi atsisiųsti...</translation>
 <translation id="8639047128869322042">Tikrinama, ar nėra kenkėjiškos programinės įrangos...</translation>
 <translation id="8639635302972078117">Siųskite naudojimo ir diagnostikos duomenis. Šiuo metu šis įrenginys automatiškai siunčia „Google“ diagnostikos, įrenginio ir programų naudojimo duomenis. Tai nebus naudojama siekiant nustatyti jūsų vaiko tapatybę ir padės pagerinti sistemos bei programos stabilumą ir teikti kitus patobulinimus. Kai kurie sukaupti duomenys taip pat bus naudingi „Google“ programoms ir partneriams, pvz., „Android“ kūrėjams. Jei papildomas Žiniatinklio ir programų veiklos nustatymas įjungtas vaiko įrenginyje, šie duomenys gali būti išsaugoti vaiko „Google“ paskyroje.</translation>
+<translation id="8640575194957831802">Paskutinį kartą atidaryta</translation>
 <translation id="8642900771896232685">2 sek.</translation>
 <translation id="8642947597466641025">Padidinti tekstą</translation>
 <translation id="8643403533759285912">Ištrinti grupę</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index 0caabf6..c5527347 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -118,6 +118,7 @@
 <translation id="1090541560108055381">မတွဲချိတ်မီ စက်နှစ်ခုစလုံးပေါ်တွင် ဤကုဒ်တူညီကြောင်း သေချာပါစေ</translation>
 <translation id="1091767800771861448">ကျော်ရန် ESCAPE ကိုနှိပ်ပါ (တရားဝင်မဟုတ်သည့် တည်ဆောက်မှုများသာ)။</translation>
 <translation id="1093457606523402488">မြင်နိုင်သော ကွန်ယက်များ</translation>
+<translation id="1094219634413363886">ဤစီမံထားသောစက်တွင် မှတ်တမ်းတင်ခြင်း စတင်သောအခါ အကြောင်းကြားချက် တွေ့ရမည်</translation>
 <translation id="1095761715416917775">သင်စင့်ခ်လုပ်သောဒေတာကို အမြဲဝင်ကြည့်နိုင်ကြောင်း သေချာပါစေ</translation>
 <translation id="1095879482467973146">ဝဘ်ပေါ်ရှိ Google Password Manager</translation>
 <translation id="109647177154844434">Parallels Desktop ဖယ်ရှားခြင်းက သင့် Windows ကွန်ပျူတာစနစ်မိတ္တူကို ဖျက်လိုက်ပါမည်။ ၎င်း၏အပလီကေးရှင်း၊ ဆက်တင်နှင့် ဒေတာများ ပါဝင်သည်။ ရှေ့ဆက်လိုသည်မှာ သေချာသလား။</translation>
@@ -3864,6 +3865,7 @@
 <translation id="4340125850502689798">အသုံးပြုသူအမည် မမှန်ပါ</translation>
 <translation id="4340515029017875942"><ph name="ORIGIN" /> သည် "<ph name="EXTENSION_NAME" />" အက်ပ် နှင့် ဆက်သွယ် လိုသည်</translation>
 <translation id="4340799661701629185">အကြောင်းကြားချက်များ ပို့ရန် ဝဘ်ဆိုက်များကို ခွင့်မပြုပါနှင့်</translation>
+<translation id="4341280816303414009">သင့်ဖန်သားပြင်ကို မှတ်တမ်းတင်ထားနိုင်သည်</translation>
 <translation id="4341577178275615435">Caret ဖြင့် ရှာကြည့်ခြင်းကို ဖွင့်ရန် သို့မဟုတ် ပိတ်ရန် ဖြတ်လမ်းလင့်ခ် F7 သုံးပါ</translation>
 <translation id="4341905082470253054">TPM အခြေအနေကို စစ်ဆေးနေသည်...</translation>
 <translation id="434198521554309404">မြန်ဆန်။ လုံခြုံ။ လွယ်ကူသည်။</translation>
@@ -5686,6 +5688,7 @@
 <translation id="5979421442488174909">&amp;ကို <ph name="LANGUAGE" />ဘာသာသို့ ပြန်ဆိုရန်</translation>
 <translation id="5979469435153841984">မှတ်ထားသော လိပ်စာများသို့ သွားရန် လိပ်စာဘားရှိ ကြယ်ပွင့်ကို နှိပ်ပါ</translation>
 <translation id="5981362776161841923">နောက်ဆက်တွဲခွင့်ပြုရန် အောက်ရှိ သင့်မူရင်းဆက်တင်ကို ပြောင်းနိုင်သည်။</translation>
+<translation id="5982578203375898585">ဒေါင်းလုဒ်များ ပြီးစီးသည့်အခါ ပြရန်</translation>
 <translation id="5984222099446776634">မကြာသေးခင်က လည်ပတ်ခဲ့သော</translation>
 <translation id="5985458664595100876">URL ပုံစံ မမှန်ကန်ပါ။ အသုံးပြု၍ရနိုင်သော ပုံစံများမှာ \\server\share နှင့် smb://server/share တို့ဖြစ်သည်။</translation>
 <translation id="598810097218913399">သတ်မှတ်မှုကို ဖယ်ရှားရန်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index b556909..9359192 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -5239,7 +5239,7 @@
 <translation id="5592595402373377407">अझै पर्याप्त डाटा उपलब्ध छैन।</translation>
 <translation id="5594899180331219722">फाइल चयन गर्नुहोस्</translation>
 <translation id="5595307023264033512">साइटहरूले प्रयोग गरेको कुल भण्डारण: <ph name="TOTAL_USAGE" /></translation>
-<translation id="5595485650161345191">ठेगाना सम्पादन गर्नुहोस्</translation>
+<translation id="5595485650161345191">ठेगाना बदल्नुहोस्</translation>
 <translation id="5596627076506792578">अन्य विकल्पहरू</translation>
 <translation id="5600348067066185292">इन्स्टल गर्न केही चरणहरू पूरा गर्नु पर्ने हुन्छ। तपाईंको कम्प्युटरमा परिवर्तनहरू गर्नुअघि तपाईंलाई पुष्टि गर्ने थप एउटा मौका दिइने छ।</translation>
 <translation id="5600706100022181951"><ph name="UPDATE_SIZE_MB" /> एम. बि. मोबाइल डेटा प्रयोग गरेर अद्यावधिक डाउनलोड गरिने छ। तपाईं जारी राख्न चाहनुहुन्छ?</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index e7791c52..4a61c8c 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -118,6 +118,7 @@
 <translation id="1090541560108055381">Antes de sincronizar, certifique-se de que este código é o mesmo em ambos os dispositivos</translation>
 <translation id="1091767800771861448">Prima ESCAPE para ignorar (apenas nas compilações não oficiais).</translation>
 <translation id="1093457606523402488">Redes visíveis</translation>
+<translation id="1094219634413363886">É apresentada uma notificação se a gravação for iniciada neste dispositivo gerido</translation>
 <translation id="1095761715416917775">Certifique-se de que pode aceder sempre aos seus dados de sincronização</translation>
 <translation id="1095879482467973146">Gestor de Palavras-passe da Google na Web</translation>
 <translation id="109647177154844434">A desinstalação do Parallels Desktop irá eliminar a sua imagem do Windows. Isto inclui as respetivas apps, definições e dados. Tem a certeza de que pretende continuar?</translation>
@@ -3853,6 +3854,7 @@
 <translation id="4340125850502689798">Nome de utilizador inválido.</translation>
 <translation id="4340515029017875942"><ph name="ORIGIN" /> pretende comunicar com a aplicação "<ph name="EXTENSION_NAME" />"</translation>
 <translation id="4340799661701629185">Não permitir que os sites enviem notificações</translation>
+<translation id="4341280816303414009">O seu ecrã pode ser gravado</translation>
 <translation id="4341577178275615435">Para ativar ou desativar a navegação por cursor, utilize o atalho F7.</translation>
 <translation id="4341905082470253054">A verificar o estado do TPM…</translation>
 <translation id="434198521554309404">Rápido. Seguro. Fácil.</translation>
@@ -5676,6 +5678,7 @@
 <translation id="5979421442488174909">&amp;Traduzir para <ph name="LANGUAGE" /></translation>
 <translation id="5979469435153841984">Para adicionar páginas aos marcadores, clicar na estrela na barra de endereço</translation>
 <translation id="5981362776161841923">Para permitir uma extensão, altere a predefinição abaixo.</translation>
+<translation id="5982578203375898585">Mostrar as transferências quando estiverem concluídas</translation>
 <translation id="5984222099446776634">Visitados Recentemente</translation>
 <translation id="5985458664595100876">Formato de URL inválido. Os formatos suportados são \\server\share e smb://server/share.</translation>
 <translation id="598810097218913399">Remover atribuição</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 965b2ea..f48c0444 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -118,6 +118,7 @@
 <translation id="1090541560108055381">Pred spárovaním sa uistite, že tento kód je v oboch zariadeniach rovnaký</translation>
 <translation id="1091767800771861448">Ak chcete preskočiť aktualizáciu, stlačte kláves Escape (len pre neoficiálne zostavy).</translation>
 <translation id="1093457606523402488">Viditeľné siete:</translation>
+<translation id="1094219634413363886">Ak sa v tomto spravovanom zariadení spustí nahrávanie, zobrazí sa upozornenie</translation>
 <translation id="1095761715416917775">Zaistite, aby ste mali neustály prístup k svojim údajom synchronizácie</translation>
 <translation id="1095879482467973146">Správca hesiel Google na internete</translation>
 <translation id="109647177154844434">Odinštalovaním aplikácie Parallels Desktop odstránite obraz systému Windows. Zahrnuje to jeho aplikácie, nastavenia a dáta. Naozaj chcete pokračovať?</translation>
@@ -3126,6 +3127,7 @@
 <translation id="369489984217678710">Heslá a ďalšie prihlasovacie údaje</translation>
 <translation id="369522892592566391">{NUM_FILES,plural, =0{Kontroly boli uskutočnené. Vaše údaje budú nahrané.}=1{Kontroly boli uskutočnené. Váš súbor bude nahraný.}few{Kontroly boli uskutočnené. Vaše súbory budú nahrané.}many{Kontroly boli uskutočnené. Vaše súbory budú nahrané.}other{Kontroly boli uskutočnené. Vaše súbory budú nahrané.}}</translation>
 <translation id="3696817060563289264">Súbory na účely rozpoznávania textu boli stiahnuté</translation>
+<translation id="3697716475445175867">naposledy otvorené</translation>
 <translation id="3698471669415859717">Kontrola bola dokončená</translation>
 <translation id="3698825735945432002">Typ filtra</translation>
 <translation id="3699624789011381381">E-mailová adresa</translation>
@@ -3853,6 +3855,7 @@
 <translation id="4340125850502689798">Neplatné používateľské meno</translation>
 <translation id="4340515029017875942">Web <ph name="ORIGIN" /> chce komunikovať s aplikáciou <ph name="EXTENSION_NAME" /></translation>
 <translation id="4340799661701629185">Nepovoliť webom odosielať upozornenia</translation>
+<translation id="4341280816303414009">Môže sa nahrávať vaša obrazovka</translation>
 <translation id="4341577178275615435">Ak chcete zapnúť alebo vypnúť prehliadanie Caret, použite skratku F7</translation>
 <translation id="4341905082470253054">Kontroluje sa stav modulu TPM...</translation>
 <translation id="434198521554309404">Rýchle. Zabezpečené. Jednoduché.</translation>
@@ -5675,6 +5678,7 @@
 <translation id="5979421442488174909">&amp;Preložiť do jazyka <ph name="LANGUAGE" /></translation>
 <translation id="5979469435153841984">Stránky uložíte ako záložky kliknutím na hviezdičku v paneli s adresou</translation>
 <translation id="5981362776161841923">Ak chcete povoliť rozšírenie, zmeňte predvolené nastavenie nižšie.</translation>
+<translation id="5982578203375898585">Zobraziť súbory po stiahnutí</translation>
 <translation id="5984222099446776634">Nedávno navštívené</translation>
 <translation id="5985458664595100876">Neplatný formát webovej adresy. Podporované formáty sú \\server\share a smb://server/share.</translation>
 <translation id="598810097218913399">Odstrániť pridelenie</translation>
@@ -6355,6 +6359,7 @@
 <translation id="6596816719288285829">Adresa IP</translation>
 <translation id="6597017209724497268">Vzorky</translation>
 <translation id="6597331566371766302">Váš správca zablokoval nasledujúce rozšírenia:</translation>
+<translation id="659894938503552850">najnovšie</translation>
 <translation id="6601262427770154296">Spravovať používateľské slovníky</translation>
 <translation id="6601612474695404578">Niektoré weby načítavajú svoje stránky pomocou súborov cookie tretích strán. Ak web nefunguje, môžete skúsiť povoliť súbory cookie.</translation>
 <translation id="6602937173026466876">Prístup k vašim tlačiarňam</translation>
@@ -8137,6 +8142,7 @@
 <translation id="8161293209665121583">Režim čítačky pre webové stránky</translation>
 <translation id="8161604891089629425">Obrysové písmo</translation>
 <translation id="8162984717805647492">{NUM_TABS,plural, =1{Presunúť kartu do nového okna}few{Presunúť karty do nového okna}many{Presunúť karty do nového okna}other{Presunúť karty do nového okna}}</translation>
+<translation id="8163708146810922598">najstaršie</translation>
 <translation id="8165997195302308593">Presmerovanie portov v systéme Crostini</translation>
 <translation id="816704878106051517">{COUNT,plural, =1{telefónne číslo}few{# telefónne čísla}many{# phone numbers}other{# telefónnych čísiel}}</translation>
 <translation id="8168071266284693455">Záložky, heslá, história a ďalší obsah sú synchronizované vo všetkých vašich zariadeniach</translation>
@@ -8651,6 +8657,7 @@
 <translation id="8637688295594795546">K dispozícii je systémová aktualizácia. Pripravuje sa stiahnutie...</translation>
 <translation id="8639047128869322042">Vyhľadáva sa škodlivý softvér…</translation>
 <translation id="8639635302972078117">Odosielanie údajov o využití a diagnostiky. Toto zariadenie momentálne automaticky odosiela Googlu diagnostiky a údaje o používaní zariadenia a aplikácií. Nebudú slúžiť na zistenie totožnosti vášho dieťaťa. Pomôžu zvýšiť stabilitu systému a aplikácií a poskytovať ďalšie zlepšenia. Niektoré súhrnné údaje tiež pomôžu aplikáciám Google a partnerom, ako napríklad vývojárom pre Android. Ak pre dieťa zapnete nastavenie ďalšej aktivity na internete a v aplikáciách, tieto údaje sa môžu uložiť do jeho účtu Google.</translation>
+<translation id="8640575194957831802">naposledy otvorené</translation>
 <translation id="8642900771896232685">2 sekundy</translation>
 <translation id="8642947597466641025">Zväčšiť text</translation>
 <translation id="8643403533759285912">Odstrániť skupinu</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index adaba38..51249ba 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -249,7 +249,7 @@
 <translation id="120069043972472860">Không xem được</translation>
 <translation id="1201402288615127009">Tiếp theo</translation>
 <translation id="1201564082781748151">Bạn có thể khôi phục dữ liệu cục bộ nếu quên mật khẩu</translation>
-<translation id="1202116106683864634">Bạn có chắc chắn muốn xoá mã xác thực này không?</translation>
+<translation id="1202116106683864634">Bạn có chắc chắn muốn xoá khoá đăng nhập này không?</translation>
 <translation id="1202596434010270079">Ứng dụng Kiosk đã được cập nhật. Vui lòng rút thẻ USB.</translation>
 <translation id="1202892408424955784">Các sản phẩm bạn theo dõi</translation>
 <translation id="120368089816228251">Ghi chú âm nhạc</translation>
@@ -275,7 +275,7 @@
 <translation id="1223484782328004593"><ph name="APP_NAME" /> yêu cầu giấy phép</translation>
 <translation id="1223853788495130632">Quản trị viên của bạn đề xuất một giá trị cụ thể cho cài đặt này.</translation>
 <translation id="1225177025209879837">Đang xử lý yêu cầu...</translation>
-<translation id="1227660082540388410">Chỉnh sửa mã xác thực</translation>
+<translation id="1227660082540388410">Chỉnh sửa khoá đăng nhập</translation>
 <translation id="1227993798763400520">Không truyền được. Vui lòng thử lại.</translation>
 <translation id="1230417814058465809">Tính năng Bảo vệ thông thường đang bật. Để tăng cường khả năng bảo mật, hãy sử dụng chế độ bảo vệ nâng cao.</translation>
 <translation id="1231733316453485619">Bật tính năng đồng bộ hóa?</translation>
@@ -383,7 +383,7 @@
 <translation id="1324106254079708331">Bảo vệ Tài khoản Google cá nhân của bất kỳ ai có nguy cơ bị tấn công có chủ đích</translation>
 <translation id="1327272175893960498">Phiếu Kerberos</translation>
 <translation id="1327495825214193325">Để bật tùy chọn gỡ lỗi ADB, bạn cần phải khởi động lại <ph name="DEVICE_TYPE" /> này. Để tắt tùy chọn này, bạn phải đặt lại thiết bị về trạng thái ban đầu.</translation>
-<translation id="1327527584824210101">Sử dụng mã xác thực của bạn</translation>
+<translation id="1327527584824210101">Sử dụng khoá đăng nhập của bạn</translation>
 <translation id="1327794256477341646">Các tính năng cần dùng thông tin vị trí của bạn sẽ không hoạt động</translation>
 <translation id="1329466763986822896">Nâng cao tính bảo mật của điểm phát sóng này</translation>
 <translation id="1331977651797684645">Đây chính là tôi.</translation>
@@ -575,7 +575,7 @@
 <translation id="1485015260175968628">Tiện ích/ứng dụng giờ đây có thể:</translation>
 <translation id="1485141095922496924">Phiên bản <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation>
 <translation id="1486096554574027028">Tìm kiếm mật khẩu</translation>
-<translation id="1486486872607808064">Quét mã QR này bằng máy ảnh trên thiết bị mà bạn muốn tạo mã xác thực cho <ph name="APP_NAME" /></translation>
+<translation id="1486486872607808064">Quét mã QR này bằng máy ảnh trên thiết bị mà bạn muốn tạo khoá đăng nhập cho <ph name="APP_NAME" /></translation>
 <translation id="1487335504823219454">Bật - cài đặt tùy chỉnh</translation>
 <translation id="1493892686965953381">Đang đợi <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1494349716233667318">Trang web có thể xin phép sử dụng phông chữ đã cài đặt trên thiết bị của bạn</translation>
@@ -859,7 +859,7 @@
 <translation id="1709106626015023981"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (Gốc)</translation>
 <translation id="1709217939274742847">Chọn một phiếu để dùng cho việc xác thực. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
 <translation id="1709762881904163296">Cài đặt mạng</translation>
-<translation id="1709916727352927457">Xoá mã xác thực</translation>
+<translation id="1709916727352927457">Xoá khoá đăng nhập</translation>
 <translation id="1709972045049031556">Không thể chia sẻ</translation>
 <translation id="1711935594505774770">Thao tác này sẽ xóa toàn bộ dữ liệu và cookie lưu trữ trong <ph name="SITE_GROUP_NAME" /> cũng như trong mọi trang web và ứng dụng đã cài đặt thuộc nhóm này</translation>
 <translation id="1714644264617423774">Bật các tính năng hỗ trợ tiếp cận để dễ dàng sử dụng thiết bị của bạn. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
@@ -892,7 +892,7 @@
 <translation id="1744108098763830590">trang nền</translation>
 <translation id="1745732479023874451">Quản lý danh bạ</translation>
 <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{Mở và chỉnh sửa # tệp trong ứng dụng web này?}}</translation>
-<translation id="1748329107062243374">Sử dụng mã xác thực từ <ph name="DEVICE_NAME" /> để đăng nhập vào <ph name="WEBSITE" /></translation>
+<translation id="1748329107062243374">Sử dụng khoá đăng nhập từ <ph name="DEVICE_NAME" /> để đăng nhập vào <ph name="WEBSITE" /></translation>
 <translation id="1748563609363301860">Bạn có thể lưu mật khẩu này trong Tài khoản Google của mình hoặc chỉ trên thiết bị này</translation>
 <translation id="1749733017156547309">Cần nhập mật khẩu</translation>
 <translation id="1750172676754093297">Khóa bảo mật của bạn không thể lưu trữ vân tay số</translation>
@@ -1141,7 +1141,7 @@
 <translation id="1941995177877935582">Hiện ánh xạ khóa</translation>
 <translation id="1942128823046546853">Đọc và thay đổi tất cả dữ liệu của bạn trên mọi trang web</translation>
 <translation id="1944528062465413897">Mã ghép nối Bluetooth:</translation>
-<translation id="1944535645109964458">Không có mã xác thực nào</translation>
+<translation id="1944535645109964458">Không có khoá đăng nhập nào</translation>
 <translation id="1944921356641260203">Đã tìm thấy bản cập nhật</translation>
 <translation id="1947136734041527201">Cho phép bạn đăng nhập vào các trang web bằng tài khoản có dịch vụ nhận dạng</translation>
 <translation id="1949584741547056205">Trả lời nhanh</translation>
@@ -2085,7 +2085,7 @@
 <translation id="274029851662193272">Chìm</translation>
 <translation id="2740363334137520315">Thêm một mục mới trong phần "Tìm kiếm thẻ" để dễ dàng tìm thấy thẻ đang phát nhạc hoặc video. Truy cập thông qua nút ở góc trên cùng của trình duyệt.</translation>
 <translation id="2740531572673183784">Ok</translation>
-<translation id="2740876196999178364">Các mã xác thực này chỉ được lưu trên thiết bị này. Các mã này không được lưu vào Tài khoản Google của bạn.</translation>
+<translation id="2740876196999178364">Các khoá đăng nhập này chỉ được lưu trên thiết bị này. Các mã này không được lưu vào Tài khoản Google của bạn.</translation>
 <translation id="2741713322780029189">Mở Cửa sổ lệnh khôi phục</translation>
 <translation id="2741912629735277980">Hiển thị giao diện người dùng trên màn hình đăng nhập</translation>
 <translation id="2742448780373473567">Quá trình cài đặt <ph name="DEVICE_OS" /> sẽ ghi đè mọi dữ liệu trên thiết bị của bạn.</translation>
@@ -2162,7 +2162,7 @@
 <translation id="2801954693771979815">Kích thước màn hình</translation>
 <translation id="2802557211515765772">Không có máy in nào được quản lý.</translation>
 <translation id="2803313416453193357">Mở thư mục</translation>
-<translation id="2803719750464280163">Vui lòng xác nhận rằng <ph name="PASSKEY" /> là mã xác thực hiển thị trên thiết bị Bluetooth <ph name="DEVICE" />.</translation>
+<translation id="2803719750464280163">Vui lòng xác nhận rằng <ph name="PASSKEY" /> là khoá đăng nhập hiển thị trên thiết bị Bluetooth <ph name="DEVICE" />.</translation>
 <translation id="2804043232879091219">Không thể mở trình duyệt thay thế</translation>
 <translation id="2804667941345577550">Bạn sẽ bị đăng xuất khỏi trang web này, bao gồm cả các thẻ đang mở</translation>
 <translation id="2804680522274557040">Đã tắt máy ảnh</translation>
@@ -3099,7 +3099,7 @@
 <translation id="3654045516529121250">Đọc cài đặt trợ năng của bạn</translation>
 <translation id="3655712721956801464">{NUM_FILES,plural, =1{Ứng dụng có quyền truy cập vĩnh viễn vào một tệp.}other{Ứng dụng có quyền truy cập vĩnh viễn vào # tệp.}}</translation>
 <translation id="3658871634334445293">Tăng tốc TrackPoint</translation>
-<translation id="3659550105763988702">Sử dụng mã xác thực của bạn cho <ph name="APP_NAME" /></translation>
+<translation id="3659550105763988702">Sử dụng khoá đăng nhập của bạn cho <ph name="APP_NAME" /></translation>
 <translation id="3659929705630080526">Bạn đã nhập sai mã truy cập quá nhiều lần. Hãy thử lại sau</translation>
 <translation id="3660234220361471169">Không đáng tin cậy</translation>
 <translation id="3661297433172569100">{NUM_PASSWORDS,plural, =1{Đã tìm thấy 1 mật khẩu hiện có}other{Đã tìm thấy {NUM_PASSWORDS} mật khẩu hiện có}}</translation>
@@ -3400,7 +3400,7 @@
 <translation id="3898768766145818464">Phát hoặc tạm dừng video</translation>
 <translation id="389901847090970821">Chọn bàn phím</translation>
 <translation id="3900966090527141178">Xuất mật khẩu</translation>
-<translation id="3902789559055749153">Chọn cách bạn muốn tạo mã xác thực cho <ph name="APP_NAME" /></translation>
+<translation id="3902789559055749153">Chọn cách bạn muốn tạo khoá đăng nhập cho <ph name="APP_NAME" /></translation>
 <translation id="3903187154317825986">Bàn phím tích hợp</translation>
 <translation id="3904326018476041253">Dịch vụ vị trí</translation>
 <translation id="3905761538810670789">Sửa ứng dụng</translation>
@@ -3748,7 +3748,7 @@
 <translation id="4218081191298393750">Nhấp vào biểu tượng loa để tắt tiếng thẻ này</translation>
 <translation id="4220648711404560261">Đã xảy ra lỗi trong quá trình kích hoạt.</translation>
 <translation id="4222917615373664617">Tính năng theo dõi giá đang bật. Giá là <ph name="CURRENT_PRICE" />.</translation>
-<translation id="4223845867739585293">Tạo một mã xác thực</translation>
+<translation id="4223845867739585293">Tạo một khoá đăng nhập</translation>
 <translation id="4225397296022057997">Trên tất cả các trang web</translation>
 <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Không được phép dùng tiện ích này}other{Không được phép dùng một số tiện ích}}</translation>
 <translation id="4231095370974836764">Cài đặt ứng dụng và trò chơi từ Google Play trên <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
@@ -3955,7 +3955,7 @@
 <translation id="4409697491990005945">Lề</translation>
 <translation id="4410545552906060960">Dùng một số (mã PIN) thay cho mật khẩu để mở khóa thiết bị. Để đặt mã PIN vào thời điểm khác, hãy chuyển đến mục Cài đặt.</translation>
 <translation id="4411578466613447185">Trình ký mã</translation>
-<translation id="4411719918614785832">Các mã xác thực này được lưu vào Windows Hello trên máy tính này. Các mã này không được lưu vào Tài khoản Google của bạn.</translation>
+<translation id="4411719918614785832">Các khoá đăng nhập này được lưu vào Windows Hello trên máy tính này. Các mã này không được lưu vào Tài khoản Google của bạn.</translation>
 <translation id="4412632005703201014">Ứng dụng Chrome đang di chuyển sang Ứng dụng web tiến bộ. Tổ chức của bạn đã cài đặt Ứng dụng Chrome này trên trình duyệt bạn sử dụng. Để mở Ứng dụng web tiến bộ trong danh sách Ứng dụng, trước tiên hãy liên hệ với quản trị viên và yêu cầu họ gỡ cài đặt Ứng dụng Chrome. Trong thời gian chờ đợi, bạn có thể truy cập <ph name="EXTENSION_LAUNCH_URL" /> để mở <ph name="EXTENSION_NAME" /> trên web.</translation>
 <translation id="4412698727486357573">Trung tâm trợ giúp</translation>
 <translation id="4412992751769744546">Cho phép cookie của bên thứ ba</translation>
@@ -4170,7 +4170,7 @@
 <translation id="4594577641390224176">Bạn đang tìm hệ thống giới thiệu trang? Hãy truy cập</translation>
 <translation id="4595560905247879544">Chỉ người quản lý mới có thể sửa đổi ứng dụng và tiện ích (<ph name="CUSTODIAN_NAME" />).</translation>
 <translation id="4596295440756783523">Bạn có các chứng chỉ trên tệp có thể nhận dạng các máy chủ này</translation>
-<translation id="4598345735110653698">Quản lý mã xác thực</translation>
+<translation id="4598345735110653698">Quản lý khoá đăng nhập</translation>
 <translation id="4598549027014564149">Ở chế độ Ẩn danh, các trang web không thể dùng cookie để xem hoạt động duyệt web của bạn trên nhiều trang web, ngay cả các trang web có liên quan. Hoạt động duyệt web của bạn không được dùng cho các mục đích như cá nhân hoá quảng cáo. Các tính năng của một số trang web có thể không hoạt động.</translation>
 <translation id="4598556348158889687">Quản lý bộ nhớ</translation>
 <translation id="4598776695426288251">Wi-Fi khả dụng qua nhiều thiết bị</translation>
@@ -4405,7 +4405,7 @@
 <translation id="481574578487123132">Thiết bị đã liên kết</translation>
 <translation id="4816097470512964351"><ph name="DEVICE" />, Thông tin chi tiết</translation>
 <translation id="4816336393325437908">{COUNT,plural, =1{Đã xóa 1 dấu trang}other{Đã xóa {COUNT} dấu trang}}</translation>
-<translation id="4816900689218414104">Tạo một mã xác thực trên điện thoại hoặc máy tính bảng</translation>
+<translation id="4816900689218414104">Tạo một khoá đăng nhập trên điện thoại hoặc máy tính bảng</translation>
 <translation id="4819323978093861656">{0,plural, =0{Sẽ đóng ngay bây giờ.}=1{Sẽ đóng sau 1 giây}other{Sẽ đóng sau # giây}}</translation>
 <translation id="4819607494758673676">Thông báo của Trợ lý Google</translation>
 <translation id="4820236583224459650">Đặt làm phiếu đang hoạt động</translation>
@@ -4413,7 +4413,7 @@
 <translation id="4823484602432206655">Đọc và thay đổi cài đặt người dùng và thiết bị</translation>
 <translation id="4824037980212326045">Sao lưu và khôi phục Linux</translation>
 <translation id="4824958205181053313">Bạn muốn hủy đồng bộ hóa?</translation>
-<translation id="4825532258163983651">Không thể xoá mã xác thực</translation>
+<translation id="4825532258163983651">Không thể xoá khoá đăng nhập</translation>
 <translation id="4827283332383516812">Xoá thẻ</translation>
 <translation id="4827675678516992122">Không thể kết nối</translation>
 <translation id="4827784381479890589">Tính năng kiểm tra lỗi chính tả nâng cao trong trình duyệt Chrome (văn bản sẽ được gửi đến Google để đưa ra các đề xuất chính tả)</translation>
@@ -4722,7 +4722,7 @@
 <translation id="5111326646107464148">Mở nhóm trong cửa sổ mới</translation>
 <translation id="5111646998522066203">Thoát khỏi chế độ ẩn danh</translation>
 <translation id="5111692334209731439">&amp;Trình quản lý Dấu trang</translation>
-<translation id="5111794652433847656">Không có mã xác thực nào cho <ph name="APP_NAME" /> trên thiết bị này</translation>
+<translation id="5111794652433847656">Không có khoá đăng nhập nào cho <ph name="APP_NAME" /> trên thiết bị này</translation>
 <translation id="5112577000029535889">&amp;Công cụ dành cho Nhà phát triển</translation>
 <translation id="511313294362309725">Bật tính năng Ghép nối nhanh</translation>
 <translation id="51143538739122961">Cắm và chạm vào khóa bảo mật</translation>
@@ -4867,7 +4867,7 @@
 <translation id="5252653240322147470">Mã PIN phải có ít hơn <ph name="MAXIMUM" /> chữ số</translation>
 <translation id="5254368820972107711">Hiển thị các tệp cần xóa</translation>
 <translation id="52550593576409946">Không thể chạy ứng dụng Kiosk.</translation>
-<translation id="5255726914791076208">Khi bạn chỉnh sửa mã xác thực, tài khoản <ph name="RP_ID" /> của bạn sẽ không thay đổi</translation>
+<translation id="5255726914791076208">Khi bạn chỉnh sửa khoá đăng nhập, tài khoản <ph name="RP_ID" /> của bạn sẽ không thay đổi</translation>
 <translation id="5255859108402770436">Đăng nhập lại</translation>
 <translation id="52566111838498928">Đang tải phông chữ...</translation>
 <translation id="5256861893479663409">Trên tất cả các trang web</translation>
@@ -4911,7 +4911,7 @@
 <translation id="5285635972691565180">Màn hình <ph name="DISPLAY_ID" /></translation>
 <translation id="5286194356314741248">Đang quét</translation>
 <translation id="5287425679749926365">Tài khoản của bạn</translation>
-<translation id="5288106344236929384">Các thao tác khác, tuỳ chọn mã xác thực cho <ph name="USERNAME" /> trên <ph name="DOMAIN" /></translation>
+<translation id="5288106344236929384">Các thao tác khác, tuỳ chọn khoá đăng nhập cho <ph name="USERNAME" /> trên <ph name="DOMAIN" /></translation>
 <translation id="5288678174502918605">&amp;Mở lại Thẻ đã Đóng</translation>
 <translation id="52895863590846877">Trang không viết bằng <ph name="LANGUAGE" /></translation>
 <translation id="52912272896845572">Tệp khóa cá nhân không hợp lệ.</translation>
@@ -5401,7 +5401,7 @@
 <translation id="5734697361979786483">Thêm mục chia sẻ tệp</translation>
 <translation id="5736092224453113618">{NUM_FILES,plural, =0{Dữ liệu này hoặc thiết bị của bạn không đáp ứng một số chính sách bảo mật của tổ chức. Hãy trao đổi với quản trị viên của bạn để biết những vấn đề cần khắc phục.}=1{Tệp này hoặc thiết bị của bạn không đáp ứng một số chính sách bảo mật của tổ chức. Hãy trao đổi với quản trị viên của bạn để biết những vấn đề cần khắc phục.}other{Những tệp này không đáp ứng một số chính sách bảo mật của tổ chức. Hãy trao đổi với quản trị viên của bạn để biết những vấn đề cần khắc phục.}}</translation>
 <translation id="5736796278325406685">Vui lòng nhập tên người dùng hợp lệ</translation>
-<translation id="5738093759615225354">Bạn cần mã xác thực này để đăng nhập vào máy tính của mình</translation>
+<translation id="5738093759615225354">Bạn cần khoá đăng nhập này để đăng nhập vào máy tính của mình</translation>
 <translation id="5739017626473506901">Đăng nhập để giúp <ph name="USER_NAME" /> thêm tài khoản trường học</translation>
 <translation id="5739235828260127894">Đang chờ xác minh. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">Rất lớn</translation>
@@ -5909,7 +5909,7 @@
 <translation id="6178682841350631965">Dữ liệu đăng nhập của bạn đã được cập nhật</translation>
 <translation id="6179893151569852357">Chuyển đổi các phím F thành các phím ở hàng trên cùng của ChromeOS</translation>
 <translation id="6180510783007738939">Công cụ đường thẳng</translation>
-<translation id="6180550893222597997">Bạn muốn sử dụng mã xác thực nào cho <ph name="APP_NAME" />?</translation>
+<translation id="6180550893222597997">Bạn muốn sử dụng khoá đăng nhập nào cho <ph name="APP_NAME" />?</translation>
 <translation id="6181431612547969857">Tải xuống bị chặn</translation>
 <translation id="6184099524311454384">Tìm kiếm thẻ</translation>
 <translation id="6185132558746749656">Vị trí thiết bị</translation>
@@ -6222,7 +6222,7 @@
 <translation id="6468485451923838994">Phông chữ</translation>
 <translation id="6468773105221177474"><ph name="FILE_COUNT" /> tệp</translation>
 <translation id="6469557521904094793">Bật Mạng di động</translation>
-<translation id="6469702164109431067">Mật khẩu và mã xác thực</translation>
+<translation id="6469702164109431067">Mật khẩu và khoá đăng nhập</translation>
 <translation id="6470823736074966819">Ẩn thông báo</translation>
 <translation id="6472893788822429178">Hiển thị nút Trang chủ</translation>
 <translation id="6474352027343282094">{COUNT,plural, =1{{COUNT} mật khẩu chỉ được lưu trên thiết bị này. Để sử dụng mật khẩu này trên các thiết bị khác, &lt;a target='_blank' href='chrome://password-manager/'&gt;hãy lưu mật khẩu trong Tài khoản Google của bạn&lt;/a&gt;.}other{{COUNT} mật khẩu chỉ được lưu trên thiết bị này. Để sử dụng những mật khẩu này trên các thiết bị khác, &lt;a target='_blank' href='chrome://password-manager/'&gt;hãy lưu các mật khẩu trong Tài khoản Google của bạn&lt;/a&gt;.}}</translation>
@@ -6237,7 +6237,7 @@
 <translation id="6482559668224714696">Phóng to toàn màn hình</translation>
 <translation id="6483485061007832714">Mở tệp đã tải xuống</translation>
 <translation id="6483805311199035658">Đang mở <ph name="FILE" />...</translation>
-<translation id="6486301003991593638">Để quản lý mã xác thực, hãy sử dụng phiên bản Windows mới hơn</translation>
+<translation id="6486301003991593638">Để quản lý khoá đăng nhập, hãy sử dụng phiên bản Windows mới hơn</translation>
 <translation id="6488266788670893993"><ph name="BRAND" /> không thể kiểm tra mật khẩu để xem có bị rò rỉ dữ liệu hay không. Hãy thử kiểm tra kết nối Internet.</translation>
 <translation id="6488384360522318064">Chọn ngôn ngữ</translation>
 <translation id="648927581764831596">Không có</translation>
@@ -6579,7 +6579,7 @@
 <translation id="6790497603648687708">Đã thêm <ph name="EXTENSION_NAME" /> từ xa</translation>
 <translation id="6790820461102226165">Thêm người...</translation>
 <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation>
-<translation id="679486139907144816">Bạn cần bật Windows Hello trong phần cài đặt để đăng nhập vào trang web này bằng mã xác thực. Sau đó, quay lại trang web này rồi thử lại.</translation>
+<translation id="679486139907144816">Bạn cần bật Windows Hello trong phần cài đặt để đăng nhập vào trang web này bằng khoá truy cập. Sau đó, quay lại trang web này rồi thử lại.</translation>
 <translation id="6795371939514004514">Tính năng tự động quét cho phép bạn tự động di chuyển qua các mục trên màn hình. Khi một mục được làm nổi bật, hãy nhấn nút “Chọn” để kích hoạt mục đó.</translation>
 <translation id="6795884519221689054">Gấu trúc</translation>
 <translation id="6796509790850723820">Kết xuất</translation>
@@ -7029,7 +7029,7 @@
 <translation id="7193051357671784796">Tổ chức của bạn đã thêm ứng dụng này. Hãy khởi động lại ứng dụng này để hoàn tất quá trình cài đặt.</translation>
 <translation id="7193374945610105795">Không có mật khẩu nào được lưu cho <ph name="ORIGIN" /></translation>
 <translation id="7194873994243265344">Tổ chức của bạn đã chặn tệp này vì tệp đã được mã hoá. Hãy yêu cầu chủ sở hữu tệp giải mã.</translation>
-<translation id="7196272782924897510">Sử dụng mã xác thực từ một thiết bị khác?</translation>
+<translation id="7196272782924897510">Sử dụng khoá đăng nhập từ một thiết bị khác?</translation>
 <translation id="7196913789568937443">Sao lưu lên Google Drive. Dễ dàng khôi phục dữ liệu hoặc chuyển đổi thiết bị bất kỳ lúc nào. Bản sao lưu bao gồm cả dữ liệu ứng dụng. Các bản sao lưu sẽ được tải lên Google và mã hóa bằng mật khẩu Tài khoản Google. <ph name="BEGIN_LINK1" />Tìm hiểu thêm<ph name="END_LINK1" /></translation>
 <translation id="7197190419934240522">Sử dụng Google Tìm kiếm và các tính năng thông minh của Google mỗi khi duyệt web</translation>
 <translation id="719791532916917144">Phím tắt</translation>
@@ -7572,7 +7572,7 @@
 <translation id="7670483791111801022">Phụ đề</translation>
 <translation id="7671130400130574146">Sử dụng thanh tiêu đề và đường viền của hệ thống</translation>
 <translation id="767127784612208024">Chạm để xác nhận đặt lại</translation>
-<translation id="7672504401554182757">Chọn thiết bị có mã xác thực cho <ph name="APP_NAME" /></translation>
+<translation id="7672504401554182757">Chọn thiết bị có khoá đăng nhập cho <ph name="APP_NAME" /></translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, trong <ph name="PAGE_TITLE" />.</translation>
 <translation id="7674416868315480713">Hủy kích hoạt mọi cổng đang được chuyển tiếp trong Linux</translation>
 <translation id="7674537509496907005"><ph name="APP_COUNT" /> ứng dụng</translation>
@@ -7688,7 +7688,7 @@
 <translation id="7766807826975222231">Tìm hiểu thêm</translation>
 <translation id="7766838926148951335">Chấp nhận quyền</translation>
 <translation id="7767554953520855281">Khi bạn chia sẻ màn hình, thông tin chi tiết sẽ bị ẩn</translation>
-<translation id="7767972280546034736">Tạo một mã xác thực cho <ph name="APP_NAME" /></translation>
+<translation id="7767972280546034736">Tạo một khoá đăng nhập cho <ph name="APP_NAME" /></translation>
 <translation id="7768507955883790804">Các trang web sẽ tự động tuân theo chế độ cài đặt này khi bạn truy cập</translation>
 <translation id="7768526219335215384"><ph name="ORIGIN" /> sẽ xem được các tệp trong <ph name="FOLDERNAME" /></translation>
 <translation id="7768770796815395237">Thay đổi</translation>
@@ -8091,7 +8091,7 @@
 <translation id="810185532889603849">Màu tùy chỉnh</translation>
 <translation id="8101987792947961127">Yêu cầu Powerwash trong lần khởi động lại tiếp theo</translation>
 <translation id="8102139037507939978">Xóa thông tin nhận dạng cá nhân khỏi tệp system_logs.txt.</translation>
-<translation id="810362914482827094">Tìm kiếm mã xác thực</translation>
+<translation id="810362914482827094">Tìm kiếm khoá đăng nhập</translation>
 <translation id="8104088837833760645">Tải hồ sơ eSIM xuống</translation>
 <translation id="8107015733319732394">Đang cài đặt Cửa hàng Google Play trên <ph name="DEVICE_TYPE" /> của bạn. Quá trình này có thể mất vài phút.</translation>
 <translation id="810728361871746125">Độ phân giải màn hình</translation>
@@ -8206,7 +8206,7 @@
 <translation id="8206267832882844324">Chỉnh sửa ghi chú</translation>
 <translation id="8206745257863499010">Nốt nhạc xanh</translation>
 <translation id="8206859287963243715">Di động</translation>
-<translation id="8207404892907560325">Chọn một mã xác thực</translation>
+<translation id="8207404892907560325">Chọn một khoá đăng nhập</translation>
 <translation id="8207794858944505786">Máy ảo "<ph name="DEFAULT_VM_NAME" />" tồn tại nhưng có vẻ không phải là máy ảo <ph name="VM_TYPE" /> hợp lệ. Vui lòng liên hệ với quản trị viên của bạn.</translation>
 <translation id="8208188204689616705">Các trang web này nằm trong nhóm do <ph name="FPS_OWNER" /> xác định. Các trang web nằm trong nhóm có thể xem hoạt động của bạn trong nhóm.</translation>
 <translation id="8208216423136871611">Không lưu</translation>
@@ -8778,7 +8778,7 @@
 <translation id="8724859055372736596">&amp;Hiển thị trong Thư mục</translation>
 <translation id="8725066075913043281">Thử lại</translation>
 <translation id="8725178340343806893">Mục ưa thích/Dấu trang</translation>
-<translation id="87254326763805752">Xác nhận mã xác thực</translation>
+<translation id="87254326763805752">Xác nhận khoá đăng nhập</translation>
 <translation id="8726206820263995930">Lỗi khi tìm nạp cài đặt chính sách từ máy chủ: <ph name="CLIENT_ERROR" />.</translation>
 <translation id="8728351286589123703">Các quyền bạn đã chọn sẽ được đặt lại</translation>
 <translation id="8729133765463465108">Dùng máy ảnh để quét mã QR</translation>
@@ -9161,7 +9161,7 @@
 <translation id="90528604757378587">Hoạt động chạy trong nền và một số hiệu ứng hình ảnh như cuộn mượt có thể bị hạn chế.</translation>
 <translation id="9053563360605707198">In trên hai mặt</translation>
 <translation id="9055636786322918818">Thực thi mã hóa RC4. Việc sử dụng tùy chọn này sẽ làm gia tăng rủi ro vì các thuật toán mã hóa RC4 là không an toàn.</translation>
-<translation id="9056788090206401048">Bạn phải bật Bluetooth để sử dụng mã xác thực trên một thiết bị khác. Bạn có thể quản lý chế độ cài đặt này bất cứ lúc nào trong phần cài đặt.</translation>
+<translation id="9056788090206401048">Bạn phải bật Bluetooth để sử dụng khoá truy cập trên một thiết bị khác. Bạn có thể quản lý chế độ cài đặt này bất cứ lúc nào trong phần cài đặt.</translation>
 <translation id="9056810968620647706">Không tìm thấy kết quả phù hợp nào.</translation>
 <translation id="9057007989365783744"><ph name="SUPERVISED_USER_NAME" /> muốn truy cập nội dung sau:</translation>
 <translation id="9057354806206861646">Cập nhật lịch biểu</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb
index dae2198d..0c05a3e7 100644
--- a/chrome/app/resources/google_chrome_strings_en-GB.xtb
+++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -23,7 +23,9 @@
 <translation id="137466361146087520">Google Chrome Beta</translation>
 <translation id="1399397803214730675">This computer already has a more recent version of Google Chrome. If the software is not working, please uninstall Google Chrome and try again.</translation>
 <translation id="139993653570221430">You can change your mind at any time in Chrome settings. The trials run alongside the current way that ads get served, so you won’t see changes right away.</translation>
+<translation id="1425903838053942728">{COUNT,plural, =0{Chrome is done updating. You can use the latest version as soon as you relaunch. Your current tabs will then reopen.}=1{Chrome is done updating. You can use the latest version as soon as you relaunch. Your current tabs will then reopen. Your incognito window won't reopen.}other{Chrome is done updating. You can use the latest version as soon as you relaunch. Your current tabs will then reopen. Your # incognito windows won't reopen.}}</translation>
 <translation id="1434626383986940139">Chrome Canary Apps</translation>
+<translation id="1492280395845991349">Relaunch to finish Chrome update</translation>
 <translation id="1496905273983707119">{NUM_DEVICES,plural, =0{Google Chrome was connected to an HID device}=1{Google Chrome is connected to an HID device}other{Google Chrome is connected to HID devices}}</translation>
 <translation id="1507198376417198979">Customise your new Chrome profile</translation>
 <translation id="1516530951338665275">Google Chrome needs Bluetooth access to continue pairing. <ph name="IDS_BLUETOOTH_DEVICE_CHOOSER_AUTHORIZE_BLUETOOTH_LINK" /></translation>
@@ -95,6 +97,7 @@
 <translation id="2652691236519827073">Open Link in New Chrome &amp;tab</translation>
 <translation id="2665296953892887393">Help make Google Chrome better by sending crash reports and <ph name="UMA_LINK" /> to Google</translation>
 <translation id="2689103672227170538">This extension has changed the page that is shown when you start Chrome.</translation>
+<translation id="2712234843277364121">Relaunch to update – Your tabs will reopen</translation>
 <translation id="2742320827292110288">Warning: Google Chrome cannot prevent extensions from recording your browsing history. To disable this extension in Incognito mode, unselect this option.</translation>
 <translation id="2765403129283291972">Chrome needs permission to access your microphone for this site</translation>
 <translation id="2770231113462710648">Change default browser to:</translation>
@@ -281,6 +284,7 @@
 <translation id="6365489425007284765">{COUNT,plural, =1{Your administrator automatically deletes browsing data when it isn't used for one minute. This could include history, auto-fill and downloads. Your existing tabs will remain open.}other{Your administrator automatically deletes browsing data when it isn't used for # minutes. This could include history, auto-fill and downloads. Your existing tabs will remain open.}}</translation>
 <translation id="6412673304250309937">Checks URLs with a list of unsafe sites stored in Chrome. If a site tries to steal your password, or when you download a harmful file, Chrome may also send URLs, including bits of page content, to Safe Browsing.</translation>
 <translation id="6418662306461808273">Switch to existing Chrome profile?</translation>
+<translation id="648319183876919572">Enhanced Safe Browsing does more to protect you against dangerous websites and downloads</translation>
 <translation id="6493527311031785448">Google Chrome is trying to <ph name="AUTHENTICATION_PURPOSE" /></translation>
 <translation id="6506909944137591434">Chrome needs camera permission to create a 3D map of your surroundings</translation>
 <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> – Google Chrome Dev</translation>
@@ -411,6 +415,7 @@
 <translation id="8989968390305463310">Your browsing history affects the ads that you see and the interests as estimated below. To protect your privacy, Chrome auto-deletes your interests on a rolling basis each month. Interests can refresh unless you remove them.</translation>
 <translation id="8999208279178790196">{0,plural, =0{A Chrome update is available}=1{A Chrome update is available}other{A Chrome update has been available for # days}}</translation>
 <translation id="9053892488859122171">Chrome OS Flex system</translation>
+<translation id="9054037008353851982">Relaunch to update – Your tabs will reopen</translation>
 <translation id="911206726377975832">Also delete your browsing data?</translation>
 <translation id="9138603949443464873">To apply your changes, relaunch Chrome</translation>
 <translation id="9195993889682885387">Chrome can estimate your interests based on your browsing history from the last few weeks. This info stays on your device.</translation>
diff --git a/chrome/browser/apps/app_service/BUILD.gn b/chrome/browser/apps/app_service/BUILD.gn
index c3e6413..62aa1c18 100644
--- a/chrome/browser/apps/app_service/BUILD.gn
+++ b/chrome/browser/apps/app_service/BUILD.gn
@@ -160,14 +160,14 @@
       "metrics/browser_to_tab_list.h",
       "metrics/website_metrics.cc",
       "metrics/website_metrics.h",
+      "promise_apps/promise_app.cc",
+      "promise_apps/promise_app.h",
       "promise_apps/promise_app_registry_cache.cc",
       "promise_apps/promise_app_registry_cache.h",
       "promise_apps/promise_app_update.cc",
       "promise_apps/promise_app_update.h",
       "promise_apps/promise_app_wrapper.cc",
       "promise_apps/promise_app_wrapper.h",
-      "promise_apps/promise_apps.cc",
-      "promise_apps/promise_apps.h",
       "publishers/arc_apps.cc",
       "publishers/arc_apps.h",
       "publishers/arc_apps_factory.cc",
diff --git a/chrome/browser/apps/app_service/app_service_proxy_ash.cc b/chrome/browser/apps/app_service/app_service_proxy_ash.cc
index ea61d19..7efb3a2 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_ash.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy_ash.cc
@@ -18,7 +18,7 @@
 #include "chrome/browser/apps/app_service/metrics/app_platform_metrics.h"
 #include "chrome/browser/apps/app_service/metrics/app_platform_metrics_service.h"
 #include "chrome/browser/apps/app_service/metrics/app_service_metrics.h"
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #include "chrome/browser/apps/app_service/publishers/app_publisher.h"
 #include "chrome/browser/apps/app_service/uninstall_dialog.h"
 #include "chrome/browser/ash/app_restore/full_restore_service.h"
diff --git a/chrome/browser/apps/app_service/promise_apps/promise_apps.cc b/chrome/browser/apps/app_service/promise_apps/promise_app.cc
similarity index 93%
rename from chrome/browser/apps/app_service/promise_apps/promise_apps.cc
rename to chrome/browser/apps/app_service/promise_apps/promise_app.cc
index b0e1510d..ded2601 100644
--- a/chrome/browser/apps/app_service/promise_apps/promise_apps.cc
+++ b/chrome/browser/apps/app_service/promise_apps/promise_app.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/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 
 #include <iostream>
 
@@ -11,7 +11,7 @@
 
 namespace apps {
 
-APP_ENUM_TO_STRING(PromiseStatus, kUnknown, kPending, kDownloading, kInstalling)
+APP_ENUM_TO_STRING(PromiseStatus, kUnknown, kPending, kInstalling)
 
 PromiseApp::PromiseApp(const apps::PackageId& package_id)
     : package_id(package_id) {}
diff --git a/chrome/browser/apps/app_service/promise_apps/promise_apps.h b/chrome/browser/apps/app_service/promise_apps/promise_app.h
similarity index 88%
rename from chrome/browser/apps/app_service/promise_apps/promise_apps.h
rename to chrome/browser/apps/app_service/promise_apps/promise_app.h
index 824ed0e..c46cb05d 100644
--- a/chrome/browser/apps/app_service/promise_apps/promise_apps.h
+++ b/chrome/browser/apps/app_service/promise_apps/promise_app.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_APPS_APP_SERVICE_PROMISE_APPS_PROMISE_APPS_H_
-#define CHROME_BROWSER_APPS_APP_SERVICE_PROMISE_APPS_PROMISE_APPS_H_
+#ifndef CHROME_BROWSER_APPS_APP_SERVICE_PROMISE_APPS_PROMISE_APP_H_
+#define CHROME_BROWSER_APPS_APP_SERVICE_PROMISE_APPS_PROMISE_APP_H_
 
 #include <ostream>
 
@@ -15,9 +15,8 @@
 // Indicates the status of the app installation that the promise app represents.
 enum class PromiseStatus {
   kUnknown,
-  kPending,      // Waiting for the installation process to start.
-  kDownloading,  // Downloading app package.
-  kInstalling,   // Installing app package.
+  kPending,     // Waiting for the installation process to start.
+  kInstalling,  // Installing app package.
 };
 
 std::string EnumToString(PromiseStatus);
@@ -47,4 +46,4 @@
 
 }  // namespace apps
 
-#endif  // CHROME_BROWSER_APPS_APP_SERVICE_PROMISE_APPS_PROMISE_APPS_H_
+#endif  // CHROME_BROWSER_APPS_APP_SERVICE_PROMISE_APPS_PROMISE_APP_H_
diff --git a/chrome/browser/apps/app_service/promise_apps/promise_app_registry_cache.cc b/chrome/browser/apps/app_service/promise_apps/promise_app_registry_cache.cc
index e626fced7..6a7b9544 100644
--- a/chrome/browser/apps/app_service/promise_apps/promise_app_registry_cache.cc
+++ b/chrome/browser/apps/app_service/promise_apps/promise_app_registry_cache.cc
@@ -4,8 +4,8 @@
 #include "chrome/browser/apps/app_service/promise_apps/promise_app_registry_cache.h"
 
 #include "chrome/browser/apps/app_service/package_id.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #include "chrome/browser/apps/app_service/promise_apps/promise_app_update.h"
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
 
 namespace apps {
 
diff --git a/chrome/browser/apps/app_service/promise_apps/promise_app_registry_cache_unittest.cc b/chrome/browser/apps/app_service/promise_apps/promise_app_registry_cache_unittest.cc
index 8dad568b..99983b8d 100644
--- a/chrome/browser/apps/app_service/promise_apps/promise_app_registry_cache_unittest.cc
+++ b/chrome/browser/apps/app_service/promise_apps/promise_app_registry_cache_unittest.cc
@@ -7,7 +7,7 @@
 #include <sstream>
 
 #include "chrome/browser/apps/app_service/package_id.h"
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #include "components/services/app_service/public/cpp/app_types.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/apps/app_service/promise_apps/promise_apps_unittest.cc b/chrome/browser/apps/app_service/promise_apps/promise_app_unittest.cc
similarity index 86%
rename from chrome/browser/apps/app_service/promise_apps/promise_apps_unittest.cc
rename to chrome/browser/apps/app_service/promise_apps/promise_app_unittest.cc
index 335131c..eb26029 100644
--- a/chrome/browser/apps/app_service/promise_apps/promise_apps_unittest.cc
+++ b/chrome/browser/apps/app_service/promise_apps/promise_app_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/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 
 #include "chrome/browser/apps/app_service/package_id.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -13,8 +13,6 @@
 
 TEST_F(PromiseAppsTest, PromiseStatusEnumToString) {
   EXPECT_EQ(EnumToString(PromiseStatus::kPending), "PromiseStatus::kPending");
-  EXPECT_EQ(EnumToString(PromiseStatus::kDownloading),
-            "PromiseStatus::kDownloading");
   EXPECT_EQ(EnumToString(PromiseStatus::kInstalling),
             "PromiseStatus::kInstalling");
   EXPECT_EQ(EnumToString(PromiseStatus::kUnknown), "PromiseStatus::kUnknown");
diff --git a/chrome/browser/apps/app_service/promise_apps/promise_app_update.cc b/chrome/browser/apps/app_service/promise_apps/promise_app_update.cc
index 9619085..e7654de 100644
--- a/chrome/browser/apps/app_service/promise_apps/promise_app_update.cc
+++ b/chrome/browser/apps/app_service/promise_apps/promise_app_update.cc
@@ -6,7 +6,7 @@
 
 #include "base/logging.h"
 #include "chrome/browser/apps/app_service/package_id.h"
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #include "components/services/app_service/public/cpp/macros.h"
 
 namespace apps {
diff --git a/chrome/browser/apps/app_service/promise_apps/promise_app_update.h b/chrome/browser/apps/app_service/promise_apps/promise_app_update.h
index 5bf51015e..06c447a 100644
--- a/chrome/browser/apps/app_service/promise_apps/promise_app_update.h
+++ b/chrome/browser/apps/app_service/promise_apps/promise_app_update.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_APPS_APP_SERVICE_PROMISE_APPS_PROMISE_APP_UPDATE_H_
 
 #include "base/memory/raw_ptr.h"
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 namespace apps {
 
diff --git a/chrome/browser/apps/app_service/promise_apps/promise_app_update_unittest.cc b/chrome/browser/apps/app_service/promise_apps/promise_app_update_unittest.cc
index d0be260..f64f87c 100644
--- a/chrome/browser/apps/app_service/promise_apps/promise_app_update_unittest.cc
+++ b/chrome/browser/apps/app_service/promise_apps/promise_app_update_unittest.cc
@@ -5,7 +5,7 @@
 #include "chrome/browser/apps/app_service/promise_apps/promise_app_update.h"
 
 #include "chrome/browser/apps/app_service/package_id.h"
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace apps {
@@ -75,7 +75,7 @@
   PromiseApp promise_app_new = PromiseApp(package_id);
   promise_app_new.name = "New name";
   promise_app_new.progress = 0.9;
-  promise_app_new.status = PromiseStatus::kDownloading;
+  promise_app_new.status = PromiseStatus::kInstalling;
   promise_app_new.should_show = true;
 
   PromiseAppUpdate u(&promise_app_old, &promise_app_new);
@@ -90,7 +90,7 @@
   EXPECT_FLOAT_EQ(u.Progress().value(), 0.9);
   EXPECT_EQ(u.ProgressChanged(), true);
 
-  EXPECT_EQ(u.Status(), PromiseStatus::kDownloading);
+  EXPECT_EQ(u.Status(), PromiseStatus::kInstalling);
   EXPECT_EQ(u.StatusChanged(), true);
 
   EXPECT_EQ(u.ShouldShow(), true);
diff --git a/chrome/browser/apps/app_service/publishers/app_publisher.cc b/chrome/browser/apps/app_service/publishers/app_publisher.cc
index 4b5cc7d2..ebf1147 100644
--- a/chrome/browser/apps/app_service/publishers/app_publisher.cc
+++ b/chrome/browser/apps/app_service/publishers/app_publisher.cc
@@ -11,7 +11,7 @@
 #include "components/services/app_service/public/cpp/capability_access.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #endif
 
 namespace apps {
diff --git a/chrome/browser/apps/app_service/publishers/arc_apps.cc b/chrome/browser/apps/app_service/publishers/arc_apps.cc
index a9fea1a..50752f8a 100644
--- a/chrome/browser/apps/app_service/publishers/arc_apps.cc
+++ b/chrome/browser/apps/app_service/publishers/arc_apps.cc
@@ -34,7 +34,7 @@
 #include "chrome/browser/apps/app_service/launch_utils.h"
 #include "chrome/browser/apps/app_service/menu_util.h"
 #include "chrome/browser/apps/app_service/package_id.h"
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #include "chrome/browser/apps/app_service/publishers/arc_apps_factory.h"
 #include "chrome/browser/apps/app_service/webapk/webapk_manager.h"
 #include "chrome/browser/ash/app_list/arc/arc_app_icon.h"
diff --git a/chrome/browser/apps/app_service/publishers/arc_apps_unittest.cc b/chrome/browser/apps/app_service/publishers/arc_apps_unittest.cc
index 626b639..78bceab 100644
--- a/chrome/browser/apps/app_service/publishers/arc_apps_unittest.cc
+++ b/chrome/browser/apps/app_service/publishers/arc_apps_unittest.cc
@@ -19,7 +19,7 @@
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/app_service/app_service_test.h"
 #include "chrome/browser/apps/app_service/launch_result_type.h"
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #include "chrome/browser/apps/app_service/publishers/arc_apps_factory.h"
 #include "chrome/browser/ash/app_list/arc/arc_app_list_prefs.h"
 #include "chrome/browser/ash/app_list/arc/arc_app_test.h"
diff --git a/chrome/browser/apps/app_service/publishers/publisher_unittest.cc b/chrome/browser/apps/app_service/publishers/publisher_unittest.cc
index 480639ca..ff2e834 100644
--- a/chrome/browser/apps/app_service/publishers/publisher_unittest.cc
+++ b/chrome/browser/apps/app_service/publishers/publisher_unittest.cc
@@ -16,7 +16,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/app_service_test.h"
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_service_test_base.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/apps/app_service/webapk/webapk_prefs.cc b/chrome/browser/apps/app_service/webapk/webapk_prefs.cc
index c099b9c3..cebd366 100644
--- a/chrome/browser/apps/app_service/webapk/webapk_prefs.cc
+++ b/chrome/browser/apps/app_service/webapk/webapk_prefs.cc
@@ -87,7 +87,8 @@
       profile->GetPrefs()->GetDict(kGeneratedWebApksPref);
 
   for (const auto kv : generated_webapks) {
-    const std::string* package_name = kv.second.FindStringKey(kPackageNameKey);
+    const std::string* package_name =
+        kv.second.GetDict().FindString(kPackageNameKey);
     DCHECK(package_name);
     package_names.insert(*package_name);
   }
@@ -103,7 +104,7 @@
 
   for (auto kv : *generated_webapks) {
     const std::string* item_package_name =
-        kv.second.FindStringKey(kPackageNameKey);
+        kv.second.GetDict().FindString(kPackageNameKey);
     if (item_package_name && *item_package_name == package_name) {
       std::string app_id = kv.first;
       generated_webapks->Remove(kv.first);
@@ -131,7 +132,7 @@
 
   for (auto kv : generated_webapks) {
     absl::optional<bool> update_needed =
-        kv.second.FindBoolKey(kUpdateNeededKey);
+        kv.second.GetDict().FindBool(kUpdateNeededKey);
     if (update_needed.has_value() && update_needed.value()) {
       ids.insert(kv.first);
     }
diff --git a/chrome/browser/autofill/android/save_update_address_profile_prompt_controller.cc b/chrome/browser/autofill/android/save_update_address_profile_prompt_controller.cc
index 46859cc..b4d3adb 100644
--- a/chrome/browser/autofill/android/save_update_address_profile_prompt_controller.cc
+++ b/chrome/browser/autofill/android/save_update_address_profile_prompt_controller.cc
@@ -4,9 +4,11 @@
 
 #include "chrome/browser/autofill/android/save_update_address_profile_prompt_controller.h"
 
+#include <string>
 #include <utility>
 
 #include "base/containers/contains.h"
+#include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/types/optional_util.h"
@@ -141,10 +143,21 @@
 }
 
 std::u16string SaveUpdateAddressProfilePromptController::GetAddress() {
-  return GetEnvelopeStyleAddress(profile_,
-                                 g_browser_process->GetApplicationLocale(),
-                                 /*include_recipient=*/true,
-                                 /*include_country=*/true);
+  if (is_migration_to_account_) {
+    const std::u16string name =
+        profile_.GetInfo(NAME_FULL_WITH_HONORIFIC_PREFIX,
+                         g_browser_process->GetApplicationLocale());
+    const std::u16string address = profile_.GetInfo(
+        ADDRESS_HOME_LINE1, g_browser_process->GetApplicationLocale());
+    const std::u16string separator =
+        !name.empty() && !address.empty() ? u"\n" : u"";
+    return base::StrCat({name, separator, address});
+  } else {
+    return GetEnvelopeStyleAddress(profile_,
+                                   g_browser_process->GetApplicationLocale(),
+                                   /*include_recipient=*/true,
+                                   /*include_country=*/true);
+  }
 }
 
 std::u16string SaveUpdateAddressProfilePromptController::GetEmail() {
diff --git a/chrome/browser/autofill/android/save_update_address_profile_prompt_controller_unittest.cc b/chrome/browser/autofill/android/save_update_address_profile_prompt_controller_unittest.cc
index c4de81a7..855aff20 100644
--- a/chrome/browser/autofill/android/save_update_address_profile_prompt_controller_unittest.cc
+++ b/chrome/browser/autofill/android/save_update_address_profile_prompt_controller_unittest.cc
@@ -249,10 +249,14 @@
               controller_->GetPositiveButtonText());
   }
 
-  EXPECT_EQ(
-      u"John H. Doe\nUnderworld\n666 Erebus St.\nApt 8\nElysium, CA "
-      u"91111\nUnited States",
-      controller_->GetAddress());
+  if (is_migration_to_account()) {
+    EXPECT_EQ(u"John H. Doe\n666 Erebus St.", controller_->GetAddress());
+  } else {
+    EXPECT_EQ(
+        u"John H. Doe\nUnderworld\n666 Erebus St.\nApt 8\nElysium, CA "
+        u"91111\nUnited States",
+        controller_->GetAddress());
+  }
   EXPECT_EQ(u"johndoe@hades.com", controller_->GetEmail());
   EXPECT_EQ(u"16502111111", controller_->GetPhoneNumber());
 
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc
index 77e009b..75decfb 100644
--- a/chrome/browser/extensions/api/automation/automation_apitest.cc
+++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -141,7 +141,10 @@
   ASSERT_EQ(1, browser()->tab_strip_model()->count());
   content::WebContents* const web_contents =
       browser()->tab_strip_model()->GetWebContentsAt(0);
-  ASSERT_EQ(ui::AXMode(), web_contents->GetAccessibilityMode());
+  auto accessibility_mode = web_contents->GetAccessibilityMode();
+  // Strip off kNativeAPIs, which may be set in some situations.
+  accessibility_mode.set_mode(ui::AXMode::kNativeAPIs, false);
+  ASSERT_EQ(ui::AXMode(), accessibility_mode);
 
   // Enable automation.
   base::FilePath extension_path =
@@ -153,7 +156,10 @@
   // Now the AXMode should include kLabelImages.
   ui::AXMode expected_mode = ui::kAXModeWebContentsOnly;
   expected_mode.set_mode(ui::AXMode::kLabelImages, true);
-  EXPECT_EQ(expected_mode, web_contents->GetAccessibilityMode());
+  accessibility_mode = web_contents->GetAccessibilityMode();
+  // Strip off kNativeAPIs, which may be set in some situations.
+  accessibility_mode.set_mode(ui::AXMode::kNativeAPIs, false);
+  EXPECT_EQ(expected_mode, accessibility_mode);
 }
 
 // Flaky on Mac: crbug.com/1248445
diff --git a/chrome/browser/resources/chromeos/smb_shares/BUILD.gn b/chrome/browser/resources/chromeos/smb_shares/BUILD.gn
index 43f6926..c465d5f 100644
--- a/chrome/browser/resources/chromeos/smb_shares/BUILD.gn
+++ b/chrome/browser/resources/chromeos/smb_shares/BUILD.gn
@@ -16,7 +16,6 @@
 js_library("smb_share_dialog") {
   deps = [
     "//ash/webui/common/resources:i18n_behavior",
-    "//ash/webui/common/resources:load_time_data.m",
     "//ash/webui/common/resources/smb_shares:add_smb_share_dialog",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
   ]
diff --git a/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.html b/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.html
index 25868717..9bad206 100644
--- a/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.html
+++ b/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.html
@@ -26,10 +26,14 @@
   :host-context([theme='refresh23']) cr-input {
     --cr-form-field-label-color: var(--cros-sys-on_surface);
     --cr-input-background-color: var(--cros-sys-input_field_on_base);
+    --cr-input-border-radius: 8px;
     --cr-input-color: var(--cros-sys-on_surface);
     --cr-input-error-color: var(--cros-sys-error);
     --cr-input-error-display: none;
     --cr-input-focus-color: var(--cros-sys-primary);
+    --cr-input-min-height: 36px;
+    --cr-input-padding-end: 16px;
+    --cr-input-padding-start: 16px;
     --cr-input-placeholder-color: var(--cros-sys-secondary);
     margin-bottom: var(--cr-form-field-bottom-spacing);
   }
@@ -136,6 +140,7 @@
     --cr-dialog-title-slot-padding-start: 32px;
     --cr-dialog-title-slot-padding-top: 32px;
     --cr-primary-text-color: var(--cros-sys-on_surface);
+    font-weight: 500;
   }
 
   [slot='body'] #password {
diff --git a/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.js b/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.js
index e17bdb1..e2bd23f5 100644
--- a/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.js
+++ b/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.js
@@ -46,6 +46,11 @@
   /** @override */
   created() {
     this.browserProxy_ = SmbBrowserProxyImpl.getInstance();
+
+    const jellyEnabled = loadTimeData.getBoolean('isJellyEnabled');
+    const theme = jellyEnabled ? 'refresh23' : 'legacy';
+    document.documentElement.setAttribute('theme', theme);
+    startColorChangeUpdater();
   },
 
   /** @override */
@@ -74,10 +79,3 @@
     chrome.send('dialogClose');
   },
 });
-
-window.addEventListener('load', () => {
-  const jellyEnabled = loadTimeData.getBoolean('isJelly');
-  const theme = jellyEnabled ? 'refresh23' : 'legacy';
-  document.documentElement.setAttribute('theme', theme);
-  startColorChangeUpdater();
-});
diff --git a/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.html b/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.html
index b24f7cd..92b28f9b 100644
--- a/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.html
+++ b/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.html
@@ -1,3 +1,7 @@
+<!-- The common style definitions should go to <add-smb-share-dialog>
+  component for consistency, because that component is used in both Files app
+  and OS settings page. Only Files app specific styles should be added here.
+-->
 <style>
   add-smb-share-dialog::part(dialog) {
     border-radius: 0;
@@ -5,30 +9,18 @@
     width: 100%;
   }
 
-  :host-context([theme='legacy']) add-smb-share-dialog::part(dialog) {
-    background-color: var(--cros-bg-color-elevation-3);
-  }
-
-  :host-context([theme='refresh23']) add-smb-share-dialog::part(dialog) {
-    background-color: var(--cros-sys-dialog_container);
-  }
-
   :host-context([theme='legacy']) add-smb-share-dialog::part(title) {
-    --cr-primary-text-color: var(--cros-text-color-primary);
     padding-top: 4px;
   }
 
-  :host-context([theme='refresh23']) add-smb-share-dialog::part(title) {
-    --cr-dialog-title-slot-padding-bottom: 0;
-    --cr-dialog-title-slot-padding-end: 32px;
-    --cr-dialog-title-slot-padding-start: 32px;
-    --cr-dialog-title-slot-padding-top: 32px;
-    --cr-primary-text-color: var(--cros-sys-on_surface);
+  /* SMB dialog inside Files app is rendered inside a native dialog with fixed
+    height, so we need to hard-code the body height. */
+  :host-context([theme='legacy']) add-smb-share-dialog::part(body) {
+    height: 390px;
   }
 
   :host-context([theme='refresh23']) add-smb-share-dialog::part(body) {
-    --cr-dialog-body-padding-horizontal: 32px;
-    --cr-form-field-bottom-spacing: 8px;
+    height: 425px;
   }
 </style>
 
diff --git a/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.js b/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.js
index 59cf2d1..c9736525 100644
--- a/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.js
+++ b/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.js
@@ -5,7 +5,6 @@
 import 'chrome://resources/ash/common/smb_shares/add_smb_share_dialog.js';
 import './strings.m.js';
 
-import {loadTimeData} from '//resources/ash/common/load_time_data.m.js';
 import {I18nBehavior} from 'chrome://resources/ash/common/i18n_behavior.js';
 import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js';
 import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
@@ -23,15 +22,13 @@
 
   behaviors: [I18nBehavior],
 
+  /** @override */
+  created() {
+    startColorChangeUpdater();
+  },
+
   /** @private */
   onDialogClose_() {
     chrome.send('dialogClose');
   },
 });
-
-window.addEventListener('load', () => {
-  const jellyEnabled = loadTimeData.getBoolean('isJelly');
-  const theme = jellyEnabled ? 'refresh23' : 'legacy';
-  document.documentElement.setAttribute('theme', theme);
-  startColorChangeUpdater();
-});
diff --git a/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_browser_proxy.ts b/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_browser_proxy.ts
index 66a422e3..0464bad 100644
--- a/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_browser_proxy.ts
+++ b/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_browser_proxy.ts
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PageCallbackRouter, PageHandlerFactory, PageHandlerRemote, Status} from '../mojom-webui/google_drive_handler.mojom-webui.js';
+import {PageCallbackRouter, PageHandlerFactory, PageHandlerRemote, PageRemote, Status} from '../mojom-webui/google_drive_handler.mojom-webui.js';
 import {Stage} from '../mojom-webui/pin_manager_types.mojom-webui.js';
 
 // Communicates with the GoogleDrivePageHandler in the browser process.
@@ -35,6 +35,7 @@
   GoogleDriveBrowserProxy,
   PageHandlerRemote as GoogleDrivePageHandlerRemote,
   PageCallbackRouter as GoogleDrivePageCallbackRouter,
+  PageRemote as GoogleDrivePageRemote,
   Stage,
   Status,
 };
diff --git a/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_subpage.html b/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_subpage.html
index 06708b4..02dab96d 100644
--- a/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_subpage.html
+++ b/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_subpage.html
@@ -34,7 +34,7 @@
       id="driveBulkPinning"
       pref="{{prefs.drivefs.bulk_pinning_enabled}}"
       label="$i18n{googleDriveOfflineTitle}"
-      sub-label="$i18n{googleDriveOfflineSubtitle}">
+      sub-label="[[getBulkPinningSubLabel_(bulkPinningStatus_)]]">
   </settings-toggle-button>
 
   <div class="settings-box two-line">
@@ -51,4 +51,4 @@
   </div>
 
   <div class="hr"></div>
-</template>
\ No newline at end of file
+</template>
diff --git a/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_subpage.ts b/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_subpage.ts
index e9f81b1..491ea39 100644
--- a/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_subpage.ts
+++ b/chrome/browser/resources/settings/chromeos/os_files_page/google_drive_subpage.ts
@@ -20,7 +20,7 @@
 import {RouteObserverMixin} from '../route_observer_mixin.js';
 import {Route} from '../router.js';
 
-import {GoogleDriveBrowserProxy, Status} from './google_drive_browser_proxy.js';
+import {GoogleDriveBrowserProxy, Stage, Status} from './google_drive_browser_proxy.js';
 import {getTemplate} from './google_drive_subpage.html.js';
 
 const SettingsGoogleDriveSubpageElementBase =
@@ -95,7 +95,7 @@
    * Keeps track of the latest response about bulk pinning from the page
    * handler.
    */
-  private bulkPinningStatus_?: Status;
+  private bulkPinningStatus_: Status|null = null;
 
   /**
    * If the underlying service is unavailable, this will get set to true.
@@ -139,7 +139,6 @@
     this.callbackRouter.onProgress.addListener(this.onProgress_.bind(this));
   }
 
-
   /**
    * Invoked when the underlying service is not longer available.
    */
@@ -208,6 +207,24 @@
 
     this.setPrefValue(GOOGLE_DRIVE_DISABLED_PREF, true);
   }
+
+  /**
+   * Returns the sublabel for the bulk pinning preference toggle. If the
+   * required / free space has been calculated, includes the values in the
+   * sublabel.
+   */
+  private getBulkPinningSubLabel_(): string {
+    if (!this.bulkPinningStatus_ ||
+        this.bulkPinningStatus_?.stage !== Stage.kSuccess ||
+        this.bulkPinningServiceUnavailable_) {
+      return this.i18n('googleDriveOfflineSubtitle');
+    }
+
+    const {requiredSpace, remainingSpace} = this.bulkPinningStatus_;
+    return this.i18n('googleDriveOfflineSubtitle') + ' ' +
+        this.i18n(
+            'googleDriveOfflineSpaceSubtitle', requiredSpace!, remainingSpace!);
+  }
 }
 
 declare global {
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.ts b/chrome/browser/resources/settings/chromeos/os_settings.ts
index 5992db5..db5d94e 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings.ts
+++ b/chrome/browser/resources/settings/chromeos/os_settings.ts
@@ -172,7 +172,7 @@
 export {setAppNotificationProviderForTesting} from './os_apps_page/app_notifications_page/mojo_interface_provider.js';
 export {OsBluetoothDevicesSubpageBrowserProxy, OsBluetoothDevicesSubpageBrowserProxyImpl} from './os_bluetooth_page/os_bluetooth_devices_subpage_browser_proxy.js';
 export {FastPairSavedDevice, FastPairSavedDevicesOptInStatus} from './os_bluetooth_page/settings_fast_pair_constants.js';
-export {GoogleDriveBrowserProxy, GoogleDrivePageCallbackRouter, GoogleDrivePageHandlerRemote} from './os_files_page/google_drive_browser_proxy.js';
+export {GoogleDriveBrowserProxy, GoogleDrivePageCallbackRouter, GoogleDrivePageHandlerRemote, GoogleDrivePageRemote, Stage} from './os_files_page/google_drive_browser_proxy.js';
 export {SettingsGoogleDriveSubpageElement} from './os_files_page/google_drive_subpage.js';
 export {osPageVisibility} from './os_page_visibility.js';
 export {MetricsConsentBrowserProxy, MetricsConsentBrowserProxyImpl, MetricsConsentState} from './os_privacy_page/metrics_consent_browser_proxy.js';
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_vi.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_vi.xtb
index c8639ac..44aa8b9 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_vi.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_vi.xtb
@@ -5,15 +5,15 @@
 <translation id="1580351948163139119">Mật khẩu cho <ph name="USERNAME" />.</translation>
 <translation id="1717486229951421299">Danh sách thông tin đăng nhập mà bạn có thể chạm để điền đã được mở ở nửa dưới của màn hình.</translation>
 <translation id="2359808026110333948">Tiếp tục</translation>
-<translation id="2364266287022099258">Sử dụng mã xác thực đã lưu?</translation>
+<translation id="2364266287022099258">Sử dụng khoá đăng nhập đã lưu?</translation>
 <translation id="3399357656427473483">Danh sách các thông tin đăng nhập mà bạn có thể chạm để điền.</translation>
 <translation id="3653689374478248324">Bạn sẽ đăng nhập vào <ph name="SITE_NAME" /></translation>
 <translation id="3950820424414687140">Đăng nhập</translation>
-<translation id="4598345735110653698">Quản lý mã xác thực</translation>
+<translation id="4598345735110653698">Quản lý khoá đăng nhập</translation>
 <translation id="4907224763885298217">Sử dụng phương thức khoá màn hình</translation>
-<translation id="5012523644916800014">Quản lý mật khẩu và mã xác thực</translation>
+<translation id="5012523644916800014">Quản lý mật khẩu và khoá đăng nhập</translation>
 <translation id="5441504010984421144">Danh sách các thông tin xác thực mà bạn có thể chạm để điền đã được mở ở toàn độ cao.</translation>
-<translation id="5591247451101092906">Sử dụng mật khẩu hoặc mã xác thực đã lưu?</translation>
+<translation id="5591247451101092906">Sử dụng mật khẩu hoặc khoá đăng nhập đã lưu?</translation>
 <translation id="5624120631404540903">Quản lý mật khẩu</translation>
 <translation id="7736236483645733578">Mã xác thực cho <ph name="USERNAME" />, dùng phương thức khoá màn hình.</translation>
 <translation id="8891372124884726271">Danh sách thông tin xác thực đã đóng.</translation>
diff --git a/chrome/browser/ui/android/autofill/save_update_address_profile_prompt_view_android.cc b/chrome/browser/ui/android/autofill/save_update_address_profile_prompt_view_android.cc
index 860d370..60fdaf8 100644
--- a/chrome/browser/ui/android/autofill/save_update_address_profile_prompt_view_android.cc
+++ b/chrome/browser/ui/android/autofill/save_update_address_profile_prompt_view_android.cc
@@ -120,8 +120,8 @@
         base::android::ConvertUTF16ToJavaString(env, controller->GetEmail());
     ScopedJavaLocalRef<jstring> phone = base::android::ConvertUTF16ToJavaString(
         env, controller->GetPhoneNumber());
-    Java_SaveUpdateAddressProfilePrompt_setSaveDetails(env, java_object_,
-                                                       address, email, phone);
+    Java_SaveUpdateAddressProfilePrompt_setSaveOrMigrateDetails(
+        env, java_object_, address, email, phone);
   }
 }
 
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
index a14ccc3d..71c7ff3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -850,6 +850,7 @@
 <translation id="5626134646977739690">Name:</translation>
 <translation id="5628604359369369630">Unread – available offline</translation>
 <translation id="5639724618331995626">Allow all sites</translation>
+<translation id="5641456720590409793"><ph name="BEGIN_LINK1" />Search history<ph name="END_LINK1" /> and <ph name="BEGIN_LINK2" />other forms of activity<ph name="END_LINK2" /> may be saved in your Google Account</translation>
 <translation id="5648166631817621825">Last 7 days</translation>
 <translation id="5655963694829536461">Search your downloads</translation>
 <translation id="5659593005791499971">Email</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
index b611f5ea..5a49b79 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -938,7 +938,7 @@
 <translation id="6140912465461743537">Өлкө/Дубан</translation>
 <translation id="6148266338772765473">Шилтемени чыгарып салуу</translation>
 <translation id="6150320133806434356">Кыстарма сакталды</translation>
-<translation id="6154478581116148741">Жөндөөлөргө өтүп, экрандын кулпусун коюңуз да, ушул түзмөктөгү сырсөздөрүңүздү экспорттоңуз</translation>
+<translation id="6154478581116148741">Параметрлерге өтүп, экрандын кулпусун коюңуз да, ушул түзмөктөгү сырсөздөрүңүздү экспорттоңуз</translation>
 <translation id="6159729262978459665">Шайкештирилген бардык түзмөктөрүңүздөгү таржымал тазаланат.</translation>
 <translation id="6162892189396105610">Chrome сизди баш багат деп болжолдогон барактарды алдын ала жүктөйт.</translation>
 <translation id="6186394685773237175">Билинип калган сырсөздөр аныкталган жок</translation>
@@ -1296,7 +1296,7 @@
 <translation id="7947953824732555851">Кабыл алуу жана кирүү</translation>
 <translation id="7957413488482743710">Шылуундуктан коргоого жардам берүү үчүн виртуалдык карта чыныгы картаңыздын маалыматын жашырат. <ph name="BEGIN_LINK1" />Виртуалдык карталар жөнүндө кеңири маалымат алыңыз<ph name="END_LINK1" /></translation>
 <translation id="7961015016161918242">Эч качан</translation>
-<translation id="7961926449547174351">Сактагычты колдонуу мүмкүнчүлүгүн өчүрүп койдуңуз. Жөндөөлөргө өтүп, аны иштетиңиз.</translation>
+<translation id="7961926449547174351">Сактагычты колдонуу мүмкүнчүлүгүн өчүрүп койдуңуз. Параметрлерге өтүп, аны иштетиңиз.</translation>
 <translation id="7963646190083259054">Жөнөтүүчү:</translation>
 <translation id="7965838025086216108">Cакталган сырсөздөрдү каалаган түзмөктө колдоно аласыз. Алар <ph name="ACCOUNT" /> аккаунту үчүн Сырсөздөрдү башкаргычка сакталат.</translation>
 <translation id="7968014550143838305">Окуу тизмесине кошулду</translation>
diff --git a/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc b/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc
index dfbd4709..dae7048 100644
--- a/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc
+++ b/chrome/browser/ui/autofill/autofill_popup_controller_impl.cc
@@ -26,6 +26,7 @@
 #include "components/autofill/core/browser/ui/popup_item_ids.h"
 #include "components/autofill/core/browser/ui/suggestion.h"
 #include "components/autofill/core/common/autofill_features.h"
+#include "components/feature_engagement/public/feature_constants.h"
 #include "components/feature_engagement/public/tracker.h"
 #include "components/password_manager/content/browser/content_password_manager_driver.h"
 #include "components/strings/grit/components_strings.h"
@@ -323,6 +324,15 @@
         ->NotifyEvent("autofill_virtual_card_suggestion_accepted");
   }
 
+  if (web_contents_ &&
+      suggestion.feature_for_iph ==
+          feature_engagement::
+              kIPHAutofillExternalAccountProfileSuggestionFeature.name) {
+    feature_engagement::TrackerFactory::GetForBrowserContext(
+        web_contents_->GetBrowserContext())
+        ->NotifyEvent("autofill_external_account_profile_suggestion_accepted");
+  }
+
   absl::optional<std::u16string> announcement =
       suggestion.acceptance_a11y_announcement;
   if (announcement) {
diff --git a/chrome/browser/ui/browser_element_identifiers.cc b/chrome/browser/ui/browser_element_identifiers.cc
index 4b5fd1d5..9b338be 100644
--- a/chrome/browser/ui/browser_element_identifiers.cc
+++ b/chrome/browser/ui/browser_element_identifiers.cc
@@ -12,6 +12,7 @@
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kAppMenuButtonElementId);
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kAppUninstallDialogOkButtonId);
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kAutofillCreditCardSuggestionEntryElementId);
+DEFINE_ELEMENT_IDENTIFIER_VALUE(kAutofillSuggestionElementId);
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kAvatarButtonElementId);
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kBatterySaverButtonElementId);
 DEFINE_ELEMENT_IDENTIFIER_VALUE(kBackButtonElementId);
diff --git a/chrome/browser/ui/browser_element_identifiers.h b/chrome/browser/ui/browser_element_identifiers.h
index 3501b7f..e4ae600c 100644
--- a/chrome/browser/ui/browser_element_identifiers.h
+++ b/chrome/browser/ui/browser_element_identifiers.h
@@ -21,6 +21,7 @@
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kAppMenuButtonElementId);
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kAppUninstallDialogOkButtonId);
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kAutofillCreditCardSuggestionEntryElementId);
+DECLARE_ELEMENT_IDENTIFIER_VALUE(kAutofillSuggestionElementId);
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kAvatarButtonElementId);
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kBatterySaverButtonElementId);
 DECLARE_ELEMENT_IDENTIFIER_VALUE(kBackButtonElementId);
diff --git a/chrome/browser/ui/views/autofill/popup/popup_view_views.cc b/chrome/browser/ui/views/autofill/popup/popup_view_views.cc
index 5059fd18..38097888 100644
--- a/chrome/browser/ui/views/autofill/popup/popup_view_views.cc
+++ b/chrome/browser/ui/views/autofill/popup/popup_view_views.cc
@@ -365,6 +365,17 @@
       browser->window()->MaybeShowFeaturePromo(
           feature_engagement::kIPHAutofillVirtualCardSuggestionFeature);
     }
+
+    if (controller_->GetSuggestionAt(row).feature_for_iph ==
+        feature_engagement::kIPHAutofillExternalAccountProfileSuggestionFeature
+            .name) {
+      GetPopupRowViewAt(row).SetProperty(views::kElementIdentifierKey,
+                                         kAutofillSuggestionElementId);
+
+      browser->window()->MaybeShowFeaturePromo(
+          feature_engagement::
+              kIPHAutofillExternalAccountProfileSuggestionFeature);
+    }
   }
 }
 
diff --git a/chrome/browser/ui/views/borealis/borealis_installer_disallowed_dialog.cc b/chrome/browser/ui/views/borealis/borealis_installer_disallowed_dialog.cc
index 224a040..21c6717 100644
--- a/chrome/browser/ui/views/borealis/borealis_installer_disallowed_dialog.cc
+++ b/chrome/browser/ui/views/borealis/borealis_installer_disallowed_dialog.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ui/views/borealis/borealis_installer_disallowed_dialog.h"
 #include <memory>
 
+#include "ash/public/cpp/new_window_delegate.h"
 #include "ash/public/cpp/shelf_types.h"
 #include "ash/public/cpp/window_properties.h"
 #include "chrome/browser/ash/borealis/borealis_features.h"
@@ -12,11 +13,13 @@
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/chrome_typography.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/strings/grit/components_strings.h"
 #include "ui/aura/window.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/ui_base_types.h"
 #include "ui/strings/grit/ui_strings.h"
 #include "ui/views/controls/label.h"
+#include "ui/views/controls/link.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/layout/layout_provider.h"
 #include "ui/views/style/typography.h"
@@ -32,32 +35,47 @@
 // Views uses tricks like this to ensure singleton-ness of dialogs.
 static Widget* g_instance_ = nullptr;
 
-static std::u16string GetMessageForStatus(AllowStatus status) {
+static std::pair<std::u16string, absl::optional<GURL>> GetMessageForStatus(
+    AllowStatus status) {
+  // TODO(b/256699588): Replace the below direct URLs with p-links.
   switch (status) {
     case AllowStatus::kAllowed:
       DCHECK(false);
       // Unreachable in practice. Show "failed" message just in case.
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_FAILED);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_FAILED),
+              absl::nullopt};
     case AllowStatus::kFeatureDisabled:
     case AllowStatus::kUnsupportedModel:
     case AllowStatus::kHardwareChecksFailed:
     case AllowStatus::kIncorrectToken:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_DISABLED);
+      // TODO(b/256699588): Replace this with an actual help-center link when
+      // one is created.
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_DISABLED),
+              GURL("https://www.chromium.org/chromium-os/steam-on-chromeos/"
+                   "#supported-devices")};
     case AllowStatus::kFailedToDetermine:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_FAILED);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_FAILED),
+              absl::nullopt};
     case AllowStatus::kBlockedOnIrregularProfile:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_IRREGULAR);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_IRREGULAR),
+              absl::nullopt};
     case AllowStatus::kBlockedOnNonPrimaryProfile:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_PRIMARY);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_PRIMARY),
+              absl::nullopt};
     case AllowStatus::kBlockedOnChildAccount:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_CHILD);
+      // TODO(b/256699588): Add a help-center link for child-accounts.
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_CHILD),
+              absl::nullopt};
     case AllowStatus::kVmPolicyBlocked:
     case AllowStatus::kUserPrefBlocked:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_ADMIN);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_ADMIN),
+              absl::nullopt};
     case AllowStatus::kBlockedOnStable:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_CHANNEL);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_CHANNEL),
+              GURL("https://support.google.com/chromebook/answer/1086915")};
     case AllowStatus::kBlockedByFlag:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_FLAG);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_DISALLOWED_FLAG),
+              absl::nullopt};
   }
 }
 
@@ -100,11 +118,27 @@
     title_label->SetMultiLine(true);
     view->AddChildView(title_label);
 
-    views::Label* message_label = new views::Label(GetMessageForStatus(status));
+    std::pair<std::u16string, absl::optional<GURL>> message_link =
+        GetMessageForStatus(status);
+    views::Label* message_label = new views::Label(message_link.first);
     message_label->SetMultiLine(true);
     message_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
     view->AddChildView(message_label);
 
+    if (message_link.second.has_value()) {
+      views::Link* learn_more_link =
+          new views::Link(l10n_util::GetStringUTF16(IDS_LEARN_MORE));
+      learn_more_link->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+      learn_more_link->SetCallback(base::BindRepeating(
+          [](GURL url) {
+            ash::NewWindowDelegate::GetPrimary()->OpenUrl(
+                url, ash::NewWindowDelegate::OpenUrlFrom::kUserInteraction,
+                ash::NewWindowDelegate::Disposition::kNewForegroundTab);
+          },
+          message_link.second.value()));
+      view->AddChildView(learn_more_link);
+    }
+
     SetContentsView(std::move(view));
   }
 };
diff --git a/chrome/browser/ui/views/borealis/borealis_installer_error_dialog.cc b/chrome/browser/ui/views/borealis/borealis_installer_error_dialog.cc
index 3e069b5..ebe7606a 100644
--- a/chrome/browser/ui/views/borealis/borealis_installer_error_dialog.cc
+++ b/chrome/browser/ui/views/borealis/borealis_installer_error_dialog.cc
@@ -6,6 +6,7 @@
 #include <memory>
 #include <string>
 
+#include "ash/public/cpp/new_window_delegate.h"
 #include "ash/public/cpp/shelf_types.h"
 #include "ash/public/cpp/window_properties.h"
 #include "base/memory/weak_ptr.h"
@@ -16,6 +17,7 @@
 #include "chrome/browser/ui/views/chrome_typography.h"
 #include "chrome/grit/chrome_unscaled_resources.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/strings/grit/components_strings.h"
 #include "ui/aura/window.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -23,6 +25,7 @@
 #include "ui/strings/grit/ui_strings.h"
 #include "ui/views/controls/image_view.h"
 #include "ui/views/controls/label.h"
+#include "ui/views/controls/link.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/layout/layout_provider.h"
 #include "ui/views/style/typography.h"
@@ -57,31 +60,43 @@
   }
 }
 
-std::u16string GetErrorMessage(InstallResult result) {
+std::pair<std::u16string, absl::optional<GURL>> GetErrorMessageAndHelpLink(
+    InstallResult result) {
+  // TODO(b/256699588): Replace the below direct URLs with p-links.
   switch (result) {
     case InstallResult::kBorealisNotAllowed:
     case InstallResult::kDlcUnsupportedError:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_DISALLOWED);
+      return {
+          l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_DISALLOWED),
+          absl::nullopt};
     case InstallResult::kBorealisInstallInProgress:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_PROGRESS);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_PROGRESS),
+              absl::nullopt};
     case InstallResult::kDlcInternalError:
     case InstallResult::kDlcNeedUpdateError:
-      return l10n_util::GetStringUTF16(
-          IDS_BOREALIS_INSTALLER_ERROR_DLC_INTERNAL);
+      return {
+          l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_DLC_INTERNAL),
+          GURL("https://support.google.com/chromebook/answer/177889")};
     case InstallResult::kDlcBusyError:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_DLC_BUSY);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_DLC_BUSY),
+              absl::nullopt};
     case InstallResult::kDlcNeedRebootError:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_REBOOT);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_REBOOT),
+              absl::nullopt};
     case InstallResult::kDlcNeedSpaceError:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_SPACE);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_SPACE),
+              GURL("https://support.google.com/chromebook/answer/1061547")};
     case InstallResult::kDlcUnknownError:
-      return l10n_util::GetStringUTF16(
-          IDS_BOREALIS_INSTALLER_ERROR_DLC_UNKNOWN);
+      return {
+          l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_DLC_UNKNOWN),
+          absl::nullopt};
     case InstallResult::kOffline:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_OFFLINE);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_OFFLINE),
+              GURL("https://support.google.com/chromebook/answer/6318213")};
     case InstallResult::kStartupFailed:
     case InstallResult::kMainAppNotPresent:
-      return l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_STARTUP);
+      return {l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_STARTUP),
+              absl::nullopt};
     case InstallResult::kSuccess:
     case InstallResult::kCancelled:
       NOTREACHED_NORETURN();
@@ -148,11 +163,27 @@
     title_label->SetMultiLine(true);
     view->AddChildView(title_label);
 
-    views::Label* message_label = new views::Label(GetErrorMessage(result_));
+    std::pair<std::u16string, absl::optional<GURL>> message_link =
+        GetErrorMessageAndHelpLink(result_);
+    views::Label* message_label = new views::Label(message_link.first);
     message_label->SetMultiLine(true);
     message_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
     view->AddChildView(message_label);
 
+    if (message_link.second.has_value()) {
+      views::Link* learn_more_link =
+          new views::Link(l10n_util::GetStringUTF16(IDS_LEARN_MORE));
+      learn_more_link->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+      learn_more_link->SetCallback(base::BindRepeating(
+          [](GURL url) {
+            ash::NewWindowDelegate::GetPrimary()->OpenUrl(
+                url, ash::NewWindowDelegate::OpenUrlFrom::kUserInteraction,
+                ash::NewWindowDelegate::Disposition::kNewForegroundTab);
+          },
+          message_link.second.value()));
+      view->AddChildView(learn_more_link);
+    }
+
     SetContentsView(std::move(view));
   }
 
diff --git a/chrome/browser/ui/views/location_bar/intent_chip_button.cc b/chrome/browser/ui/views/location_bar/intent_chip_button.cc
index e616c2a..5529c6e 100644
--- a/chrome/browser/ui/views/location_bar/intent_chip_button.cc
+++ b/chrome/browser/ui/views/location_bar/intent_chip_button.cc
@@ -10,7 +10,6 @@
 #include "build/build_config.h"
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/apps/intent_helper/intent_picker_helpers.h"
-#include "chrome/browser/feature_engagement/tracker_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_element_identifiers.h"
@@ -19,17 +18,11 @@
 #include "chrome/browser/ui/views/intent_picker_bubble_view.h"
 #include "chrome/browser/ui/views/location_bar/omnibox_chip_button.h"
 #include "chrome/grit/generated_resources.h"
-#include "components/feature_engagement/public/feature_constants.h"
-#include "components/user_education/common/feature_promo_specification.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/views/style/platform_style.h"
 #include "ui/views/view_class_properties.h"
 
-#if BUILDFLAG(IS_CHROMEOS)
-#include "ui/chromeos/devicetype_utils.h"
-#endif
-
 IntentChipButton::IntentChipButton(Browser* browser,
                                    PageActionIconView::Delegate* delegate)
     : OmniboxChipButton(base::BindRepeating(&IntentChipButton::HandlePressed,
@@ -57,17 +50,8 @@
                       : OmniboxChipTheme::kIconStyle);
     UpdateIconAndColors();
   }
-  if (browser_->window()) {
-    if (is_visible && !was_visible) {
-      // Might want to show the intent chip promo, but can't until the view is
-      // properly laid out.
-      pending_promo_ = true;
-    } else if (was_visible && !is_visible) {
-      pending_promo_ = false;
-      IntentPickerBubbleView::CloseCurrentBubble();
-      browser_->window()->CloseFeaturePromo(
-          feature_engagement::kIPHIntentChipFeature);
-    }
+  if (browser_->window() && was_visible && !is_visible) {
+    IntentPickerBubbleView::CloseCurrentBubble();
   }
 }
 
@@ -102,8 +86,6 @@
 }
 
 void IntentChipButton::HandlePressed() {
-  browser_->window()->CloseFeaturePromo(
-      feature_engagement::kIPHIntentChipFeature);
   content::WebContents* web_contents =
       delegate_->GetWebContentsForPageActionIconView();
   const GURL& url = web_contents->GetURL();
@@ -122,29 +104,5 @@
   return IntentPickerTabHelper::FromWebContents(web_contents);
 }
 
-void IntentChipButton::OnBoundsChanged(const gfx::Rect& previous_bounds) {
-  OmniboxChipButton::OnBoundsChanged(previous_bounds);
-
-  if (!GetVisible() || size().IsEmpty())
-    return;
-
-  if (pending_promo_) {
-    user_education::FeaturePromoSpecification::StringReplacements replacements;
-#if BUILDFLAG(IS_CHROMEOS)
-    replacements.push_back(ui::GetChromeOSDeviceName());
-#endif
-    browser_->window()->MaybeShowFeaturePromo(
-        feature_engagement::kIPHIntentChipFeature, replacements);
-    // If the FE backend chooses not to show the promo, waiting until the next
-    // resize won't change anything.
-    pending_promo_ = false;
-  }
-
-  // TODO(dfried): If the help bubble has trouble tracking the chip as it
-  // animates, a call to HelpBubbleFactoryRegistry::NotifyAnchorBoundsChanged()
-  // here while the promo is active should fix the problem, but I'm not going to
-  // put that code in unless we determine there's a problem.
-}
-
 BEGIN_METADATA(IntentChipButton, OmniboxChipButton)
 END_METADATA
diff --git a/chrome/browser/ui/views/location_bar/intent_chip_button.h b/chrome/browser/ui/views/location_bar/intent_chip_button.h
index b7cc34a..ddf7f36 100644
--- a/chrome/browser/ui/views/location_bar/intent_chip_button.h
+++ b/chrome/browser/ui/views/location_bar/intent_chip_button.h
@@ -39,9 +39,7 @@
   // OmniboxChipButton:
   ui::ImageModel GetIconImageModel() const override;
   const gfx::VectorIcon& GetIcon() const override;
-  void OnBoundsChanged(const gfx::Rect& previous_bounds) override;
 
-  bool pending_promo_ = false;
   const raw_ptr<Browser> browser_;
   const raw_ptr<PageActionIconView::Delegate> delegate_;
 };
diff --git a/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc b/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc
index c40c60a..00e2d0f9 100644
--- a/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc
+++ b/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc
@@ -13,7 +13,6 @@
 #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/intent_helper/intent_picker_features.h"
-#include "chrome/browser/feature_engagement/tracker_factory.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/intent_picker_tab_helper.h"
@@ -28,9 +27,6 @@
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "components/feature_engagement/public/feature_constants.h"
-#include "components/feature_engagement/test/test_tracker.h"
-#include "components/user_education/test/feature_promo_test_util.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -385,70 +381,6 @@
   EXPECT_FALSE(GetIntentChip()->is_fully_collapsed());
 }
 
-class IntentChipButtonIPHBubbleBrowserTest
-    : public IntentChipButtonBrowserTest {
- public:
-  IntentChipButtonIPHBubbleBrowserTest() {
-    feature_list_.InitAndEnableFeature(
-        feature_engagement::kIPHIntentChipFeature);
-    subscription_ =
-        BrowserContextDependencyManager::GetInstance()
-            ->RegisterCreateServicesCallbackForTesting(base::BindRepeating(
-                &IntentChipButtonIPHBubbleBrowserTest::RegisterTestTracker));
-  }
-
- private:
-  static void RegisterTestTracker(content::BrowserContext* context) {
-    feature_engagement::TrackerFactory::GetInstance()->SetTestingFactory(
-        context, base::BindRepeating(&CreateTestTracker));
-  }
-  static std::unique_ptr<KeyedService> CreateTestTracker(
-      content::BrowserContext*) {
-    return feature_engagement::CreateTestTracker();
-  }
-
-  base::test::ScopedFeatureList feature_list_;
-  base::CallbackListSubscription subscription_;
-};
-
-// TODO(crbug.com/1393003): This test is flaky on all platforms.
-IN_PROC_BROWSER_TEST_F(IntentChipButtonIPHBubbleBrowserTest,
-                       DISABLED_ShowAndCloseIPH) {
-  const GURL in_scope_url =
-      https_server().GetURL(GetAppUrlHost(), GetInScopeUrlPath());
-
-  auto lock = BrowserFeaturePromoController::BlockActiveWindowCheckForTesting();
-  BrowserView* const browser_view =
-      BrowserView::GetBrowserViewForBrowser(browser());
-  ASSERT_TRUE(user_education::test::WaitForFeatureEngagementReady(
-      browser_view->GetFeaturePromoController()));
-
-  NavigateToLaunchingPage(browser());
-  content::WebContents* web_contents =
-      browser()->tab_strip_model()->GetActiveWebContents();
-
-  // Navigate to an in-scope page to see the intent chip and the IPH.
-  ClickLinkAndWaitForIconUpdate(web_contents, in_scope_url);
-  EXPECT_TRUE(GetIntentChip()->GetVisible());
-
-  // Wait for the chip to actually be laid out. This will result in the IPH
-  // showing.
-  base::RunLoop chip_loop;
-  NonzeroSizeObserver observer(GetIntentChip(), chip_loop.QuitClosure());
-  chip_loop.Run();
-
-  // Check if the IPH bubble is showing.
-  EXPECT_TRUE(browser_view->IsFeaturePromoActive(
-      feature_engagement::kIPHIntentChipFeature));
-
-  // When we click on the intent chip, the IPH should disappear.
-  ClickIntentChip(/*wait_for_browser=*/false);
-
-  // Check the IPH is no longer showing.
-  EXPECT_FALSE(browser_view->IsFeaturePromoActive(
-      feature_engagement::kIPHIntentChipFeature));
-}
-
 class IntentChipButtonAppIconBrowserTest : public IntentChipButtonBrowserTest {
  public:
   IntentChipButtonAppIconBrowserTest() {
diff --git a/chrome/browser/ui/views/user_education/browser_user_education_service.cc b/chrome/browser/ui/views/user_education/browser_user_education_service.cc
index 42a948e..62ed3b1d 100644
--- a/chrome/browser/ui/views/user_education/browser_user_education_service.cc
+++ b/chrome/browser/ui/views/user_education/browser_user_education_service.cc
@@ -206,6 +206,16 @@
           feature_engagement::kIPHDesktopPwaInstallFeature))
     return;
 
+  // TODO(1432894): Use toast or snooze instead of legacy promo.
+  // kIPHAutofillExternalAccountProfileSuggestionFeature:
+  registry.RegisterFeature(
+      std::move(FeaturePromoSpecification::CreateForLegacyPromo(
+                    &feature_engagement::
+                        kIPHAutofillExternalAccountProfileSuggestionFeature,
+                    kAutofillSuggestionElementId,
+                    IDS_AUTOFILL_IPH_EXTERNAL_ACCOUNT_PROFILE_SUGGESTION)
+                    .SetBubbleArrow(HelpBubbleArrow::kLeftCenter)));
+
   // kIPHAutofillVirtualCardSuggestionFeature:
   registry.RegisterFeature(std::move(
       FeaturePromoSpecification::CreateForLegacyPromo(
@@ -315,16 +325,6 @@
       feature_engagement::kIPHReadingListEntryPointFeature,
       kBookmarkStarViewElementId, IDS_READING_LIST_ENTRY_POINT_PROMO));
 
-  // kIPHIntentChipFeature
-  registry.RegisterFeature(FeaturePromoSpecification::CreateForLegacyPromo(
-      &feature_engagement::kIPHIntentChipFeature, kIntentChipElementId,
-#if BUILDFLAG(IS_CHROMEOS)
-      IDS_INTENT_CHIP_IPH_CHROME_OS
-#else
-      IDS_INTENT_CHIP_IPH_GENERIC
-#endif
-      ));
-
   // kIPHReadingListInSidePanelFeature:
   registry.RegisterFeature(FeaturePromoSpecification::CreateForLegacyPromo(
       &feature_engagement::kIPHReadingListInSidePanelFeature,
diff --git a/chrome/browser/ui/views/user_education/feature_promo_dialog_interactive_uitest.cc b/chrome/browser/ui/views/user_education/feature_promo_dialog_interactive_uitest.cc
index 8d8dabf..8e3276f 100644
--- a/chrome/browser/ui/views/user_education/feature_promo_dialog_interactive_uitest.cc
+++ b/chrome/browser/ui/views/user_education/feature_promo_dialog_interactive_uitest.cc
@@ -65,10 +65,6 @@
 GetReplacementsForFeature(const base::Feature& feature) {
   if (&feature == &feature_engagement::kIPHDesktopPwaInstallFeature)
     return {u"Placeholder Text"};
-#if BUILDFLAG(IS_CHROMEOS)
-  if (&feature == &feature_engagement::kIPHIntentChipFeature)
-    return {u"Chrome device"};
-#endif
   return {};
 }
 
@@ -288,58 +284,3 @@
 }
 
 #endif  // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
-
-// Need a separate fixture to override the feature flag.
-class FeaturePromoDialogIntentChipTest : public FeaturePromoDialogTest {
- public:
-  FeaturePromoDialogIntentChipTest() {
-    feature_list_.InitAndEnableFeature(apps::features::kLinkCapturingUiUpdate);
-  }
-
-  ~FeaturePromoDialogIntentChipTest() override = default;
-
-  std::string InstallWebApp(const std::string& app_name, const GURL& url) {
-    auto web_app_info = std::make_unique<WebAppInstallInfo>();
-    web_app_info->title = base::UTF8ToUTF16(app_name);
-    web_app_info->start_url = url;
-    web_app_info->scope = url;
-    web_app_info->user_display_mode =
-        web_app::mojom::UserDisplayMode::kStandalone;
-    auto app_id = web_app::test::InstallWebApp(browser()->profile(),
-                                               std::move(web_app_info));
-    web_app::AppReadinessWaiter(browser()->profile(), app_id).Await();
-    return app_id;
-  }
-
- private:
-  base::test::ScopedFeatureList feature_list_;
-};
-
-// TODO(https://crbug.com/1412122): flaky on chromeos.
-#if BUILDFLAG(IS_CHROMEOS)
-#define MAYBE_InvokeUi_IPH_IntentChip DISABLED_InvokeUi_IPH_IntentChip
-#else
-#define MAYBE_InvokeUi_IPH_IntentChip InvokeUi_IPH_IntentChip
-#endif
-
-IN_PROC_BROWSER_TEST_F(FeaturePromoDialogIntentChipTest,
-                       MAYBE_InvokeUi_IPH_IntentChip) {
-  set_baseline("3564824");
-
-  ASSERT_TRUE(embedded_test_server()->Start());
-  std::string app_name = "test";
-  GURL test_url(
-      embedded_test_server()->GetURL("/banners/manifest_test_page.html"));
-  InstallWebApp(app_name, test_url);
-
-  IntentChipButton* intent_chip =
-      BrowserView::GetBrowserViewForBrowser(browser())
-          ->toolbar_button_provider()
-          ->GetIntentChipButton();
-
-  ASSERT_TRUE(intent_chip);
-  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), test_url));
-  ASSERT_TRUE(intent_chip->GetVisible());
-
-  ShowAndVerifyUi();
-}
diff --git a/chrome/browser/ui/webui/app_service_internals/app_service_internals_page_handler_impl.cc b/chrome/browser/ui/webui/app_service_internals/app_service_internals_page_handler_impl.cc
index 91eb0d9..8869737 100644
--- a/chrome/browser/ui/webui/app_service_internals/app_service_internals_page_handler_impl.cc
+++ b/chrome/browser/ui/webui/app_service_internals/app_service_internals_page_handler_impl.cc
@@ -14,7 +14,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/package_id.h"
-#include "chrome/browser/apps/app_service/promise_apps/promise_apps.h"
+#include "chrome/browser/apps/app_service/promise_apps/promise_app.h"
 #include "components/services/app_service/public/cpp/app_update.h"
 #include "components/services/app_service/public/cpp/intent_filter_util.h"
 #include "components/services/app_service/public/cpp/intent_util.h"
diff --git a/chrome/browser/ui/webui/ash/smb_shares/smb_credentials_dialog.cc b/chrome/browser/ui/webui/ash/smb_shares/smb_credentials_dialog.cc
index d206ad1..1d55fc0f 100644
--- a/chrome/browser/ui/webui/ash/smb_shares/smb_credentials_dialog.cc
+++ b/chrome/browser/ui/webui/ash/smb_shares/smb_credentials_dialog.cc
@@ -23,7 +23,7 @@
 namespace {
 
 constexpr int kSmbCredentialsDialogHeight = 230;
-constexpr int kSmbCredentialsDialogHeightWithJellyOn = 275;
+constexpr int kSmbCredentialsDialogHeightWithJellyOn = 295;
 
 void AddSmbCredentialsDialogStrings(content::WebUIDataSource* html_source) {
   static const struct {
@@ -39,8 +39,8 @@
   for (const auto& entry : localized_strings) {
     html_source->AddLocalizedString(entry.name, entry.id);
   }
-  bool is_jelly = chromeos::features::IsJellyEnabled();
-  html_source->AddBoolean("isJelly", is_jelly);
+  bool is_jelly_enabled = chromeos::features::IsJellyEnabled();
+  html_source->AddBoolean("isJellyEnabled", is_jelly_enabled);
 }
 
 std::string GetDialogId(const std::string& mount_id) {
diff --git a/chrome/browser/ui/webui/ash/smb_shares/smb_share_dialog.cc b/chrome/browser/ui/webui/ash/smb_shares/smb_share_dialog.cc
index a65ec71..7acc919 100644
--- a/chrome/browser/ui/webui/ash/smb_shares/smb_share_dialog.cc
+++ b/chrome/browser/ui/webui/ash/smb_shares/smb_share_dialog.cc
@@ -25,6 +25,7 @@
 namespace {
 
 constexpr int kSmbShareDialogHeight = 515;
+constexpr int kSmbShareDialogHeightWithJellyOn = 570;
 
 void AddSmbSharesStrings(content::WebUIDataSource* html_source) {
   // Add strings specific to smb_dialog.
@@ -59,7 +60,10 @@
 SmbShareDialog::~SmbShareDialog() = default;
 
 void SmbShareDialog::GetDialogSize(gfx::Size* size) const {
-  size->SetSize(SystemWebDialogDelegate::kDialogWidth, kSmbShareDialogHeight);
+  size->SetSize(SystemWebDialogDelegate::kDialogWidth,
+                chromeos::features::IsJellyEnabled()
+                    ? kSmbShareDialogHeightWithJellyOn
+                    : kSmbShareDialogHeight);
 }
 
 SmbShareDialogUI::SmbShareDialogUI(content::WebUI* web_ui)
@@ -88,8 +92,8 @@
                   user_manager::UserManager::Get()->IsLoggedInAsPublicAccount();
   source->AddBoolean("isGuest", is_guest);
 
-  bool is_jelly = chromeos::features::IsJellyEnabled();
-  source->AddBoolean("isJelly", is_jelly);
+  bool is_jelly_enabled = chromeos::features::IsJellyEnabled();
+  source->AddBoolean("isJellyEnabled", is_jelly_enabled);
 
   source->UseStringsJs();
   source->SetDefaultResource(IDR_SMB_SHARES_DIALOG_CONTAINER_HTML);
diff --git a/chrome/browser/ui/webui/settings/ash/OWNERS b/chrome/browser/ui/webui/settings/ash/OWNERS
index d480454..71e3869 100644
--- a/chrome/browser/ui/webui/settings/ash/OWNERS
+++ b/chrome/browser/ui/webui/settings/ash/OWNERS
@@ -3,6 +3,7 @@
 per-file account_manager_*=file://chromeos/ash/components/account_manager/OWNERS
 per-file apps_section*=file://chrome/browser/ui/webui/app_management/OWNERS
 per-file device_*=file://chrome/browser/resources/settings/chromeos/device_page/OWNERS
+per-file files_section*=file://ui/file_manager/OWNERS
 per-file languages_section*=file://chrome/browser/resources/settings/chromeos/os_languages_page/OWNERS
 per-file multidevice_handler*=file://chromeos/ash/components/multidevice/OWNERS
 per-file printing_*,cups_*=file://chrome/browser/resources/settings/chromeos/os_printing_page/OWNERS
diff --git a/chrome/browser/ui/webui/settings/ash/files_section.cc b/chrome/browser/ui/webui/settings/ash/files_section.cc
index 2ea880c..d5fbd5a 100644
--- a/chrome/browser/ui/webui/settings/ash/files_section.cc
+++ b/chrome/browser/ui/webui/settings/ash/files_section.cc
@@ -113,6 +113,8 @@
        IDS_SETTINGS_GOOGLE_DRIVE_OFFLINE_SUBTITLE},
       {"googleDriveOfflineClearTitle",
        IDS_SETTINGS_GOOGLE_DRIVE_OFFLINE_CLEAR_TITLE},
+      {"googleDriveOfflineSpaceSubtitle",
+       IDS_SETTINGS_GOOGLE_DRIVE_OFFLINE_STORAGE_REQUIRED_SUBTITLE},
       {"googleDriveOfflineClearSubtitle",
        IDS_SETTINGS_GOOGLE_DRIVE_OFFLINE_CLEAR_SUBTITLE},
       {"googleDriveOfflineClearAction",
diff --git a/chrome/browser/web_applications/web_app.cc b/chrome/browser/web_applications/web_app.cc
index 1d403c3..a6dab7b2 100644
--- a/chrome/browser/web_applications/web_app.cc
+++ b/chrome/browser/web_applications/web_app.cc
@@ -717,7 +717,7 @@
 bool WebApp::operator==(const WebApp& other) const {
   auto AsTuple = [](const WebApp& app) {
     // Keep in order declared in web_app.h.
-    return std::make_tuple(
+    return std::tie(
         // Disable clang-format so diffs are clearer when fields are added.
         // clang-format off
         app.app_id_,
@@ -782,12 +782,12 @@
         app.management_to_external_config_map_,
         app.tab_strip_,
         app.always_show_toolbar_in_fullscreen_,
-        app.current_os_integration_states_.SerializeAsString(),
+        app.current_os_integration_states_,
         app.isolation_data_
         // clang-format on
     );
   };
-  return (AsTuple(*this) == AsTuple(other));
+  return AsTuple(*this) == AsTuple(other);
 }
 
 bool WebApp::operator!=(const WebApp& other) const {
@@ -1124,6 +1124,21 @@
   return !(management_config1 == management_config2);
 }
 
+namespace proto {
+
+bool operator==(const WebAppOsIntegrationState& os_integration_state1,
+                const WebAppOsIntegrationState& os_integration_state2) {
+  return os_integration_state1.SerializeAsString() ==
+         os_integration_state2.SerializeAsString();
+}
+
+bool operator!=(const WebAppOsIntegrationState& os_integration_state1,
+                const WebAppOsIntegrationState& os_integration_state2) {
+  return !(os_integration_state1 == os_integration_state2);
+}
+
+}  // namespace proto
+
 std::vector<std::string> GetSerializedAllowedOrigins(
     const blink::ParsedPermissionsPolicyDeclaration
         permissions_policy_declaration) {
diff --git a/chrome/browser/web_applications/web_app.h b/chrome/browser/web_applications/web_app.h
index 1cc12ce..733361e 100644
--- a/chrome/browser/web_applications/web_app.h
+++ b/chrome/browser/web_applications/web_app.h
@@ -595,6 +595,16 @@
 bool operator!=(const WebApp::ExternalManagementConfig& management_config1,
                 const WebApp::ExternalManagementConfig& management_config2);
 
+namespace proto {
+
+bool operator==(const WebAppOsIntegrationState& os_integration_state1,
+                const WebAppOsIntegrationState& os_integration_state2);
+
+bool operator!=(const WebAppOsIntegrationState& os_integration_state1,
+                const WebAppOsIntegrationState& os_integration_state2);
+
+}  // namespace proto
+
 std::vector<std::string> GetSerializedAllowedOrigins(
     const blink::ParsedPermissionsPolicyDeclaration
         permissions_policy_declaration);
diff --git a/chrome/build/lacros-arm.pgo.txt b/chrome/build/lacros-arm.pgo.txt
index 83de2b6..f843fd8 100644
--- a/chrome/build/lacros-arm.pgo.txt
+++ b/chrome/build/lacros-arm.pgo.txt
@@ -1 +1 @@
-chrome-chromeos-arm-generic-main-1681614346-415012d03c22233ac00d5c34a0a17d657a5fbd24.profdata
+chrome-chromeos-arm-generic-main-1681689459-d1fc057723f4fd636471c5e26823350dc3059fa0.profdata
diff --git a/chrome/build/lacros64.pgo.txt b/chrome/build/lacros64.pgo.txt
index 6e2a27c..c1a7d14 100644
--- a/chrome/build/lacros64.pgo.txt
+++ b/chrome/build/lacros64.pgo.txt
@@ -1 +1 @@
-chrome-chromeos-amd64-generic-main-1681614346-5b18450439c2ceb67f3261e8de6196acacfce9bd.profdata
+chrome-chromeos-amd64-generic-main-1681689459-23818c518ea3293710c5b76cfcabd8d8d71fa63a.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 49be43dd..3599acb 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1681624071-62fc11eadaa47c36575166eaecf977f9ffdaa3ee.profdata
+chrome-linux-main-1681689459-78bb7ddba6ed5b620937e4f94fe858c3cae62c01.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index 87ca744..0035bbf 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1681624071-1757e068e2386988dd861b3b64b5dcf0e18d0f1a.profdata
+chrome-mac-arm-main-1681696667-8d63cd755dc8a461ce37f7642dc1c0af88679f4c.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index f40cece..1aa7366d 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1681602911-4d90d3542510d623c2153e32920b207615bc7105.profdata
+chrome-mac-main-1681689459-64f5ef0dce8d97a27f3dee935013f7312df20835.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 2716f12..1a7e1a6e 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1681613884-f768448c9e7536b0463f750a6c9dbda319a29e3d.profdata
+chrome-win32-main-1681689459-6f2a9e1cbe35d07cae61ef6c7de32689d76df7de.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 9f6aece..459df860 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1681613884-3802caf37033ae83cbd0fe1b654314668705fa93.profdata
+chrome-win64-main-1681689459-0d6c11a52cf3a1aab68a8e1bb813c14e2817e97d.profdata
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index b3acae0..d877bc3 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -7520,9 +7520,9 @@
       "../browser/apps/app_service/file_utils_unittest.cc",
       "../browser/apps/app_service/metrics/app_platform_metrics_service_unittest.cc",
       "../browser/apps/app_service/promise_apps/promise_app_registry_cache_unittest.cc",
+      "../browser/apps/app_service/promise_apps/promise_app_unittest.cc",
       "../browser/apps/app_service/promise_apps/promise_app_update_unittest.cc",
       "../browser/apps/app_service/promise_apps/promise_app_wrapper_unittest.cc",
-      "../browser/apps/app_service/promise_apps/promise_apps_unittest.cc",
       "../browser/apps/app_service/publishers/arc_apps_unittest.cc",
       "../browser/apps/app_service/publishers/bruschetta_apps_unittest.cc",
       "../browser/apps/app_service/publishers/crostini_apps_unittest.cc",
diff --git a/chrome/test/data/webui/settings/chromeos/os_files_page/google_drive_page_test.ts b/chrome/test/data/webui/settings/chromeos/os_files_page/google_drive_page_test.ts
index 5083a06e..c67b33cf 100644
--- a/chrome/test/data/webui/settings/chromeos/os_files_page/google_drive_page_test.ts
+++ b/chrome/test/data/webui/settings/chromeos/os_files_page/google_drive_page_test.ts
@@ -4,7 +4,7 @@
 
 import 'chrome://os-settings/chromeos/lazy_load.js';
 
-import {CrSettingsPrefs, GoogleDriveBrowserProxy, GoogleDrivePageCallbackRouter, GoogleDrivePageHandlerRemote, SettingsGoogleDriveSubpageElement, SettingsPrefsElement} from 'chrome://os-settings/chromeos/os_settings.js';
+import {CrSettingsPrefs, GoogleDriveBrowserProxy, GoogleDrivePageCallbackRouter, GoogleDrivePageHandlerRemote, GoogleDrivePageRemote, SettingsGoogleDriveSubpageElement, SettingsPrefsElement, SettingsToggleButtonElement, Stage} from 'chrome://os-settings/chromeos/os_settings.js';
 import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {assertEquals} from 'chrome://webui-test/chai_assert.js';
@@ -23,18 +23,31 @@
 
   observer: GoogleDrivePageCallbackRouter;
 
+  observerRemote: GoogleDrivePageRemote;
+
   constructor() {
     super(['calculateRequiredSpace']);
     this.handler = TestMock.fromClass(GoogleDrivePageHandlerRemote);
     this.observer = new GoogleDrivePageCallbackRouter();
+    this.observerRemote = this.observer.$.bindNewPipeAndPassRemote();
   }
 }
 
+/**
+ * Generate the expected text for space available.
+ */
+function generateRequiredSpaceText(
+    requiredSpace: string, remainingSpace: string): string {
+  return `This will use about ${requiredSpace} leaving ${
+      remainingSpace} available.`;
+}
+
 suite('<settings-google-drive-subpage>', function() {
   let page: SettingsGoogleDriveSubpageElement;
   let prefElement: SettingsPrefsElement;
   let connectDisconnectButton: CrButtonElement;
   let testBrowserProxy: GoogleDriveTestBrowserProxy;
+  let bulkPinningToggle: SettingsToggleButtonElement;
 
   setup(async function() {
     testBrowserProxy = new GoogleDriveTestBrowserProxy();
@@ -53,6 +66,10 @@
         querySelectorShadow(
             page.shadowRoot!, ['#driveConnectDisconnect', 'cr-button']) as
         CrButtonElement;
+
+    bulkPinningToggle =
+        querySelectorShadow(page.shadowRoot!, ['#driveBulkPinning']) as
+        SettingsToggleButtonElement;
   });
 
   teardown(function() {
@@ -126,4 +143,67 @@
         // Ensure after cancelling the dialog the preference is unchanged.
         await assertAsync(() => !page.getPref('gdata.disabled').value, 5000);
       });
+
+  test(
+      'clicking the toggle updates the bulk pinning preference',
+      async function() {
+        page.setPrefValue('drivefs.bulk_pinning_enabled', false);
+        bulkPinningToggle.click();
+        await assertAsync(
+            () => page.getPref('drivefs.bulk_pinning_enabled').value, 5000);
+      });
+
+  test(
+      'progress sent via the browser proxy updates the sub title text',
+      async function() {
+        page.setPrefValue('drivefs.bulk_pinning_enabled', false);
+
+        /**
+         * Helper method to retrieve the subtitle text from the bulk pinning
+         * label.
+         */
+        const expectSubTitleText = async (fn: (text: string) => boolean) => {
+          let subTitleElement: HTMLElement|null;
+          await assertAsync(() => {
+            subTitleElement =
+                bulkPinningToggle.shadowRoot!.querySelector<HTMLElement>(
+                    '#sub-label-text');
+            return subTitleElement !== null && fn(subTitleElement!.innerText);
+          }, 5000);
+        };
+
+
+        // Expect the subtitle text does not include required space when no
+        // values have been returned from the page handler.
+        const requiredSpaceText =
+            generateRequiredSpaceText('512 MB', '1,024 KB');
+        await expectSubTitleText(
+            subTitle => !subTitle.includes(requiredSpaceText));
+
+        // Mock space values and the `kSuccess` stage via the browser proxy.
+        testBrowserProxy.observerRemote.onProgress({
+          remainingSpace: '1,024 KB',
+          requiredSpace: '512 MB',
+          stage: Stage.kSuccess,
+        });
+        testBrowserProxy.observerRemote.$.flushForTesting();
+        flush();
+
+        // Ensure the sub title text gets updated with the space values.
+        await expectSubTitleText(
+            subTitle => subTitle.includes(requiredSpaceText));
+
+        // Mock a failure case via the browser proxy.
+        testBrowserProxy.observerRemote.onProgress({
+          remainingSpace: '1,024 KB',
+          requiredSpace: '512 MB',
+          stage: Stage.kCannotGetFreeSpace,
+        });
+        testBrowserProxy.observerRemote.$.flushForTesting();
+        flush();
+
+        // Ensure the sub title textremoves the space values.
+        await expectSubTitleText(
+            subTitle => !subTitle.includes(requiredSpaceText));
+      });
 });
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index faa8a99..d8f7e4b0 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-15424.0.0
\ No newline at end of file
+15425.0.0
\ No newline at end of file
diff --git a/chromeos/ash/components/drivefs/drivefs_host.cc b/chromeos/ash/components/drivefs/drivefs_host.cc
index 716015b..392e84a 100644
--- a/chromeos/ash/components/drivefs/drivefs_host.cc
+++ b/chromeos/ash/components/drivefs/drivefs_host.cc
@@ -192,7 +192,8 @@
         // Currently, download syncing (AKA downsync) events are not reliably
         // delivered by DriveFs. Therefore, let's not show inline sync status
         // indicators for them until this is fixed on DriveFs/Cello.
-        if (event->is_download) {
+        // Also filter out invalid stable_ids (with value 0).
+        if (event->is_download || event->stable_id == 0) {
           continue;
         }
 
diff --git a/chromeos/ash/components/drivefs/drivefs_pin_manager.cc b/chromeos/ash/components/drivefs/drivefs_pin_manager.cc
index f6517df..1b702a2 100644
--- a/chromeos/ash/components/drivefs/drivefs_pin_manager.cc
+++ b/chromeos/ash/components/drivefs/drivefs_pin_manager.cc
@@ -575,20 +575,6 @@
 
   progress_.free_space = free_space;
   VLOG(1) << "Free space: " << HumanReadableSize(free_space);
-
-  VLOG(1) << "Enabling Docs offline";
-  drivefs_->SetDocsOfflineEnabled(
-      true, base::BindOnce(&PinManager::OnDocsOfflineEnabled, GetWeakPtr()));
-}
-
-void PinManager::OnDocsOfflineEnabled(drive::FileError error) {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (error != drive::FILE_ERROR_OK) {
-    LOG(ERROR) << "Cannot enable Docs offline: " << error;
-    return Complete(Stage::kCannotEnableDocsOffline);
-  }
-
-  VLOG(1) << "Successfully enabled Docs offline";
   VLOG(1) << "Listing files";
   timer_ = base::ElapsedTimer();
   progress_.stage = Stage::kListingFiles;
@@ -884,6 +870,19 @@
     return Complete(Stage::kSuccess);
   }
 
+  VLOG(1) << "Enabling Docs offline";
+  drivefs_->SetDocsOfflineEnabled(
+      true, base::BindOnce(&PinManager::OnDocsOfflineEnabled, GetWeakPtr()));
+}
+
+void PinManager::OnDocsOfflineEnabled(drive::FileError error) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  if (error != drive::FILE_ERROR_OK) {
+    LOG(ERROR) << "Cannot enable Docs offline: " << error;
+    return Complete(Stage::kCannotEnableDocsOffline);
+  }
+
+  VLOG(1) << "Successfully enabled Docs offline";
   timer_ = base::ElapsedTimer();
   progress_.stage = Stage::kSyncing;
   NotifyProgress();
diff --git a/chromeos/ash/components/drivefs/drivefs_pin_manager_unittest.cc b/chromeos/ash/components/drivefs/drivefs_pin_manager_unittest.cc
index 016fa6b..5b059d12 100644
--- a/chromeos/ash/components/drivefs/drivefs_pin_manager_unittest.cc
+++ b/chromeos/ash/components/drivefs/drivefs_pin_manager_unittest.cc
@@ -1778,40 +1778,10 @@
   EXPECT_EQ(progress.pinned_files, 0);
 }
 
-// Tests what happens when PinManager cannot enable Docs offline during initial
-// setup.
-TEST_F(DriveFsPinManagerTest, CannotEnableDocsOffline) {
-  CompletionCallback completion_callback;
-  RunLoop run_loop;
-
-  EXPECT_CALL(drivefs_, SetDocsOfflineEnabled(true, _))
-      .WillOnce(RunOnceCallback<1>(drive::FILE_ERROR_SERVICE_UNAVAILABLE));
-  EXPECT_CALL(drivefs_, OnStartSearchQuery(_)).Times(0);
-  EXPECT_CALL(completion_callback, Run(Stage::kCannotEnableDocsOffline))
-      .WillOnce(RunClosure(run_loop.QuitClosure()));
-  EXPECT_CALL(space_getter_, GetFreeSpace(gcache_dir_, _))
-      .WillOnce(RunOnceCallback<1>(1 << 30));  // 1 GB.
-
-  PinManager manager(temp_dir_.GetPath(), &drivefs_);
-  manager.SetSpaceGetter(GetSpaceGetter());
-  manager.SetCompletionCallback(completion_callback.Get());
-  manager.Start();
-  run_loop.Run();
-
-  const Progress progress = manager.GetProgress();
-  EXPECT_EQ(progress.stage, Stage::kCannotEnableDocsOffline);
-  EXPECT_EQ(progress.free_space, 1 << 30);
-  EXPECT_EQ(progress.required_space, 0);
-  EXPECT_EQ(progress.pinned_bytes, 0);
-  EXPECT_EQ(progress.pinned_files, 0);
-}
-
 TEST_F(DriveFsPinManagerTest, CannotListFiles) {
   CompletionCallback completion_callback;
   RunLoop run_loop;
 
-  EXPECT_CALL(drivefs_, SetDocsOfflineEnabled(true, _))
-      .WillOnce(RunOnceCallback<1>(drive::FILE_ERROR_OK));
   EXPECT_CALL(drivefs_, OnStartSearchQuery(_)).Times(1);
   EXPECT_CALL(drivefs_, OnGetNextPage(_))
       .WillOnce(Return(FileError::FILE_ERROR_FAILED));
@@ -1834,6 +1804,40 @@
   EXPECT_EQ(progress.pinned_files, 0);
 }
 
+// Tests what happens when PinManager cannot enable Docs offline during initial
+// setup.
+TEST_F(DriveFsPinManagerTest, CannotEnableDocsOffline) {
+  CompletionCallback completion_callback;
+  RunLoop run_loop;
+
+  // Mock Drive search to return 1 unpinned files that total to 256 MB.
+  const vector<DriveItem> items = {{.size = 256 << 20}};
+
+  EXPECT_CALL(drivefs_, SetDocsOfflineEnabled(true, _))
+      .WillOnce(RunOnceCallback<1>(drive::FILE_ERROR_SERVICE_UNAVAILABLE));
+  EXPECT_CALL(drivefs_, OnStartSearchQuery(_)).Times(1);
+  EXPECT_CALL(drivefs_, OnGetNextPage(_))
+      .WillOnce(DoAll(PopulateSearchItems(items), Return(kFileOk)))
+      .WillOnce(DoAll(PopulateNoSearchItems(), Return(kFileOk)));
+  EXPECT_CALL(space_getter_, GetFreeSpace(gcache_dir_, _))
+      .WillOnce(RunOnceCallback<1>(1 << 30));  // 1 GB.
+  EXPECT_CALL(completion_callback, Run(Stage::kCannotEnableDocsOffline))
+      .WillOnce(RunClosure(run_loop.QuitClosure()));
+
+  PinManager manager(temp_dir_.GetPath(), &drivefs_);
+  manager.SetSpaceGetter(GetSpaceGetter());
+  manager.SetCompletionCallback(completion_callback.Get());
+  manager.Start();
+  run_loop.Run();
+
+  const Progress progress = manager.GetProgress();
+  EXPECT_EQ(progress.stage, Stage::kCannotEnableDocsOffline);
+  EXPECT_EQ(progress.free_space, 1 << 30);
+  EXPECT_EQ(progress.required_space, 256 << 20);
+  EXPECT_EQ(progress.pinned_bytes, 0);
+  EXPECT_EQ(progress.pinned_files, 0);
+}
+
 // Tests what happens when PinManager cannot get enough free space during
 // the initial setup.
 TEST_F(DriveFsPinManagerTest, NotEnoughSpace) {
@@ -1846,8 +1850,6 @@
   const vector<DriveItem> items = {
       {.size = 300 << 20}, {.size = 212 << 20}, {.size = 1}};
 
-  EXPECT_CALL(drivefs_, SetDocsOfflineEnabled(true, _))
-      .WillOnce(RunOnceCallback<1>(drive::FILE_ERROR_OK));
   EXPECT_CALL(drivefs_, OnStartSearchQuery(_)).Times(1);
   EXPECT_CALL(drivefs_, OnGetNextPage(_))
       .WillOnce(DoAll(PopulateSearchItems(items), Return(kFileOk)))
@@ -1965,8 +1967,6 @@
   // margin.
   const vector<DriveItem> items = {{.size = 300 << 20}, {.size = 212 << 20}};
 
-  EXPECT_CALL(drivefs_, SetDocsOfflineEnabled(true, _))
-      .WillOnce(RunOnceCallback<1>(drive::FILE_ERROR_OK));
   EXPECT_CALL(drivefs_, OnStartSearchQuery(_)).Times(1);
   EXPECT_CALL(drivefs_, OnGetNextPage(_))
       .WillOnce(DoAll(PopulateSearchItems(items), Return(kFileOk)))
@@ -2427,6 +2427,9 @@
 TEST_F(DriveFsPinManagerTest, StartPinning) {
   PinManager manager(temp_dir_.GetPath(), &drivefs_);
 
+  EXPECT_CALL(drivefs_, SetDocsOfflineEnabled(true, _))
+      .WillRepeatedly(RunOnceCallback<1>(drive::FILE_ERROR_OK));
+
   DCHECK_CALLED_ON_VALID_SEQUENCE(manager.sequence_checker_);
   manager.progress_.stage = Stage::kListingFiles;
   DCHECK_EQ(manager.progress_.free_space, 0);
diff --git a/chromeos/ash/components/drivefs/fake_drivefs.cc b/chromeos/ash/components/drivefs/fake_drivefs.cc
index 7f5d0e4..72a2268 100644
--- a/chromeos/ash/components/drivefs/fake_drivefs.cc
+++ b/chromeos/ash/components/drivefs/fake_drivefs.cc
@@ -656,4 +656,9 @@
   std::move(callback).Run(drive::FILE_ERROR_OK);
 }
 
+void FakeDriveFs::ClearOfflineFiles(
+    drivefs::mojom::DriveFs::ClearOfflineFilesCallback callback) {
+  std::move(callback).Run(drive::FILE_ERROR_OK);
+}
+
 }  // namespace drivefs
diff --git a/chromeos/ash/components/drivefs/fake_drivefs.h b/chromeos/ash/components/drivefs/fake_drivefs.h
index ff7a8c83..2f04c94 100644
--- a/chromeos/ash/components/drivefs/fake_drivefs.h
+++ b/chromeos/ash/components/drivefs/fake_drivefs.h
@@ -210,6 +210,9 @@
       bool enabled,
       drivefs::mojom::DriveFs::SetDocsOfflineEnabledCallback callback) override;
 
+  void ClearOfflineFiles(
+      drivefs::mojom::DriveFs::ClearOfflineFilesCallback) override;
+
   const base::FilePath mount_path_;
   int64_t next_stable_id_ = 1;
 
diff --git a/chromeos/ash/components/drivefs/mojom/drivefs.mojom b/chromeos/ash/components/drivefs/mojom/drivefs.mojom
index 12b3236..fa72b3c 100644
--- a/chromeos/ash/components/drivefs/mojom/drivefs.mojom
+++ b/chromeos/ash/components/drivefs/mojom/drivefs.mojom
@@ -143,6 +143,10 @@
 
   // Returns the total space used by files that have been pinned.
   GetOfflineFilesSpaceUsage() => (FileError error, int64 space_used);
+
+  // Unpins all currently pinned items and force evicts them from the cache.
+  // NOTE: Force eviction does not work for hosted documents.
+  ClearOfflineFiles() => (FileError error);
 };
 
 // Implemented by Chrome, used from DriveFS.
diff --git a/chromeos/ash/components/drivefs/sync_status_tracker.cc b/chromeos/ash/components/drivefs/sync_status_tracker.cc
index d254fc4..60e9eec 100644
--- a/chromeos/ash/components/drivefs/sync_status_tracker.cc
+++ b/chromeos/ash/components/drivefs/sync_status_tracker.cc
@@ -144,6 +144,8 @@
     return;
   }
 
+  DCHECK_GT(id, 0) << "Only ids greater than 0 are considered valid";
+
   const auto components = path.GetComponents();
   DCHECK(!components.empty() && components.front() == "/");
   const base::span<const base::FilePath::StringType> path_parts(
@@ -156,10 +158,17 @@
       matching_node = std::make_unique<Node>();
       matching_node->path_part = path_part;
       matching_node->parent = node;
-      matching_node->id = id;
     }
     node = matching_node.get();
   }
+
+  // If attempting to override existing node with different id, remove old id
+  // from id_to_leaf_;
+  if (node->id != 0 && node->id != id) {
+    id_to_leaf_.erase(node->id);
+  }
+  node->id = id;
+
   SetNodeState(node, status, transferred, total);
 
   // If the entry with the given id has changed its path, this means it has been
@@ -169,6 +178,8 @@
   if (auto it = id_to_leaf_.find(id);
       it != id_to_leaf_.end() && it->second != node) {
     SetNodeState(it->second, kMoved, 0, 0);
+    // Reset node id to 0 to prevent 2 nodes with the same id at the same time.
+    it->second->id = 0;
   }
   id_to_leaf_[id] = node;
 }
diff --git a/chromeos/ash/components/drivefs/sync_status_tracker_unittest.cc b/chromeos/ash/components/drivefs/sync_status_tracker_unittest.cc
index 5ff1948..22173bd 100644
--- a/chromeos/ash/components/drivefs/sync_status_tracker_unittest.cc
+++ b/chromeos/ash/components/drivefs/sync_status_tracker_unittest.cc
@@ -62,7 +62,7 @@
 };
 
 TEST_F(SyncStatusTrackerTest, StatePropagatesToAncestors) {
-  t.SetInProgress(0, abc, 0, 100);
+  t.SetInProgress(1, abc, 0, 100);
   ASSERT_EQ(t.GetSyncState(abc), InProgress(abc));
   ASSERT_EQ(t.GetSyncState(ab), InProgress(ab));
   ASSERT_EQ(t.GetSyncState(a), InProgress(a));
@@ -70,8 +70,8 @@
 }
 
 TEST_F(SyncStatusTrackerTest, ErrorTakesPrecedenceInAncestors) {
-  t.SetInProgress(0, abc, 0, 100);
-  t.SetError(1, abd);
+  t.SetInProgress(1, abc, 0, 100);
+  t.SetError(2, abd);
   ASSERT_EQ(t.GetSyncState(abc), InProgress(abc));
   ASSERT_EQ(t.GetSyncState(ab), Error(ab));
   ASSERT_EQ(t.GetSyncState(a), Error(a));
@@ -79,17 +79,17 @@
 }
 
 TEST_F(SyncStatusTrackerTest, PathsNotInTrackerReturnNotFound) {
-  t.SetInProgress(0, abc, 0, 100);
+  t.SetInProgress(1, abc, 0, 100);
   ASSERT_EQ(t.GetSyncState(abc), InProgress(abc));
   ASSERT_EQ(t.GetSyncState(abd), NotFound(abd));
 }
 
 TEST_F(SyncStatusTrackerTest, RemovingAPathRemovesSingleUseAncestors) {
-  t.SetInProgress(0, abcf, 10, 100);
-  t.SetInProgress(1, abd, 10, 100);
-  t.SetInProgress(2, abe, 10, 100);
+  t.SetInProgress(1, abcf, 10, 100);
+  t.SetInProgress(2, abd, 10, 100);
+  t.SetInProgress(3, abe, 10, 100);
 
-  t.SetCompleted(0, base::FilePath(abcf));
+  t.SetCompleted(1, base::FilePath(abcf));
 
   ASSERT_EQ(t.GetSyncState(ab), InProgress(ab, 120. / 300.));
   ASSERT_EQ(t.GetSyncState(abc), Completed(abc));
@@ -102,40 +102,40 @@
 }
 
 TEST_F(SyncStatusTrackerTest, FoldersCantBeMarkedCompleted) {
-  t.SetInProgress(0, abcd, 0, 100);
+  t.SetInProgress(1, abcd, 0, 100);
 
-  t.SetCompleted(1, base::FilePath(abc));
-  t.SetCompleted(2, base::FilePath(ab));
-  t.SetCompleted(3, base::FilePath(a));
+  t.SetCompleted(2, base::FilePath(abc));
+  t.SetCompleted(3, base::FilePath(ab));
+  t.SetCompleted(4, base::FilePath(a));
 
   ASSERT_EQ(t.GetSyncState(abcd), InProgress(abcd));
 }
 
 TEST_F(SyncStatusTrackerTest, Utf8PathsAreSupported) {
   const base::FilePath utf8_path("/a/b/日本");
-  t.SetInProgress(0, utf8_path, 0, 100);
+  t.SetInProgress(1, utf8_path, 0, 100);
   ASSERT_EQ(t.GetSyncState(utf8_path), InProgress(utf8_path));
 }
 
 TEST_F(SyncStatusTrackerTest, DeletingNonexistingPathIsNoOp) {
-  t.SetInProgress(0, abcd, 0, 100);
+  t.SetInProgress(1, abcd, 0, 100);
 
-  t.SetCompleted(1, base::FilePath("/a/b/c/d/e"));
+  t.SetCompleted(2, base::FilePath("/a/b/c/d/e"));
   t.GetFileCount();
 
   ASSERT_EQ(t.GetSyncState(abcd), InProgress(abcd));
 }
 
 TEST_F(SyncStatusTrackerTest, AddingExistingPathReplacesStatus) {
-  t.SetInProgress(0, abcd, 0, 100);
-  t.SetError(1, abcd);
+  t.SetInProgress(1, abcd, 0, 100);
+  t.SetError(2, abcd);
 
   ASSERT_EQ(t.GetSyncState(abcd), Error(abcd));
 }
 
 TEST_F(SyncStatusTrackerTest, MalformedPathsAreSupported) {
   base::FilePath malformed_path("////");
-  t.SetInProgress(0, malformed_path, 0, 100);
+  t.SetInProgress(1, malformed_path, 0, 100);
 
   ASSERT_EQ(t.GetSyncState(malformed_path), InProgress(malformed_path));
 }
@@ -144,18 +144,18 @@
   base::FilePath relative_path1("./..");
   base::FilePath relative_path2("../");
 
-  t.SetInProgress(0, relative_path1, 0, 100);
-  t.SetInProgress(1, relative_path2, 0, 100);
+  t.SetInProgress(1, relative_path1, 0, 100);
+  t.SetInProgress(2, relative_path2, 0, 100);
 
   ASSERT_EQ(t.GetSyncState(relative_path1), NotFound(relative_path1));
   ASSERT_EQ(t.GetSyncState(relative_path2), NotFound(relative_path2));
 }
 
 TEST_F(SyncStatusTrackerTest, MovingFileDoesNotImmediatelyRemoveOldPath) {
-  t.SetInProgress(0, abcd, 10, 100);
-  t.SetQueued(1, abce, 0);
+  t.SetInProgress(1, abcd, 10, 100);
+  t.SetQueued(2, abce, 0);
   // Rename /a/b/c/d to /a/b/c/f.
-  t.SetInProgress(0, abcf, 50, 100);
+  t.SetInProgress(1, abcf, 50, 100);
 
   // Old path is moved.
   ASSERT_EQ(t.GetSyncState(abcd), Moved(abcd));
@@ -168,9 +168,9 @@
 
 TEST_F(SyncStatusTrackerTest,
        MovingFileDoesNotImmediatelyRemoveOldPathAndParents) {
-  t.SetInProgress(0, abcd, 10, 100);
+  t.SetInProgress(1, abcd, 10, 100);
   // Rename /a/b/c/d to /a/d.
-  t.SetInProgress(0, ad, 20, 100);
+  t.SetInProgress(1, ad, 20, 100);
 
   // Old path is marked as "moved" along with any childless parents.
   ASSERT_EQ(t.GetSyncState(abcd), Moved(abcd));
@@ -184,30 +184,30 @@
 }
 
 TEST_F(SyncStatusTrackerTest, FolderAggregateProgress) {
-  t.SetInProgress(0, abcd, 10, 100);
-  t.SetInProgress(1, abce, 20, 100);
-  t.SetInProgress(2, ad, 20, 100);
+  t.SetInProgress(1, abcd, 10, 100);
+  t.SetInProgress(2, abce, 20, 100);
+  t.SetInProgress(3, ad, 20, 100);
 
   ASSERT_EQ(t.GetSyncState(abc), InProgress(abc, 30. / 200.));
   ASSERT_EQ(t.GetSyncState(ab), InProgress(ab, 30. / 200.));
   ASSERT_EQ(t.GetSyncState(a), InProgress(a, 50. / 300.));
 
-  t.SetInProgress(0, abcd, 50, 100);
-  t.SetInProgress(2, ad, 10, 200);
+  t.SetInProgress(1, abcd, 50, 100);
+  t.SetInProgress(3, ad, 10, 200);
 
   ASSERT_EQ(t.GetSyncState(ab), InProgress(ab, 70. / 200.));
   ASSERT_EQ(t.GetSyncState(a), InProgress(a, 80. / 400.));
 
-  t.SetError(0, abcd);
+  t.SetError(1, abcd);
 
   ASSERT_EQ(t.GetSyncState(ab), Error(ab, 20. / 200.));
   ASSERT_EQ(t.GetSyncState(a), Error(a, 30. / 400.));
 }
 
 TEST_F(SyncStatusTrackerTest, OnlyDirtyNodesAreReturned) {
-  t.SetInProgress(0, abcd, 10, 100);
-  t.SetInProgress(1, abce, 20, 100);
-  t.SetInProgress(2, ad, 20, 100);
+  t.SetInProgress(1, abcd, 10, 100);
+  t.SetInProgress(2, abce, 20, 100);
+  t.SetInProgress(3, ad, 20, 100);
 
   ASSERT_THAT(t.GetChangesAndClean(),
               testing::UnorderedElementsAre(InProgress(root, 50. / 300.),  //
@@ -218,8 +218,8 @@
                                             InProgress(abce, 20. / 100.),  //
                                             InProgress(ad, 20. / 100.)));  //
 
-  t.SetError(0, abcd);
-  t.SetQueued(3, afg, 100);
+  t.SetError(1, abcd);
+  t.SetQueued(4, afg, 100);
 
   ASSERT_THAT(t.GetChangesAndClean(),
               testing::UnorderedElementsAre(Error(root, 40. / 400.),  //
@@ -230,7 +230,7 @@
                                             Queued(af),               //
                                             Queued(afg)));            //
 
-  t.SetCompleted(1, abce);
+  t.SetCompleted(2, abce);
 
   ASSERT_THAT(t.GetChangesAndClean(),
               testing::UnorderedElementsAre(Error(root, 120. / 400.),  //
@@ -240,7 +240,7 @@
                                             Completed(abce)));         //
 
   // Move /a/b/c/d to /b.
-  t.SetInProgress(0, b, 20, 100);
+  t.SetInProgress(1, b, 20, 100);
 
   ASSERT_THAT(t.GetChangesAndClean(),
               testing::UnorderedElementsAre(InProgress(root, 140. / 400.),  //
@@ -252,7 +252,7 @@
 }
 
 TEST_F(SyncStatusTrackerTest, StaleNodesGetDeleted) {
-  t.SetQueued(0, abcd, 100);
+  t.SetQueued(1, abcd, 100);
 
   ASSERT_EQ(t.GetSyncState(abcd), Queued(abcd));
 
@@ -273,5 +273,29 @@
   ASSERT_EQ(changes.back(), Moved(abcd));
 }
 
+TEST_F(SyncStatusTrackerTest, MoveOverridesDoNotSegFault) {
+  t.SetQueued(1, a, 0);
+  t.SetQueued(2, b, 0);
+
+  // Override /b with id #3.
+  t.SetQueued(3, b, 0);
+
+  // Rename /b to /a.
+  t.SetQueued(2, a, 0);
+
+  ASSERT_EQ(t.GetSyncState(a), Queued(a));
+  ASSERT_EQ(t.GetSyncState(b), Queued(b));
+
+  auto changes = t.GetChangesAndClean();
+
+  // Make all nodes stale.
+  task_environment.FastForwardBy(base::Seconds(11));
+
+  // This should not lead to a SegFault (addresses use after free bug where
+  // id_to_leaf_ members could point to a node that had already been erased -
+  // b/276784178).
+  changes = t.GetChangesAndClean();
+}
+
 }  // namespace
 }  // namespace drivefs
diff --git a/chromeos/strings/chromeos_strings_as.xtb b/chromeos/strings/chromeos_strings_as.xtb
index 5c8d36a..15fbc04 100644
--- a/chromeos/strings/chromeos_strings_as.xtb
+++ b/chromeos/strings/chromeos_strings_as.xtb
@@ -517,6 +517,7 @@
 <translation id="5423849171846380976">সক্ৰিয় কৰা হৈছে</translation>
 <translation id="5430931332414098647">তাৎক্ষণিক টেথাৰিং কৰাৰ সুবিধা</translation>
 <translation id="5431318178759467895">ৰং</translation>
+<translation id="5456936324019847994">সক্ষম কৰি ৰখা কোনো কাষ্টম APNৰ সৈতে সংযোগ কৰিব নোৱাৰি। অধিক তথ্যৰ বাবে আপোনাৰ ম’বাইলৰ বাহকৰ সৈতে যোগাযোগ কৰক।</translation>
 <translation id="5457599981699367932">অতিথি হিচাপে ব্ৰাউজ কৰক</translation>
 <translation id="54609108002486618">পৰিচালিত</translation>
 <translation id="5478289488939624992">{ATTEMPTS_LEFT,plural, =1{{0} টা প্ৰয়াস বাকী আছে}one{{0} টা প্ৰয়াস বাকী আছে}other{{0} টা প্ৰয়াস বাকী আছে}}</translation>
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb
index 34347c1..1a8a939 100644
--- a/chromeos/strings/chromeos_strings_ca.xtb
+++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -517,6 +517,7 @@
 <translation id="5423849171846380976">Activat</translation>
 <translation id="5430931332414098647">Compartició de xarxa instantània</translation>
 <translation id="5431318178759467895">Color</translation>
+<translation id="5456936324019847994">No es pot connectar a cap APN personalitzat que estigui activat. Contacta amb el teu operador de telefonia mòbil per obtenir més informació.</translation>
 <translation id="5457599981699367932">Navega com a convidat</translation>
 <translation id="54609108002486618">Gestionat</translation>
 <translation id="5478289488939624992">{ATTEMPTS_LEFT,plural, =1{Queda {0} intent}other{Queden {0} intents}}</translation>
diff --git a/chromeos/strings/chromeos_strings_lo.xtb b/chromeos/strings/chromeos_strings_lo.xtb
index c16f5ff..7d5b3863 100644
--- a/chromeos/strings/chromeos_strings_lo.xtb
+++ b/chromeos/strings/chromeos_strings_lo.xtb
@@ -517,6 +517,7 @@
 <translation id="5423849171846380976">ເປີດໃຊ້ງານແລ້ວ</translation>
 <translation id="5430931332414098647">ການປ່ອຍສັນຍານທັນທີ</translation>
 <translation id="5431318178759467895">ສີ</translation>
+<translation id="5456936324019847994">ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບ APN ທີ່ກຳນົດເອງເຊິ່ງເປີດການນຳໃຊ້ຢູ່. ກະລຸນາຕິດຕໍ່ຜູ້ໃຫ້ບໍລິການມືຖືຂອງທ່ານສຳລັບຂໍ້ມູນເພີ່ມເຕີມ.</translation>
 <translation id="5457599981699367932">ທ່ອງເນັດເປັນແຂກ</translation>
 <translation id="54609108002486618">ຖືກຈັດການ</translation>
 <translation id="5478289488939624992">{ATTEMPTS_LEFT,plural, =1{ຍັງເຫຼືອຄວາມພະຍາຍາມອີກ {0} ຄັ້ງ}other{ຍັງເຫຼືອຄວາມພະຍາຍາມອີກ {0} ຄັ້ງ}}</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb
index 60c7d268..39aaadb 100644
--- a/chromeos/strings/chromeos_strings_lt.xtb
+++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -573,6 +573,7 @@
 <translation id="5931523347251946569">Failas nerastas</translation>
 <translation id="5939518447894949180">Nustatyti iš naujo</translation>
 <translation id="594552776027197022">Generuoti atsitiktinę raktų porą</translation>
+<translation id="5946538341867151940">Dar nesate prisijungę. Jei jūsų mobiliojo ryšio operatorius rekomenduoja tinkintą APN, įveskite APN informaciją pasirinkdami „+ Naujas APN“</translation>
 <translation id="5972388717451707488">Update Engine</translation>
 <translation id="5984145644188835034">Numatytasis ekrano fonas</translation>
 <translation id="6017514345406065928">Žalia</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb
index b3df2c9..f5cd3ba 100644
--- a/chromeos/strings/chromeos_strings_my.xtb
+++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -517,6 +517,7 @@
 <translation id="5423849171846380976">အသက်သွင်းပြီး</translation>
 <translation id="5430931332414098647">အလိုအလျောက် ချိတ်ဆက်မျှဝေခြင်း</translation>
 <translation id="5431318178759467895">အရောင်</translation>
+<translation id="5456936324019847994">ဖွင့်ထားသော မည်သည့် စိတ်ကြိုက် APN ကိုမျှ ချိတ်ဆက်၍မရပါ။ နောက်ထပ်အချက်အလက်အတွက် သင့်မိုဘိုင်းဖုန်းကုမ္ပဏီကို ဆက်သွယ်ပါ။</translation>
 <translation id="5457599981699367932">ဧည့်သည့် အဖြစ် ရှာကြည့်ရန်</translation>
 <translation id="54609108002486618">ကြီးကြပ်ထားသည်</translation>
 <translation id="5478289488939624992">{ATTEMPTS_LEFT,plural, =1{{0} ကြိမ် ကြိုးပမ်းနိုင်သည်}other{{0} ကြိမ် ကြိုးပမ်းနိုင်သည်}}</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb
index 29dc286d..e6bd538 100644
--- a/chromeos/strings/chromeos_strings_pt-PT.xtb
+++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -517,6 +517,7 @@
 <translation id="5423849171846380976">Activado</translation>
 <translation id="5430931332414098647">Ligação via telemóvel instantânea</translation>
 <translation id="5431318178759467895">Cor</translation>
+<translation id="5456936324019847994">Não é possível ligar a APNs (Nomes de Pontos de Acesso) personalizados ativados. Contacte o seu operador móvel para obter mais informações.</translation>
 <translation id="5457599981699367932">Navegar como convidado</translation>
 <translation id="54609108002486618">Geridos</translation>
 <translation id="5478289488939624992">{ATTEMPTS_LEFT,plural, =1{{0} tentativa restante.}other{{0} tentativas restantes.}}</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb
index ed9918f..35916d41 100644
--- a/chromeos/strings/chromeos_strings_sk.xtb
+++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -517,6 +517,7 @@
 <translation id="5423849171846380976">Aktivované</translation>
 <translation id="5430931332414098647">Dynamický tethering</translation>
 <translation id="5431318178759467895">Farebne</translation>
+<translation id="5456936324019847994">Nedá sa pripojiť k žiadnym povoleným vlastným názvom prístupových bodov (APN). Viac sa dozviete od svojho operátora.</translation>
 <translation id="5457599981699367932">Prehliadať ako hosť</translation>
 <translation id="54609108002486618">Spravovaný</translation>
 <translation id="5478289488939624992">{ATTEMPTS_LEFT,plural, =1{Zostáva {0} pokus}few{Zostávajú {0} pokusy}many{{0} attempts left}other{Zostáva {0} pokusov}}</translation>
@@ -572,6 +573,7 @@
 <translation id="5931523347251946569">Súbor nebol nájdený</translation>
 <translation id="5939518447894949180">Resetovať</translation>
 <translation id="594552776027197022">Generovanie náhodného páru kľúčov</translation>
+<translation id="5946538341867151940">Nemáte pripojenie. Ak váš mobilný operátor odporúča vlastný názov prístupového bodu (APN), vyberte + Nový názov prístupového bodu (APN) a zadajte informácie o ňom.</translation>
 <translation id="5972388717451707488">Update Engine</translation>
 <translation id="5984145644188835034">Predvolená tapeta</translation>
 <translation id="6017514345406065928">Zelená</translation>
diff --git a/components/autofill/core/browser/ui/suggestion.h b/components/autofill/core/browser/ui/suggestion.h
index d04bf80..8cfd5d4 100644
--- a/components/autofill/core/browser/ui/suggestion.h
+++ b/components/autofill/core/browser/ui/suggestion.h
@@ -163,6 +163,7 @@
   IsLoading is_loading = IsLoading(false);
 
   // The In-Product-Help feature that should be shown for the suggestion.
+  // TODO(1432893): Consider making it `const Feature*`.
   std::string feature_for_iph;
 
   // If specified, this text will be played back as voice over for a11y.
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
index e9f0f73e..cc020f9 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
@@ -140,7 +140,7 @@
 <translation id="3386292677130313581">Сайттарга жайгашкан жериңиз тууралуу маалымат берүүдөн мурун уруксат суралсын (сунушталат)</translation>
 <translation id="3403537308306431953"><ph name="ZOOM_LEVEL" /> %%</translation>
 <translation id="3521663503435878242"><ph name="DOMAIN" /> домениндеги сайттар</translation>
-<translation id="3538390592868664640">Сайттарга айланаңыздын 3D картасын түзүүгө же камераңыздын абалына көз салууга бөгөт коюуңуз</translation>
+<translation id="3538390592868664640">Сайттарга айланаңыздын 3D картасын түзүүгө же камераңыздын абалына көз салууга бөгөт коюңуз</translation>
 <translation id="3544058026430919413">Компания cookie файлдарын колдонуп, топтогу аракеттериңизди бөлүшө алган сайттардын тобун аныктай алат. Бул параметр Жашыруун режимде өчүк болот.</translation>
 <translation id="3551268116566418498">Жашыруун режимден чыгасызбы?</translation>
 <translation id="3586500876634962664">Камера менен микрофонду колдонуу</translation>
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index e654262..9f63c99 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "20.40",
-  "log_list_timestamp": "2023-04-15T12:53:45Z",
+  "version": "20.41",
+  "log_list_timestamp": "2023-04-16T12:54:53Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/feature_engagement/public/feature_configurations.cc b/components/feature_engagement/public/feature_configurations.cc
index ebcbbfe..5563acb 100644
--- a/components/feature_engagement/public/feature_configurations.cc
+++ b/components/feature_engagement/public/feature_configurations.cc
@@ -134,21 +134,6 @@
     return config;
   }
 
-  if (kIPHIntentChipFeature.name == feature->name) {
-    absl::optional<FeatureConfig> config = FeatureConfig();
-    config->valid = true;
-    config->availability = Comparator(ANY, 0);
-    config->session_rate = Comparator(ANY, 0);
-
-    // Show the IPH once a month if the intent chip hasn't opened any app in
-    // a year.
-    config->trigger =
-        EventConfig("intent_chip_trigger", Comparator(EQUAL, 0), 30, 360);
-    config->used =
-        EventConfig("intent_chip_opened_app", Comparator(EQUAL, 0), 360, 360);
-    return config;
-  }
-
   if (kIPHBatterySaverModeFeature.name == feature->name) {
     // Show promo once a year when the battery saver toolbar icon is visible.
     absl::optional<FeatureConfig> config = FeatureConfig();
diff --git a/components/feature_engagement/public/feature_constants.cc b/components/feature_engagement/public/feature_constants.cc
index 74264a3..407944b 100644
--- a/components/feature_engagement/public/feature_constants.cc
+++ b/components/feature_engagement/public/feature_constants.cc
@@ -110,9 +110,6 @@
 BASE_FEATURE(kIPHProfileSwitchFeature,
              "IPH_ProfileSwitch",
              base::FEATURE_ENABLED_BY_DEFAULT);
-BASE_FEATURE(kIPHIntentChipFeature,
-             "IPH_IntentChip",
-             base::FEATURE_DISABLED_BY_DEFAULT);
 BASE_FEATURE(kIPHWebUiHelpBubbleTestFeature,
              "IPH_WebUiHelpBubbleTest",
              base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/components/feature_engagement/public/feature_constants.h b/components/feature_engagement/public/feature_constants.h
index 888b4b2..d809a18 100644
--- a/components/feature_engagement/public/feature_constants.h
+++ b/components/feature_engagement/public/feature_constants.h
@@ -43,7 +43,6 @@
 BASE_DECLARE_FEATURE(kIPHPriceTrackingPageActionIconLabelFeature);
 BASE_DECLARE_FEATURE(kIPHReadingListDiscoveryFeature);
 BASE_DECLARE_FEATURE(kIPHReadingListEntryPointFeature);
-BASE_DECLARE_FEATURE(kIPHIntentChipFeature);
 BASE_DECLARE_FEATURE(kIPHReadingListInSidePanelFeature);
 BASE_DECLARE_FEATURE(kIPHReopenTabFeature);
 BASE_DECLARE_FEATURE(kIPHSideSearchAutoTriggeringFeature);
diff --git a/components/feature_engagement/public/feature_list.cc b/components/feature_engagement/public/feature_list.cc
index 104256a..cbda3b8 100644
--- a/components/feature_engagement/public/feature_list.cc
+++ b/components/feature_engagement/public/feature_list.cc
@@ -164,7 +164,6 @@
     &kIPHDesktopPwaInstallFeature,
     &kIPHProfileSwitchFeature,
     &kIPHDesktopSharedHighlightingFeature,
-    &kIPHIntentChipFeature,
     &kIPHWebUiHelpBubbleTestFeature,
     &kIPHPriceTrackingInSidePanelFeature,
 #endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) ||
diff --git a/components/feature_engagement/public/feature_list.h b/components/feature_engagement/public/feature_list.h
index 5bfb408..0af6325c 100644
--- a/components/feature_engagement/public/feature_list.h
+++ b/components/feature_engagement/public/feature_list.h
@@ -293,7 +293,6 @@
 DEFINE_VARIATION_PARAM(kIPHProfileSwitchFeature, "IPH_ProfileSwitch");
 DEFINE_VARIATION_PARAM(kIPHDesktopSharedHighlightingFeature,
                        "IPH_DesktopSharedHighlighting");
-DEFINE_VARIATION_PARAM(kIPHIntentChipFeature, "IPH_IntentChip");
 DEFINE_VARIATION_PARAM(kIPHWebUiHelpBubbleTestFeature,
                        "IPH_WebUiHelpBubbleTest");
 DEFINE_VARIATION_PARAM(kIPHPriceTrackingInSidePanelFeature,
@@ -464,7 +463,6 @@
         VARIATION_ENTRY(kIPHDesktopPwaInstallFeature),
         VARIATION_ENTRY(kIPHProfileSwitchFeature),
         VARIATION_ENTRY(kIPHDesktopSharedHighlightingFeature),
-        VARIATION_ENTRY(kIPHIntentChipFeature),
         VARIATION_ENTRY(kIPHWebUiHelpBubbleTestFeature),
         VARIATION_ENTRY(kIPHPriceTrackingInSidePanelFeature),
 #endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) ||
diff --git a/components/metrics/metrics_state_manager.cc b/components/metrics/metrics_state_manager.cc
index 4468956..422039f 100644
--- a/components/metrics/metrics_state_manager.cc
+++ b/components/metrics/metrics_state_manager.cc
@@ -299,7 +299,7 @@
   // field trial randomization (group assignment) will be different.
   if (ShouldGenerateProvisionalClientId(is_first_run)) {
     local_state_->SetString(prefs::kMetricsProvisionalClientID,
-                            base::GenerateUuid());
+                            base::Uuid::GenerateRandomV4().AsLowercaseString());
   }
 
   // The |initial_client_id_| should only be set if UMA is enabled or there's a
@@ -493,7 +493,7 @@
   std::string provisional_client_id =
       local_state_->GetString(prefs::kMetricsProvisionalClientID);
   if (provisional_client_id.empty()) {
-    client_id_ = base::GenerateUuid();
+    client_id_ = base::Uuid::GenerateRandomV4().AsLowercaseString();
     base::UmaHistogramEnumeration("UMA.ClientIdSource",
                                   ClientIdSource::kClientIdNew);
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -612,7 +612,8 @@
   // The GUID retrieved should be valid unless retrieval failed.
   // If not, return nullptr. This will result in a new GUID being generated by
   // the calling function ForceClientIdCreation().
-  if (client_info && !base::IsValidUuid(client_info->client_id)) {
+  if (client_info &&
+      !base::Uuid::ParseCaseInsensitive(client_info->client_id).is_valid()) {
     return nullptr;
   }
 
diff --git a/components/password_manager/core/browser/password_form.cc b/components/password_manager/core/browser/password_form.cc
index 059374d..defbdd9 100644
--- a/components/password_manager/core/browser/password_form.cc
+++ b/components/password_manager/core/browser/password_form.cc
@@ -124,6 +124,7 @@
   target.Set("signon_realm", form.signon_realm);
   target.Set("is_public_suffix_match", form.is_public_suffix_match);
   target.Set("is_affiliation_based_match", form.is_affiliation_based_match);
+  target.Set("is_grouped_match", form.is_grouped_match);
   target.Set("url", form.url.possibly_invalid_spec());
   target.Set("action", form.action.possibly_invalid_spec());
   target.Set("submit_element", form.submit_element);
@@ -415,6 +416,7 @@
              rhs.was_parsed_using_autofill_predictions &&
          lhs.is_public_suffix_match == rhs.is_public_suffix_match &&
          lhs.is_affiliation_based_match == rhs.is_affiliation_based_match &&
+         lhs.is_grouped_match == rhs.is_grouped_match &&
          lhs.affiliated_web_realm == rhs.affiliated_web_realm &&
          lhs.app_display_name == rhs.app_display_name &&
          lhs.app_icon_url == rhs.app_icon_url &&
diff --git a/components/password_manager/core/browser/password_form.h b/components/password_manager/core/browser/password_form.h
index cdb333e..9afa569 100644
--- a/components/password_manager/core/browser/password_form.h
+++ b/components/password_manager/core/browser/password_form.h
@@ -399,6 +399,9 @@
   // If true, this is a credential found using affiliation-based match.
   bool is_affiliation_based_match = false;
 
+  // If true, this is a credential found using grouping match.
+  bool is_grouped_match = false;
+
   // The type of the event that was taken as an indication that this form is
   // being or has already been submitted. This field is not persisted and filled
   // out only for submitted forms.
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index fa97e7d..0cef302 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -4523,4 +4523,192 @@
   EXPECT_FALSE(manager()->HaveFormManagersReceivedData(&other_driver));
 }
 
+enum class PredictionSource {
+  ID_ATTRIBUTE = 0,
+  NAME_ATTRIBUTE = 1,
+  AUTOCOMPLETE = 2,
+  SERVER = 3
+};
+
+class PasswordManagerWithOtpVariationsTest
+    : public PasswordManagerTest,
+      public testing::WithParamInterface<std::tuple<
+          /*saved_form.username=*/std::u16string,
+          /*saved_form.password=*/absl::optional<std::u16string>,
+          /*another_saved_form.password_value=*/absl::optional<std::u16string>,
+          /*one_time_code_form.username_value=*/std::u16string,
+          PredictionSource>> {
+ protected:
+  const std::u16string test_form_password_element_ = u"one-time-code";
+  const std::u16string test_form_otp_value_ = u"123456";
+  const std::u16string test_form_username_element_ = u"username";
+};
+
+// Tests that only filling and saving fallbacks are available for a field
+// classified as an OTP field. The test is similar to non-parametrized
+// FillingAndSavingFallbacksOnOtpForm*, but tries many different circumstances.
+TEST_P(PasswordManagerWithOtpVariationsTest,
+       FillingAndSavingFallbacksOnOtpForm) {
+  auto [saved_form_username, saved_form_password, another_saved_form_password,
+        one_time_code_form_username_value, prediction_type] = GetParam();
+  PasswordFormManager::set_wait_for_server_predictions_for_filling(
+      prediction_type == PredictionSource::SERVER);
+
+  EXPECT_CALL(client_, IsSavingAndFillingEnabled(_))
+      .WillRepeatedly(Return(true));
+  PasswordForm saved_form;
+  // No saved password means no saved credential.
+  const bool has_saved_login = saved_form_password.has_value();
+  if (has_saved_login) {
+    saved_form.url = test_form_url_;
+    saved_form.signon_realm = test_signon_realm_;
+    saved_form.username_value = saved_form_username;
+    saved_form.password_value = saved_form_password.value();
+    store_->AddLogin(saved_form);
+  }
+  const bool has_saved_login_of_another_form =
+      another_saved_form_password.has_value();
+  PasswordForm another_saved_form;
+  if (has_saved_login_of_another_form) {
+    another_saved_form.url = test_form_url_;
+    another_saved_form.signon_realm = test_signon_realm_;
+    another_saved_form.username_value = u"another_username";
+    another_saved_form.password_value = another_saved_form_password.value();
+    store_->AddLogin(another_saved_form);
+  }
+
+  PasswordForm one_time_code_form;
+  one_time_code_form.url = test_form_url_;
+  one_time_code_form.signon_realm = test_signon_realm_;
+  one_time_code_form.form_data.url = test_form_url_;
+  one_time_code_form.form_data.unique_renderer_id = FormRendererId(10);
+
+  const bool otp_form_has_username = one_time_code_form_username_value != u"";
+  if (otp_form_has_username) {
+    one_time_code_form.username_value = one_time_code_form_username_value;
+    one_time_code_form.username_element = test_form_username_element_;
+    FormFieldData username_field;
+    username_field.name = test_form_username_element_;
+    username_field.value = one_time_code_form_username_value;
+    username_field.form_control_type = "text";
+    username_field.unique_renderer_id = FieldRendererId(1);
+    one_time_code_form.form_data.fields.push_back(username_field);
+  }
+
+  FormFieldData otp_field;
+  otp_field.value = test_form_otp_value_;
+  otp_field.form_control_type = "password";
+  otp_field.unique_renderer_id = FieldRendererId(2);
+  one_time_code_form.form_data.fields.push_back(otp_field);
+  switch (prediction_type) {
+    case PredictionSource::ID_ATTRIBUTE:
+      one_time_code_form.form_data.fields[otp_form_has_username].id_attribute =
+          test_form_password_element_;
+      break;
+    case PredictionSource::NAME_ATTRIBUTE:
+      one_time_code_form.form_data.fields[otp_form_has_username]
+          .name_attribute = test_form_password_element_;
+      break;
+    case PredictionSource::AUTOCOMPLETE:
+      one_time_code_form.form_data.fields[otp_form_has_username]
+          .autocomplete_attribute =
+          base::UTF16ToUTF8(test_form_password_element_);
+      break;
+    case PredictionSource::SERVER:
+      FormStructure form_structure(one_time_code_form.form_data);
+      form_structure.field(otp_form_has_username)
+          ->set_server_predictions(
+              {CreateFieldPrediction(autofill::NOT_PASSWORD)});
+      manager()->ProcessAutofillPredictions(&driver_, {&form_structure});
+      break;
+  }
+
+  PasswordFormFillData form_data;
+  EXPECT_CALL(driver_, SetPasswordFillData)
+      .WillRepeatedly(SaveArg<0>(&form_data));
+
+  manager()->OnPasswordFormsParsed(&driver_, {one_time_code_form.form_data});
+  task_environment_.RunUntilIdle();
+
+  // Check that manual filling fallback available.
+  if (has_saved_login) {
+    EXPECT_EQ(saved_form.username_value,
+              form_data.preferred_login.username_value);
+    EXPECT_EQ(saved_form.password_value,
+              form_data.preferred_login.password_value);
+  } else if (has_saved_login_of_another_form) {
+    EXPECT_EQ(another_saved_form.username_value,
+              form_data.preferred_login.username_value);
+    EXPECT_EQ(another_saved_form.password_value,
+              form_data.preferred_login.password_value);
+  } else {
+    EXPECT_EQ(form_data.preferred_login.username_value, u"");
+    EXPECT_EQ(form_data.preferred_login.password_value, u"");
+  }
+  // Check that no automatic filling available.
+  EXPECT_TRUE(form_data.username_element_renderer_id.is_null());
+  EXPECT_TRUE(form_data.password_element_renderer_id.is_null());
+  // Check that saving fallback is available.
+  std::unique_ptr<PasswordFormManagerForUI> form_manager_to_save;
+  EXPECT_CALL(client_, ShowManualFallbackForSavingPtr(_, _, _))
+      .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save)));
+  manager()->OnInformAboutUserInput(&driver_, one_time_code_form.form_data);
+  ASSERT_TRUE(form_manager_to_save);
+
+  PasswordForm expected_pending_form;
+  if ((!otp_form_has_username && has_saved_login) ||
+      (otp_form_has_username && has_saved_login &&
+       one_time_code_form_username_value == saved_form_username)) {
+    // If there is no username or the username matches existing credential,
+    // password manager tries to update the existing credential. If a user
+    // clicks a manual fallback for updating, update password bubble is shown.
+    expected_pending_form = saved_form;
+  } else if (!otp_form_has_username && has_saved_login_of_another_form) {
+    // If there is no username, password manager tries to update the existing
+    // credential. If a user clicks a manual fallback for updating, update
+    // password bubble is shown.
+    expected_pending_form = another_saved_form;
+  } else {
+    // No matching credential in password manager. If a user clicks a manual
+    // fallback for saving, save password bubble is shown.
+    expected_pending_form = one_time_code_form;
+
+    // Set values that is expected from parsing |form_data|.
+    expected_pending_form.password_element_renderer_id = FieldRendererId(2);
+    expected_pending_form.password_value = test_form_otp_value_;
+    if (otp_form_has_username) {
+      expected_pending_form.username_value = one_time_code_form_username_value;
+      expected_pending_form.username_element = test_form_username_element_;
+    }
+  }
+  // Just in case a user uses the manual for saving, the otp value will be saved
+  // as password.
+  expected_pending_form.password_value = test_form_otp_value_;
+  expected_pending_form.only_for_fallback = true;
+  EXPECT_THAT(form_manager_to_save->GetPendingCredentials(),
+              FormMatches(expected_pending_form));
+
+  // Check that neither save or update prompt is shown automatically;
+  EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0);
+  OnPasswordFormSubmitted(one_time_code_form.form_data);
+  manager()->DidNavigateMainFrame(true);
+  manager()->OnPasswordFormsRendered(&driver_, {});
+  task_environment_.RunUntilIdle();
+}
+
+// TODO(crbug.com/1428906): Add cases for
+// |PendingCredentialsState::EQUAL_TO_SAVED_MATCH| and
+// |PendingCredentialsState::AUTOMATIC_SAVE|.
+INSTANTIATE_TEST_SUITE_P(
+    All,
+    PasswordManagerWithOtpVariationsTest,
+    testing::Combine(testing::Values(u"", u"username"),
+                     testing::Values(u"password", absl::nullopt),
+                     testing::Values(u"another_password", absl::nullopt),
+                     testing::Values(u"", u"username", u"+1 650 000 000"),
+                     testing::Values(PredictionSource::ID_ATTRIBUTE,
+                                     PredictionSource::NAME_ATTRIBUTE,
+                                     PredictionSource::AUTOCOMPLETE,
+                                     PredictionSource::SERVER)));
+
 }  // namespace password_manager
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb
index def59df..b8eb201 100644
--- a/components/strings/components_strings_as.xtb
+++ b/components/strings/components_strings_as.xtb
@@ -2100,6 +2100,7 @@
 <translation id="6165508094623778733">অধিক জানক</translation>
 <translation id="6167577165590485365">শেষবাৰ আহৰণ কৰাৰ প্ৰয়াস:</translation>
 <translation id="6169916984152623906">বর্তমান আপুনি ব্যক্তিগতভাৱে ব্ৰাজিং কৰিব পাৰিব আৰু এই ডিভাইচটো ব্যৱহাৰ কৰা অন্য লোকসকলে আপোনাৰ কার্যকলাপ দেখা নাপাব। তথাপিও, ডাউনল’ড আৰু বুকমার্কসমূহ ছেভ কৰা হ’ব।</translation>
+<translation id="617256461084925519">Google Chromeএ এইগৰাকী আপুনিয়েই বুলি সত্যাপন কৰিবলৈ চেষ্টা কৰি আছে যাতে এইটোৱে আপোনাৰ পৰিশোধৰ তথ্য পূৰ কৰিব পাৰে।</translation>
 <translation id="6177128806592000436">এই ছাইটলৈ থকা আপোনাৰ সংযোগটো সুৰক্ষিত নহয়</translation>
 <translation id="6177531123306197852">এনভেল’প C2</translation>
 <translation id="6180316780098470077">পুনঃচেষ্টাৰ অন্তৰাল</translation>
@@ -2651,6 +2652,7 @@
 <translation id="7518003948725431193">এই ৱেব ঠিকনাটোৰ বাবে কোনো ৱেবপৃষ্ঠা বিচাৰি পোৱা নাই: <ph name="URL" /></translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7521825010239864438">"<ph name="SECTION" />" শাখাটো লুকুওৱা হৈছে</translation>
+<translation id="752189128961566325">আপুনি এইটো সমগ্ৰ Google প্ৰ’ডাক্টত ব্যৱহাৰ কৰিব পাৰে</translation>
 <translation id="7523408071729642236">নিৰ্মাণ কৰা</translation>
 <translation id="7526934274050461096">এই ছাইটলৈ থকা আপোনাৰ সংযোগটো ব্যক্তিগত নহয়</translation>
 <translation id="7529884293139707752">হ’মস্কুলিং</translation>
@@ -2878,6 +2880,7 @@
 <translation id="8057711352706143257">"<ph name="SOFTWARE_NAME" />"ক সঠিককৈ কনফিগাৰ কৰা হোৱা নাই। "<ph name="SOFTWARE_NAME" />" আনইনষ্টল কৰিলে সাধাৰণতে সমস্যাটো সমাধান কৰে। <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="8058009102480785916">খাদ্য বস্তু প্ৰস্তুতকৰণ</translation>
 <translation id="8058603697124206642">প্ৰয়োজনীয় নহয়</translation>
+<translation id="8064892030280197386">এইগৰাকী আপুনিয়েই বুলি সত্যাপন কৰক যাতে এইটোৱে আপোনাৰ পৰিশোধৰ তথ্য পূৰ কৰিব পাৰে।</translation>
 <translation id="8066225060526005217">কুকিৰ ছেটিঙে পৰিচালনা কৰে</translation>
 <translation id="8067872629359326442">আপুনি এটা প্ৰবঞ্চনামূলক ছাইটত এইমাত্ৰ নিজৰ পাছৱৰ্ডটো দিছে। Chromiumএ সহায় কৰিব পাৰে। আপোনাৰ পাছৱৰ্ডটো সলনি কৰিবলৈ আৰু আপোনাৰ একাউণ্টটো ক্ষতি হোৱাৰ সম্ভাৱনা থকা বুলি Googleক অৱগত কৰিবলৈ একাউণ্টটো সুৰক্ষিত কৰকত ক্লিক কৰক।</translation>
 <translation id="8070439594494267500">এপৰ চিহ্ন</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index 8c0ab618..c9cd811 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -2105,6 +2105,7 @@
 <translation id="6165508094623778733">Més informació</translation>
 <translation id="6167577165590485365">Darrer intent de recollida:</translation>
 <translation id="6169916984152623906">Ara pots navegar de manera privada i les altres persones que utilitzin aquest dispositiu no veuran la teva activitat. Tanmateix, les baixades i les adreces d'interès sí que es desaran.</translation>
+<translation id="617256461084925519">Google Chrome està provant de verificar la teva identitat per poder emplenar la informació de pagament.</translation>
 <translation id="6177128806592000436">La connexió amb aquest lloc web no és segura</translation>
 <translation id="6177531123306197852">Sobre C2</translation>
 <translation id="6180316780098470077">Interval d'intents</translation>
@@ -2656,6 +2657,7 @@
 <translation id="7518003948725431193">No s'ha trobat cap pàgina web per a l'adreça: <ph name="URL" /></translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7521825010239864438">S'ha amagat la secció "<ph name="SECTION" />"</translation>
+<translation id="752189128961566325">Pots utilitzar-la en tots els productes de Google</translation>
 <translation id="7523408071729642236">Fabricació</translation>
 <translation id="7526934274050461096">La connexió amb aquest lloc no és privada</translation>
 <translation id="7529884293139707752">Educació a casa</translation>
@@ -2883,6 +2885,7 @@
 <translation id="8057711352706143257"><ph name="SOFTWARE_NAME" /> no s'ha configurat correctament. Normalment el problema se soluciona desinstal·lant <ph name="SOFTWARE_NAME" />. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="8058009102480785916">Producció alimentària</translation>
 <translation id="8058603697124206642">no és obligatori</translation>
+<translation id="8064892030280197386">verificar la teva identitat per poder emplenar la informació de pagament.</translation>
 <translation id="8066225060526005217">Gestionat per la configuració de galetes</translation>
 <translation id="8067872629359326442">Acabes d'introduir la contrasenya en un lloc web enganyós. Chromium pot ajudar-te. Per canviar la contrasenya i notificar a Google que el compte pot estar en perill, fes clic a Protegeix el compte.</translation>
 <translation id="8070439594494267500">Icona de l'aplicació</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 83b6af0..d43efd35 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -307,6 +307,7 @@
 <translation id="1658918301167915956">bluetooth devices</translation>
 <translation id="1662550410081243962">Save and fill payment methods</translation>
 <translation id="1663943134801823270">Cards and addresses are from Chrome. You can manage them in <ph name="BEGIN_LINK" />Settings<ph name="END_LINK" />.</translation>
+<translation id="1668071460721346172">Get an email</translation>
 <translation id="1671391448414634642">Pages in <ph name="SOURCE_LANGUAGE" /> will be translated to <ph name="TARGET_LANGUAGE" /> from now on.</translation>
 <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> to <ph name="TARGET_LANGUAGE" /></translation>
 <translation id="1682696192498422849">Short edge first</translation>
@@ -367,6 +368,7 @@
 <translation id="1806174020048213474">This app is requesting permission to install Wi-Fi credentials. After setup, your <ph name="DEVICE_TYPE" /> will automatically connect to participating Wi-Fi networks. To remove these credentials, uninstall the app.</translation>
 <translation id="1807246157184219062">Light</translation>
 <translation id="1807528111851433570">Start sheet</translation>
+<translation id="180757923930449935">(64-bit emulated)</translation>
 <translation id="180991881384371158">Your CVC is on the back of your card. It’s the last three digits at the top right of the signature box.</translation>
 <translation id="181000283860817563">Track prices across multiple sites</translation>
 <translation id="1810391395243432441">Protect passwords with your screen lock</translation>
@@ -1586,6 +1588,7 @@
 <translation id="4877083676943085827">{COUNT,plural, =0{None}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> <ph name="AND_MORE" />}}</translation>
 <translation id="4877422487531841831"><ph name="TEXT" /> search</translation>
 <translation id="4879491255372875719">Automatic (default)</translation>
+<translation id="4879723019639546076">This address is saved only to Chrome. To use it across Google products, save it in your Google Account, (<ph name="ACCOUNT" />).</translation>
 <translation id="4880827082731008257">Search history</translation>
 <translation id="4881695831933465202">Open</translation>
 <translation id="4881808915112408168">24.0 in x 31.5 in</translation>
@@ -2144,6 +2147,7 @@
 <translation id="6279183038361895380">Press |<ph name="ACCELERATOR" />| to show your cursor</translation>
 <translation id="6280223929691119688">Can’t deliver to this address. Select a different address.</translation>
 <translation id="6284292079994426700">26 in x 38 in</translation>
+<translation id="6284517535531159884">Variations Seed Type</translation>
 <translation id="6285507000506177184">Manage downloads in Chrome button; press Enter to manage files that you have downloaded in Chrome</translation>
 <translation id="6289939620939689042">Page colour</translation>
 <translation id="6293309776179964942">JIS B5</translation>
@@ -2317,6 +2321,7 @@
 <translation id="6716672519412350405"><ph name="URL" /> wants to create a 3D map of your surroundings and track camera position</translation>
 <translation id="6718612893943028815">Use camera?</translation>
 <translation id="6721678857435001674">See the make and model of your Security Key</translation>
+<translation id="6726832600570791992">(32-bit emulated)</translation>
 <translation id="6727094998759448074">SRA4</translation>
 <translation id="6732087373923685049">camera</translation>
 <translation id="6738516213925468394">Your data was encrypted with your <ph name="BEGIN_LINK" />sync passphrase<ph name="END_LINK" /> on <ph name="TIME" />. Enter it to start sync.</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 444dac5..2e7bb29 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -2105,6 +2105,7 @@
 <translation id="6165508094623778733">ສຶກສາ​ເພີ່ມ​ເຕີມ</translation>
 <translation id="6167577165590485365">ພະຍາຍາມດຶງຫຼ້າສຸດ:</translation>
 <translation id="6169916984152623906">ຕອນນີ້ທ່ານສາມາດທ່ອງເວັບແບບສ່ວນຕົວໄດ້ແລ້ວ ແລະ ຄົນອື່ນທີ່ໃຊ້ອຸປະກອນນີ້ຈະບໍ່ເຫັນການເຄື່ອນໄຫວຂອງທ່ານ. ແນວໃດກໍຕາມ, ການດາວໂຫຼດ ແລະ ບຸກມາກຈະຖືກບັນທຶກໄວ້.</translation>
+<translation id="617256461084925519">Google Chrome ກຳລັງພະຍາຍາມຢັ້ງຢືນວ່າແມ່ນທ່ານເພື່ອໃຫ້ສາມາດຕື່ມຂໍ້ມູນການຈ່າຍເງິນຂອງທ່ານໄດ້.</translation>
 <translation id="6177128806592000436">ການເຊື່ອມຕໍ່ຂອງທ່ານກັບເວັບໄຊນີ້ບໍ່ປອດໄພ</translation>
 <translation id="6177531123306197852">Envelope C2</translation>
 <translation id="6180316780098470077">ຊ່ວງຫ່າງລະຫວ່າງການລອງໃໝ່ແຕ່ລະຄັ້ງ</translation>
@@ -2656,6 +2657,7 @@
 <translation id="7518003948725431193">ບໍ່ພົບໜ້າ​​ເວັບສໍາລັບທີ່ຢູ່ເວັບ: <ph name="URL" /></translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7521825010239864438">ເຊື່ອງສ່ວນ "<ph name="SECTION" />" ໄວ້ແລ້ວ</translation>
+<translation id="752189128961566325">ເຊິ່ງທ່ານສາມາດໃຊ້ໄດ້ກັບທົ່ວທຸກຜະລິດຕະພັນ Google</translation>
 <translation id="7523408071729642236">ການຜະລິດ</translation>
 <translation id="7526934274050461096">ການເຊື່ອມຕໍ່ກັບເວັບໄຊນີ້ຂອງທ່ານບໍ່ເປັນສ່ວນຕົວ</translation>
 <translation id="7529884293139707752">ການຮຽນໜັງສືຢູ່ເຮືອນ</translation>
@@ -2883,6 +2885,7 @@
 <translation id="8057711352706143257">"<ph name="SOFTWARE_NAME" />" ບໍ່ຖືກກຳນົດຄ່າຢ່າງຖືກຕ້ອງ. ໂດຍປົກກະຕິແລ້ວການຖອນຕິດຕັ້ງ "<ph name="SOFTWARE_NAME" />" ຈະແກ້ໄຂບັນຫາໄດ້. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="8058009102480785916">ການຜະລິດອາຫານ</translation>
 <translation id="8058603697124206642">ບໍ່ຈຳເປັນ</translation>
+<translation id="8064892030280197386">ຢັ້ງຢືນວ່າແມ່ນທ່ານເພື່ອໃຫ້ສາມາດຕື່ມຂໍ້ມູນການຈ່າຍເງິນຂອງທ່ານໄດ້.</translation>
 <translation id="8066225060526005217">ຈັດການໂດຍການຕັ້ງຄ່າຄຸກກີ້</translation>
 <translation id="8067872629359326442">ທ່ານຫາກໍປ້ອນລະຫັດຜ່ານຂອງທ່ານໃສ່ເວັບໄຊຫຼອກລວງ. Chromium ສາມາດຊ່ວຍໄດ້. ເພື່ອປ່ຽນລະຫັດຜ່ານຂອງທ່ານ ແລະ ແຈ້ງບອກ Google ວ່າບັນຊີຂອງທ່ານອາດຈະມີຄວາມສ່ຽງ, ກະລຸນາຄລິກປົກປ້ອງບັນຊີ.</translation>
 <translation id="8070439594494267500">ໄອຄອນແອັບ</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index 1123e71..71fb992 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -2105,6 +2105,7 @@
 <translation id="6165508094623778733">ပိုမိုလေ့လာရန်</translation>
 <translation id="6167577165590485365">ရယူရန် နောက်ဆုံးကြိုးပမ်းချိန်-</translation>
 <translation id="6169916984152623906">ယခုဆိုလျှင် ဝဘ်စာမျက်နှာများကို သင်တစ်ဦးတည်းသီးသန့် ဖွင့်ကြည့်နိုင်ပြီဖြစ်ပြီး ဤစက်ပစ္စည်းကို အသုံးပြုသော အခြားသူများက သင်၏လုပ်ဆောင်ချက်ကို မြင်နိုင်တော့မည်မဟုတ်ပါ။ သို့သော်လည်း ဒေါင်းလုဒ်လုပ်ထားသည့်အရာနှင့် လိပ်စာများကိုမူ သိမ်းဆည်ထားပါမည်။</translation>
+<translation id="617256461084925519">သင့်ငွေပေးချေမှု အချက်အလက်တွင် ဖြည့်နိုင်ရန် Google Chrome က သင်ဖြစ်ကြောင်း အတည်ပြုနေသည်။</translation>
 <translation id="6177128806592000436">ဤဝဘ်ဆိုက်သို့ သင်၏ချိတ်ဆက်ထားမှုသည် လုံခြုံမှုမရှိပါ</translation>
 <translation id="6177531123306197852">C2 စာအိတ်</translation>
 <translation id="6180316780098470077">ပြန်စမ်းချိန် ကြားကာလ</translation>
@@ -2657,6 +2658,7 @@
 <translation id="7518003948725431193">ဝဘ် လိပ်စာ အတွက် ဝဘ် စာမျက်နှာများကို ရှာမတွေ့ခဲ့ပါ: <ph name="URL" /></translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7521825010239864438">ကဏ္ဍ "<ph name="SECTION" />" ခု ဝှက်ထားသည်</translation>
+<translation id="752189128961566325">Google ထုတ်ကုန်များတွင် ၎င်းကို သုံးနိုင်သည်</translation>
 <translation id="7523408071729642236">ကုန်ထုတ်လုပ်မှု</translation>
 <translation id="7526934274050461096">ဤဝဘ်ဆိုက်သို့ သင့်ချိတ်ဆက်ထားမှုသည် သီးသန့်မဟုတ်ပါ</translation>
 <translation id="7529884293139707752">အိမ်တွင်းစာသင်ကြားခြင်း</translation>
@@ -2885,6 +2887,7 @@
 <translation id="8057711352706143257">"<ph name="SOFTWARE_NAME" />" ကို မှန်ကန်စွာ စီစဉ်သတ်မှတ်မထားပါ။ "<ph name="SOFTWARE_NAME" />" ပရိုဂရမ်ကို ဖယ်ရှားလိုက်ဖြင့် ပြဿနာကို ဖြေရှင်းပေးလေ့ရှိပါသည်။ <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="8058009102480785916">အစားအသောက်ထုတ်လုပ်မှု</translation>
 <translation id="8058603697124206642">မလိုအပ်ပါ</translation>
+<translation id="8064892030280197386">သင့်ငွေပေးချေမှု အချက်အလက်တွင် ဖြည့်နိုင်ရန် သင်ဖြစ်ကြောင်း အတည်ပြုနေသည်။</translation>
 <translation id="8066225060526005217">ကွတ်ကီး ဆက်တင်များက စီမံထားသည်</translation>
 <translation id="8067872629359326442">လှည့်ဖြားတတ်သော ဝဘ်ဆိုက်တစ်ခုတွင် သင့်စကားဝှက်ကို သင်က ယခုလေးတွင် ထည့်လိုက်သည်။ Chromium က ကူညီနိုင်ပါသည်။ သင်၏စကားဝှက် ပြောင်းရန်နှင့် သင့်အကောင့်အန္တရာယ်ရှိနိုင်ကြောင်း Google သို့ အသိပေးရန် 'အကောင့် ကာကွယ်ရေး' ကို နှိပ်ပါ။</translation>
 <translation id="8070439594494267500">အက်ပ်သင်္ကေတ</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index a995f10..fdf0d43 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -1877,7 +1877,7 @@
 <translation id="5586831831248371458"><ph name="KEYWORD_SUFFIX" /> खोज्नुहोस्</translation>
 <translation id="5587987780934666589">प्लेटफर्मका प्रयोगकर्ता</translation>
 <translation id="5593349413089863479">इन्टरनेट पूर्ण रूपमा सुरक्षित छैन</translation>
-<translation id="5595485650161345191">ठेगाना सम्पादन गर्नुहोस्</translation>
+<translation id="5595485650161345191">ठेगाना बदल्नुहोस्</translation>
 <translation id="5596939519753369075">२ x ३.५ इन्च</translation>
 <translation id="560412284261940334">व्यवस्थापन समर्थित छैन</translation>
 <translation id="5605670050355397069">लेजर</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index 2bc1835f2..57a63093 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -2105,6 +2105,7 @@
 <translation id="6165508094623778733">Saiba mais</translation>
 <translation id="6167577165590485365">Última tentativa de obtenção:</translation>
 <translation id="6169916984152623906">Agora, pode navegar em privado e as outras pessoas que utilizarem este dispositivo não veem a sua atividade. No entanto, as transferências e os marcadores são guardados.</translation>
+<translation id="617256461084925519">O Google Chrome está a tentar validar a sua identidade para poder preencher as suas informações de pagamento.</translation>
 <translation id="6177128806592000436">A sua ligação a este site não é segura</translation>
 <translation id="6177531123306197852">Envelope C2</translation>
 <translation id="6180316780098470077">Intervalo entre tentativas</translation>
@@ -2655,6 +2656,7 @@
 <translation id="7518003948725431193">Não foi encontrada qualquer página Web para o endereço Web: <ph name="URL" /></translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7521825010239864438">Secção "<ph name="SECTION" />" ocultada</translation>
+<translation id="752189128961566325">Pode usá-lo em todos os produtos Google</translation>
 <translation id="7523408071729642236">Indústria</translation>
 <translation id="7526934274050461096">A sua ligação a este site não é privada.</translation>
 <translation id="7529884293139707752">Ensino doméstico</translation>
@@ -2882,6 +2884,7 @@
 <translation id="8057711352706143257">O "<ph name="SOFTWARE_NAME" />" não está configurado corretamente. Normalmente, a desinstalação do "<ph name="SOFTWARE_NAME" />" resolve o problema. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="8058009102480785916">Produção de alimentos</translation>
 <translation id="8058603697124206642">Não obrigatório</translation>
+<translation id="8064892030280197386">validar a sua identidade para poder preencher as informações de pagamento.</translation>
 <translation id="8066225060526005217">Gerido pelas definições de cookies</translation>
 <translation id="8067872629359326442">Acabou de introduzir a sua palavra-passe num site fraudulento. O Chromium pode ajudar. Para alterar a sua palavra-passe e notificar a Google de que a sua conta pode estar em risco, clique em Proteger conta.</translation>
 <translation id="8070439594494267500">Ícone da app</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index e810de7d..9ad6a00 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -2100,6 +2100,7 @@
 <translation id="6165508094623778733">Ďalšie informácie</translation>
 <translation id="6167577165590485365">Posledný pokus o načítanie:</translation>
 <translation id="6169916984152623906">Teraz môžete prehliadať internet v súkromí a ostatní používatelia tohto zariadenia vašu aktivitu neuvidia. Stiahnuté súbory a záložky však budú uložené.</translation>
+<translation id="617256461084925519">Google Chrome sa pokúša overiť vašu totožnosť, aby mohol dopĺňať vaše platobné údaje.</translation>
 <translation id="6177128806592000436">Spojenie s týmto webom nie je zabezpečené</translation>
 <translation id="6177531123306197852">Obálka C2</translation>
 <translation id="6180316780098470077">Interval opakovania pokusov</translation>
@@ -2651,6 +2652,7 @@
 <translation id="7518003948725431193">Na <ph name="URL" /> sa nenašla žiadna webová stránka</translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7521825010239864438">Sekcia <ph name="SECTION" /> bola skrytá</translation>
+<translation id="752189128961566325">Môžete ju používať v službách Googlu</translation>
 <translation id="7523408071729642236">Výroba</translation>
 <translation id="7526934274050461096">Spojenie s týmto webom nie je súkromné</translation>
 <translation id="7529884293139707752">Domáce vzdelávanie</translation>
@@ -2878,6 +2880,7 @@
 <translation id="8057711352706143257">Softvér <ph name="SOFTWARE_NAME" /> nie je správne nakonfigurovaný. Tento problém sa zvyčajne odstráni odinštalovaním softvéru <ph name="SOFTWARE_NAME" />. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="8058009102480785916">Výroba jedál</translation>
 <translation id="8058603697124206642">Nepovinné</translation>
+<translation id="8064892030280197386">Overte svoju totožnosť, aby sa mohli dopĺňať svoje platobné údaje.</translation>
 <translation id="8066225060526005217">Spravované nastaveniami súborov cookie</translation>
 <translation id="8067872629359326442">Práve ste zadali svoje heslo na podvodnom webe. Chromium vám s tým pomôže. Ak chcete zmeniť heslo a upozorniť Google, že váš účet môže byť ohrozený, kliknite na Ochrániť účet.</translation>
 <translation id="8070439594494267500">Ikona aplikácie</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index ad8acfcf..6ecd1aa 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -206,7 +206,7 @@
 <translation id="1430915738399379752">In</translation>
 <translation id="1432187715652018471">trang muốn cài đặt trình xử lý dịch vụ.</translation>
 <translation id="1432581352905426595">Quản lý công cụ tìm kiếm</translation>
-<translation id="1435940442311036198">Sử dụng mã xác thực trên một thiết bị khác</translation>
+<translation id="1435940442311036198">Sử dụng khoá đăng nhập trên một thiết bị khác</translation>
 <translation id="1436185428532214179">Trang web có thể yêu cầu chỉnh sửa các tệp và thư mục trên thiết bị của bạn</translation>
 <translation id="1442386063175183758">Gấp dạng cửa bên phải</translation>
 <translation id="1442987760062738829">Đục lỗ</translation>
@@ -1875,7 +1875,7 @@
 <translation id="5572851009514199876">Vui lòng khởi động và đăng nhập vào Chrome để Chrome có thể kiểm tra xem bạn có được phép truy cập trang web này không.</translation>
 <translation id="557886905979275351">Dao cạo và máy cạo</translation>
 <translation id="5580958916614886209">Kiểm tra tháng hết hạn của bạn và thử lại</translation>
-<translation id="558420943003240152">Quản lý mật khẩu và mã xác thực…</translation>
+<translation id="558420943003240152">Quản lý mật khẩu và khoá đăng nhập…</translation>
 <translation id="5586446728396275693">Không có địa chỉ nào được lưu</translation>
 <translation id="5586831831248371458">Tìm kiếm <ph name="KEYWORD_SUFFIX" /></translation>
 <translation id="5587987780934666589">Người dùng trên nền tảng</translation>
@@ -1944,7 +1944,7 @@
 <translation id="5764920692828389743">Gửi tới <ph name="EMAIL_ADDRESS" /></translation>
 <translation id="5765072501007116331">Để xem các yêu cầu và phương thức phân phối, hãy chọn một địa chỉ</translation>
 <translation id="57689295674415555">Bạn chưa điền số thẻ ảo?</translation>
-<translation id="5772086939108830423">Sử dụng mã xác thực trên một thiết bị khác</translation>
+<translation id="5772086939108830423">Sử dụng khoá đăng nhập trên một thiết bị khác</translation>
 <translation id="5776313857861697733">Mức độ ưu tiên</translation>
 <translation id="5776574724412881956">Thẻ ảo chưa được điền? Hãy nhấp vào thông tin về thẻ ảo để sao chép vào bảng nhớ tạm. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Đã bật tính năng thử nghiệm</translation>
@@ -2512,7 +2512,7 @@
 <translation id="7201591969684833065">Quản trị viên của bạn có thể xem:</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, nhấn Tab rồi nhấn Enter để mở một thẻ ẩn danh mới nhằm duyệt web ở chế độ riêng tư</translation>
 <translation id="7203375778433816396">Đặt Chrome làm trình duyệt mặc định của hệ thống</translation>
-<translation id="7207736436284129083">{COUNT,plural, =0{Không có}=1{1 mã xác thực}other{# mã xác thực}}</translation>
+<translation id="7207736436284129083">{COUNT,plural, =0{Không có}=1{1 khoá đăng nhập}other{# khoá đăng nhập}}</translation>
 <translation id="7210863904660874423"><ph name="HOST_NAME" /> không tuân thủ các tiêu chuẩn bảo mật.</translation>
 <translation id="7210993021468939304">Hoạt động của Linux trong vùng chứa, đồng thời có thể cài đặt và chạy các ứng dụng Linux trong vùng chứa</translation>
 <translation id="721197778055552897"><ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /> về sự cố này.</translation>
@@ -3360,7 +3360,7 @@
 <translation id="961663415146723894">Đóng gáy dưới cùng</translation>
 <translation id="962484866189421427">Nội dung này có thể tìm cách cài đặt ứng dụng lừa đảo giả mạo nội dung khác hoặc thu thập dữ liệu có thể được dùng để theo dõi bạn. <ph name="BEGIN_LINK" />Vẫn hiển thị<ph name="END_LINK" /></translation>
 <translation id="963837307749850257">Tất cả người dùng</translation>
-<translation id="964050462028070434">Quản lý mật khẩu và mã xác thực…</translation>
+<translation id="964050462028070434">Quản lý mật khẩu và khoá đăng nhập…</translation>
 <translation id="96680173638229310">Ô tô và xe cộ</translation>
 <translation id="969892804517981540">Phiên bản Chính thức</translation>
 <translation id="975560348586398090">{COUNT,plural, =0{Không có}=1{1 mục}other{# mục}}</translation>
diff --git a/components/supervised_user/core/browser/kids_chrome_management_client.cc b/components/supervised_user/core/browser/kids_chrome_management_client.cc
index 9082909..be8c75d 100644
--- a/components/supervised_user/core/browser/kids_chrome_management_client.cc
+++ b/components/supervised_user/core/browser/kids_chrome_management_client.cc
@@ -38,11 +38,25 @@
   kClassifyUrl,
 };
 
+// Corresponds to tools/metrics/histograms/enums.xml counterpart. Do not
+// renumber entries as this breaks Uma metrics.
+enum class KidsChromeManagementClientParsingResult {
+  kSuccess = 0,
+  kResponseDictionaryFailure = 1,
+  kDisplayClassificationFailure = 2,
+  kInvalidDisplayClassification = 3,
+  kMaxValue = kInvalidDisplayClassification,
+};
+
 constexpr char kClassifyUrlDataContentType[] =
     "application/x-www-form-urlencoded";
 
+constexpr char kClassifyUrlAuthErrorMetric[] =
+    "FamilyLinkUser.ClassifyUrlRequest.AuthError";
 constexpr char kClassifyUrlNetOrHttpStatusMetric[] =
     "FamilyLinkUser.ClassifyUrlRequest.NetOrHttpStatus";
+constexpr char kClassifyUrlParsingResultMetric[] =
+    "FamilyLinkUser.ClassifyUrlRequest.ParsingResult";
 
 // Constants for ClassifyURL.
 constexpr char kClassifyUrlOauthConsumerName[] = "kids_url_classifier";
@@ -79,6 +93,9 @@
   if (!dict) {
     DLOG(WARNING)
         << "GetClassifyURLResponseProto failed to parse response dictionary";
+    base::UmaHistogramEnumeration(
+        kClassifyUrlParsingResultMetric,
+        KidsChromeManagementClientParsingResult::kResponseDictionaryFailure);
     response_proto->set_display_classification(
         kids_chrome_management::ClassifyUrlResponse::
             UNKNOWN_DISPLAY_CLASSIFICATION);
@@ -90,6 +107,9 @@
   if (!maybe_classification_string) {
     DLOG(WARNING)
         << "GetClassifyURLResponseProto failed to parse displayClassification";
+    base::UmaHistogramEnumeration(
+        kClassifyUrlParsingResultMetric,
+        KidsChromeManagementClientParsingResult::kDisplayClassificationFailure);
     response_proto->set_display_classification(
         kids_chrome_management::ClassifyUrlResponse::
             UNKNOWN_DISPLAY_CLASSIFICATION);
@@ -106,11 +126,17 @@
   } else {
     DLOG(WARNING)
         << "GetClassifyURLResponseProto expected a valid displayClassification";
+    base::UmaHistogramEnumeration(
+        kClassifyUrlParsingResultMetric,
+        KidsChromeManagementClientParsingResult::kInvalidDisplayClassification);
     response_proto->set_display_classification(
         kids_chrome_management::ClassifyUrlResponse::
             UNKNOWN_DISPLAY_CLASSIFICATION);
   }
 
+  base::UmaHistogramEnumeration(
+      kClassifyUrlParsingResultMetric,
+      KidsChromeManagementClientParsingResult::kSuccess);
   return response_proto;
 }
 
@@ -256,7 +282,8 @@
     signin::AccessTokenInfo token_info) {
   if (error.state() != GoogleServiceAuthError::NONE) {
     DLOG(WARNING) << "Token error: " << error.ToString();
-
+    base::UmaHistogramEnumeration(kClassifyUrlAuthErrorMetric, error.state(),
+                                  GoogleServiceAuthError::NUM_STATES);
     std::unique_ptr<google::protobuf::MessageLite> response_proto;
     DispatchResult(it, std::move(response_proto),
                    KidsChromeManagementClient::ErrorCode::kTokenError);
@@ -316,6 +343,7 @@
     // restarting the request from the beginning (fetching access token).
     if (response_code == net::HTTP_UNAUTHORIZED && !req->access_token_expired) {
       DLOG(WARNING) << "Access token expired:\n" << token_info.token;
+      // Do not record metrics in here to avoid double-counting.
       req->access_token_expired = true;
       signin::ScopeSet scopes{req->scope};
       identity_manager_->RemoveAccessTokenFromCache(
diff --git a/content/browser/locks/lock_manager.cc b/content/browser/locks/lock_manager.cc
index cc122ff8..2caaf63 100644
--- a/content/browser/locks/lock_manager.cc
+++ b/content/browser/locks/lock_manager.cc
@@ -14,8 +14,8 @@
 #include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
 #include "base/functional/bind.h"
-#include "base/guid.h"
 #include "base/memory/raw_ptr.h"
+#include "base/uuid.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/content_browser_client.h"
 #include "content/public/common/content_client.h"
@@ -324,7 +324,8 @@
 
   // TODO(jsbell): This should reflect the 'environment id' from HTML,
   // and be the same opaque string seen in Service Worker client ids.
-  const std::string client_id = base::GenerateGUID();
+  const std::string client_id =
+      base::Uuid::GenerateRandomV4().AsLowercaseString();
 
   receivers_.Add(this, std::move(receiver), {client_id, bucket_id});
 }
diff --git a/content/browser/private_aggregation/private_aggregation_host.cc b/content/browser/private_aggregation/private_aggregation_host.cc
index 33998b6..1702c67 100644
--- a/content/browser/private_aggregation/private_aggregation_host.cc
+++ b/content/browser/private_aggregation/private_aggregation_host.cc
@@ -12,11 +12,11 @@
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/functional/callback.h"
-#include "base/guid.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/rand_util.h"
 #include "base/ranges/algorithm.h"
 #include "base/time/time.h"
+#include "base/uuid.h"
 #include "base/values.h"
 #include "components/aggregation_service/aggregation_service.mojom.h"
 #include "content/browser/aggregation_service/aggregatable_report.h"
@@ -159,7 +159,7 @@
           ? now
           : GetScheduledReportTime(
                 /*report_issued_time=*/now),
-      /*report_id=*/base::GUID::GenerateRandomV4(), reporting_origin,
+      /*report_id=*/base::Uuid::GenerateRandomV4(), reporting_origin,
       debug_mode_details->is_enabled
           ? AggregatableReportSharedInfo::DebugMode::kEnabled
           : AggregatableReportSharedInfo::DebugMode::kDisabled,
diff --git a/content/browser/private_aggregation/private_aggregation_host_unittest.cc b/content/browser/private_aggregation/private_aggregation_host_unittest.cc
index 07a4d377..79c170cc 100644
--- a/content/browser/private_aggregation/private_aggregation_host_unittest.cc
+++ b/content/browser/private_aggregation/private_aggregation_host_unittest.cc
@@ -11,7 +11,6 @@
 #include <vector>
 
 #include "base/command_line.h"
-#include "base/guid.h"
 #include "base/test/gmock_move_support.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_callback.h"
diff --git a/content/test/data/accessibility/html/input-date-disabled-expected-blink.txt b/content/test/data/accessibility/html/input-date-disabled-expected-blink.txt
index 17aa165..d9a6f1f2 100644
--- a/content/test/data/accessibility/html/input-date-disabled-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-date-disabled-expected-blink.txt
@@ -2,20 +2,19 @@
 ++genericContainer ignored
 ++++genericContainer
 ++++++date inputType='date' restriction=disabled
-++++++++genericContainer ignored
+++++++++genericContainer
 ++++++++++genericContainer
-++++++++++++genericContainer
-++++++++++++++spinButton name='Month' placeholder='mm' restriction=disabled valueForRange=0.00 minValueForRange=1.00 maxValueForRange=12.00
-++++++++++++++++staticText name='mm'
-++++++++++++++++++inlineTextBox name='mm'
-++++++++++++++staticText name='/'
-++++++++++++++++inlineTextBox name='/'
-++++++++++++++spinButton name='Day' placeholder='dd' restriction=disabled valueForRange=0.00 minValueForRange=1.00 maxValueForRange=31.00
-++++++++++++++++staticText name='dd'
-++++++++++++++++++inlineTextBox name='dd'
-++++++++++++++staticText name='/'
-++++++++++++++++inlineTextBox name='/'
-++++++++++++++spinButton name='Year' placeholder='yyyy' restriction=disabled valueForRange=0.00 minValueForRange=1.00 maxValueForRange=275760.00
-++++++++++++++++staticText name='yyyy'
-++++++++++++++++++inlineTextBox name='yyyy'
-++++++++++popUpButton ignored invisible
+++++++++++++spinButton name='Month' placeholder='mm' restriction=disabled valueForRange=0.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++++staticText name='mm'
+++++++++++++++++inlineTextBox name='mm'
+++++++++++++staticText name='/'
+++++++++++++++inlineTextBox name='/'
+++++++++++++spinButton name='Day' placeholder='dd' restriction=disabled valueForRange=0.00 minValueForRange=1.00 maxValueForRange=31.00
+++++++++++++++staticText name='dd'
+++++++++++++++++inlineTextBox name='dd'
+++++++++++++staticText name='/'
+++++++++++++++inlineTextBox name='/'
+++++++++++++spinButton name='Year' placeholder='yyyy' restriction=disabled valueForRange=0.00 minValueForRange=1.00 maxValueForRange=275760.00
+++++++++++++++staticText name='yyyy'
+++++++++++++++++inlineTextBox name='yyyy'
+++++++++popUpButton ignored invisible
diff --git a/content/test/data/accessibility/html/input-date-expected-blink.txt b/content/test/data/accessibility/html/input-date-expected-blink.txt
index cb68a09..8e11844 100644
--- a/content/test/data/accessibility/html/input-date-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-date-expected-blink.txt
@@ -2,38 +2,36 @@
 ++genericContainer ignored
 ++++genericContainer
 ++++++date inputType='date' value='2008-09-01'
-++++++++genericContainer ignored
+++++++++genericContainer
 ++++++++++genericContainer
-++++++++++++genericContainer
-++++++++++++++spinButton name='Month' placeholder='mm' value='09' valueForRange=9.00 minValueForRange=1.00 maxValueForRange=12.00
-++++++++++++++++staticText name='09'
-++++++++++++++++++inlineTextBox name='09'
-++++++++++++++staticText name='/'
-++++++++++++++++inlineTextBox name='/'
-++++++++++++++spinButton name='Day' placeholder='dd' value='01' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=31.00
-++++++++++++++++staticText name='01'
-++++++++++++++++++inlineTextBox name='01'
-++++++++++++++staticText name='/'
-++++++++++++++++inlineTextBox name='/'
-++++++++++++++spinButton name='Year' placeholder='yyyy' value='2008' valueForRange=2008.00 minValueForRange=1.00 maxValueForRange=275760.00
-++++++++++++++++staticText name='2008'
-++++++++++++++++++inlineTextBox name='2008'
-++++++++++popUpButton name='Show date picker'
+++++++++++++spinButton name='Month' placeholder='mm' value='09' valueForRange=9.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++++staticText name='09'
+++++++++++++++++inlineTextBox name='09'
+++++++++++++staticText name='/'
+++++++++++++++inlineTextBox name='/'
+++++++++++++spinButton name='Day' placeholder='dd' value='01' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=31.00
+++++++++++++++staticText name='01'
+++++++++++++++++inlineTextBox name='01'
+++++++++++++staticText name='/'
+++++++++++++++inlineTextBox name='/'
+++++++++++++spinButton name='Year' placeholder='yyyy' value='2008' valueForRange=2008.00 minValueForRange=1.00 maxValueForRange=275760.00
+++++++++++++++staticText name='2008'
+++++++++++++++++inlineTextBox name='2008'
+++++++++popUpButton name='Show date picker'
 ++++++date inputType='date' name='When' value='2008-09-01'
-++++++++genericContainer ignored
+++++++++genericContainer
 ++++++++++genericContainer
-++++++++++++genericContainer
-++++++++++++++spinButton name='Month When' placeholder='mm' value='09' valueForRange=9.00 minValueForRange=1.00 maxValueForRange=12.00
-++++++++++++++++staticText name='09'
-++++++++++++++++++inlineTextBox name='09'
-++++++++++++++staticText name='/'
-++++++++++++++++inlineTextBox name='/'
-++++++++++++++spinButton name='Day When' placeholder='dd' value='01' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=31.00
-++++++++++++++++staticText name='01'
-++++++++++++++++++inlineTextBox name='01'
-++++++++++++++staticText name='/'
-++++++++++++++++inlineTextBox name='/'
-++++++++++++++spinButton name='Year When' placeholder='yyyy' value='2008' valueForRange=2008.00 minValueForRange=1.00 maxValueForRange=275760.00
-++++++++++++++++staticText name='2008'
-++++++++++++++++++inlineTextBox name='2008'
-++++++++++popUpButton name='Show date picker'
+++++++++++++spinButton name='Month When' placeholder='mm' value='09' valueForRange=9.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++++staticText name='09'
+++++++++++++++++inlineTextBox name='09'
+++++++++++++staticText name='/'
+++++++++++++++inlineTextBox name='/'
+++++++++++++spinButton name='Day When' placeholder='dd' value='01' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=31.00
+++++++++++++++staticText name='01'
+++++++++++++++++inlineTextBox name='01'
+++++++++++++staticText name='/'
+++++++++++++++inlineTextBox name='/'
+++++++++++++spinButton name='Year When' placeholder='yyyy' value='2008' valueForRange=2008.00 minValueForRange=1.00 maxValueForRange=275760.00
+++++++++++++++staticText name='2008'
+++++++++++++++++inlineTextBox name='2008'
+++++++++popUpButton name='Show date picker'
diff --git a/content/test/data/accessibility/html/input-date-expected-fuchsia.txt b/content/test/data/accessibility/html/input-date-expected-fuchsia.txt
index 5d35cf2..b4aabd4 100644
--- a/content/test/data/accessibility/html/input-date-expected-fuchsia.txt
+++ b/content/test/data/accessibility/html/input-date-expected-fuchsia.txt
@@ -2,38 +2,36 @@
 ++UNKNOWN hidden
 ++++UNKNOWN
 ++++++UNKNOWN focusable actions='{DEFAULT, SET_VALUE}' value='2008-09-01'
-++++++++UNKNOWN hidden
+++++++++UNKNOWN
 ++++++++++UNKNOWN
-++++++++++++UNKNOWN
-++++++++++++++UNKNOWN focusable label='Month' actions='{SET_VALUE}' value='09'
-++++++++++++++++STATIC_TEXT label='09'
-++++++++++++++++++UNKNOWN label='09'
-++++++++++++++STATIC_TEXT label='/'
-++++++++++++++++UNKNOWN label='/'
-++++++++++++++UNKNOWN focusable label='Day' actions='{SET_VALUE}' value='01'
-++++++++++++++++STATIC_TEXT label='01'
-++++++++++++++++++UNKNOWN label='01'
-++++++++++++++STATIC_TEXT label='/'
-++++++++++++++++UNKNOWN label='/'
-++++++++++++++UNKNOWN focusable label='Year' actions='{SET_VALUE}' value='2008'
-++++++++++++++++STATIC_TEXT label='2008'
-++++++++++++++++++UNKNOWN label='2008'
-++++++++++UNKNOWN focusable label='Show date picker' actions='{DEFAULT}'
+++++++++++++UNKNOWN focusable label='Month' actions='{SET_VALUE}' value='09'
+++++++++++++++STATIC_TEXT label='09'
+++++++++++++++++UNKNOWN label='09'
+++++++++++++STATIC_TEXT label='/'
+++++++++++++++UNKNOWN label='/'
+++++++++++++UNKNOWN focusable label='Day' actions='{SET_VALUE}' value='01'
+++++++++++++++STATIC_TEXT label='01'
+++++++++++++++++UNKNOWN label='01'
+++++++++++++STATIC_TEXT label='/'
+++++++++++++++UNKNOWN label='/'
+++++++++++++UNKNOWN focusable label='Year' actions='{SET_VALUE}' value='2008'
+++++++++++++++STATIC_TEXT label='2008'
+++++++++++++++++UNKNOWN label='2008'
+++++++++UNKNOWN focusable label='Show date picker' actions='{DEFAULT}'
 ++++++UNKNOWN focusable label='When' actions='{DEFAULT, SET_VALUE}' value='2008-09-01'
-++++++++UNKNOWN hidden
+++++++++UNKNOWN
 ++++++++++UNKNOWN
-++++++++++++UNKNOWN
-++++++++++++++UNKNOWN focusable label='Month When' actions='{SET_VALUE}' value='09'
-++++++++++++++++STATIC_TEXT label='09'
-++++++++++++++++++UNKNOWN label='09'
-++++++++++++++STATIC_TEXT label='/'
-++++++++++++++++UNKNOWN label='/'
-++++++++++++++UNKNOWN focusable label='Day When' actions='{SET_VALUE}' value='01'
-++++++++++++++++STATIC_TEXT label='01'
-++++++++++++++++++UNKNOWN label='01'
-++++++++++++++STATIC_TEXT label='/'
-++++++++++++++++UNKNOWN label='/'
-++++++++++++++UNKNOWN focusable label='Year When' actions='{SET_VALUE}' value='2008'
-++++++++++++++++STATIC_TEXT label='2008'
-++++++++++++++++++UNKNOWN label='2008'
-++++++++++UNKNOWN focusable label='Show date picker' actions='{DEFAULT}'
+++++++++++++UNKNOWN focusable label='Month When' actions='{SET_VALUE}' value='09'
+++++++++++++++STATIC_TEXT label='09'
+++++++++++++++++UNKNOWN label='09'
+++++++++++++STATIC_TEXT label='/'
+++++++++++++++UNKNOWN label='/'
+++++++++++++UNKNOWN focusable label='Day When' actions='{SET_VALUE}' value='01'
+++++++++++++++STATIC_TEXT label='01'
+++++++++++++++++UNKNOWN label='01'
+++++++++++++STATIC_TEXT label='/'
+++++++++++++++UNKNOWN label='/'
+++++++++++++UNKNOWN focusable label='Year When' actions='{SET_VALUE}' value='2008'
+++++++++++++++STATIC_TEXT label='2008'
+++++++++++++++++UNKNOWN label='2008'
+++++++++UNKNOWN focusable label='Show date picker' actions='{DEFAULT}'
diff --git a/content/test/data/accessibility/html/input-datetime-local-expected-fuchsia.txt b/content/test/data/accessibility/html/input-datetime-local-expected-fuchsia.txt
index 108f2a4..78fb520 100644
--- a/content/test/data/accessibility/html/input-datetime-local-expected-fuchsia.txt
+++ b/content/test/data/accessibility/html/input-datetime-local-expected-fuchsia.txt
@@ -2,35 +2,34 @@
 ++UNKNOWN hidden
 ++++UNKNOWN
 ++++++UNKNOWN focusable actions='{DEFAULT, SET_VALUE}'
-++++++++UNKNOWN hidden
+++++++++UNKNOWN
 ++++++++++UNKNOWN
-++++++++++++UNKNOWN
-++++++++++++++UNKNOWN focusable label='Month' actions='{SET_VALUE}'
-++++++++++++++++STATIC_TEXT label='mm'
-++++++++++++++++++UNKNOWN label='mm'
-++++++++++++++STATIC_TEXT label='/'
-++++++++++++++++UNKNOWN label='/'
-++++++++++++++UNKNOWN focusable label='Day' actions='{SET_VALUE}'
-++++++++++++++++STATIC_TEXT label='dd'
-++++++++++++++++++UNKNOWN label='dd'
-++++++++++++++STATIC_TEXT label='/'
-++++++++++++++++UNKNOWN label='/'
-++++++++++++++UNKNOWN focusable label='Year' actions='{SET_VALUE}'
-++++++++++++++++STATIC_TEXT label='yyyy'
-++++++++++++++++++UNKNOWN label='yyyy'
-++++++++++++++STATIC_TEXT label=', '
-++++++++++++++++UNKNOWN label=', '
-++++++++++++++UNKNOWN focusable label='Hours' actions='{SET_VALUE}'
-++++++++++++++++STATIC_TEXT label='--'
-++++++++++++++++++UNKNOWN label='--'
-++++++++++++++STATIC_TEXT label=':'
-++++++++++++++++UNKNOWN label=':'
-++++++++++++++UNKNOWN focusable label='Minutes' actions='{SET_VALUE}'
-++++++++++++++++STATIC_TEXT label='--'
-++++++++++++++++++UNKNOWN label='--'
-++++++++++++++STATIC_TEXT label=' '
-++++++++++++++++UNKNOWN label=' '
-++++++++++++++UNKNOWN focusable label='AM/PM' actions='{SET_VALUE}'
-++++++++++++++++STATIC_TEXT label='--'
-++++++++++++++++++UNKNOWN label='--'
-++++++++++UNKNOWN focusable label='Show local date and time picker' actions='{DEFAULT}'
+++++++++++++UNKNOWN focusable label='Month' actions='{SET_VALUE}'
+++++++++++++++STATIC_TEXT label='mm'
+++++++++++++++++UNKNOWN label='mm'
+++++++++++++STATIC_TEXT label='/'
+++++++++++++++UNKNOWN label='/'
+++++++++++++UNKNOWN focusable label='Day' actions='{SET_VALUE}'
+++++++++++++++STATIC_TEXT label='dd'
+++++++++++++++++UNKNOWN label='dd'
+++++++++++++STATIC_TEXT label='/'
+++++++++++++++UNKNOWN label='/'
+++++++++++++UNKNOWN focusable label='Year' actions='{SET_VALUE}'
+++++++++++++++STATIC_TEXT label='yyyy'
+++++++++++++++++UNKNOWN label='yyyy'
+++++++++++++STATIC_TEXT label=', '
+++++++++++++++UNKNOWN label=', '
+++++++++++++UNKNOWN focusable label='Hours' actions='{SET_VALUE}'
+++++++++++++++STATIC_TEXT label='--'
+++++++++++++++++UNKNOWN label='--'
+++++++++++++STATIC_TEXT label=':'
+++++++++++++++UNKNOWN label=':'
+++++++++++++UNKNOWN focusable label='Minutes' actions='{SET_VALUE}'
+++++++++++++++STATIC_TEXT label='--'
+++++++++++++++++UNKNOWN label='--'
+++++++++++++STATIC_TEXT label=' '
+++++++++++++++UNKNOWN label=' '
+++++++++++++UNKNOWN focusable label='AM/PM' actions='{SET_VALUE}'
+++++++++++++++STATIC_TEXT label='--'
+++++++++++++++++UNKNOWN label='--'
+++++++++UNKNOWN focusable label='Show local date and time picker' actions='{DEFAULT}'
diff --git a/content/test/data/accessibility/html/input-month-expected-blink.txt b/content/test/data/accessibility/html/input-month-expected-blink.txt
index 580f6cb..5f708d0 100644
--- a/content/test/data/accessibility/html/input-month-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-month-expected-blink.txt
@@ -2,15 +2,14 @@
 ++genericContainer ignored
 ++++genericContainer
 ++++++dateTime inputType='month'
-++++++++genericContainer ignored
+++++++++genericContainer
 ++++++++++genericContainer
-++++++++++++genericContainer
-++++++++++++++spinButton name='Month' placeholder='---------' valueForRange=0.00 minValueForRange=1.00 maxValueForRange=12.00
-++++++++++++++++staticText name='---------'
-++++++++++++++++++inlineTextBox name='---------'
-++++++++++++++staticText name=' '
-++++++++++++++++inlineTextBox name=' '
-++++++++++++++spinButton name='Year' placeholder='----' valueForRange=0.00 minValueForRange=1.00 maxValueForRange=275760.00
-++++++++++++++++staticText name='----'
-++++++++++++++++++inlineTextBox name='----'
-++++++++++popUpButton name='Show month picker' haspopup=menu
+++++++++++++spinButton name='Month' placeholder='---------' valueForRange=0.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++++staticText name='---------'
+++++++++++++++++inlineTextBox name='---------'
+++++++++++++staticText name=' '
+++++++++++++++inlineTextBox name=' '
+++++++++++++spinButton name='Year' placeholder='----' valueForRange=0.00 minValueForRange=1.00 maxValueForRange=275760.00
+++++++++++++++staticText name='----'
+++++++++++++++++inlineTextBox name='----'
+++++++++popUpButton name='Show month picker' haspopup=menu
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-month-expected-fuchsia.txt b/content/test/data/accessibility/html/input-month-expected-fuchsia.txt
index e39080c..cece284 100644
--- a/content/test/data/accessibility/html/input-month-expected-fuchsia.txt
+++ b/content/test/data/accessibility/html/input-month-expected-fuchsia.txt
@@ -2,15 +2,14 @@
 ++UNKNOWN hidden
 ++++UNKNOWN
 ++++++UNKNOWN focusable actions='{DEFAULT, SET_VALUE}'
-++++++++UNKNOWN hidden
+++++++++UNKNOWN
 ++++++++++UNKNOWN
-++++++++++++UNKNOWN
-++++++++++++++UNKNOWN focusable label='Month' actions='{SET_VALUE}'
-++++++++++++++++STATIC_TEXT label='---------'
-++++++++++++++++++UNKNOWN label='---------'
-++++++++++++++STATIC_TEXT label=' '
-++++++++++++++++UNKNOWN label=' '
-++++++++++++++UNKNOWN focusable label='Year' actions='{SET_VALUE}'
-++++++++++++++++STATIC_TEXT label='----'
-++++++++++++++++++UNKNOWN label='----'
-++++++++++UNKNOWN focusable label='Show month picker' actions='{DEFAULT}'
+++++++++++++UNKNOWN focusable label='Month' actions='{SET_VALUE}'
+++++++++++++++STATIC_TEXT label='---------'
+++++++++++++++++UNKNOWN label='---------'
+++++++++++++STATIC_TEXT label=' '
+++++++++++++++UNKNOWN label=' '
+++++++++++++UNKNOWN focusable label='Year' actions='{SET_VALUE}'
+++++++++++++++STATIC_TEXT label='----'
+++++++++++++++++UNKNOWN label='----'
+++++++++UNKNOWN focusable label='Show month picker' actions='{DEFAULT}'
diff --git a/content/test/data/accessibility/html/input-time-expected-blink.txt b/content/test/data/accessibility/html/input-time-expected-blink.txt
index 5b74ce1..7f6e497 100644
--- a/content/test/data/accessibility/html/input-time-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-time-expected-blink.txt
@@ -2,38 +2,36 @@
 ++genericContainer ignored
 ++++genericContainer
 ++++++inputTime inputType='time' value='00:00:00'
-++++++++genericContainer ignored
+++++++++genericContainer
 ++++++++++genericContainer
-++++++++++++genericContainer
-++++++++++++++spinButton name='Hours' placeholder='--' value='12' valueForRange=12.00 minValueForRange=1.00 maxValueForRange=12.00
-++++++++++++++++staticText name='12'
-++++++++++++++++++inlineTextBox name='12'
-++++++++++++++staticText name=':'
-++++++++++++++++inlineTextBox name=':'
-++++++++++++++spinButton name='Minutes' placeholder='--' value='00' valueForRange=0.00 minValueForRange=0.00 maxValueForRange=59.00
-++++++++++++++++staticText name='00'
-++++++++++++++++++inlineTextBox name='00'
-++++++++++++++staticText name=' '
-++++++++++++++++inlineTextBox name=' '
-++++++++++++++spinButton name='AM/PM' placeholder='--' value='AM' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=2.00
-++++++++++++++++staticText name='AM'
-++++++++++++++++++inlineTextBox name='AM'
-++++++++++popUpButton name='Show time picker'
+++++++++++++spinButton name='Hours' placeholder='--' value='12' valueForRange=12.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++++staticText name='12'
+++++++++++++++++inlineTextBox name='12'
+++++++++++++staticText name=':'
+++++++++++++++inlineTextBox name=':'
+++++++++++++spinButton name='Minutes' placeholder='--' value='00' valueForRange=0.00 minValueForRange=0.00 maxValueForRange=59.00
+++++++++++++++staticText name='00'
+++++++++++++++++inlineTextBox name='00'
+++++++++++++staticText name=' '
+++++++++++++++inlineTextBox name=' '
+++++++++++++spinButton name='AM/PM' placeholder='--' value='AM' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=2.00
+++++++++++++++staticText name='AM'
+++++++++++++++++inlineTextBox name='AM'
+++++++++popUpButton name='Show time picker'
 ++++++inputTime inputType='time' name='Breakfast' value='00:00:00'
-++++++++genericContainer ignored
+++++++++genericContainer
 ++++++++++genericContainer
-++++++++++++genericContainer
-++++++++++++++spinButton name='Hours Breakfast' placeholder='--' value='12' valueForRange=12.00 minValueForRange=1.00 maxValueForRange=12.00
-++++++++++++++++staticText name='12'
-++++++++++++++++++inlineTextBox name='12'
-++++++++++++++staticText name=':'
-++++++++++++++++inlineTextBox name=':'
-++++++++++++++spinButton name='Minutes Breakfast' placeholder='--' value='00' valueForRange=0.00 minValueForRange=0.00 maxValueForRange=59.00
-++++++++++++++++staticText name='00'
-++++++++++++++++++inlineTextBox name='00'
-++++++++++++++staticText name=' '
-++++++++++++++++inlineTextBox name=' '
-++++++++++++++spinButton name='AM/PM Breakfast' placeholder='--' value='AM' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=2.00
-++++++++++++++++staticText name='AM'
-++++++++++++++++++inlineTextBox name='AM'
-++++++++++popUpButton name='Show time picker'
+++++++++++++spinButton name='Hours Breakfast' placeholder='--' value='12' valueForRange=12.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++++staticText name='12'
+++++++++++++++++inlineTextBox name='12'
+++++++++++++staticText name=':'
+++++++++++++++inlineTextBox name=':'
+++++++++++++spinButton name='Minutes Breakfast' placeholder='--' value='00' valueForRange=0.00 minValueForRange=0.00 maxValueForRange=59.00
+++++++++++++++staticText name='00'
+++++++++++++++++inlineTextBox name='00'
+++++++++++++staticText name=' '
+++++++++++++++inlineTextBox name=' '
+++++++++++++spinButton name='AM/PM Breakfast' placeholder='--' value='AM' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=2.00
+++++++++++++++staticText name='AM'
+++++++++++++++++inlineTextBox name='AM'
+++++++++popUpButton name='Show time picker'
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-time-expected-fuchsia.txt b/content/test/data/accessibility/html/input-time-expected-fuchsia.txt
index 481a47b..58987269 100644
--- a/content/test/data/accessibility/html/input-time-expected-fuchsia.txt
+++ b/content/test/data/accessibility/html/input-time-expected-fuchsia.txt
@@ -2,38 +2,36 @@
 ++UNKNOWN hidden
 ++++UNKNOWN
 ++++++UNKNOWN focusable actions='{DEFAULT, SET_VALUE}' value='00:00:00'
-++++++++UNKNOWN hidden
+++++++++UNKNOWN
 ++++++++++UNKNOWN
-++++++++++++UNKNOWN
-++++++++++++++UNKNOWN focusable label='Hours' actions='{SET_VALUE}' value='12'
-++++++++++++++++STATIC_TEXT label='12'
-++++++++++++++++++UNKNOWN label='12'
-++++++++++++++STATIC_TEXT label=':'
-++++++++++++++++UNKNOWN label=':'
-++++++++++++++UNKNOWN focusable label='Minutes' actions='{SET_VALUE}' value='00'
-++++++++++++++++STATIC_TEXT label='00'
-++++++++++++++++++UNKNOWN label='00'
-++++++++++++++STATIC_TEXT label=' '
-++++++++++++++++UNKNOWN label=' '
-++++++++++++++UNKNOWN focusable label='AM/PM' actions='{SET_VALUE}' value='AM'
-++++++++++++++++STATIC_TEXT label='AM'
-++++++++++++++++++UNKNOWN label='AM'
-++++++++++UNKNOWN focusable label='Show time picker' actions='{DEFAULT}'
+++++++++++++UNKNOWN focusable label='Hours' actions='{SET_VALUE}' value='12'
+++++++++++++++STATIC_TEXT label='12'
+++++++++++++++++UNKNOWN label='12'
+++++++++++++STATIC_TEXT label=':'
+++++++++++++++UNKNOWN label=':'
+++++++++++++UNKNOWN focusable label='Minutes' actions='{SET_VALUE}' value='00'
+++++++++++++++STATIC_TEXT label='00'
+++++++++++++++++UNKNOWN label='00'
+++++++++++++STATIC_TEXT label=' '
+++++++++++++++UNKNOWN label=' '
+++++++++++++UNKNOWN focusable label='AM/PM' actions='{SET_VALUE}' value='AM'
+++++++++++++++STATIC_TEXT label='AM'
+++++++++++++++++UNKNOWN label='AM'
+++++++++UNKNOWN focusable label='Show time picker' actions='{DEFAULT}'
 ++++++UNKNOWN focusable label='Breakfast' actions='{DEFAULT, SET_VALUE}' value='00:00:00'
-++++++++UNKNOWN hidden
+++++++++UNKNOWN
 ++++++++++UNKNOWN
-++++++++++++UNKNOWN
-++++++++++++++UNKNOWN focusable label='Hours Breakfast' actions='{SET_VALUE}' value='12'
-++++++++++++++++STATIC_TEXT label='12'
-++++++++++++++++++UNKNOWN label='12'
-++++++++++++++STATIC_TEXT label=':'
-++++++++++++++++UNKNOWN label=':'
-++++++++++++++UNKNOWN focusable label='Minutes Breakfast' actions='{SET_VALUE}' value='00'
-++++++++++++++++STATIC_TEXT label='00'
-++++++++++++++++++UNKNOWN label='00'
-++++++++++++++STATIC_TEXT label=' '
-++++++++++++++++UNKNOWN label=' '
-++++++++++++++UNKNOWN focusable label='AM/PM Breakfast' actions='{SET_VALUE}' value='AM'
-++++++++++++++++STATIC_TEXT label='AM'
-++++++++++++++++++UNKNOWN label='AM'
-++++++++++UNKNOWN focusable label='Show time picker' actions='{DEFAULT}'
+++++++++++++UNKNOWN focusable label='Hours Breakfast' actions='{SET_VALUE}' value='12'
+++++++++++++++STATIC_TEXT label='12'
+++++++++++++++++UNKNOWN label='12'
+++++++++++++STATIC_TEXT label=':'
+++++++++++++++UNKNOWN label=':'
+++++++++++++UNKNOWN focusable label='Minutes Breakfast' actions='{SET_VALUE}' value='00'
+++++++++++++++STATIC_TEXT label='00'
+++++++++++++++++UNKNOWN label='00'
+++++++++++++STATIC_TEXT label=' '
+++++++++++++++UNKNOWN label=' '
+++++++++++++UNKNOWN focusable label='AM/PM Breakfast' actions='{SET_VALUE}' value='AM'
+++++++++++++++STATIC_TEXT label='AM'
+++++++++++++++++UNKNOWN label='AM'
+++++++++UNKNOWN focusable label='Show time picker' actions='{DEFAULT}'
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt
index cba7a33..268a2e9b 100644
--- a/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-blink.txt
@@ -2,33 +2,32 @@
 ++genericContainer ignored
 ++++genericContainer
 ++++++inputTime inputType='time' value='13:50:02.922' controlsIds=group
-++++++++genericContainer ignored
+++++++++genericContainer
 ++++++++++genericContainer
-++++++++++++genericContainer
-++++++++++++++spinButton name='Hours' placeholder='--' value='01' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=12.00
-++++++++++++++++staticText name='01'
-++++++++++++++++++inlineTextBox name='01'
-++++++++++++++staticText name=':'
-++++++++++++++++inlineTextBox name=':'
-++++++++++++++spinButton name='Minutes' placeholder='--' value='50' valueForRange=50.00 minValueForRange=0.00 maxValueForRange=59.00
-++++++++++++++++staticText name='50'
-++++++++++++++++++inlineTextBox name='50'
-++++++++++++++staticText name=':'
-++++++++++++++++inlineTextBox name=':'
-++++++++++++++spinButton name='Seconds' placeholder='--' value='02' restriction=disabled valueForRange=2.00 minValueForRange=0.00 maxValueForRange=59.00
-++++++++++++++++staticText name='02'
-++++++++++++++++++inlineTextBox name='02'
-++++++++++++++staticText name='.'
-++++++++++++++++inlineTextBox name='.'
-++++++++++++++spinButton name='Milliseconds' placeholder='---' value='922' restriction=disabled valueForRange=922.00 minValueForRange=0.00 maxValueForRange=999.00
-++++++++++++++++staticText name='922'
-++++++++++++++++++inlineTextBox name='922'
-++++++++++++++staticText name=' '
-++++++++++++++++inlineTextBox name=' '
-++++++++++++++spinButton name='AM/PM' placeholder='--' value='PM' valueForRange=2.00 minValueForRange=1.00 maxValueForRange=2.00
-++++++++++++++++staticText name='PM'
-++++++++++++++++++inlineTextBox name='PM'
-++++++++++popUpButton name='Show time picker'
+++++++++++++spinButton name='Hours' placeholder='--' value='01' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++++staticText name='01'
+++++++++++++++++inlineTextBox name='01'
+++++++++++++staticText name=':'
+++++++++++++++inlineTextBox name=':'
+++++++++++++spinButton name='Minutes' placeholder='--' value='50' valueForRange=50.00 minValueForRange=0.00 maxValueForRange=59.00
+++++++++++++++staticText name='50'
+++++++++++++++++inlineTextBox name='50'
+++++++++++++staticText name=':'
+++++++++++++++inlineTextBox name=':'
+++++++++++++spinButton name='Seconds' placeholder='--' value='02' restriction=disabled valueForRange=2.00 minValueForRange=0.00 maxValueForRange=59.00
+++++++++++++++staticText name='02'
+++++++++++++++++inlineTextBox name='02'
+++++++++++++staticText name='.'
+++++++++++++++inlineTextBox name='.'
+++++++++++++spinButton name='Milliseconds' placeholder='---' value='922' restriction=disabled valueForRange=922.00 minValueForRange=0.00 maxValueForRange=999.00
+++++++++++++++staticText name='922'
+++++++++++++++++inlineTextBox name='922'
+++++++++++++staticText name=' '
+++++++++++++++inlineTextBox name=' '
+++++++++++++spinButton name='AM/PM' placeholder='--' value='PM' valueForRange=2.00 minValueForRange=1.00 maxValueForRange=2.00
+++++++++++++++staticText name='PM'
+++++++++++++++++inlineTextBox name='PM'
+++++++++popUpButton name='Show time picker'
 ++++++++group
 ++++++++++genericContainer ignored
 ++++++++++++genericContainer ignored
@@ -327,4 +326,4 @@
 ++++++++++++++++++++++listBoxOption name='PM' selected=true
 ++++++++++++++++++++++++staticText name='PM'
 ++++++++++++++++++++++listBoxOption name='AM' selected=false
-++++++++++++++++++++++++staticText name='AM'
+++++++++++++++++++++++++staticText name='AM'
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-time-with-popup-open-expected-fuchsia.txt b/content/test/data/accessibility/html/input-time-with-popup-open-expected-fuchsia.txt
index db0fdce..82e1b365 100644
--- a/content/test/data/accessibility/html/input-time-with-popup-open-expected-fuchsia.txt
+++ b/content/test/data/accessibility/html/input-time-with-popup-open-expected-fuchsia.txt
@@ -2,33 +2,32 @@
 ++UNKNOWN hidden
 ++++UNKNOWN
 ++++++UNKNOWN focusable actions='{DEFAULT, SET_VALUE}' value='13:50:02.922'
-++++++++UNKNOWN hidden
+++++++++UNKNOWN
 ++++++++++UNKNOWN
-++++++++++++UNKNOWN
-++++++++++++++UNKNOWN focusable label='Hours' actions='{SET_VALUE}' value='01'
-++++++++++++++++STATIC_TEXT label='01'
-++++++++++++++++++UNKNOWN label='01'
-++++++++++++++STATIC_TEXT label=':'
-++++++++++++++++UNKNOWN label=':'
-++++++++++++++UNKNOWN focusable label='Minutes' actions='{SET_VALUE}' value='50'
-++++++++++++++++STATIC_TEXT label='50'
-++++++++++++++++++UNKNOWN label='50'
-++++++++++++++STATIC_TEXT label=':'
-++++++++++++++++UNKNOWN label=':'
-++++++++++++++UNKNOWN label='Seconds' value='02'
-++++++++++++++++STATIC_TEXT label='02'
-++++++++++++++++++UNKNOWN label='02'
-++++++++++++++STATIC_TEXT label='.'
-++++++++++++++++UNKNOWN label='.'
-++++++++++++++UNKNOWN label='Milliseconds' value='922'
-++++++++++++++++STATIC_TEXT label='922'
-++++++++++++++++++UNKNOWN label='922'
-++++++++++++++STATIC_TEXT label=' '
-++++++++++++++++UNKNOWN label=' '
-++++++++++++++UNKNOWN focusable label='AM/PM' actions='{SET_VALUE}' value='PM'
-++++++++++++++++STATIC_TEXT label='PM'
-++++++++++++++++++UNKNOWN label='PM'
-++++++++++UNKNOWN focusable label='Show time picker' actions='{DEFAULT}'
+++++++++++++UNKNOWN focusable label='Hours' actions='{SET_VALUE}' value='01'
+++++++++++++++STATIC_TEXT label='01'
+++++++++++++++++UNKNOWN label='01'
+++++++++++++STATIC_TEXT label=':'
+++++++++++++++UNKNOWN label=':'
+++++++++++++UNKNOWN focusable label='Minutes' actions='{SET_VALUE}' value='50'
+++++++++++++++STATIC_TEXT label='50'
+++++++++++++++++UNKNOWN label='50'
+++++++++++++STATIC_TEXT label=':'
+++++++++++++++UNKNOWN label=':'
+++++++++++++UNKNOWN label='Seconds' value='02'
+++++++++++++++STATIC_TEXT label='02'
+++++++++++++++++UNKNOWN label='02'
+++++++++++++STATIC_TEXT label='.'
+++++++++++++++UNKNOWN label='.'
+++++++++++++UNKNOWN label='Milliseconds' value='922'
+++++++++++++++STATIC_TEXT label='922'
+++++++++++++++++UNKNOWN label='922'
+++++++++++++STATIC_TEXT label=' '
+++++++++++++++UNKNOWN label=' '
+++++++++++++UNKNOWN focusable label='AM/PM' actions='{SET_VALUE}' value='PM'
+++++++++++++++STATIC_TEXT label='PM'
+++++++++++++++++UNKNOWN label='PM'
+++++++++UNKNOWN focusable label='Show time picker' actions='{DEFAULT}'
 ++++++++UNKNOWN
 ++++++++++UNKNOWN hidden
 ++++++++++++UNKNOWN hidden
diff --git a/content/test/data/accessibility/html/input-week-expected-blink.txt b/content/test/data/accessibility/html/input-week-expected-blink.txt
index b9dbbed5..c47858a 100644
--- a/content/test/data/accessibility/html/input-week-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-week-expected-blink.txt
@@ -2,17 +2,16 @@
 ++genericContainer ignored
 ++++genericContainer
 ++++++dateTime inputType='week'
-++++++++genericContainer ignored
+++++++++genericContainer
 ++++++++++genericContainer
-++++++++++++genericContainer
-++++++++++++++staticText name='Week '
-++++++++++++++++inlineTextBox name='Week '
-++++++++++++++spinButton name='Week' placeholder='--' valueForRange=0.00 minValueForRange=1.00 maxValueForRange=53.00
-++++++++++++++++staticText name='--'
-++++++++++++++++++inlineTextBox name='--'
-++++++++++++++staticText name=', '
-++++++++++++++++inlineTextBox name=', '
-++++++++++++++spinButton name='Year' placeholder='----' valueForRange=0.00 minValueForRange=1.00 maxValueForRange=275760.00
-++++++++++++++++staticText name='----'
-++++++++++++++++++inlineTextBox name='----'
-++++++++++popUpButton name='Show week picker' haspopup=menu
+++++++++++++staticText name='Week '
+++++++++++++++inlineTextBox name='Week '
+++++++++++++spinButton name='Week' placeholder='--' valueForRange=0.00 minValueForRange=1.00 maxValueForRange=53.00
+++++++++++++++staticText name='--'
+++++++++++++++++inlineTextBox name='--'
+++++++++++++staticText name=', '
+++++++++++++++inlineTextBox name=', '
+++++++++++++spinButton name='Year' placeholder='----' valueForRange=0.00 minValueForRange=1.00 maxValueForRange=275760.00
+++++++++++++++staticText name='----'
+++++++++++++++++inlineTextBox name='----'
+++++++++popUpButton name='Show week picker' haspopup=menu
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-week-expected-fuchsia.txt b/content/test/data/accessibility/html/input-week-expected-fuchsia.txt
index edbf901..f4cc9014 100644
--- a/content/test/data/accessibility/html/input-week-expected-fuchsia.txt
+++ b/content/test/data/accessibility/html/input-week-expected-fuchsia.txt
@@ -2,17 +2,16 @@
 ++UNKNOWN hidden
 ++++UNKNOWN
 ++++++UNKNOWN focusable actions='{DEFAULT, SET_VALUE}'
-++++++++UNKNOWN hidden
+++++++++UNKNOWN
 ++++++++++UNKNOWN
-++++++++++++UNKNOWN
-++++++++++++++STATIC_TEXT label='Week '
-++++++++++++++++UNKNOWN label='Week '
-++++++++++++++UNKNOWN focusable label='Week' actions='{SET_VALUE}'
-++++++++++++++++STATIC_TEXT label='--'
-++++++++++++++++++UNKNOWN label='--'
-++++++++++++++STATIC_TEXT label=', '
-++++++++++++++++UNKNOWN label=', '
-++++++++++++++UNKNOWN focusable label='Year' actions='{SET_VALUE}'
-++++++++++++++++STATIC_TEXT label='----'
-++++++++++++++++++UNKNOWN label='----'
-++++++++++UNKNOWN focusable label='Show week picker' actions='{DEFAULT}'
+++++++++++++STATIC_TEXT label='Week '
+++++++++++++++UNKNOWN label='Week '
+++++++++++++UNKNOWN focusable label='Week' actions='{SET_VALUE}'
+++++++++++++++STATIC_TEXT label='--'
+++++++++++++++++UNKNOWN label='--'
+++++++++++++STATIC_TEXT label=', '
+++++++++++++++UNKNOWN label=', '
+++++++++++++UNKNOWN focusable label='Year' actions='{SET_VALUE}'
+++++++++++++++STATIC_TEXT label='----'
+++++++++++++++++UNKNOWN label='----'
+++++++++UNKNOWN focusable label='Show week picker' actions='{DEFAULT}'
diff --git a/content/test/data/accessibility/html/interactive-controls-with-labels-expected-auralinux.txt b/content/test/data/accessibility/html/interactive-controls-with-labels-expected-auralinux.txt
index 3ffebec1..a01ade2 100644
--- a/content/test/data/accessibility/html/interactive-controls-with-labels-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/interactive-controls-with-labels-expected-auralinux.txt
@@ -48,4 +48,4 @@
 ++++++++[spin button] name='AM/PM Test label' labelled-by current=2.000000 minimum=1.000000 maximum=2.000000
 ++++[push button] name='Show time picker'
 ++[push button] name='aria label'
-++[push button] name='Test label' labelled-by
+++[push button] name='Test label' labelled-by
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/interactive-controls-with-labels-expected-blink.txt b/content/test/data/accessibility/html/interactive-controls-with-labels-expected-blink.txt
index 71f154b..ab2f207 100644
--- a/content/test/data/accessibility/html/interactive-controls-with-labels-expected-blink.txt
+++ b/content/test/data/accessibility/html/interactive-controls-with-labels-expected-blink.txt
@@ -85,44 +85,42 @@
 ++++++++++staticText name='Option 8'
 ++++++++++++inlineTextBox name='Option 8'
 ++++++inputTime name='aria label' value='12:05'
-++++++++genericContainer ignored
+++++++++genericContainer
 ++++++++++genericContainer
-++++++++++++genericContainer
-++++++++++++++spinButton name='Hours aria label' placeholder='--' value='12' valueForRange=12.00 minValueForRange=1.00 maxValueForRange=12.00
-++++++++++++++++staticText name='12'
-++++++++++++++++++inlineTextBox name='12'
-++++++++++++++staticText name=':'
-++++++++++++++++inlineTextBox name=':'
-++++++++++++++spinButton name='Minutes aria label' placeholder='--' value='05' valueForRange=5.00 minValueForRange=0.00 maxValueForRange=59.00
-++++++++++++++++staticText name='05'
-++++++++++++++++++inlineTextBox name='05'
-++++++++++++++staticText name=' '
-++++++++++++++++inlineTextBox name=' '
-++++++++++++++spinButton name='AM/PM aria label' placeholder='--' value='PM' valueForRange=2.00 minValueForRange=1.00 maxValueForRange=2.00
-++++++++++++++++staticText name='PM'
-++++++++++++++++++inlineTextBox name='PM'
-++++++++++popUpButton name='Show time picker'
+++++++++++++spinButton name='Hours aria label' placeholder='--' value='12' valueForRange=12.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++++staticText name='12'
+++++++++++++++++inlineTextBox name='12'
+++++++++++++staticText name=':'
+++++++++++++++inlineTextBox name=':'
+++++++++++++spinButton name='Minutes aria label' placeholder='--' value='05' valueForRange=5.00 minValueForRange=0.00 maxValueForRange=59.00
+++++++++++++++staticText name='05'
+++++++++++++++++inlineTextBox name='05'
+++++++++++++staticText name=' '
+++++++++++++++inlineTextBox name=' '
+++++++++++++spinButton name='AM/PM aria label' placeholder='--' value='PM' valueForRange=2.00 minValueForRange=1.00 maxValueForRange=2.00
+++++++++++++++staticText name='PM'
+++++++++++++++++inlineTextBox name='PM'
+++++++++popUpButton name='Show time picker'
 ++++++inputTime name='Test label' value='12:05'
-++++++++genericContainer ignored
+++++++++genericContainer
 ++++++++++genericContainer
-++++++++++++genericContainer
-++++++++++++++spinButton name='Hours Test label' placeholder='--' value='12' valueForRange=12.00 minValueForRange=1.00 maxValueForRange=12.00
-++++++++++++++++staticText name='12'
-++++++++++++++++++inlineTextBox name='12'
-++++++++++++++staticText name=':'
-++++++++++++++++inlineTextBox name=':'
-++++++++++++++spinButton name='Minutes Test label' placeholder='--' value='05' valueForRange=5.00 minValueForRange=0.00 maxValueForRange=59.00
-++++++++++++++++staticText name='05'
-++++++++++++++++++inlineTextBox name='05'
-++++++++++++++staticText name=' '
-++++++++++++++++inlineTextBox name=' '
-++++++++++++++spinButton name='AM/PM Test label' placeholder='--' value='PM' valueForRange=2.00 minValueForRange=1.00 maxValueForRange=2.00
-++++++++++++++++staticText name='PM'
-++++++++++++++++++inlineTextBox name='PM'
-++++++++++popUpButton name='Show time picker'
+++++++++++++spinButton name='Hours Test label' placeholder='--' value='12' valueForRange=12.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++++staticText name='12'
+++++++++++++++++inlineTextBox name='12'
+++++++++++++staticText name=':'
+++++++++++++++inlineTextBox name=':'
+++++++++++++spinButton name='Minutes Test label' placeholder='--' value='05' valueForRange=5.00 minValueForRange=0.00 maxValueForRange=59.00
+++++++++++++++staticText name='05'
+++++++++++++++++inlineTextBox name='05'
+++++++++++++staticText name=' '
+++++++++++++++inlineTextBox name=' '
+++++++++++++spinButton name='AM/PM Test label' placeholder='--' value='PM' valueForRange=2.00 minValueForRange=1.00 maxValueForRange=2.00
+++++++++++++++staticText name='PM'
+++++++++++++++++inlineTextBox name='PM'
+++++++++popUpButton name='Show time picker'
 ++++++colorWell name='aria label' value='#e4e4e4'
 ++++++++genericContainer ignored
 ++++++++++genericContainer ignored
 ++++++colorWell name='Test label' value='#e4e4e4'
 ++++++++genericContainer ignored
-++++++++++genericContainer ignored
+++++++++++genericContainer ignored
\ No newline at end of file
diff --git a/content/test/data/gpu/webcodecs/encode.html b/content/test/data/gpu/webcodecs/encode.html
index b985756c..d0b13928 100644
--- a/content/test/data/gpu/webcodecs/encode.html
+++ b/content/test/data/gpu/webcodecs/encode.html
@@ -103,6 +103,11 @@
       'source_type': 'offscreen',
       'codec': 'avc1.42001E',
       'acceleration':'prefer-software'
+    },
+    {
+      'source_type': 'offscreen',
+      'codec': 'avc1.64001E',
+      'acceleration':'prefer-hardware'
     }]);
   </script>
 </head>
diff --git a/content/test/data/gpu/webcodecs/webcodecs_common.js b/content/test/data/gpu/webcodecs/webcodecs_common.js
index 496bc3b..d3defc5 100644
--- a/content/test/data/gpu/webcodecs/webcodecs_common.js
+++ b/content/test/data/gpu/webcodecs/webcodecs_common.js
@@ -155,7 +155,7 @@
   const width = frame.displayWidth;
   const height = frame.displayHeight;
   let cnv = new OffscreenCanvas(width, height);
-  var ctx = cnv.getContext('2d');
+  var ctx = cnv.getContext('2d', { willReadFrequently : true });
   ctx.drawImage(frame, 0, 0);
   const dot_size = 10;
   const step = dot_size * 3;
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb
index e792d05..2a4fc15 100644
--- a/ios/chrome/app/strings/resources/ios_strings_as.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -353,6 +353,7 @@
 <translation id="3324193307694657476">ঠিকনা ২</translation>
 <translation id="3328459813621383194">নিষ্ক্ৰিয় টেবসমূহ স্থানান্তৰ কৰক</translation>
 <translation id="3328801116991980348">ছাইটৰ তথ্য</translation>
+<translation id="3344485292736684439">{count,plural, =1{আপোনাৰ একাউণ্টত "{title}"ত বুকমাৰ্ক ছেভ কৰা হৈছে, {email}}one{আপোনাৰ একাউণ্টত "{title}"ত বুকমাৰ্কসমূহ ছেভ কৰা হৈছে, {email}}other{আপোনাৰ একাউণ্টত "{title}"ত বুকমাৰ্কসমূহ ছেভ কৰা হৈছে, {email}}}</translation>
 <translation id="3371831930909698441">অনুবাদ কৰিব পাৰি। স্ক্ৰীনৰ একেবাৰে তলৰ অংশৰ কাষত থকা বিকল্পসমূহ।</translation>
 <translation id="3377063233124932127">এতিয়া আপোনাৰ ছেভ কৰি থোৱা বুকমাৰ্ক, পাছৱৰ্ড আৰু অধিক একেবাৰে ওপৰত।</translation>
 <translation id="3393920035788932672">পপ-আপসমূহ অনুমতি দিয়া হৈছে</translation>
@@ -1032,6 +1033,7 @@
 <translation id="7840771868269352570">আপুনি বাছনি কৰা বস্তুটো আঁতৰোৱা হ’ব।</translation>
 <translation id="7845466610722898">পঢ়াৰ সূচী দেখুৱাওক</translation>
 <translation id="784551991304901159">সমল চাবলৈ মেনুখনৰ পৰা অন কৰক বাছনি কৰক</translation>
+<translation id="7846158885638438868">{count,plural, =1{"{title}"ত বুকমাৰ্ক কৰা হৈছে}one{"{title}"ত বুকমাৰ্ক কৰা হৈছে}other{"{title}"ত বুকমাৰ্ক কৰা হৈছে}}</translation>
 <translation id="7853202427316060426">কাৰ্যকলাপ</translation>
 <translation id="7856733331829174190">ডাউনল'ড কৰিব পৰা নগ'ল</translation>
 <translation id="785938070103630874">পাছৱৰ্ড, পৰিশোধ পদ্ধতি অথবা ঠিকনা আৰু অধিক খোলক</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index 81c7d7d..9c4bfd2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -353,6 +353,7 @@
 <translation id="3324193307694657476">Adreça 2</translation>
 <translation id="3328459813621383194">Mou les pestanyes inactives</translation>
 <translation id="3328801116991980348">Informació del lloc web</translation>
+<translation id="3344485292736684439">{count,plural, =1{S'ha desat l'adreça d'interès a "{title}" al teu compte, {email}}other{S'han desat les adreces d'interès a "{title}" al teu compte, {email}}}</translation>
 <translation id="3371831930909698441">El Traductor està disponible. Tens opcions a la part inferior de la pantalla</translation>
 <translation id="3377063233124932127">Ara, les adreces d'interès, les contrasenyes i altres dades desades es troben a la part superior.</translation>
 <translation id="3393920035788932672">Finestres emergents permeses</translation>
@@ -1032,6 +1033,7 @@
 <translation id="7840771868269352570">Els elements seleccionats se suprimiran.</translation>
 <translation id="7845466610722898">Mostra la llista de lectura</translation>
 <translation id="784551991304901159">Per veure contingut, al menú, selecciona Activa</translation>
+<translation id="7846158885638438868">{count,plural, =1{S'ha afegit a les adreces d'interès a "{title}"}other{S'han afegit a les adreces d'interès a "{title}"}}</translation>
 <translation id="7853202427316060426">Activitat</translation>
 <translation id="7856733331829174190">No s'ha pogut baixar</translation>
 <translation id="785938070103630874">Obre les contrasenyes, les formes de pagament o l'adreça i altres dades</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
index af810c2..760cd02b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -70,6 +70,7 @@
 <translation id="1375321115329958930">Saved passwords</translation>
 <translation id="1377255359165588604">Sync has stopped working.</translation>
 <translation id="1377321085342047638">Card number</translation>
+<translation id="1377508275003315939">Passwords</translation>
 <translation id="1383876407941801731">Search</translation>
 <translation id="138618066238211776">Continue as <ph name="USER_NAME" /></translation>
 <translation id="1400642268715879018">Last 4 Weeks</translation>
@@ -123,6 +124,7 @@
 <translation id="1750238553597293878">Keep using the passwords in your Google Account</translation>
 <translation id="1752547299766512813">Save Passwords</translation>
 <translation id="1753905327828125965">Most Visited</translation>
+<translation id="1757699834933698436">{count,plural, =1{{count} weak password}other{{count} weak passwords}}</translation>
 <translation id="1767766085187034454">Google Translate</translation>
 <translation id="1789803444939621101">Welcome back, <ph name="USER_NAME" /></translation>
 <translation id="1803264062614276815">Cardholder name</translation>
@@ -228,6 +230,7 @@
 <translation id="2576499762020411840">Use and save passwords in Your Google Account</translation>
 <translation id="2578571896248130439">Send Web Page</translation>
 <translation id="2584132361465095047">Add Account…</translation>
+<translation id="2587010742985678408">{count,plural, =0{No compromised passwords}=1{{count} compromised password}other{{count} compromised passwords}}</translation>
 <translation id="2595587704210555261">{COUNT,plural, =1{Open tabs not used for one day or more get moved to Inactive Tabs so you can easily focus on the tabs you use the most. You can change this at any time in settings.}other{Open tabs not used for {COUNT} days or more get moved to Inactive Tabs so you can easily focus on the tabs you use the most. You can change this at any time in settings.}}</translation>
 <translation id="2600682495497606169">Clear site cookies</translation>
 <translation id="2609008503159898744">Close all tabs?</translation>
@@ -271,6 +274,7 @@
 <translation id="2797029671965852011">Show history</translation>
 <translation id="2800683595868705743">Leave Tab Switcher</translation>
 <translation id="2815198996063984598">2. Tap default browser app</translation>
+<translation id="2818821771744632548">You were signed out of your account, <ph name="USER_NAME" />, as part of your iPhone reset. To sign back in, tap 'Continue' below.</translation>
 <translation id="2822917246944009066">Tab pinned</translation>
 <translation id="2830972654601096923">Manage Addresses…</translation>
 <translation id="2834399722155632105">3. Tap Password options</translation>
@@ -531,6 +535,7 @@
 <translation id="4620246317052452550">Pages That You've Read</translation>
 <translation id="4620888520263267479">Show link previews</translation>
 <translation id="4630540211544979320">Translate pages</translation>
+<translation id="4631335160486397366"><ph name="COUNT" /> reused passwords</translation>
 <translation id="4634124774493850572">Use password</translation>
 <translation id="4636930964841734540">Info</translation>
 <translation id="4642472735733036929">Price tracking stopped</translation>
@@ -665,6 +670,7 @@
 <translation id="5520466080178053306">Tap Password Manager and then tap Add</translation>
 <translation id="5525095647255982834">To send this tab to another device, sign in to Chrome there.</translation>
 <translation id="5525269841082836315">Create passphrase</translation>
+<translation id="553151287733286479">{COUNT,plural, =1{{COUNT} weak password}other{{COUNT} weak passwords}}</translation>
 <translation id="5542540507657872337"><ph name="COUNT" /> found</translation>
 <translation id="5548760955356983418">Handoff lets you start browsing a website on this device and then easily continue on your Mac. The current open website will appear in the Dock of your Mac.
 
@@ -795,6 +801,7 @@
 <translation id="6293101329759844770">To turn on Safe Browsing, open <ph name="BEGIN_LINK" />Google services<ph name="END_LINK" /> and tap Safe Browsing.</translation>
 <translation id="6321526113093607004">Add to Bookmarks</translation>
 <translation id="6324669097367352121">Sign in settings</translation>
+<translation id="6331180460633101391"><ph name="COUNT" /> reused passwords</translation>
 <translation id="6337234675334993532">Encryption</translation>
 <translation id="633809752005859102">Something went really wrong. We'll work on that.</translation>
 <translation id="6340285871011301182">Partial translation not available.</translation>
@@ -1105,6 +1112,7 @@
 <translation id="8261506727792406068">Delete</translation>
 <translation id="8264966119170358612">Some of your saved passwords were exposed in a non-Google data breach. <ph name="BEGIN_LINK" />Learn more<ph name="END_LINK" /></translation>
 <translation id="8265018477030547118">Only on this device</translation>
+<translation id="826614135184049678">You were signed out of your account, <ph name="USER_NAME" />, as part of your iPad reset. To sign back in, tap 'Continue' below.</translation>
 <translation id="8271720166617117963">Accept and sign in</translation>
 <translation id="8278938988428169257">Enter a word or phrase</translation>
 <translation id="8281781826761538115">Default - <ph name="DEFAULT_LOCALE" /></translation>
@@ -1153,6 +1161,7 @@
 <translation id="8620640915598389714">Edit</translation>
 <translation id="8626393685701737946">You can change the default site view to desktop in Settings &gt; Content Settings</translation>
 <translation id="8636825310635137004">To get your tabs from your other devices, turn on sync.</translation>
+<translation id="8638151046944329622">{COUNT,plural, =0{No compromised passwords}=1{{COUNT} compromised password}other{{COUNT} compromised passwords}}</translation>
 <translation id="8654802032646794042">Cancel</translation>
 <translation id="8663764600409216912">You’re using passwords that look hard to guess</translation>
 <translation id="8668210798914567634">This page has been saved to your Reading List.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
index 61404eca..d4728ff 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -353,6 +353,7 @@
 <translation id="3324193307694657476">ທີ່ຢູ່ 2</translation>
 <translation id="3328459813621383194">ຍ້າຍແຖບທີ່ບໍ່ໄດ້ນຳໃຊ້</translation>
 <translation id="3328801116991980348">ຂໍ້​ມູນ​ເວັບ​ໄຊທ໌</translation>
+<translation id="3344485292736684439">{count,plural, =1{ບັນທຶກບຸກມາກໃສ່ "{title}" ໃນບັນຊີຂອງທ່ານ, {email}}other{ບັນທຶກບຸກມາກໃສ່ "{title}" ໃນບັນຊີຂອງທ່ານ, {email}}}</translation>
 <translation id="3371831930909698441">ມີບໍລິການແປພາສາ. ມີຕົວເລືອກໃຫ້ນຳໃຊ້ຢູ່ໃກ້ລຸ່ມສຸດຂອງໜ້າຈໍ.</translation>
 <translation id="3377063233124932127">ຕອນນີ້ບຸກມາກ, ລະຫັດຜ່ານ ແລະ ອື່ນໆທີ່ບັນທຶກໄວ້ຂອງທ່ານແມ່ນຢູ່ເທິງສຸດ.</translation>
 <translation id="3393920035788932672">ອະ​ນຸ​ຍາດ​ໃຫ້ປັອບອັບແລ້ວ</translation>
@@ -1032,6 +1033,7 @@
 <translation id="7840771868269352570">ລາຍການທີ່ທ່ານເລືອກຈະຖືກລຶບອອກ.</translation>
 <translation id="7845466610722898">ສະແດງລາຍຊື່ການອ່ານ</translation>
 <translation id="784551991304901159">ເພື່ອເບິ່ງເນື້ອຫາ, ໃຫ້ເລືອກເປີດໃຊ້ຈາກເມນູ</translation>
+<translation id="7846158885638438868">{count,plural, =1{ເພີ່ມບຸກມາກໃສ່ "{title}" ແລ້ວ}other{ເພີ່ມບຸກມາກໃສ່ "{title}" ແລ້ວ}}</translation>
 <translation id="7853202427316060426">ການເຄື່ອນໄຫວ</translation>
 <translation id="7856733331829174190">ບໍ່ສາມາດດາວໂຫລດໄດ້</translation>
 <translation id="785938070103630874">ເປີດລະຫັດຜ່ານ, ວິທີການຈ່າຍເງິນ ຫຼື ທີ່ຢູ່ ແລະ ືອື່ນ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index 828209c9..06bcab58 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -321,6 +321,7 @@
 <translation id="3131206671572504478">Blokuoti viską</translation>
 <translation id="313283613037595347">Kurti naują inkognito skirtuką</translation>
 <translation id="3146109040683991651">Nustatyti „Chrome“ kaip numatytąją naršyklę</translation>
+<translation id="3152169319860972623">Naudojant slaptažodžio tikrinimo funkciją peržiūrimi išsaugoti slaptažodžiai ir įspėjama apie visus internetinius pažeidimus. <ph name="BEGIN_LINK" />Sužinokite daugiau.<ph name="END_LINK" /></translation>
 <translation id="3153862085237805241">Kortelės išsaugojimas</translation>
 <translation id="3157387275655328056">Pridėti prie skaitomų sąrašo</translation>
 <translation id="3157684681743766797">Pažymėti visus...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb
index 5f3fa843..440675b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -354,6 +354,7 @@
 <translation id="3324193307694657476">လိပ်စာ 2</translation>
 <translation id="3328459813621383194">မသုံးသောတဘ်များ ရွှေ့ခြင်း</translation>
 <translation id="3328801116991980348">ဆိုက် အချက်အလက်များ</translation>
+<translation id="3344485292736684439">{count,plural, =1{လိပ်စာကို သင့်အကောင့် {email} ရှိ “{title}” တွင် သိမ်းလိုက်သည်}other{လိပ်စာများကို သင့်အကောင့် {email} ရှိ “{title}” တွင် သိမ်းလိုက်သည်}}</translation>
 <translation id="3371831930909698441">ဘာသာပြန်နိုင်ပါသည်။ မျက်နှာပြင်အောက်ခြေအနီးတွင် ရွေးစရာများ ရှိသည်။</translation>
 <translation id="3377063233124932127">ယခု သင်သိမ်းထားသော လိပ်စာ၊ စကားဝှက် စသည်တို့သည် ထိပ်ဆုံးတွင် ရှိနေမည်။</translation>
 <translation id="3393920035788932672">ပေါ့အာပ်များကို ခွင့်ပြုထားသည်</translation>
@@ -1032,6 +1033,7 @@
 <translation id="7840771868269352570">သင်ရွေးထားသည့် အရာများကို ဖယ်ရှားလိုက်ပါမည်။</translation>
 <translation id="7845466610722898">ဖတ်ရန်စာရင်းပြပါ</translation>
 <translation id="784551991304901159">အကြောင်းအရာများကြည့်ရန် မီနူးမှ ‘ဖွင့်ရန်’ ကို ရွေးပါ</translation>
+<translation id="7846158885638438868">{count,plural, =1{“{title}” တွင် လိပ်စာသိမ်းလိုက်သည်}other{“{title}” တွင် လိပ်စာသိမ်းလိုက်သည်}}</translation>
 <translation id="7853202427316060426">လုပ်ဆောင်ချက်</translation>
 <translation id="7856733331829174190">ဒေါင်းလုဒ် လုပ်၍မရပါ</translation>
 <translation id="785938070103630874">စကားဝှက်၊ ငွေပေးချေနည်းလမ်း (သို့) လိပ်စာ စသည်ကို ဖွင့်ပါ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
index 672c87c..4607c46b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -354,6 +354,7 @@
 <translation id="3324193307694657476">Morada 2</translation>
 <translation id="3328459813621383194">Mover separadores inativos</translation>
 <translation id="3328801116991980348">Informações do site</translation>
+<translation id="3344485292736684439">{count,plural, =1{Marcador guardado em "{title}" na sua conta, {email}}other{Marcadores guardados em "{title}" na sua conta, {email}}}</translation>
 <translation id="3371831930909698441">A tradução está disponível. Opções disponíveis junto à parte inferior do ecrã.</translation>
 <translation id="3377063233124932127">Agora, os seus marcadores, palavras-passe e outros itens guardados estão na parte superior.</translation>
 <translation id="3393920035788932672">Pop-ups Permitidos</translation>
@@ -1033,6 +1034,7 @@
 <translation id="7840771868269352570">Os itens selecionados serão removidos.</translation>
 <translation id="7845466610722898">Mostrar Lista de leitura</translation>
 <translation id="784551991304901159">Para ver o conteúdo, selecione Ativar no menu</translation>
+<translation id="7846158885638438868">{count,plural, =1{Adicionado aos marcadores em "{title}"}other{Adicionados aos marcadores em "{title}"}}</translation>
 <translation id="7853202427316060426">Atividade</translation>
 <translation id="7856733331829174190">Impossível transferir</translation>
 <translation id="785938070103630874">Abra palavras-passe, métodos de pagamento, moradas e muito mais</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index 3fa1c03..31f22cf9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -321,6 +321,7 @@
 <translation id="3131206671572504478">Blokovať všetky</translation>
 <translation id="313283613037595347">Vytvoriť novú kartu inkognito.</translation>
 <translation id="3146109040683991651">Nastaviť Chrome ako predvolený prehliadač</translation>
+<translation id="3152169319860972623">Kontrola hesiel skontroluje vaše uložené heslá a upozorní vás na prípadné porušenia pravidiel na internete. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation>
 <translation id="3153862085237805241">Uložiť kartu</translation>
 <translation id="3157387275655328056">Pridať do čitateľského zoznamu</translation>
 <translation id="3157684681743766797">Označiť všetko…</translation>
@@ -353,6 +354,7 @@
 <translation id="3324193307694657476">Adresa 2</translation>
 <translation id="3328459813621383194">Presun neaktívnych kariet</translation>
 <translation id="3328801116991980348">Informácie o stránkach</translation>
+<translation id="3344485292736684439">{count,plural, =1{Záložka bola uložená do priečinka {title} vo vašom účte {email}}few{Záložky boli uložené do priečinka {title} vo vašom účte {email}}many{Bookmarks saved to "{title}" in your account, {email}}other{Záložky boli uložené do priečinka {title} vo vašom účte {email}}}</translation>
 <translation id="3371831930909698441">Prekladač je k dispozícii. Možnosti nájdete v dolnej časti obrazovky.</translation>
 <translation id="3377063233124932127">Uložené záložky, heslá a ďalšie položky nájdete odteraz na začiatku.</translation>
 <translation id="3393920035788932672">Povolené okná</translation>
@@ -1032,6 +1034,7 @@
 <translation id="7840771868269352570">Vybrané položky budú odstránené.</translation>
 <translation id="7845466610722898">Zobraziť čitateľský zoznam</translation>
 <translation id="784551991304901159">Ak si chcete zobraziť obsah, vyberte v ponuke Zapnúť</translation>
+<translation id="7846158885638438868">{count,plural, =1{Záložka bola pridaná do priečinka {title}}few{Záložky boli pridané do priečinka {title}}many{Bookmarked to "{title}"}other{Záložky boli pridané do priečinka {title}}}</translation>
 <translation id="7853202427316060426">Aktivita</translation>
 <translation id="7856733331829174190">Sťahovanie zlyhalo</translation>
 <translation id="785938070103630874">Otvorte heslá, spôsoby platby alebo adresu a podobne</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb
index 2062e475..6b9937a 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb
@@ -45,7 +45,7 @@
 <translation id="8179976553408161302">Enter</translation>
 <translation id="8190452200642501331">Чоо-жайларды көрсөтүү</translation>
 <translation id="8219905600827687498">Сунушталган сырсөздөр</translation>
-<translation id="8300526662653766176">Өткөрүүчү кодду коюуңуз</translation>
+<translation id="8300526662653766176">Өткөрүүчү кодду коюңуз</translation>
 <translation id="8332511935157148552">Сырсөздөр табылган жок</translation>
 <translation id="8486024683491936104">Сырсөздү өзгөртөсүзбү?</translation>
 <translation id="8503813439785031346">Колдонуучунун ысымы</translation>
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
index c42c9dd..cc89dda 100644
--- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@
-6e59a137532eab23645a15a66e00b6226d3f945d
\ No newline at end of file
+f215774978510189f3b650cc1325aa57d7aca173
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
index 85c8df4..0c04d8c 100644
--- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@
-558abe135da2ebe67422d2cd5034ab4fd00684c6
\ No newline at end of file
+3b2788f9a04d609b06433a3416ca736f79dff83b
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
index c5d17fe..8f72408 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-d53c39854fdbd39e9ce00528e424201e290e34ac
\ No newline at end of file
+ee7a055b2b49d40970b1630f742c7c6991126b3f
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
index ed34376f..8689490 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-0e41795bf4ba564817fe484251e0a84217182d7c
\ No newline at end of file
+f0ff0d68abcede11a2337950c1562b62c9aa6698
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
index 7d3bd25..068cb53 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-c886c01fcd6cff6fd73cf8aa51bf32812a47ca05
\ No newline at end of file
+0ec6540b6088e47e0dc4aa840c2481a023b77f53
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
index 88279096..c1acbd5 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-7d6eddd6735cd29c029e0747dffb94599de7d7d6
\ No newline at end of file
+fcf0b968fa2c28cf25b8487b48a73514c82cb992
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
index 9eb96ba..e920c02 100644
--- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-73bcc7600ce5a6c737d0d9c37eab3ccd481206ec
\ No newline at end of file
+6405f5082e62aedf3c5fd38d8a6e1f10ca0113ef
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
index dc94986b..5b0baaf4 100644
--- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-ff32b5764fa89f81729cc184f6eafb51d891c870
\ No newline at end of file
+16563ea73bbee194d233226fd37393c0037a4f91
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
index 46f0e67..d457912 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-dc319d9629a929ea9895713cb81f18d9ce03e4fc
\ No newline at end of file
+924843099908534dc0a775d4a7c7b20823e35356
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
index 98b17a9..0d84e7c5 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-52790fe0c0b94d9534c2f30afcafe25da9d293c6
\ No newline at end of file
+56cef4cb07f1f2f0b34b0efdd0f4776e8bb15485
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
index 9c450ac0..71a541b 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-b69dae0668899de48d191559bc340ab184b1fc47
\ No newline at end of file
+8b6fdebb1e1e3ce3d060067578cf5f7a82554a20
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
index 0a347b7..f060357d 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-2ddc7fbc86e7799138953aa2d0ec92b26124c973
\ No newline at end of file
+997467a595e572919f6004c6fa1fa21cf5370718
\ No newline at end of file
diff --git a/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc b/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc
index f01a4cb6f..e54cc47 100644
--- a/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc
+++ b/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc
@@ -716,28 +716,29 @@
   DVLOG(3) << __func__;
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if (state_ != kEncoding && state_ != kInitializing) {
-    DVLOG(3) << "Abandon input frame for video encoder.";
-    return;
+  switch (state_) {
+    case kEncoding: {
+      pending_input_queue_.push_back(
+          MakeInput(std::move(frame), force_keyframe));
+      // We could call `FeedInputs()` synchronously from here, but it will
+      // be preparing input sample which is a bit of heavy lifting, and we
+      // want to return from this Mojo call as soon as possible to unblock
+      // the renderer.
+      task_runner_->PostTask(
+          FROM_HERE,
+          base::BindOnce(&MediaFoundationVideoEncodeAccelerator::FeedInputs,
+                         weak_ptr_));
+      break;
+    }
+    case kInitializing: {
+      pending_input_queue_.push_back(
+          MakeInput(std::move(frame), force_keyframe));
+      break;
+    }
+    default:
+      DCHECK(false) << "Abandon input frame for video encoder."
+                    << " State: " << static_cast<int>(state_);
   }
-
-  pending_input_queue_.push_back(MakeInput(std::move(frame), force_keyframe));
-
-  // Before the first time |input_required_| is toggled on, the HMFT is not yet
-  // ready receiving inputs.
-  if (!input_required_) {
-    return;
-  }
-
-  auto first_input = std::move(pending_input_queue_.front());
-  pending_input_queue_.pop_front();
-  auto hr = ProcessInput(std::move(first_input));
-  if (FAILED(hr)) {
-    NotifyErrorStatus({EncoderStatus::Codes::kEncoderInitializationError,
-                       "Failed to encode pending frame."});
-    return;
-  }
-  input_required_ = false;
 }
 
 void MediaFoundationVideoEncodeAccelerator::UseOutputBitstreamBuffer(
@@ -855,6 +856,41 @@
   delete this;
 }
 
+void MediaFoundationVideoEncodeAccelerator::DrainEncoder() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  auto hr = encoder_->ProcessMessage(MFT_MESSAGE_COMMAND_DRAIN, 0);
+  if (FAILED(hr)) {
+    std::move(flush_callback_).Run(/*success=*/false);
+    return;
+  }
+}
+
+void MediaFoundationVideoEncodeAccelerator::Flush(
+    FlushCallback flush_callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  if (state_ != kEncoding || !encoder_) {
+    DCHECK(false) << "Called Flush() with unexpected state."
+                  << " State: " << static_cast<int>(state_);
+    std::move(flush_callback).Run(/*success=*/false);
+    return;
+  }
+
+  SetState(kFlushing);
+  flush_callback_ = std::move(flush_callback);
+  if (pending_input_queue_.empty()) {
+    // There are no pending inputs we can just ask encoder to drain without
+    // having to wait for any more METransformNeedInput requests.
+    // Otherwise METransformNeedInput will call DrainEncoder() when all the
+    // inputs from `pending_input_queue_` were fed to the MF encoder.
+    DrainEncoder();
+  }
+}
+
+bool MediaFoundationVideoEncodeAccelerator::IsFlushSupported() {
+  return true;
+}
+
 bool MediaFoundationVideoEncodeAccelerator::IsGpuFrameResizeSupported() {
   return true;
 }
@@ -1137,55 +1173,86 @@
   client_->NotifyErrorStatus(std::move(status));
 }
 
+void MediaFoundationVideoEncodeAccelerator::FeedInputs() {
+  if (pending_input_queue_.empty()) {
+    return;
+  }
+
+  // No point to try feeding more than one input here,
+  // because MF encoder never accepts more than one input in a row.
+  auto& next_input = pending_input_queue_.front();
+  HRESULT hr = ProcessInput(next_input);
+  if (hr == MF_E_NOTACCEPTING) {
+    return;
+  }
+  if (FAILED(hr)) {
+    NotifyErrorStatus({EncoderStatus::Codes::kSystemAPICallError,
+                       "Failed to encode pending frame. " + PrintHr(hr)});
+    return;
+  }
+  pending_input_queue_.pop_front();
+}
+
 HRESULT MediaFoundationVideoEncodeAccelerator::ProcessInput(
-    PendingInput input) {
+    const PendingInput& input) {
   DVLOG(3) << __func__;
+  DCHECK(input_sample_);
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  TRACE_EVENT1("media", "MediaFoundationVideoEncodeAccelerator::ProcessInput",
+               "timestamp", input.frame->timestamp());
 
-  auto timestamp = input.frame->timestamp();
-  HRESULT hr = PopulateInputSampleBuffer(std::move(input.frame));
-  RETURN_ON_HR_FAILURE(hr, "Couldn't populate input sample buffer", hr);
-
-  input_sample_->SetSampleTime(timestamp.InMicroseconds() *
-                               kOneMicrosecondInMFSampleTimeUnits);
-  UINT64 sample_duration = 0;
-  hr = MFFrameRateToAverageTimePerFrame(frame_rate_, 1, &sample_duration);
-  RETURN_ON_HR_FAILURE(hr, "Couldn't calculate sample duration", E_FAIL);
-  input_sample_->SetSampleDuration(sample_duration);
-
-  if (input.options.key_frame) {
-    VARIANT var;
-    var.vt = VT_UI4;
-    var.ulVal = 1;
-    hr = codec_api_->SetValue(&CODECAPI_AVEncVideoForceKeyFrame, &var);
-    if (FAILED(hr)) {
-      LOG(WARNING) << "Failed to set CODECAPI_AVEncVideoForceKeyFrame, "
-                      "HRESULT: 0x"
-                   << std::hex << hr;
+  if (has_prepared_input_sample_) {
+    if (DCHECK_IS_ON()) {
+      // Let's validate that prepared sample actually matches the frame
+      // we encode.
+      LONGLONG sample_ts = 0;
+      auto hr = input_sample_->GetSampleTime(&sample_ts);
+      DCHECK_EQ(hr, S_OK);
+      int64_t frame_ts = input.frame->timestamp().InMicroseconds() *
+                         kOneMicrosecondInMFSampleTimeUnits;
+      DCHECK_EQ(frame_ts, sample_ts)
+          << "Prepared sample timestamp doesn't match frame timestamp.";
     }
-  }
-  if (rate_ctrl_) {
-    VideoRateControlWrapper::FrameParams frame_params{};
-    frame_params.frame_type =
-        input.options.key_frame
-            ? VideoRateControlWrapper::FrameParams::FrameType::kKeyFrame
-            : VideoRateControlWrapper::FrameParams::FrameType::kInterFrame;
-    int qp = rate_ctrl_->ComputeQP(frame_params);
-    VARIANT var;
-    var.vt = VT_UI8;
-    var.ulVal = QindextoAVEncQP(static_cast<uint8_t>(qp));
-    hr = codec_api_->SetValue(&CODECAPI_AVEncVideoEncodeQP, &var);
-    RETURN_ON_HR_FAILURE(hr, "Couldn't set current layer QP", hr);
-    hr = input_sample_->SetUINT64(MFSampleExtension_VideoEncodeQP, var.ulVal);
-    RETURN_ON_HR_FAILURE(hr, "Couldn't set input sample attribute QP", hr);
+  } else {
+    // Prepare input sample if it hasn't been done yet.
+    HRESULT hr = PopulateInputSampleBuffer(input);
+    RETURN_ON_HR_FAILURE(hr, "Couldn't populate input sample buffer", hr);
+
+    if (rate_ctrl_) {
+      VideoRateControlWrapper::FrameParams frame_params{};
+      frame_params.frame_type =
+          input.options.key_frame
+              ? VideoRateControlWrapper::FrameParams::FrameType::kKeyFrame
+              : VideoRateControlWrapper::FrameParams::FrameType::kInterFrame;
+      int qp = rate_ctrl_->ComputeQP(frame_params);
+      VARIANT var;
+      var.vt = VT_UI8;
+      var.ulVal = QindextoAVEncQP(static_cast<uint8_t>(qp));
+      hr = codec_api_->SetValue(&CODECAPI_AVEncVideoEncodeQP, &var);
+      RETURN_ON_HR_FAILURE(hr, "Couldn't set current layer QP", hr);
+      hr = input_sample_->SetUINT64(MFSampleExtension_VideoEncodeQP, var.ulVal);
+      RETURN_ON_HR_FAILURE(hr, "Couldn't set input sample attribute QP", hr);
+    }
+
+    has_prepared_input_sample_ = true;
   }
 
-  return encoder_->ProcessInput(input_stream_id_, input_sample_.Get(), 0);
+  HRESULT hr = 0;
+  {
+    TRACE_EVENT1("media", "IMFTransform::ProcessInput", "timestamp",
+                 input.frame->timestamp());
+    hr = encoder_->ProcessInput(input_stream_id_, input_sample_.Get(), 0);
+  }
+  // Check if ProcessInput() actually accepted the sample, if not, remember
+  // that we don't need to prepare sample next time and can just use it.
+  has_prepared_input_sample_ = (hr == MF_E_NOTACCEPTING);
+  return hr;
 }
 
 HRESULT MediaFoundationVideoEncodeAccelerator::PopulateInputSampleBuffer(
-    scoped_refptr<VideoFrame> frame) {
+    const PendingInput& input) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  auto frame = input.frame;
   if (frame->storage_type() !=
           VideoFrame::StorageType::STORAGE_GPU_MEMORY_BUFFER &&
       !frame->IsMappable()) {
@@ -1193,6 +1260,11 @@
     return MF_E_INVALID_STREAM_DATA;
   }
 
+  TRACE_EVENT1(
+      "media",
+      "MediaFoundationVideoEncodeAccelerator::PopulateInputSampleBuffer",
+      "timestamp", frame->timestamp());
+
   if (frame->format() != PIXEL_FORMAT_NV12 &&
       frame->format() != PIXEL_FORMAT_I420) {
     LOG(ERROR) << "Unsupported video frame format";
@@ -1232,9 +1304,28 @@
     }
   }
 
+  auto hr = input_sample_->SetSampleTime(frame->timestamp().InMicroseconds() *
+                                         kOneMicrosecondInMFSampleTimeUnits);
+  RETURN_ON_HR_FAILURE(hr, "SetSampleTime() failed", hr);
+
+  UINT64 sample_duration = 0;
+  hr = MFFrameRateToAverageTimePerFrame(frame_rate_, 1, &sample_duration);
+  RETURN_ON_HR_FAILURE(hr, "Couldn't calculate sample duration", hr);
+
+  input_sample_->SetSampleDuration(sample_duration);
+  RETURN_ON_HR_FAILURE(hr, "SetSampleDuration() failed", hr);
+
+  if (input.options.key_frame) {
+    VARIANT var;
+    var.vt = VT_UI4;
+    var.ulVal = 1;
+    hr = codec_api_->SetValue(&CODECAPI_AVEncVideoForceKeyFrame, &var);
+    RETURN_ON_HR_FAILURE(hr, "Set CODECAPI_AVEncVideoForceKeyFrame failed", hr);
+  }
+
   const auto kTargetPixelFormat = PIXEL_FORMAT_NV12;
   Microsoft::WRL::ComPtr<IMFMediaBuffer> input_buffer;
-  HRESULT hr = input_sample_->GetBufferByIndex(0, &input_buffer);
+  hr = input_sample_->GetBufferByIndex(0, &input_buffer);
   if (FAILED(hr)) {
     // Allocate a new buffer.
     MFT_INPUT_STREAM_INFO input_stream_info;
@@ -1286,8 +1377,8 @@
 }
 
 // Handle case where video frame is backed by a GPU texture, but needs to be
-// copied to CPU memory, if HMFT does not accept texture from adapter different
-// from that is currently used for encoding.
+// copied to CPU memory, if HMFT does not accept texture from adapter
+// different from that is currently used for encoding.
 HRESULT MediaFoundationVideoEncodeAccelerator::CopyInputSampleBufferFromGpu(
     const VideoFrame& frame) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -1435,8 +1526,9 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   int result = 0;
 
-  if (keyframe)
+  if (keyframe) {
     outputs_since_keyframe_count_ = 0;
+  }
 
   switch (num_temporal_layers_) {
     case 1:
@@ -1481,8 +1573,9 @@
     while ((result = h264_parser_.AdvanceToNextNALU(&nalu)) !=
            H264Parser::kEOStream) {
       // Fallback to software when the stream is invalid.
-      if (result == H264Parser::Result::kInvalidStream)
+      if (result == H264Parser::Result::kInvalidStream) {
         return false;
+      }
 
       if (nalu.nal_unit_type == H264NALU::kPrefix) {
         *temporal_id = (nalu.data[kPrefixNALLocatedBytePos] & 0b1110'0000) >> 5;
@@ -1525,6 +1618,7 @@
 void MediaFoundationVideoEncodeAccelerator::ProcessOutput() {
   DVLOG(3) << __func__;
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  TRACE_EVENT0("media", "MediaFoundationVideoEncodeAccelerator::ProcessOutput");
 
   MFT_OUTPUT_DATA_BUFFER output_data_buffer = {0};
   output_data_buffer.dwStreamID = output_stream_id_;
@@ -1633,8 +1727,8 @@
   }
 
   // Immediately return encoded buffer with BitstreamBuffer to client.
-  auto buffer_ref = std::move(bitstream_buffer_queue_.front());
-  bitstream_buffer_queue_.pop_front();
+  auto buffer_ref = std::move(bitstream_buffer_queue_.back());
+  bitstream_buffer_queue_.pop_back();
 
   {
     MediaBufferScopedPointer scoped_buffer(output_buffer.Get());
@@ -1679,22 +1773,14 @@
         client_->RequireBitstreamBuffers(kNumInputBuffers, input_visible_size_,
                                          bitstream_buffer_size_);
         SetState(kEncoding);
-        input_required_ = true;
       } else if (state_ == kEncoding) {
-        // If there're already pending inputs in queue, that needs to
-        // be handled here immediately.
-        if (!pending_input_queue_.empty()) {
-          PendingInput first_input = std::move(pending_input_queue_.front());
-          pending_input_queue_.pop_front();
-          HRESULT hr = ProcessInput(std::move(first_input));
-          if (FAILED(hr)) {
-            NotifyErrorStatus({EncoderStatus::Codes::kEncoderFailedEncode,
-                               "Failed to encode pending frame"});
-            return;
-          }
-          input_required_ = false;
-        } else {
-          input_required_ = true;
+        FeedInputs();
+      } else if (state_ == kFlushing) {
+        FeedInputs();
+        if (pending_input_queue_.empty()) {
+          // All pending inputs are sent to the MF encoder, it's time to tell it
+          // to drain and produce all outputs.
+          DrainEncoder();
         }
       }
       break;
@@ -1703,6 +1789,18 @@
       ProcessOutput();
       break;
     }
+    case METransformDrainComplete: {
+      DCHECK(pending_input_queue_.empty());
+      auto hr = encoder_->ProcessMessage(MFT_MESSAGE_NOTIFY_START_OF_STREAM, 0);
+      if (FAILED(hr)) {
+        SetState(kError);
+        std::move(flush_callback_).Run(false);
+        break;
+      }
+      SetState(kEncoding);
+      std::move(flush_callback_).Run(true);
+      break;
+    }
     default:
       break;
   }
diff --git a/media/gpu/windows/media_foundation_video_encode_accelerator_win.h b/media/gpu/windows/media_foundation_video_encode_accelerator_win.h
index 42ecd40..2906434 100644
--- a/media/gpu/windows/media_foundation_video_encode_accelerator_win.h
+++ b/media/gpu/windows/media_foundation_video_encode_accelerator_win.h
@@ -74,6 +74,8 @@
       const VideoBitrateAllocation& bitrate_allocation,
       uint32_t framerate) override;
   void Destroy() override;
+  void Flush(FlushCallback flush_callback) override;
+  bool IsFlushSupported() override;
   bool IsGpuFrameResizeSupported() override;
 
   // IMFAsyncCallback implementation
@@ -103,7 +105,6 @@
     kUninitialized,
     kInitializing,
     kEncoding,
-    kDraining,
     kFlushing,
     kClosing,
     kError,
@@ -134,10 +135,14 @@
   void SetState(State state);
 
   // Processes the input video frame for the encoder.
-  HRESULT ProcessInput(PendingInput input);
+  HRESULT ProcessInput(const PendingInput& input);
+
+  // Feed as many frames from |pending_input_queue_| to ProcessInput()
+  // as possible.
+  void FeedInputs();
 
   // Populates input sample buffer with contents of a video frame
-  HRESULT PopulateInputSampleBuffer(scoped_refptr<VideoFrame> frame);
+  HRESULT PopulateInputSampleBuffer(const PendingInput& input);
   HRESULT PopulateInputSampleBufferGpu(scoped_refptr<VideoFrame> frame);
   HRESULT CopyInputSampleBufferFromGpu(const VideoFrame& frame);
 
@@ -158,6 +163,10 @@
   // Asynchronous event handler
   void MediaEventHandler(MediaEventType event_type);
 
+  // Sends MFT_MESSAGE_COMMAND_DRAIN to the encoder to make it
+  // process all inputs, produce all outputs and tell us when it's done.
+  void DrainEncoder();
+
   // Releases resources encoder holds.
   void ReleaseEncoderResources();
 
@@ -232,9 +241,11 @@
   Microsoft::WRL::ComPtr<IMFMediaType> imf_input_media_type_;
   Microsoft::WRL::ComPtr<IMFMediaType> imf_output_media_type_;
 
-  bool input_required_ = false;
-
   Microsoft::WRL::ComPtr<IMFSample> input_sample_;
+  // True if `input_sample_` has been populated with data/metadata
+  // of the next frame to be encoded.
+  bool has_prepared_input_sample_ = false;
+
   Microsoft::WRL::ComPtr<IMFSample> output_sample_;
   Microsoft::WRL::ComPtr<ID3D11VideoProcessor> video_processor_;
   Microsoft::WRL::ComPtr<ID3D11VideoProcessorEnumerator>
@@ -263,6 +274,8 @@
   // A buffer used as a scratch space for I420 to NV12 conversion
   std::vector<uint8_t> resize_buffer_;
 
+  FlushCallback flush_callback_;
+
   // Bitrate controller for CBR encoding.
   std::unique_ptr<VideoRateControlWrapper> rate_ctrl_;
 
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index 0c2e4798..7bc2c04 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2023-04-15 12:53 UTC
+# Last updated: 2023-04-16 12:54 UTC
 PinsListTimestamp
-1681563225
+1681649693
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/services/network/attribution/attribution_request_helper.cc b/services/network/attribution/attribution_request_helper.cc
index 1949aa2..abc432b 100644
--- a/services/network/attribution/attribution_request_helper.cc
+++ b/services/network/attribution/attribution_request_helper.cc
@@ -14,10 +14,10 @@
 #include "base/feature_list.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
-#include "base/guid.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/strcat.h"
+#include "base/uuid.h"
 #include "net/base/isolation_info.h"
 #include "net/base/schemeful_site.h"
 #include "net/http/http_request_headers.h"
@@ -70,7 +70,7 @@
   explicit AttestationOperation(
       const base::RepeatingCallback<AttributionAttestationMediator()>&
           create_mediator)
-      : aggregatable_report_id(base::GUID::GenerateRandomV4()),
+      : aggregatable_report_id(base::Uuid::GenerateRandomV4()),
         mediator(create_mediator.Run()) {}
 
   // Returns the message associated to this atttestation operation. It is
@@ -79,7 +79,7 @@
   std::string Message(const url::Origin& destination_origin);
 
   // TODO(https://crbug.com/1406645): use explicitly spec compliant structure
-  base::GUID aggregatable_report_id;
+  base::Uuid aggregatable_report_id;
 
   AttributionAttestationMediator mediator;
 };
diff --git a/services/network/attribution/attribution_request_helper_unittest.cc b/services/network/attribution/attribution_request_helper_unittest.cc
index 03fbcc3..8963dc1 100644
--- a/services/network/attribution/attribution_request_helper_unittest.cc
+++ b/services/network/attribution/attribution_request_helper_unittest.cc
@@ -8,12 +8,12 @@
 #include <string>
 
 #include "base/functional/bind.h"
-#include "base/guid.h"
 #include "base/strings/string_util.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
+#include "base/uuid.h"
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/redirect_info.h"
 #include "net/url_request/url_request.h"
@@ -193,7 +193,7 @@
   EXPECT_TRUE(base::EndsWith(message, expected_origin));
   std::string potential_id =
       message.substr(0, message.length() - expected_origin.length());
-  EXPECT_TRUE(base::GUID::ParseLowercase(potential_id).is_valid());
+  EXPECT_TRUE(base::Uuid::ParseLowercase(potential_id).is_valid());
 
   histograms_.ExpectUniqueSample(
       "Conversions.TriggerAttestation.DestinationOriginStatus",
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index e9c3884..27d2132 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -3693,28 +3693,6 @@
             ]
         }
     ],
-    "DateInputInlineBlock": [
-        {
-            "platforms": [
-                "android",
-                "android_weblayer",
-                "android_webview",
-                "chromeos",
-                "chromeos_lacros",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "DateInputInlineBlock"
-                    ]
-                }
-            ]
-        }
-    ],
     "DefaultBrowserBlueDotPromo": [
         {
             "platforms": [
diff --git a/third_party/blink/renderer/core/paint/paint_layer.cc b/third_party/blink/renderer/core/paint/paint_layer.cc
index 5d488f6c..ad9c93e 100644
--- a/third_party/blink/renderer/core/paint/paint_layer.cc
+++ b/third_party/blink/renderer/core/paint/paint_layer.cc
@@ -2101,7 +2101,12 @@
     }
 
     PhysicalOffset delta;
-    child_layer->ConvertToLayerCoords(this, delta);
+    if (RuntimeEnabledFeatures::RemoveConvertToLayerCoordsEnabled()) {
+      delta = child_layer->GetLayoutObject().LocalToAncestorPoint(
+          delta, &GetLayoutObject(), kIgnoreTransforms);
+    } else {
+      child_layer->ConvertToLayerCoords(this, delta);
+    }
     added_rect.Move(delta);
 
     result.Unite(added_rect);
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 58517931..b1cabeea 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -902,7 +902,7 @@
       'chromeos-betty-pi-arc-chrome-dchecks': 'chromeos_betty-pi-arc_dchecks_reclient',
       'chromeos-betty-pi-arc-finch-smoke-chrome': 'chromeos_betty-pi-arc_dchecks_reclient',
       'chromeos-brya-chrome-skylab-fyi': 'chromeos_brya_include_unwind_tables_official_dchecks_skylab_reclient',
-      'chromeos-jacuzzi-chrome-skylab-fyi': 'chromeos_jacuzzi_include_unwind_tables_official_dchecks_skylab_reclient',
+      'chromeos-jacuzzi64-chrome-skylab-fyi': 'chromeos_jacuzzi_include_unwind_tables_official_dchecks_skylab_reclient',
       'chromeos-octopus-chrome-skylab-fyi': 'chromeos_octopus_include_unwind_tables_official_dchecks_skylab_reclient',
       'chromeos-trogdor-chrome-skylab-fyi': 'chromeos_trogdor_include_unwind_tables_official_dchecks_skylab_reclient',
       'chromeos-volteer-chrome-skylab-fyi': 'chromeos_volteer_include_unwind_tables_official_dchecks_skylab_reclient',
@@ -960,8 +960,8 @@
       'chromeos-eve-chrome': 'chromeos_eve_include_unwind_tables_official_dchecks',
       'chromeos-eve-compile-chrome': 'chromeos_eve_include_unwind_tables_official_dchecks',
       'chromeos-jacuzzi-chrome': 'chromeos_jacuzzi_include_unwind_tables_official',
-      'chromeos-jacuzzi-chrome-skylab': 'chromeos_jacuzzi_include_unwind_tables_official_dchecks_skylab_reclient',
       'chromeos-jacuzzi-compile-chrome': 'chromeos_jacuzzi_include_unwind_tables_official',
+      'chromeos-jacuzzi64-chrome-skylab': 'chromeos_jacuzzi_include_unwind_tables_official_dchecks_skylab_reclient',
       'chromeos-kevin-chrome': 'chromeos_kevin_include_unwind_tables_official_dchecks',
       'chromeos-kevin-compile-chrome': 'chromeos_kevin_include_unwind_tables_official_dchecks',
       'chromeos-octopus-chrome': 'chromeos_octopus_include_unwind_tables_official_dchecks',
diff --git a/tools/mb/mb_config_expectations/internal.chromeos.fyi.json b/tools/mb/mb_config_expectations/internal.chromeos.fyi.json
index 302d675..3d9da8b9 100644
--- a/tools/mb/mb_config_expectations/internal.chromeos.fyi.json
+++ b/tools/mb/mb_config_expectations/internal.chromeos.fyi.json
@@ -40,7 +40,7 @@
       "use_remoteexec": true
     }
   },
-  "chromeos-jacuzzi-chrome-skylab-fyi": {
+  "chromeos-jacuzzi64-chrome-skylab-fyi": {
     "args_file": "//build/args/chromeos/jacuzzi.gni",
     "gn_args": {
       "dcheck_always_on": true,
diff --git a/tools/mb/mb_config_expectations/tryserver.chrome.json b/tools/mb/mb_config_expectations/tryserver.chrome.json
index 61a6eed..90a8ade 100644
--- a/tools/mb/mb_config_expectations/tryserver.chrome.json
+++ b/tools/mb/mb_config_expectations/tryserver.chrome.json
@@ -165,18 +165,6 @@
       "use_remoteexec": true
     }
   },
-  "chromeos-jacuzzi-chrome-skylab": {
-    "args_file": "//build/args/chromeos/jacuzzi.gni",
-    "gn_args": {
-      "dcheck_always_on": true,
-      "exclude_unwind_tables": false,
-      "is_chrome_branded": true,
-      "is_chromeos_device": true,
-      "is_official_build": true,
-      "is_skylab": true,
-      "use_remoteexec": true
-    }
-  },
   "chromeos-jacuzzi-compile-chrome": {
     "args_file": "//build/args/chromeos/jacuzzi.gni",
     "gn_args": {
@@ -190,6 +178,18 @@
       "use_remoteexec": true
     }
   },
+  "chromeos-jacuzzi64-chrome-skylab": {
+    "args_file": "//build/args/chromeos/jacuzzi.gni",
+    "gn_args": {
+      "dcheck_always_on": true,
+      "exclude_unwind_tables": false,
+      "is_chrome_branded": true,
+      "is_chromeos_device": true,
+      "is_official_build": true,
+      "is_skylab": true,
+      "use_remoteexec": true
+    }
+  },
   "chromeos-kevin-chrome": {
     "args_file": "//build/args/chromeos/kevin.gni",
     "gn_args": {
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index d162372..2627bd8 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -55310,6 +55310,13 @@
   <int value="3" label="kNecessary"/>
 </enum>
 
+<enum name="KidsChromeManagementClientParsingError">
+  <int value="0" label="Success"/>
+  <int value="1" label="Response dictionary failure"/>
+  <int value="2" label="Display classification failure"/>
+  <int value="3" label="Invalid display classification"/>
+</enum>
+
 <enum name="KidsExternalFetcherStatus">
   <int value="0" label="NoError"/>
   <int value="1" label="AuthError"/>
@@ -103940,6 +103947,7 @@
   <int value="11" label="No UKM sampling configuration received"/>
   <int value="12" label="MSBB consent is disabled"/>
   <int value="13" label="Apps consent is disabled"/>
+  <int value="14" label="Extension URL has an unexpected scheme"/>
 </enum>
 
 <enum name="UkmEventNameHash">
diff --git a/tools/metrics/histograms/metadata/families/histograms.xml b/tools/metrics/histograms/metadata/families/histograms.xml
index df41bd8..4ec0173f 100644
--- a/tools/metrics/histograms/metadata/families/histograms.xml
+++ b/tools/metrics/histograms/metadata/families/histograms.xml
@@ -251,6 +251,16 @@
   </summary>
 </histogram>
 
+<histogram name="FamilyLinkUser.ClassifyUrlRequest.AuthError"
+    enum="GoogleServiceAuthError" expires_after="2023-11-01">
+  <owner>tju@google.com</owner>
+  <owner>chrome-kids-eng@google.com</owner>
+  <summary>
+    The detailed reason of GoogleServiceAuthError in calls to Kids Management
+    API::ClassifyURL.
+  </summary>
+</histogram>
+
 <histogram name="FamilyLinkUser.ClassifyUrlRequest.NetOrHttpStatus"
     enum="CombinedHttpResponseAndNetErrorCode" expires_after="2023-11-01">
   <owner>tju@google.com</owner>
@@ -262,6 +272,16 @@
   </summary>
 </histogram>
 
+<histogram name="FamilyLinkUser.ClassifyUrlRequest.ParsingResult"
+    enum="KidsChromeManagementClientParsingError" expires_after="2023-11-01">
+  <owner>tju@google.com</owner>
+  <owner>chrome-kids-eng@google.com</owner>
+  <summary>
+    Indicates success of a JSON response parsing from Kids Management
+    API::ClassifyURL, or a stage at which it failed.
+  </summary>
+</histogram>
+
 <histogram name="FamilyLinkUser.LocalWebApprovalCompleteRequestTotalDuration"
     units="ms" expires_after="2023-12-12">
   <owner>anthie@google.com</owner>
diff --git a/ui/file_manager/file_manager/foreground/css/common_gm3.css b/ui/file_manager/file_manager/foreground/css/common_gm3.css
index ab1c0ba..ae9725513 100644
--- a/ui/file_manager/file_manager/foreground/css/common_gm3.css
+++ b/ui/file_manager/file_manager/foreground/css/common_gm3.css
@@ -119,18 +119,19 @@
 }
 
 .cr-dialog-container .cr-dialog-buttons > button {
-  background-color: var(--cros-button-background-color-secondary);
-  border: 0;
-  border-radius: 4px;
+  background-color: var(--cros-sys-primary_container);
+  border: none;
+  border-radius: 18px;
   box-sizing: border-box;
+  color: var(--cros-sys-on_primary_container);
   cursor: pointer;
   display: inline-block;
   font-size: 13px;
   font-weight: 500;
-  height: var(--cr-button-height);
+  height: 36px;
   margin: 0;
   margin-inline-start: 8px;
-  min-height: 32px;
+  min-height: 36px;
   min-width: 5.14em;
   outline: none;
   padding: 8px 16px;
@@ -140,61 +141,72 @@
   z-index: 0;
 }
 
-.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-ok,
-.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-ok:hover {
-  background-color: var(--cros-button-background-color-primary);
-  color: var(--cros-button-label-color-primary);
+.cr-dialog-container .cr-dialog-buttons > button > .hover-layer {
+  border-radius: 18px;
+  content: '';
+  display: none;
+  inset: 0;
+  pointer-events: none;
+  position: absolute;
+  z-index: 1;
+}
+
+.cr-dialog-container .cr-dialog-buttons > button > paper-ripple {
+  --paper-ripple-opacity: 1;
+  border-radius: 18px;
+  color: var(--cros-sys-ripple_primary);
+}
+
+.cr-dialog-container .cr-dialog-buttons > button:hover > .hover-layer {
+  display: block;
+}
+
+.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-ok {
+  background-color: var(--cros-sys-primary);
+  color: var(--cros-sys-on_primary);
   order: 1;
 }
 
-.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-ok:hover {
-  background: var(--cros-button-background-color-primary-hover-preblended);
+.cr-dialog-container
+    .cr-dialog-buttons > button.cr-dialog-ok:hover > .hover-layer {
+  background-color: var(--cros-sys-hover_on_prominent);
 }
 
-.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-ok:active {
-  box-shadow: 0 1px 2px var(--cros-button-active-shadow-color-key-primary),
-              0 1px 3px var(--cros-button-active-shadow-color-ambient-primary);
-}
-
-.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-ok[disabled],
-.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-ok[disabled]:hover {
+.cr-dialog-container .cr-dialog-buttons > button[disabled] {
   background-color:
-      var(--cros-button-background-color-primary-disabled);
-  color: var(--cros-button-label-color-primary-disabled);
+      var(--cros-sys-disabled_container);
+  color: var(--cros-sys-disabled);
+  cursor: default;
+}
+
+.cr-dialog-container
+    .cr-dialog-buttons > button[disabled]:hover > .hover-layer {
+  display: none;
 }
 
 .cr-dialog-container .cr-dialog-buttons > button.cr-dialog-cancel {
-  border: 1px solid var(--cros-button-stroke-color-secondary);
-  color: var(--cros-button-label-color-secondary);
   order: 0;
 }
 
-.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-cancel:hover {
-  background: var(--cros-button-background-color-secondary-hover);
+.cr-dialog-container
+    .cr-dialog-buttons > button.cr-dialog-cancel:hover > .hover-layer {
+  background-color: var(--cros-sys-hover_on_subtle);
 }
 
-.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-cancel:active {
-  box-shadow: 0 1px 2px var(--cros-button-active-shadow-color-key-secondary),
-              0 1px 3px var(--cros-button-active-shadow-color-ambient-secondary);
-}
-
-.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-cancel[disabled],
-.cr-dialog-container .cr-dialog-buttons > button.cr-dialog-cancel[disabled]:hover  {
-  border: 1px solid var(--cros-button-stroke-color-secondary-disabled);
-  color: var(--cros-button-label-color-secondary-disabled);
-}
-
-:root.focus-outline-visible .cr-dialog-container .cr-dialog-buttons > button:not(:active):focus,
-:host-context(:root.focus-outline-visible) .cr-dialog-container .cr-dialog-buttons > button:not(:active):focus {
-  outline: 2px solid var(--cros-focus-ring-color);
+:root.focus-outline-visible .cr-dialog-container
+    .cr-dialog-buttons > button:not(:active):focus,
+:host-context(:root.focus-outline-visible) .cr-dialog-container
+    .cr-dialog-buttons > button:not(:active):focus {
+  outline: 2px solid var(--cros-sys-focus_ring);
   outline-offset: 2px;
 }
 
 /* Some files confirm dialogs need to focus their 'Cancel' button by default,
    rather than the 'OK' button. The dialog buttons should have focus rings in
    this case (regardless of mouse, pointer, keyboard interaction). */
-.cr-dialog-container .cr-dialog-frame.files-confirm-dialog-cancel-default .cr-dialog-buttons > button:not(:active):focus {
-  outline: 2px solid var(--cros-focus-ring-color);
+.cr-dialog-container .cr-dialog-frame.files-confirm-dialog-cancel-default
+    .cr-dialog-buttons > button:not(:active):focus {
+  outline: 2px solid var(--cros-sys-focus_ring);
   outline-offset: 2px;
 }
 
@@ -320,10 +332,6 @@
   color: var(--cros-sys-on_surface_variant);
 }
 
-.cr-dialog-container .no-title .cr-dialog-text {
-  color: var(--cros-text-color-primary);
-}
-
 .cr-dialog-container .cr-dialog-buttons {
   display: flex;
   flex-direction: row;
@@ -398,7 +406,7 @@
 
 /* Common typography styles for ChromeOS. */
 .headline2 {
-  color: var(--cros-text-color-primary);
+  color: var(--cros-sys-on_surface);
   font-family: Roboto;
   font-size: 15px;
   font-weight: 500;
@@ -406,7 +414,7 @@
 }
 
 .button2 {
-  color: var(--cros-text-color-primary);
+  color: var(--cros-sys-on_surface);
   font-family: Roboto;
   font-size: 13px;
   font-weight: 500;
@@ -414,14 +422,14 @@
 }
 
 .body2-primary {
-  color: var(--cros-text-color-primary);
+  color: var(--cros-sys-on_surface);
   font-family: Roboto;
   font-size: 13px;
   line-height: 20px;
 }
 
 .annotation1-primary {
-  color: var(--cros-text-color-primary);
+  color: var(--cros-sys-on_surface);
   font-family: Roboto;
   font-size: 12px;
   line-height: 18px;
diff --git a/ui/file_manager/file_manager/foreground/css/file_manager_gm3.css b/ui/file_manager/file_manager/foreground/css/file_manager_gm3.css
index 88074ba..890670f4 100644
--- a/ui/file_manager/file_manager/foreground/css/file_manager_gm3.css
+++ b/ui/file_manager/file_manager/foreground/css/file_manager_gm3.css
@@ -2188,7 +2188,7 @@
 }
 
 .install-linux-package-details-frame {
-  border: 1px solid var(--cros-separator-color);
+  border: 1px solid var(--cros-sys-separator);
   display: block;
   height: 150px;
   overflow: scroll;
@@ -2205,13 +2205,13 @@
 }
 
 .cr-dialog-container.files-ng .install-linux-package-detail-label {
-  color: var(--cros-text-color-primary);
+  color: var(--cros-sys-on_surface);
   display: inline;
   margin-inline-end: 5px;
 }
 
 .cr-dialog-container.files-ng .install-linux-package-detail-value {
-  color: var(--cros-text-color-secondary);
+  color: var(--cros-sys-secondary);
   display: inline;
   margin-bottom: 5px;
   white-space: pre-wrap;
diff --git a/ui/file_manager/file_manager/foreground/elements/files_format_dialog.html b/ui/file_manager/file_manager/foreground/elements/files_format_dialog.html
index b35b5a4..85591c5 100644
--- a/ui/file_manager/file_manager/foreground/elements/files_format_dialog.html
+++ b/ui/file_manager/file_manager/foreground/elements/files_format_dialog.html
@@ -14,30 +14,144 @@
 
   [slot='body'] > #disk-format {
     margin-bottom: 0;
-    padding-bottom: 2px;
+    padding: 0 2px 2px; /* Cater the box shadow in focus state. */
   }
 
-  [slot='button-container']  {
+  :host-context([theme='legacy']) [slot='button-container']  {
     padding-top: 32px;
   }
 
-  #warning-icon {
+  :host-context([theme='refresh23']) [slot='button-container'] {
+    --cr-dialog-button-container-padding-bottom: 0;
+    --cr-dialog-button-container-padding-horizontal: 0;
+    padding-top: 32px;
+  }
+
+  :host-context([theme='legacy']) #warning-icon {
     --iron-icon-fill-color: var(--cros-icon-color-alert);
   }
 
-  #warning-message {
+  :host-context([theme='refresh23']) #warning-icon {
+    --iron-icon-fill-color: var(--cros-sys-error);
+  }
+
+  :host-context([theme='legacy']) #warning-message {
     color: var(--cros-text-color-alert);
     display: inline-block;
     margin-inline-start: 8px;
   }
 
-  cr-dialog::part(dialog) {
+  :host-context([theme='refresh23']) #warning-message {
+    color: var(--cros-sys-error);
+    display: inline-block;
+    margin-inline-start: 8px;
+  }
+
+  :host-context([theme='legacy']) cr-dialog::part(dialog) {
     border-radius: 12px;
   }
-  cr-dialog::part(wrapper) {
+
+  :host-context([theme='refresh23']) cr-dialog::part(dialog) {
+    --cr-dialog-background-color: var(--cros-sys-dialog_container);
+    border-radius: 20px;
+  }
+
+  :host-context([theme='refresh23']) cr-dialog::part(dialog)::backdrop {
+    background-color: var(--cros-sys-scrim);
+  }
+
+  :host-context([theme='legacy']) cr-dialog::part(wrapper) {
     /* subtract the internal padding in <cr-dialog> */
     padding: calc(24px - 20px);
   }
+
+  :host-context([theme='refresh23']) cr-dialog::part(wrapper) {
+      padding: 32px;
+      padding-bottom: 28px;
+  }
+
+  :host-context([theme='refresh23']) [slot='title'] {
+    --cr-dialog-title-slot-padding-bottom: 16px;
+    --cr-dialog-title-slot-padding-end: 0;
+    --cr-dialog-title-slot-padding-start: 0;
+    --cr-dialog-title-slot-padding-top: 0;
+    --cr-primary-text-color: var(--cros-sys-on_surface);
+    font-weight: 500;
+  }
+
+  :host-context([theme='refresh23']) [slot='body'] {
+    --cr-dialog-body-padding-horizontal: 0;
+    --cr-secondary-text-color: var(--cros-sys-on_surface_variant);
+  }
+
+  :host-context([theme='refresh23']) .md-select {
+    --md-select-bg-color: var(--cros-sys-input_field_on_base);
+    --md-select-focus-shadow-color: var(--cros-sys-focus_ring);
+    --md-select-text-color: var(--cros-sys-on_surface);
+    --md-select-side-padding: 16px;
+    border-radius: 8px;
+    height: 36px;
+  }
+
+  :host-context([theme='refresh23']) cr-input {
+    --cr-form-field-label-color: var(--cros-sys-on_surface);
+    --cr-input-background-color: var(--cros-sys-input_field_on_base);
+    --cr-input-border-radius: 8px;
+    --cr-input-color: var(--cros-sys-on_surface);
+    --cr-input-error-color: var(--cros-sys-error);
+    --cr-input-focus-color: var(--cros-sys-primary);
+    --cr-input-min-height: 36px;
+    --cr-input-padding-end: 16px;
+    --cr-input-padding-start: 16px;
+    --cr-input-placeholder-color: var(--cros-sys-secondary);
+  }
+
+  :host-context([theme='refresh23']) cr-button {
+    --active-bg: transparent;
+    --active-shadow: none;
+    --active-shadow-action: none;
+    --bg-action: var(--cros-sys-primary);
+    --cr-button-height: 36px;
+    --disabled-bg-action:
+        var(--cros-sys-disabled_container);
+    --disabled-bg: var(--cros-sys-disabled_container);;
+    --disabled-text-color: var(--cros-sys-disabled);
+    /* Use the default bg color as hover color because we
+        rely on hoverBackground layer below.  */
+    --hover-bg-action: var(--cros-sys-primary);
+    --hover-bg-color: var(--cros-sys-primary_container);
+    --ink-color: var(--cros-sys-ripple_primary);
+    --ripple-opacity-action: 1;
+    --ripple-opacity: 1;
+    --text-color-action: var(--cros-sys-on_primary);
+    --text-color: var(--cros-sys-on_primary_container);
+    border: none;
+    border-radius: 18px;
+    box-shadow: none;
+    position: relative;
+  }
+
+  :host-context([theme='refresh23']) cr-button.cancel-button {
+    background-color: var(--cros-sys-primary_container);
+  }
+
+  :host-context([theme='refresh23'])
+      cr-button.cancel-button:hover::part(hoverBackground) {
+    background-color: var(--cros-sys-hover_on_subtle);
+    display: block;
+  }
+
+  :host-context([theme='refresh23'])
+      cr-button.action-button:hover::part(hoverBackground) {
+    background-color: var(--cros-sys-hover_on_prominent);
+    display: block;
+  }
+
+  :host-context([theme='refresh23']):host-context(.focus-outline-visible)
+      cr-button:focus {
+    outline: 2px solid var(--cros-sys-focus_ring);
+    outline-offset: 2px;
+  }
 </style>
 
 <cr-dialog id="dialog" close-text="[[i18n('CLOSE_LABEL')]]"
diff --git a/ui/file_manager/file_manager/foreground/elements/files_password_dialog.html b/ui/file_manager/file_manager/foreground/elements/files_password_dialog.html
index b8b12df0..530a556 100644
--- a/ui/file_manager/file_manager/foreground/elements/files_password_dialog.html
+++ b/ui/file_manager/file_manager/foreground/elements/files_password_dialog.html
@@ -1,35 +1,75 @@
 <style>
-  [slot='title'] {
+  :host-context([theme='legacy']) [slot='title'] {
     --cr-primary-text-color: var(--cros-text-color-primary);
   }
 
-  [slot='body'] > div {
+  :host-context([theme='refresh23']) [slot='title'] {
+    --cr-dialog-title-slot-padding-bottom: 16px;
+    --cr-dialog-title-slot-padding-end: 0;
+    --cr-dialog-title-slot-padding-start: 0;
+    --cr-dialog-title-slot-padding-top: 0;
+    --cr-primary-text-color: var(--cros-sys-on_surface);
+    font-weight: 500;
+  }
+
+  :host-context([theme='refresh23']) [slot='body'] {
+    --cr-dialog-body-padding-horizontal: 0;
+    --cr-secondary-text-color: var(--cros-sys-on_surface_variant);
+  }
+
+  :host-context([theme='legacy']) [slot='body'] > div {
     --cr-secondary-text-color: var(--cros-text-color-secondary);
     margin-bottom: var(--cr-form-field-bottom-spacing);
   }
 
+  :host-context([theme='refresh23']) [slot='body'] > div {
+    margin-bottom: 32px;
+  }
+
+  :host-context([theme='refresh23']) [slot='button-container'] {
+    --cr-dialog-button-container-padding-bottom: 0;
+    --cr-dialog-button-container-padding-horizontal: 0;
+    padding-top: 32px;
+  }
+
   [slot='body'] > #input {
     margin-bottom: 0;
     padding-bottom: 2px;
   }
 
-  cr-dialog::part(dialog) {
+  :host-context([theme='legacy']) cr-dialog::part(dialog) {
     background-color: var(--cros-bg-color-elevation-3);
     border-radius: 12px;
     box-shadow: var(--cros-elevation-3-shadow);
     width: 384px;
   }
 
-  cr-dialog::part(dialog)::backdrop {
+  :host-context([theme='refresh23']) cr-dialog::part(dialog) {
+    --cr-dialog-background-color: var(--cros-sys-dialog_container);
+    border-radius: 20px;
+    box-shadow: var(--cros-elevation-3-shadow);
+    width: 384px;
+  }
+
+  :host-context([theme='legacy']) cr-dialog::part(dialog)::backdrop {
     background-color: var(--cros-app-shield-60);
   }
 
-  cr-dialog::part(wrapper) {
+  :host-context([theme='refresh23']) cr-dialog::part(dialog)::backdrop {
+    background-color: var(--cros-sys-scrim);
+  }
+
+  :host-context([theme='legacy']) cr-dialog::part(wrapper) {
     /* subtract the internal padding in <cr-dialog> */
     padding: calc(24px - 20px);
   }
 
-  cr-input {
+  :host-context([theme='refresh23']) cr-dialog::part(wrapper) {
+    padding: 32px;
+    padding-bottom: 28px;
+  }
+
+  :host-context([theme='legacy']) cr-input {
     --cr-form-field-label-color: var(--cros-textfield-label-color);
     --cr-input-background-color: var(--cros-textfield-background-color);
     --cr-input-color: var(--cros-textfield-input-color);
@@ -37,7 +77,20 @@
     --cr-input-focus-color: var(--cros-textfield-label-color-focus);
   }
 
-  cr-button {
+  :host-context([theme='refresh23']) cr-input {
+    --cr-form-field-label-color: var(--cros-sys-on_surface);
+    --cr-input-background-color: var(--cros-sys-input_field_on_base);
+    --cr-input-border-radius: 8px;
+    --cr-input-color: var(--cros-sys-on_surface);
+    --cr-input-error-color: var(--cros-sys-error);
+    --cr-input-focus-color: var(--cros-sys-primary);
+    --cr-input-min-height: 36px;
+    --cr-input-padding-end: 16px;
+    --cr-input-padding-start: 16px;
+    --cr-input-placeholder-color: var(--cros-sys-secondary);
+  }
+
+  :host-context([theme='legacy']) cr-button {
     --active-bg: transparent;
     --active-shadow:
       0 1px 2px var(--cros-button-active-shadow-color-key-secondary),
@@ -63,20 +116,68 @@
     --text-color: var(--cros-button-label-color-secondary);
   }
 
-  cr-button.action-button {
+  :host-context([theme='legacy']) cr-button.action-button {
     --ink-color: var(--cros-button-ripple-color-primary);
   }
 
-  :host-context(.focus-outline-visible) cr-button:focus {
+  :host-context([theme='legacy']):host-context(.focus-outline-visible)
+      cr-button:focus {
     /* disable the focus shadow because we use outline below */
     box-shadow: none;
     outline: 2px solid var(--cros-focus-ring-color);
     outline-offset: 2px;
   }
 
-  .action-button:not(:active):hover {
+  :host-context([theme='legacy']) .action-button:not(:active):hover {
     box-shadow: none;
   }
+
+  :host-context([theme='refresh23']) cr-button {
+    --active-bg: transparent;
+    --active-shadow: none;
+    --active-shadow-action: none;
+    --bg-action: var(--cros-sys-primary);
+    --cr-button-height: 36px;
+    --disabled-bg-action:
+        var(--cros-sys-disabled_container);
+    --disabled-bg: var(--cros-sys-disabled_container);;
+    --disabled-text-color: var(--cros-sys-disabled);
+    /* Use the default bg color as hover color because we
+        rely on hoverBackground layer below.  */
+    --hover-bg-action: var(--cros-sys-primary);
+    --hover-bg-color: var(--cros-sys-primary_container);
+    --ink-color: var(--cros-sys-ripple_primary);
+    --ripple-opacity-action: 1;
+    --ripple-opacity: 1;
+    --text-color-action: var(--cros-sys-on_primary);
+    --text-color: var(--cros-sys-on_primary_container);
+    border: none;
+    border-radius: 18px;
+    box-shadow: none;
+    position: relative;
+  }
+
+  :host-context([theme='refresh23']) cr-button.cancel-button {
+    background-color: var(--cros-sys-primary_container);
+  }
+
+  :host-context([theme='refresh23'])
+      cr-button.cancel-button:hover::part(hoverBackground) {
+    background-color: var(--cros-sys-hover_on_subtle);
+    display: block;
+  }
+
+  :host-context([theme='refresh23'])
+      cr-button.action-button:hover::part(hoverBackground) {
+    background-color: var(--cros-sys-hover_on_prominent);
+    display: block;
+  }
+
+  :host-context([theme='refresh23']):host-context(.focus-outline-visible)
+      cr-button:focus {
+    outline: 2px solid var(--cros-sys-focus_ring);
+    outline-offset: 2px;
+  }
 </style>
 
 <cr-dialog id="password-dialog">
diff --git a/ui/file_manager/file_manager/foreground/js/ui/BUILD.gn b/ui/file_manager/file_manager/foreground/js/ui/BUILD.gn
index 86ff3068..6b33a2a 100644
--- a/ui/file_manager/file_manager/foreground/js/ui/BUILD.gn
+++ b/ui/file_manager/file_manager/foreground/js/ui/BUILD.gn
@@ -231,6 +231,7 @@
 }
 
 js_library("dialogs") {
+  deps = [ "//ui/file_manager/file_manager/common/js:util" ]
 }
 
 js_library("directory_tree") {
diff --git a/ui/file_manager/file_manager/foreground/js/ui/dialogs.js b/ui/file_manager/file_manager/foreground/js/ui/dialogs.js
index 02f5f8e..92854d8 100644
--- a/ui/file_manager/file_manager/foreground/js/ui/dialogs.js
+++ b/ui/file_manager/file_manager/foreground/js/ui/dialogs.js
@@ -4,6 +4,8 @@
 
 import {isRTL} from 'chrome://resources/ash/common/util.js';
 
+import {util} from '../../../common/js/util.js';
+
 export class BaseDialog {
   constructor(parentNode) {
     this.parentNode_ = parentNode;
@@ -115,6 +117,13 @@
     this.okButton.setAttribute('tabindex', 0);
     this.okButton.className = 'cr-dialog-ok';
     this.okButton.textContent = BaseDialog.OK_LABEL;
+    // Add hover/ripple layer for button in FilesRefresh.
+    if (util.isJellyEnabled()) {
+      const hoverLayer = doc.createElement('div');
+      hoverLayer.className = 'hover-layer';
+      this.okButton.appendChild(hoverLayer);
+      this.okButton.appendChild(doc.createElement('paper-ripple'));
+    }
     this.okButton.addEventListener('click', this.onOkClick_.bind(this));
     this.buttons.appendChild(this.okButton);
 
@@ -122,6 +131,13 @@
     this.cancelButton.setAttribute('tabindex', 1);
     this.cancelButton.className = 'cr-dialog-cancel';
     this.cancelButton.textContent = BaseDialog.CANCEL_LABEL;
+    // Add hover/ripple layer for button in FilesRefresh.
+    if (util.isJellyEnabled()) {
+      const hoverLayer = doc.createElement('div');
+      hoverLayer.className = 'hover-layer';
+      this.cancelButton.appendChild(hoverLayer);
+      this.cancelButton.appendChild(doc.createElement('paper-ripple'));
+    }
     this.cancelButton.addEventListener('click', this.onCancelClick_.bind(this));
     this.buttons.appendChild(this.cancelButton);
 
@@ -177,12 +193,24 @@
 
   /** @param {string} label */
   setOkLabel(label) {
-    this.okButton.textContent = label;
+    if (util.isJellyEnabled()) {
+      // When Jelly is on, we have child elements inside the button, setting
+      // textContent of the button will remove all children.
+      this.okButton.childNodes[0].textContent = label;
+    } else {
+      this.okButton.textContent = label;
+    }
   }
 
   /** @param {string} label */
   setCancelLabel(label) {
-    this.cancelButton.textContent = label;
+    if (util.isJellyEnabled()) {
+      // When Jelly is on, we have child elements inside the button, setting
+      // textContent of the button will remove all children.
+      this.cancelButton.childNodes[0].textContent = label;
+    } else {
+      this.cancelButton.textContent = label;
+    }
   }
 
   setInitialFocusOnCancel() {
diff --git a/ui/file_manager/file_manager/foreground/js/ui/install_linux_package_dialog.js b/ui/file_manager/file_manager/foreground/js/ui/install_linux_package_dialog.js
index e2a656ef..403e1aa0 100644
--- a/ui/file_manager/file_manager/foreground/js/ui/install_linux_package_dialog.js
+++ b/ui/file_manager/file_manager/foreground/js/ui/install_linux_package_dialog.js
@@ -4,7 +4,7 @@
 
 import {assert} from 'chrome://resources/ash/common/assert.js';
 
-import {str} from '../../../common/js/util.js';
+import {str, util} from '../../../common/js/util.js';
 
 import {FileManagerDialogBase} from './file_manager_dialog_base.js';
 
@@ -12,9 +12,9 @@
 /**
  * InstallLinuxPackageDialog is used as the handler for .deb files.
  */
-  /**
-   * Creates dialog in DOM tree.
-   */
+/**
+ * Creates dialog in DOM tree.
+ */
 export class InstallLinuxPackageDialog extends FileManagerDialogBase {
   /**
    * @param {HTMLElement} parentNode Node to be parent for this dialog.
@@ -36,9 +36,18 @@
 
     // The OK button normally dismisses the dialog, so add a button we can
     // customize.
-    this.installButton_ = this.okButton.cloneNode(false /* deep */);
-    this.installButton_.textContent =
-        str('INSTALL_LINUX_PACKAGE_INSTALL_BUTTON');
+    if (util.isJellyEnabled()) {
+      // Need to copy the whole sub tree because we need child elements.
+      this.installButton_ = this.okButton.cloneNode(true /* deep */);
+      // When Jelly is on, we have child elements inside the button, setting
+      // textContent of the button will remove all children.
+      this.installButton_.childNodes[0].textContent =
+          str('INSTALL_LINUX_PACKAGE_INSTALL_BUTTON');
+    } else {
+      this.installButton_ = this.okButton.cloneNode(false /* deep */);
+      this.installButton_.textContent =
+          str('INSTALL_LINUX_PACKAGE_INSTALL_BUTTON');
+    }
     this.installButton_.addEventListener(
         'click', this.onInstallClick_.bind(this));
     this.buttons.insertBefore(this.installButton_, this.okButton);