diff --git a/AUTHORS b/AUTHORS
index c5846d0..a37220e8 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -814,6 +814,7 @@
 Md. Hasanur Rashid <hasanur.r@samsung.com>
 Md Jobed Hossain <jobed.h@samsung.com>
 Md Raiyan bin Sayeed <mrbsayee@uwaterloo.ca>
+Md. Sadiqul Amin <sadiqul.amin@samsung.com>
 Md Sami Uddin <md.sami@samsung.com>
 Micha Hanselmann <micha.hanselmann@gmail.com>
 Michael Cirone <mikecirone@gmail.com>
diff --git a/DEPS b/DEPS
index 61b2ad05..ae9d463 100644
--- a/DEPS
+++ b/DEPS
@@ -306,15 +306,15 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '4d519a8ba97ab32c3f310f2417e122b8ea354345',
+  'skia_revision': '02e2101a75f707c6a5e3f1133c3b8bf7012da5ab',
   # 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': '01e81f67b6c3691e7f105785aec1e6a4937831f9',
+  'v8_revision': 'b4d7eaaf926cfbfadb6cd4144081eb68a72da029',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '14c69aba6e2fd32042cb3feb5a14ae75a735b9b9',
+  'angle_revision': 'f67d1224e39c8b45ab3b1ac6b03db45a239bbecb',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -333,7 +333,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:10.20221114.3.1',
+  'fuchsia_version': 'version:10.20221115.1.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.
@@ -377,7 +377,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '670186d696bd8ed39fe62c461e758cc872e3a006',
+  'catapult_revision': '51caf6b3c764847ec481ca69967173be4d66b734',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -385,7 +385,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': 'ba62ed610e1cb403bea64cf6d72a80bb112cbcc7',
+  'devtools_frontend_revision': '7803e937d72d239e2e1e348f41005e179d3ab846',
   # 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.
@@ -421,7 +421,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': 'd0353f342bd47b043274cd3ba4cdbf37b4888d77',
+  'dawn_revision': '01bd3aa73e60dd8b7d532580866f6e8b26b37b50',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -489,7 +489,7 @@
 
   # If you change this, also update the libc++ revision in
   # //buildtools/deps_revisions.gni.
-  'libcxx_revision':       '3fc0bf23fe4fcfb3e952ba9f857ef15eb2603429',
+  'libcxx_revision':       '81925935fdd2102dbe94aa6aadfa5203a6f11dba',
 
   # GN CIPD package version.
   'gn_version': 'git_revision:1c4151ff5c1d6fbf7fa800b8d4bb34d3abc03a41',
@@ -816,7 +816,7 @@
 
   'src/clank': {
     'url': 'https://chrome-internal.googlesource.com/clank/internal/apps.git' + '@' +
-    '0a81d1a6f77f3c7e71bbd980a97a7330defddfc1',
+    '7ab14e934be961308b768df110a3df4b0935a623',
     'condition': 'checkout_android and checkout_src_internal and not checkout_clank_via_src_internal',
   },
 
@@ -910,7 +910,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': 'WC0aj99Vzy5vn42YvSNjhSwDjv6ROWU8SoTwmZHn8NgC',
+          'version': 'iFw4_nWWc1WOtInj0CKHHnBSqpv86EP41ozbRiNhdlcC',
         },
       ],
       'dep_type': 'cipd',
@@ -921,7 +921,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'm9vUUQY0bQUX6WQcyvyOzmf9LcLiItPdedtG6zZ7IAYC',
+          'version': 'hacmp60Hy1TSw1N3xEJIgBWo9qYzce5pXOB7RANXMHoC',
         },
       ],
       'dep_type': 'cipd',
@@ -932,7 +932,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': 'oaHvlt053gncWFF8hcuAMuOWNePQ4eV2YECcepTXNYQC',
+          'version': '1SRusFYu0ZrJHdG911YgsotKGfJ1VuErC3rxZ0mXC64C',
         },
       ],
       'dep_type': 'cipd',
@@ -1000,7 +1000,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': 'V3PkSsCDMLdnBiK-JYZxKE7daw8w47BkJbUGE8Yw1MUC',
+          'version': 'iNoaT9ZH8Kb09RzWBoB2EOHFJriOyGU8Lrl8b1lLftQC',
       },
     ],
     'condition': 'checkout_android',
@@ -1215,7 +1215,7 @@
   # Tools used when building Chrome for Chrome OS. This affects both the Simple
   # Chrome workflow, as well as the chromeos-chrome ebuild.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '21f5ce5ed228d37d89e052ec6f0b880c4885e9e7',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'a04672686bbcd4d10de0afb750b2322c1806285b',
       'condition': 'checkout_chromeos',
   },
 
@@ -1249,7 +1249,7 @@
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '7ccb792d02da58063a05772a0eb4c7dc594f187f',
+      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + 'ae30d7f9d66b229aca7f4fcef7fa875edeb1bbad',
     'condition': 'checkout_src_internal',
   },
 
@@ -1664,7 +1664,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '008a2ca9b9db87584723a23962e690296c832f84',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '3692281b7c39cb1184f1b21447374ff4d0c09335',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1704,7 +1704,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/r8',
-              'version': 'Sbfuk7zCRoVjO5aIbd3nmDH8TcDZPNFY2k7srra6NIcC',
+              'version': '-NUQfUfOV_01dV0d71XGUoe7FpVrH5M31W17eU8pLd0C',
           },
       ],
       'condition': 'checkout_android',
@@ -1849,7 +1849,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'd7e8d005dd88bbe5445ec42f30cdafca55982fae',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'cf2856b01c84884d38d6d5044928e00254911059',
+    Var('webrtc_git') + '/src.git' + '@' + '12046bf8c4159584ff78d8e15023cf4bac28b256',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -1919,7 +1919,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@fc48bb4db6558fac9b52fc2e84ebf1ff2b3c22e2',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@517446dbd8f0a8ebb4eb4030ad2b183d9e81d35f',
     'condition': 'checkout_src_internal',
   },
 
@@ -1949,7 +1949,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': '9hlY9V4DN97l8mjgcv8ArVEnJP3It5079wFQggdJJ40C',
+        'version': 'E8UvDFYz832_Rt4-utRqinH-2NNF-zdW-TFOLr-FpdkC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1960,7 +1960,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': '3qLAqqfU1qLt-15r-G-HsAP2rnpUQKgCAVog6XE4eQAC',
+        'version': '31PilC0ywCBZAk6Fagl2FfAW1lfKZbHz3c76FSzIohcC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1971,7 +1971,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'LFGsm8Py7eux14wKEOF6_KTdCVE0TBaZ9yWZp6m0zjkC',
+        'version': 'Vf6Aoh_aF7Es88b8cFxmkwK0DpvaYXqAxXje6toibWwC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/browser/renderer_host/aw_render_view_host_ext.cc b/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
index 3804e4f..f1c4fe69 100644
--- a/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
+++ b/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
@@ -172,7 +172,7 @@
       frame_host_receivers_.GetCurrentTargetFrame();
 
   // Only makes sense coming from the main frame of the current frame tree.
-  if (render_frame_host != web_contents()->GetPrimaryMainFrame())
+  if (!render_frame_host->IsInPrimaryMainFrame())
     return;
 
   client_->OnWebLayoutContentsSizeChanged(contents_size);
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
index 5e286c8c..86d5e3d 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -174,8 +174,6 @@
                     "Enables Autofill to use its new method to retrieve parsing patterns."),
             Flag.baseFeature(AutofillFeatures.AUTOFILL_PAGE_LANGUAGE_DETECTION,
                     "Enables Autofill to retrieve the page language for form parsing."),
-            Flag.baseFeature(AutofillFeatures.AUTOFILL_ENABLE_SENDING_BCN_IN_GET_UPLOAD_DETAILS,
-                    "Enables sending billing customer number in GetUploadDetails."),
             Flag.baseFeature(AutofillFeatures.AUTOFILL_PARSE_MERCHANT_PROMO_CODE_FIELDS,
                     "When enabled, Autofill will attempt to find merchant promo/coupon/gift code "
                             + "fields when parsing forms."),
@@ -350,6 +348,9 @@
                     "This changes event propagation for disabled form controls."),
             Flag.baseFeature(ContentFeatures.SURFACE_SYNC_FULLSCREEN_KILLSWITCH,
                     "Disable to turn off the new SurfaceSync Fullscreen path."),
+            Flag.baseFeature(ContentFeatures.PERSISTENT_ORIGIN_TRIALS,
+                    "If enabled, servers will be able to use persistent origin trials "
+                            + "on this device."),
             // Add new commandline switches and features above. The final entry should have a
             // trailing comma for cleaner diffs.
     };
diff --git a/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java b/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java
index 5634ec6e..a97f51d3 100644
--- a/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java
+++ b/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java
@@ -17,13 +17,13 @@
 import org.chromium.android_webview.common.services.IMetricsUploadService;
 import org.chromium.android_webview.common.services.ServiceHelper;
 import org.chromium.android_webview.common.services.ServiceNames;
-import org.chromium.base.Consumer;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
 import org.chromium.base.task.PostTask;
 import org.chromium.base.task.TaskTraits;
 
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
 
 /**
  * A custom WebView AndroidMetricsLogUploader. It
diff --git a/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt b/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt
index 66ea87a..ef0ec433 100644
--- a/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt
+++ b/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt
@@ -264,9 +264,7 @@
 # on any platform.
 interface HTMLElement : Element
 	  method hidePopover
-	  setter defaultOpen
 	  method showPopover
-	  getter defaultOpen
 
 # FedCM API is not implemented on WebView. crbug.com/1340252
 interface IdentityCredential : Credential
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 1bbe6bb..9637078 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -235,6 +235,8 @@
     "ambient/util/ambient_util.cc",
     "ambient/util/ambient_util.h",
     "animation/animation_change_type.h",
+    "app_list/app_list_public_test_util.cc",
+    "app_list/app_list_public_test_util.h",
     "ash_export.h",
     "ash_interfaces.cc",
     "ash_prefs.cc",
@@ -3415,6 +3417,7 @@
     "fullscreen_pixeltest.cc",
     "shelf/login_shelf_view_pixeltest.cc",
     "shelf/scrollable_shelf_view_pixeltest.cc",
+    "system/accessibility/accessibility_detailed_view_pixeltest.cc",
     "test/pixel/demo_ash_pixel_diff_test.cc",
   ]
 
diff --git a/ash/accessibility/magnifier/fullscreen_magnifier_controller.cc b/ash/accessibility/magnifier/fullscreen_magnifier_controller.cc
index a34cdd7..3e2ae5f4 100644
--- a/ash/accessibility/magnifier/fullscreen_magnifier_controller.cc
+++ b/ash/accessibility/magnifier/fullscreen_magnifier_controller.cc
@@ -409,7 +409,8 @@
     touch_points_++;
     press_event_map_[touch_event->pointer_details().id] =
         std::make_unique<ui::TouchEvent>(*touch_event);
-  } else if (touch_event->type() == ui::ET_TOUCH_RELEASED) {
+  } else if (touch_event->type() == ui::ET_TOUCH_RELEASED ||
+             touch_event->type() == ui::ET_TOUCH_CANCELLED) {
     touch_points_--;
     press_event_map_.erase(touch_event->pointer_details().id);
   }
diff --git a/ash/accessibility/magnifier/fullscreen_magnifier_controller.h b/ash/accessibility/magnifier/fullscreen_magnifier_controller.h
index 2a3b2701..c00e460 100644
--- a/ash/accessibility/magnifier/fullscreen_magnifier_controller.h
+++ b/ash/accessibility/magnifier/fullscreen_magnifier_controller.h
@@ -140,6 +140,9 @@
   // Returns true if magnifier is still on animation for moving viewport.
   bool IsOnAnimationForTesting() const { return is_on_animation_; }
 
+  // Returns the current number of touch points.
+  int32_t GetTouchPointsForTesting() const { return touch_points_; }
+
  private:
   class GestureProviderClient;
 
diff --git a/ash/accessibility/magnifier/fullscreen_magnifier_controller_unittest.cc b/ash/accessibility/magnifier/fullscreen_magnifier_controller_unittest.cc
index e3cd31e..d43b258 100644
--- a/ash/accessibility/magnifier/fullscreen_magnifier_controller_unittest.cc
+++ b/ash/accessibility/magnifier/fullscreen_magnifier_controller_unittest.cc
@@ -692,6 +692,72 @@
   EXPECT_GT(0.01f, std::abs(ratio - ratio_zoomed));
 }
 
+// Performs pinch zoom and then receive cancelled touch events. This test case
+// tests giving back control to other event watchers.
+TEST_F(FullscreenMagnifierControllerTest, PinchZoomCancel) {
+  ASSERT_EQ(0u, touch_event_watcher_->touch_events.size());
+
+  GetFullscreenMagnifierController()->SetEnabled(true);
+  ASSERT_EQ(2.0f, GetFullscreenMagnifierController()->GetScale());
+
+  base::TimeTicks time = base::TimeTicks::Now();
+  ui::PointerDetails pointer_details1(ui::EventPointerType::kTouch, 0);
+  ui::PointerDetails pointer_details2(ui::EventPointerType::kTouch, 1);
+
+  // Simulate pinch gesture.
+  DispatchTouchEvent(ui::ET_TOUCH_PRESSED, gfx::Point(900, 10), time,
+                     pointer_details1);
+  DispatchTouchEvent(ui::ET_TOUCH_PRESSED, gfx::Point(1100, 10), time,
+                     pointer_details2);
+
+  ASSERT_EQ(2u, touch_event_watcher_->touch_events.size());
+  EXPECT_EQ(ui::ET_TOUCH_PRESSED, touch_event_watcher_->touch_events[0].type());
+  EXPECT_EQ(ui::ET_TOUCH_PRESSED, touch_event_watcher_->touch_events[1].type());
+
+  DispatchTouchEvent(ui::ET_TOUCH_MOVED, gfx::Point(850, 10), time,
+                     pointer_details1);
+  DispatchTouchEvent(ui::ET_TOUCH_MOVED, gfx::Point(1150, 10), time,
+                     pointer_details2);
+
+  // Expect that event watcher receives touch cancelled events. Magnification
+  // controller should cancel existing touches when it detects interested
+  // gestures.
+  ASSERT_EQ(4u, touch_event_watcher_->touch_events.size());
+  EXPECT_EQ(ui::ET_TOUCH_CANCELLED,
+            touch_event_watcher_->touch_events[2].type());
+  EXPECT_EQ(ui::ET_TOUCH_CANCELLED,
+            touch_event_watcher_->touch_events[3].type());
+
+  // Dispatch cancelled events (for example due to palm detection).
+  DispatchTouchEvent(ui::ET_TOUCH_CANCELLED, gfx::Point(850, 10), time,
+                     pointer_details1);
+  DispatchTouchEvent(ui::ET_TOUCH_CANCELLED, gfx::Point(1150, 10), time,
+                     pointer_details2);
+
+  // All events are consumed by the controller after it detects gesture.
+  ASSERT_EQ(4u, touch_event_watcher_->touch_events.size());
+  ASSERT_EQ(0, GetFullscreenMagnifierController()->GetTouchPointsForTesting());
+
+  // Touch the screen again.
+  DispatchTouchEvent(ui::ET_TOUCH_PRESSED, gfx::Point(900, 10), time,
+                     pointer_details1);
+
+  // Events should again be passed to touch_event_watcher.
+  ASSERT_EQ(5u, touch_event_watcher_->touch_events.size());
+  EXPECT_EQ(ui::ET_TOUCH_PRESSED, touch_event_watcher_->touch_events[4].type());
+
+  DispatchTouchEvent(ui::ET_TOUCH_MOVED, gfx::Point(800, 10), time,
+                     pointer_details1);
+  ASSERT_EQ(6u, touch_event_watcher_->touch_events.size());
+  EXPECT_EQ(ui::ET_TOUCH_MOVED, touch_event_watcher_->touch_events[5].type());
+
+  DispatchTouchEvent(ui::ET_TOUCH_RELEASED, gfx::Point(800, 10), time,
+                     pointer_details1);
+  ASSERT_EQ(7u, touch_event_watcher_->touch_events.size());
+  EXPECT_EQ(ui::ET_TOUCH_RELEASED,
+            touch_event_watcher_->touch_events[6].type());
+}
+
 TEST_F(FullscreenMagnifierControllerTest, TwoFingersScroll) {
   GetFullscreenMagnifierController()->SetEnabled(true);
   ASSERT_EQ(2.0f, GetFullscreenMagnifierController()->GetScale());
diff --git a/ash/accessibility/magnifier/partial_magnifier_controller.cc b/ash/accessibility/magnifier/partial_magnifier_controller.cc
index cacf5d3..289f35e6 100644
--- a/ash/accessibility/magnifier/partial_magnifier_controller.cc
+++ b/ash/accessibility/magnifier/partial_magnifier_controller.cc
@@ -131,7 +131,8 @@
     SetActive(true);
   }
 
-  if (event->type() == ui::ET_TOUCH_RELEASED)
+  if (event->type() == ui::ET_TOUCH_RELEASED ||
+      event->type() == ui::ET_TOUCH_CANCELLED)
     SetActive(false);
 
   if (!is_active_)
diff --git a/ash/accessibility/magnifier/partial_magnifier_controller_unittest.cc b/ash/accessibility/magnifier/partial_magnifier_controller_unittest.cc
index a1aa3bf..ad64be7 100644
--- a/ash/accessibility/magnifier/partial_magnifier_controller_unittest.cc
+++ b/ash/accessibility/magnifier/partial_magnifier_controller_unittest.cc
@@ -95,6 +95,21 @@
   EXPECT_FALSE(GetTestApi().host_widget());
 }
 
+// The magnifier should disappear after a pointer is cancelled while enabled.
+TEST_F(PartialMagnifierControllerTest, InactiveOnPointerCancelled) {
+  ui::test::EventGenerator* event_generator = GetEventGenerator();
+  event_generator->EnterPenPointerMode();
+
+  // While enabled the magnifier is disactivated when the pointer is cancelled.
+  GetController()->SetEnabled(true);
+  event_generator->PressTouch();
+  EXPECT_TRUE(GetTestApi().is_active());
+  EXPECT_TRUE(GetTestApi().host_widget());
+  event_generator->CancelTouch();
+  EXPECT_FALSE(GetTestApi().is_active());
+  EXPECT_FALSE(GetTestApi().host_widget());
+}
+
 // Verifies that nothing bad happens if a second display is disconnected while
 // the magnifier is active.
 TEST_F(PartialMagnifierControllerTest, MultipleDisplays) {
diff --git a/ash/app_list/app_list_public_test_util.cc b/ash/app_list/app_list_public_test_util.cc
new file mode 100644
index 0000000..f1233ab
--- /dev/null
+++ b/ash/app_list/app_list_public_test_util.cc
@@ -0,0 +1,47 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/app_list/app_list_public_test_util.h"
+
+#include "ash/app_list/app_list_bubble_presenter.h"
+#include "ash/app_list/app_list_controller_impl.h"
+#include "ash/app_list/app_list_presenter_impl.h"
+#include "ash/app_list/views/app_list_bubble_view.h"
+#include "ash/app_list/views/app_list_main_view.h"
+#include "ash/app_list/views/app_list_view.h"
+#include "ash/app_list/views/search_box_view.h"
+#include "ash/shell.h"
+
+namespace ash {
+
+bool ShouldUseBubbleAppList() {
+  return !Shell::Get()->IsInTabletMode();
+}
+
+AppListBubbleView* GetAppListBubbleView() {
+  AppListBubbleView* bubble_view = Shell::Get()
+                                       ->app_list_controller()
+                                       ->bubble_presenter_for_test()
+                                       ->bubble_view_for_test();
+  DCHECK(bubble_view) << "Bubble launcher view not yet created. Tests must "
+                         "show the launcher and may need to call "
+                         "WaitForBubbleWindow() if animations are enabled.";
+  return bubble_view;
+}
+
+AppListView* GetAppListView() {
+  return Shell::Get()->app_list_controller()->fullscreen_presenter()->GetView();
+}
+
+SearchBoxView* GetSearchBoxView() {
+  if (ShouldUseBubbleAppList())
+    return GetAppListBubbleView()->search_box_view_for_test();
+  return GetAppListView()->app_list_main_view()->search_box_view();
+}
+
+std::string GetSearchBoxGhostTextForTest() {
+  return GetSearchBoxView()->GetSearchBoxGhostTextForTest();
+}
+
+}  // namespace ash
diff --git a/ash/app_list/app_list_public_test_util.h b/ash/app_list/app_list_public_test_util.h
new file mode 100644
index 0000000..8091609
--- /dev/null
+++ b/ash/app_list/app_list_public_test_util.h
@@ -0,0 +1,38 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_APP_LIST_APP_LIST_PUBLIC_TEST_UTIL_H_
+#define ASH_APP_LIST_APP_LIST_PUBLIC_TEST_UTIL_H_
+
+#include <string>
+
+#include "ash/ash_export.h"
+#include "ash/public/cpp/app_list/app_list_types.h"
+
+namespace ash {
+
+class AppListBubbleView;
+class AppListView;
+class SearchBoxView;
+
+// An app list should be either a bubble app list or a fullscreen app list.
+// Returns true if a bubble app list should be used under the current mode.
+ASH_EXPORT bool ShouldUseBubbleAppList();
+
+// Fetches the app list bubble view. Used in clamshell mode.
+ASH_EXPORT AppListBubbleView* GetAppListBubbleView();
+
+// Fetches the app list view. Used in tablet mode only app list view.
+ASH_EXPORT AppListView* GetAppListView();
+
+// Fetches the launcher search box.
+ASH_EXPORT SearchBoxView* GetSearchBoxView();
+
+// Fetches the launcher search box's ghost text autocomplete and category
+// contents.
+ASH_EXPORT std::string GetSearchBoxGhostTextForTest();
+
+}  // namespace ash
+
+#endif  // ASH_APP_LIST_APP_LIST_PUBLIC_TEST_UTIL_H_
diff --git a/ash/app_list/app_list_test_api.cc b/ash/app_list/app_list_test_api.cc
index 1d53827..c140d40 100644
--- a/ash/app_list/app_list_test_api.cc
+++ b/ash/app_list/app_list_test_api.cc
@@ -12,6 +12,7 @@
 #include "ash/app_list/app_list_controller_impl.h"
 #include "ash/app_list/app_list_model_provider.h"
 #include "ash/app_list/app_list_presenter_impl.h"
+#include "ash/app_list/app_list_public_test_util.h"
 #include "ash/app_list/model/app_list_folder_item.h"
 #include "ash/app_list/model/app_list_item.h"
 #include "ash/app_list/model/app_list_model.h"
@@ -61,17 +62,6 @@
 class ScopedItemMoveAnimationDisabler;
 ScopedItemMoveAnimationDisabler* g_disabler_ptr = nullptr;
 
-AppListView* GetAppListView() {
-  return Shell::Get()->app_list_controller()->fullscreen_presenter()->GetView();
-}
-
-// An app list should be either a bubble app list or a fullscreen app list.
-// Returns true if a bubble app list should be used under the current mode.
-bool ShouldUseBubbleAppList() {
-  // A bubble app list should be used only when it is in clamshell mode
-  return !Shell::Get()->IsInTabletMode();
-}
-
 // Creates a RunLoop that waits until the context menu of app list item is
 // shown.
 void WaitUntilItemMenuShown(ash::AppListItemView* item_view) {
@@ -207,17 +197,6 @@
   return AppListView::TestApi(GetAppListView()).GetRootAppsGridView();
 }
 
-AppListBubbleView* GetAppListBubbleView() {
-  AppListBubbleView* bubble_view = Shell::Get()
-                                       ->app_list_controller()
-                                       ->bubble_presenter_for_test()
-                                       ->bubble_view_for_test();
-  DCHECK(bubble_view) << "Bubble launcher view not yet created. Tests must "
-                         "show the launcher and may need to call "
-                         "WaitForBubbleWindow() if animations are enabled.";
-  return bubble_view;
-}
-
 AppsContainerView* GetAppsContainerView() {
   return GetAppListView()
       ->app_list_main_view()
@@ -252,12 +231,6 @@
   return GetAppsContainerView()->GetRecentAppsView();
 }
 
-SearchBoxView* GetSearchBoxView() {
-  if (ShouldUseBubbleAppList())
-    return GetAppListBubbleView()->search_box_view_for_test();
-  return GetAppListView()->app_list_main_view()->search_box_view();
-}
-
 // AppListVisibilityChangedWaiter ----------------------------------------------
 
 // Waits until the app list visibility changes.
diff --git a/ash/components/arc/mojom/net.mojom b/ash/components/arc/mojom/net.mojom
index f745a1a..2c328260 100644
--- a/ash/components/arc/mojom/net.mojom
+++ b/ash/components/arc/mojom/net.mojom
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Next MinVersion: 23
+// Next MinVersion: 24
 
 // This file defines the mojo interface between the ARC networking stack and
 // Chrome OS. There are three different groups of interactions:
@@ -317,9 +317,9 @@
   // The type of wireless security protocol used by this network.
   SecurityType security;
 
-  // The current RSSI of this network. Updates for this value are not sent to
-  // ARC for connected WiFi networks and should be considered precise only for
-  // scanning results.
+  // The current signal strength of this network. Updates for this value are not
+  // sent to ARC for connected WiFi networks and should be considered precise
+  // only for scanning results.
   int32 signal_strength;
 
   // True if the network represents a Passpoint network.
@@ -327,6 +327,11 @@
 
   // Fully qualified domain name (FQDN) of a Passpoint configuration.
   [MinVersion=16] string? fqdn;
+
+  // The current RSSI (Received Signal Strength Indicator) in dBm of this
+  // network. This is typically between -90 and -20 dBm. Unknown value
+  // is represented as -32768 dBm (int16 min value).
+  [MinVersion=23] int16 rssi;
 };
 
 // The physical network types exposed to ARC by the host,
@@ -652,6 +657,8 @@
 
 // Next Method ID: 18
 // IDs 3 and 9 are missing as they belonged to deprecated methods.
+// Mojo interface exposed by the Chrome browser process for
+// networking/WiFi/VPN, ARC is the client.
 interface NetHost {
   // Sends a request to get enabled / disabled status of WiFi.
   GetWifiEnabledState@1() => (bool is_enabled);
@@ -722,7 +729,7 @@
   [MinVersion=17] RemovePasspointCredentials@16(
       PasspointRemovalProperties properties);
 
-  // Disconnect the current ChromeOS VPN network if one exists. If ChromeOS has
+  // Disconnects the current ChromeOS VPN network if one exists. If ChromeOS has
   // a network that represents an Android VPN, the network doesn't count as a
   // ChromeOS VPN network and won't be disconnected. If the default network
   // isn't a ChromeOS VPN network, then nothing happens.
@@ -731,6 +738,8 @@
 
 // Next Method ID: 11
 // IDs 0 and 2 are missing as they belonged to deprecated method.
+// Mojo interface exposed by ARC for networking/WiFi/VPN, the Chrome
+// browser process is the client.
 interface NetInstance {
   // Establishes full-duplex communication with the host.
   [MinVersion=8] Init@6(pending_remote<NetHost> host_remote) => ();
diff --git a/ash/components/arc/net/arc_net_host_impl.cc b/ash/components/arc/net/arc_net_host_impl.cc
index b24f2c2..780f8c6a 100644
--- a/ash/components/arc/net/arc_net_host_impl.cc
+++ b/ash/components/arc/net/arc_net_host_impl.cc
@@ -362,6 +362,7 @@
         TranslateWiFiSecurity(network_state->security_class());
     mojo->wifi->frequency = network_state->frequency();
     mojo->wifi->signal_strength = network_state->signal_strength();
+    mojo->wifi->rssi = network_state->rssi();
     if (shill_dict) {
       mojo->wifi->hidden_ssid =
           shill_dict->FindBoolPath(shill::kWifiHiddenSsid).value_or(false);
diff --git a/ash/components/arc/net/arc_net_host_impl.h b/ash/components/arc/net/arc_net_host_impl.h
index 4a3c980..52fefb5 100644
--- a/ash/components/arc/net/arc_net_host_impl.h
+++ b/ash/components/arc/net/arc_net_host_impl.h
@@ -62,45 +62,30 @@
   void SetPrefService(PrefService* pref_service);
   void SetCertManager(std::unique_ptr<CertManager> cert_manager);
 
-  // ARC -> Chrome calls:
-
+  // Overridden from mojom::NetHost.
   void GetNetworks(mojom::GetNetworksRequestType type,
                    GetNetworksCallback callback) override;
-
   void GetWifiEnabledState(GetWifiEnabledStateCallback callback) override;
-
   void SetWifiEnabledState(bool is_enabled,
                            SetWifiEnabledStateCallback callback) override;
-
   void StartScan() override;
-
   void CreateNetwork(mojom::WifiConfigurationPtr cfg,
                      CreateNetworkCallback callback) override;
-
   void ForgetNetwork(const std::string& guid,
                      ForgetNetworkCallback callback) override;
-
   void StartConnect(const std::string& guid,
                     StartConnectCallback callback) override;
-
   void StartDisconnect(const std::string& guid,
                        StartDisconnectCallback callback) override;
-
   void AndroidVpnConnected(mojom::AndroidVpnConfigurationPtr cfg) override;
-
   void AndroidVpnStateChanged(mojom::ConnectionStateType state) override;
-
   void AddPasspointCredentials(
       mojom::PasspointCredentialsPtr credentials) override;
-
   void RemovePasspointCredentials(
       mojom::PasspointRemovalPropertiesPtr properties) override;
-
   void SetAlwaysOnVpn(const std::string& vpnPackage, bool lockdown) override;
-
   std::unique_ptr<base::DictionaryValue> TranslateVpnConfigurationToOnc(
       const mojom::AndroidVpnConfiguration& cfg);
-
   void DisconnectHostVpn() override;
 
   // Overridden from ash::NetworkStateHandlerObserver.
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index 6b852116..8718acc4b 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -680,13 +680,6 @@
              "EnableBackgroundBlur",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-// Enables some trials aimed at improving user experiencing when using the
-// trackpad to switch desks.
-// TODO(https://crbug.com/1191545): Remove this after the feature is launched.
-BASE_FEATURE(kEnableDesksTrackpadSwipeImprovements,
-             "EnableDesksTrackpadSwipeImprovements",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 // Enables the DNS proxy service providing support split and secure DNS
 // for ChromeOS.
 BASE_FEATURE(kEnableDnsProxy,
@@ -1772,7 +1765,7 @@
 // settings, for devices running on channels other than "stable."
 BASE_FEATURE(kReleaseTrackUi,
              "ReleaseTrackUi",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 // When enabled, the overview and desk reverse scrolling behaviors are changed
 // and if the user performs the old gestures, a notification or toast will show
@@ -1794,11 +1787,6 @@
              "SeamlessRefreshRateSwitching",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-// Controls whether to enable kSecondaryGoogleAccountUsage policy.
-BASE_FEATURE(kSecondaryGoogleAccountUsage,
-             "SecondaryGoogleAccountUsage",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 // Enables displaying separate network icons for different networks types.
 // https://crbug.com/902409
 BASE_FEATURE(kSeparateNetworkIcons,
@@ -2231,10 +2219,6 @@
   return base::FeatureList::IsEnabled(kDesksTemplates);
 }
 
-bool AreDesksTrackpadSwipeImprovementsEnabled() {
-  return base::FeatureList::IsEnabled(kEnableDesksTrackpadSwipeImprovements);
-}
-
 bool AreSystemSoundsEnabled() {
   return base::FeatureList::IsEnabled(kSystemSounds);
 }
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index 6cd4b4c..ae00bbe 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -206,8 +206,6 @@
 BASE_DECLARE_FEATURE(kEcheSWADisableStunServer);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kAudioSettingsPage);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kEnableBackgroundBlur);
-COMPONENT_EXPORT(ASH_CONSTANTS)
-BASE_DECLARE_FEATURE(kEnableDesksTrackpadSwipeImprovements);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kEnableDnsProxy);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kEnableExternalKeyboardsInDiagnostics);
@@ -509,8 +507,6 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kScreenSaverPreview);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kSeamlessRefreshRateSwitching);
-COMPONENT_EXPORT(ASH_CONSTANTS)
-BASE_DECLARE_FEATURE(kSecondaryGoogleAccountUsage);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kSeparateNetworkIcons);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kSessionManagerLongKillTimeout);
@@ -616,7 +612,6 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) bool AreCaptureModeDemoToolsEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool AreContextualNudgesEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool AreDesksTemplatesEnabled();
-COMPONENT_EXPORT(ASH_CONSTANTS) bool AreDesksTrackpadSwipeImprovementsEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool AreSystemSoundsEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsAutocompleteExtendedSuggestionsEnabled();
 COMPONENT_EXPORT(ASH_CONSTANTS) bool IsAutoEnrollmentKioskInOobeEnabled();
diff --git a/ash/constants/ash_switches.cc b/ash/constants/ash_switches.cc
index f73ee5e..f0aad775 100644
--- a/ash/constants/ash_switches.cc
+++ b/ash/constants/ash_switches.cc
@@ -769,6 +769,11 @@
 const char kOobeTriggerSyncTimeoutForTests[] =
     "oobe-trigger-sync-timeout-for-tests";
 
+// Removes the condition that a network has had to existed for at least two
+// weeks and increase the frequency at which the HiddenNetworkHandler class
+// checks for and removes wrongly hidden networks.
+const char kForceHiddenNetworkMigration[] = "force-hidden-network-migration";
+
 // If set to "true", the profile requires policy during restart (policy load
 // must succeed, otherwise session restart should fail).
 const char kProfileRequiresPolicy[] = "profile-requires-policy";
diff --git a/ash/constants/ash_switches.h b/ash/constants/ash_switches.h
index 40fdbef..f8908e4 100644
--- a/ash/constants/ash_switches.h
+++ b/ash/constants/ash_switches.h
@@ -249,6 +249,8 @@
 extern const char kOobeTimezoneOverrideForTests[];
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const char kOobeTriggerSyncTimeoutForTests[];
+COMPONENT_EXPORT(ASH_CONSTANTS)
+extern const char kForceHiddenNetworkMigration[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kProfileRequiresPolicy[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kPublicAccountsSamlAclUrl[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kQsAddFakeBluetoothDevices[];
diff --git a/ash/search_box/search_box_view_base.cc b/ash/search_box/search_box_view_base.cc
index 0be542b..a62e397 100644
--- a/ash/search_box/search_box_view_base.cc
+++ b/ash/search_box/search_box_view_base.cc
@@ -13,6 +13,7 @@
 #include "ash/public/cpp/ash_typography.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "base/bind.h"
+#include "base/strings/strcat.h"
 #include "third_party/skia/include/core/SkPath.h"
 #include "ui/base/ime/text_input_flags.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -543,6 +544,16 @@
   }
 }
 
+std::string SearchBoxViewBase::GetSearchBoxGhostTextForTest() {
+  if (!autocomplete_ghost_text_->GetText().empty()) {
+    return base::UTF16ToUTF8(base::StrCat(
+        {autocomplete_ghost_text_->GetText(),
+         l10n_util::GetStringUTF16(IDS_ASH_SEARCH_RESULT_SEPARATOR),
+         category_ghost_text_->GetText()}));
+  }
+  return base::UTF16ToUTF8(category_ghost_text_->GetText());
+}
+
 void SearchBoxViewBase::SetSearchBoxActive(bool active,
                                            ui::EventType event_type) {
   if (active == is_search_box_active_)
diff --git a/ash/search_box/search_box_view_base.h b/ash/search_box/search_box_view_base.h
index 024d7f60..36159629 100644
--- a/ash/search_box/search_box_view_base.h
+++ b/ash/search_box/search_box_view_base.h
@@ -98,6 +98,8 @@
   void MaybeSetAutocompleteGhostText(const std::u16string& title,
                                      const std::u16string& category);
 
+  std::string GetSearchBoxGhostTextForTest();
+
   // Setting the search box active left aligns the placeholder text, changes
   // the color of the placeholder text, and enables cursor blink. Setting the
   // search box inactive center aligns the placeholder text, sets the color, and
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb
index dd9b3c7..d3b1b453 100644
--- a/ash/strings/ash_strings_af.xtb
+++ b/ash/strings/ash_strings_af.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Dateer op en meld af</translation>
 <translation id="1864454756846565995">USB C-toestel (poort aan agterkant)</translation>
 <translation id="1869497990620230175">Kitslêers</translation>
+<translation id="1871703283152909317">Skakel albei toegange aan</translation>
 <translation id="1879018240766558464">Incognito-vensters word nie tans gesteun nie. Ander programme sal gestoor word.</translation>
 <translation id="1882814835921407042">Geen selnetwerk nie</translation>
 <translation id="1882897271359938046">Weerspieëling na <ph name="DISPLAY_NAME" /></translation>
@@ -669,6 +670,7 @@
 <translation id="4659419629803378708">ChromeVox is geaktiveer</translation>
 <translation id="4665114317261903604">Wissel Moenie Steur Nie. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Skakel die kameratoegang op hierdie toestel af om alle kameras op dieselfde tyd te blokkeer.</translation>
+<translation id="4666911709726371538">Meer programme</translation>
 <translation id="4667099493359681081">Laai tans <ph name="FILENAME" /> af</translation>
 <translation id="4690510401873698237">Rak aan onderkant</translation>
 <translation id="4696813013609194136">Ontsluit toestel met ouerkode</translation>
@@ -924,6 +926,7 @@
 <translation id="6095008505822982596">Spraaktempo</translation>
 <translation id="6099678161144790572">In die afgelope maand gewysig</translation>
 <translation id="6103838137565245112">stelsel</translation>
+<translation id="6107292179555508368">Mikrofoon- en kameratoegang is af op hierdie toestel</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" />-spraaklêers is afgelaai</translation>
 <translation id="6116825164611323644">Kameratoegang is af op hierdie toestel</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +955,7 @@
 <translation id="6259254695169772643">Gebruik jou stilus om te kies</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Aktiveer tans …</translation>
 <translation id="6274202259872570803">Skermopname</translation>
+<translation id="6282694724099204652">Skakel die toegange aan om apps en webbladsye met die toestemming toe te laat om die mikroon/mikrofone en kamera(s) op hierdie toestel te gebruik.</translation>
 <translation id="6283712521836204486">Moenie Steur Nie is af.</translation>
 <translation id="6284232397434400372">Resolusie het verander</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> kan later weer met 'n ouer se toestemming bygevoeg word.</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index ecff3e3..f817b2c 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox ነቅቷል</translation>
 <translation id="4665114317261903604">አትረብሽ የሚለውን አብራ ወይም አጥፋ። <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">ሁሉንም ካሜራዎች ሁልጊዜ ለማገድ የካሜራውን መዳረሻ በዚህ መሣሪያ ላይ ያጥፉ።</translation>
+<translation id="4666911709726371538">ተጨማሪ መተግበሪያዎች</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" />ን በማውረድ ላይ</translation>
 <translation id="4690510401873698237">መደርደሪያ ከታች</translation>
 <translation id="4696813013609194136">በወላጅ ኮድ መሣሪያን ክፈት</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 26685407..c7ad106 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -667,6 +667,7 @@
 <translation id="4659419629803378708">‏تم تفعيل ChromeVox</translation>
 <translation id="4665114317261903604">تبديل حالة "عدم الإزعاج" <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">يمكنك إيقاف الوصول إلى الكاميرا على هذا الجهاز لحظر جميع الكاميرات طوال الوقت.</translation>
+<translation id="4666911709726371538">المزيد من التطبيقات</translation>
 <translation id="4667099493359681081">جارٍ تنزيل <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">الرف في الجزء السفلي</translation>
 <translation id="4696813013609194136">فتح قفل الجهاز باستخدام رمز الوالدين</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb
index bb6275b..c8676e5 100644
--- a/ash/strings/ash_strings_as.xtb
+++ b/ash/strings/ash_strings_as.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox সক্ষম কৰা হ’ল</translation>
 <translation id="4665114317261903604">অসুবিধা নিদিব ট’গল কৰক। <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">সকলো সময়তে আটাইবোৰ কেমেৰা অৱৰোধ কৰিবলৈ এই ডিভাইচটোত কেমেৰাৰ এক্সেছ অফ কৰক।</translation>
+<translation id="4666911709726371538">অধিক এপ্‌</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> ডাউনল’ড কৰি থকা হৈছে</translation>
 <translation id="4690510401873698237">শ্বেল্ফ একেবাৰে তলিত আছে</translation>
 <translation id="4696813013609194136">অভিভাৱকৰ এক্সেছ ক'ডৰ সহায়ত ডিভাইচ আনলক কৰক</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb
index a45ff27..085d205 100644
--- a/ash/strings/ash_strings_az.xtb
+++ b/ash/strings/ash_strings_az.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox aktiv edildi</translation>
 <translation id="4665114317261903604">"Narahat etməyin" rejiminə keçin. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Bütün kameraları hər zaman bloklamaq üçün bu cihazda kamera girişini deaktiv edin.</translation>
+<translation id="4666911709726371538">Daha çox tətbiq</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> endirilir</translation>
 <translation id="4690510401873698237">Rəf aşağıdadır</translation>
 <translation id="4696813013609194136">Cihazı valideyn kodu ilə kiliddən çıxarın</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb
index ca0f221..8f10166 100644
--- a/ash/strings/ash_strings_be.xtb
+++ b/ash/strings/ash_strings_be.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox уключаны</translation>
 <translation id="4665114317261903604">Уключэнне рэжыму "Не турбаваць". <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Калі вы адключыце доступ на гэтай прыладзе, усе камеры будуць цалкам заблакіраваны.</translation>
+<translation id="4666911709726371538">Іншыя праграмы</translation>
 <translation id="4667099493359681081">Ідзе спампоўванне файла "<ph name="FILENAME" />"</translation>
 <translation id="4690510401873698237">Паліца ўнізе</translation>
 <translation id="4696813013609194136">Разблакіруйце прыладу бацькоўскім кодам</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index 587af41..34d77b4 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">Активирахте ChromeVox</translation>
 <translation id="4665114317261903604">Превключване на режима „Не безпокойте“. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Забранете достъпа до камерата на това устройство, така че да блокирате камерите във всички случаи.</translation>
+<translation id="4666911709726371538">Още приложения</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> се изтегля</translation>
 <translation id="4690510401873698237">Лавицата е най-долу</translation>
 <translation id="4696813013609194136">Отключване на устройството с код на родител</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 9f7d5da..c3bcb08 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox সক্ষম করা আছে</translation>
 <translation id="4665114317261903604">'বিরক্ত করবে না' মোড টগল করুন। <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">সব ক্যামেরা সব সময় ব্লক করতে এই ডিভাইসে ক্যামেরা অ্যাক্সেস বন্ধ করুন।</translation>
+<translation id="4666911709726371538">আরও অ্যাপ</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> ডাউনলোড করা হচ্ছে</translation>
 <translation id="4690510401873698237">শেল্ফ নিচে দেখানো হচ্ছে</translation>
 <translation id="4696813013609194136">অভিভাবকীয় কোড দিয়ে ডিভাইস আনলক করুন</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb
index 1c536445..97f8f76f 100644
--- a/ash/strings/ash_strings_bs.xtb
+++ b/ash/strings/ash_strings_bs.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Ažuriraj i odjavi</translation>
 <translation id="1864454756846565995">USB-C uređaj (stražnji priključak)</translation>
 <translation id="1869497990620230175">Brzi fajlovi</translation>
+<translation id="1871703283152909317">Uključi oba pristupa</translation>
 <translation id="1879018240766558464">Anonimni prozori trenutno nisu podržani. Druge aplikacije će se sačuvati.</translation>
 <translation id="1882814835921407042">Nema mobilne mreže</translation>
 <translation id="1882897271359938046">Preslikava se na <ph name="DISPLAY_NAME" /></translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox je omogućen</translation>
 <translation id="4665114317261903604">Uključi/isključi način rada Ne ometaj. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Isključite pristup kameri na ovom uređaju da cijelo vrijeme blokirate sve kamere.</translation>
+<translation id="4666911709726371538">Više aplikacija</translation>
 <translation id="4667099493359681081">Preuzimanje fajla <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Polica na dnu</translation>
 <translation id="4696813013609194136">Otključajte uređaj pomoću koda roditelja</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">Brzina govora</translation>
 <translation id="6099678161144790572">Uređeno u proteklom mjesecu</translation>
 <translation id="6103838137565245112">sistem</translation>
+<translation id="6107292179555508368">Na ovom je uređaju isključen pristup mikrofonu i kameri</translation>
 <translation id="6114505516289286752">Fajlovi govora na jeziku <ph name="LANGUAGE" /> su preuzeti</translation>
 <translation id="6116825164611323644">Pristup kameri je isključen na ovom uređaju</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">Odaberite pomoću digitalne olovke</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Aktiviranje...</translation>
 <translation id="6274202259872570803">Emitiranje na ekranu</translation>
+<translation id="6282694724099204652">Uključite pristup da biste aplikacijama i web-stranicama s dopuštenjem omogućili upotrebu mikrofona i kamere na ovom uređaju.</translation>
 <translation id="6283712521836204486">Funkcija Ne ometaj je isključena.</translation>
 <translation id="6284232397434400372">Rezolucija se promijenila</translation>
 <translation id="6288235558961782912">Adresu e-pošte <ph name="USER_EMAIL_ADDRESS" /> je moguće ponovo dodati kasnije uz odobrenje roditelja.</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index cbdcf98..07f6741 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">S'ha activat ChromeVox</translation>
 <translation id="4665114317261903604">Activa o desactiva el mode No molestis. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Desactiva l'accés a la càmera en aquest dispositiu per bloquejar sempre totes les càmeres.</translation>
+<translation id="4666911709726371538">Més aplicacions</translation>
 <translation id="4667099493359681081">S'està baixant <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">El prestatge és a la part inferior</translation>
 <translation id="4696813013609194136">Desbloqueja el dispositiu amb el codi parental</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 66d34c7..2e286ca 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">Funkce ChromeVox je zapnutá</translation>
 <translation id="4665114317261903604">Přepnout možnost Nerušit. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Vypněte v tomto zařízení přístup ke kamerám a zablokujte všechny kamery.</translation>
+<translation id="4666911709726371538">Další aplikace</translation>
 <translation id="4667099493359681081">Stahování souboru <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Polička dole</translation>
 <translation id="4696813013609194136">Odemkněte zařízení rodičovským kódem</translation>
diff --git a/ash/strings/ash_strings_cy.xtb b/ash/strings/ash_strings_cy.xtb
index 0bd65bb..446c84e 100644
--- a/ash/strings/ash_strings_cy.xtb
+++ b/ash/strings/ash_strings_cy.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">Galluogwyd ChromeVox</translation>
 <translation id="4665114317261903604">Toglo Peidiwch ag Aflonyddu. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Diffoddwch fynediad at y camera ar y ddyfais hon i rwystro pob camera drwy'r amser.</translation>
+<translation id="4666911709726371538">Rhagor o apiau</translation>
 <translation id="4667099493359681081">Wrthi'n lawrlwytho <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Silff ar y gwaelod</translation>
 <translation id="4696813013609194136">Datgloi'r ddyfais gyda chod rhiant</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index af80fa3..3abe2980 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox er aktiveret</translation>
 <translation id="4665114317261903604">Slå Forstyr ikke til eller fra. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Deaktiver kameraadgangen på denne enhed for altid at blokere alle kameraer.</translation>
+<translation id="4666911709726371538">Flere apps</translation>
 <translation id="4667099493359681081">Downloader <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Hylden er i bunden</translation>
 <translation id="4696813013609194136">Lås enheden op med forældrekode</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index 67e9f73..33767ce 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -667,6 +667,7 @@
 <translation id="4659419629803378708">ChromeVox aktiviert</translation>
 <translation id="4665114317261903604">„Bitte nicht stören“ an/aus. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Deaktiviere den Kamerazugriff auf diesem Gerät, um alle Kameras dauerhaft zu blockieren.</translation>
+<translation id="4666911709726371538">Weitere Apps</translation>
 <translation id="4667099493359681081">„<ph name="FILENAME" />“ wird heruntergeladen</translation>
 <translation id="4690510401873698237">Ablage unten</translation>
 <translation id="4696813013609194136">Gerät mit Elterncode entsperren</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index 67324258..692d6b0b 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Ενημέρωση και αποσύνδεση</translation>
 <translation id="1864454756846565995">Συσκευή USB-C (πίσω θύρα)</translation>
 <translation id="1869497990620230175">Γρήγορα αρχεία</translation>
+<translation id="1871703283152909317">Ενεργοποίηση και των δύο προσβάσεων</translation>
 <translation id="1879018240766558464">Προς το παρόν, τα παράθυρα για ανώνυμη περιήγηση δεν υποστηρίζονται. Οι άλλες εφαρμογές θα αποθηκευτούν.</translation>
 <translation id="1882814835921407042">Δεν υπάρχει δίκτυο κινητής τηλεφωνίας</translation>
 <translation id="1882897271359938046">Κατοπτρισμός σε <ph name="DISPLAY_NAME" /></translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">Το ChromeVox ενεργοποιήθηκε</translation>
 <translation id="4665114317261903604">Εναλλαγή λειτουργίας Μην ενοχλείτε. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Απενεργοποιήστε την πρόσβαση στην κάμερα σε αυτήν τη συσκευή, για να αποκλείετε όλες τις κάμερες συνεχώς.</translation>
+<translation id="4666911709726371538">Περισσότερες εφαρμογές</translation>
 <translation id="4667099493359681081">Λήψη <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Ράφι στο κάτω μέρος</translation>
 <translation id="4696813013609194136">Ξεκλείδωμα συσκευής με κωδικό γονέα</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">Ταχύτητα ομιλίας</translation>
 <translation id="6099678161144790572">Έγινε επεξεργασία τον προηγούμενο μήνα</translation>
 <translation id="6103838137565245112">σύστημα</translation>
+<translation id="6107292179555508368">Οι προσβάσεις μικροφώνου και κάμερας είναι απενεργοποιημένες σε αυτήν τη συσκευή</translation>
 <translation id="6114505516289286752">Έγινε λήψη των αρχείων ομιλίας στα <ph name="LANGUAGE" /></translation>
 <translation id="6116825164611323644">Η πρόσβαση στην κάμερα είναι απενεργοποιημένη σε αυτήν τη συσκευή</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" />.</translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">Χρησιμοποιήστε τη γραφίδα σας για επιλογή</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Ενεργοποίηση…</translation>
 <translation id="6274202259872570803">Screencast</translation>
+<translation id="6282694724099204652">Ενεργοποιήστε τις προσβάσεις, για να επιτρέψετε σε εφαρμογές και ιστοσελίδες με την άδεια να χρησιμοποιούν τα μικρόφωνα και τις κάμερες σε αυτήν τη συσκευή.</translation>
 <translation id="6283712521836204486">Η λειτουργία Μην ενοχλείτε είναι ανενεργή.</translation>
 <translation id="6284232397434400372">Η ανάλυση άλλαξε</translation>
 <translation id="6288235558961782912">Ο χρήστης <ph name="USER_EMAIL_ADDRESS" /> μπορεί να προστεθεί ξανά αργότερα με την άδεια ενός γονέα.</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index 588a20f..b1048cf 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox enabled</translation>
 <translation id="4665114317261903604">Toggle Do Not Disturb. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Turn off the camera access on this device to block all cameras all the time.</translation>
+<translation id="4666911709726371538">More apps</translation>
 <translation id="4667099493359681081">Downloading <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Shelf on bottom</translation>
 <translation id="4696813013609194136">Unlock device with parent code</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 07fd3b6..fbc6fdc 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">Se habilitó ChromeVox</translation>
 <translation id="4665114317261903604">Activa o desactiva la función No interrumpir. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Desactiva el acceso a la cámara en este dispositivo para bloquear siempre las cámaras.</translation>
+<translation id="4666911709726371538">Más apps</translation>
 <translation id="4667099493359681081">Descargando <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Biblioteca en la parte inferior</translation>
 <translation id="4696813013609194136">Desbloquea el dispositivo con el código parental</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index 2c010863..6ea24c9d 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox habilitado</translation>
 <translation id="4665114317261903604">Activa o desactiva el modo No molestar. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Desactiva el acceso a la cámara en este dispositivo para bloquear todas las cámaras en todo momento.</translation>
+<translation id="4666911709726371538">Más aplicaciones</translation>
 <translation id="4667099493359681081">Descargando <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">La estantería está en la parte inferior</translation>
 <translation id="4696813013609194136">Desbloquear con código parental</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index b32b414..875120c 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox on lubatud</translation>
 <translation id="4665114317261903604">Lülitab režiimi Mitte segada sisse või välja. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Lülitage selles seadmes kaamerale juurdepääs välja, et kõiki kaameraid kogu aeg blokeerida.</translation>
+<translation id="4666911709726371538">Rohkem rakendusi</translation>
 <translation id="4667099493359681081">Faili <ph name="FILENAME" /> allalaadimine</translation>
 <translation id="4690510401873698237">Riiul asub allpool</translation>
 <translation id="4696813013609194136">Avage seade lapsevanema koodiga</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 1b1b187..6dd8d95 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">Gaitu da ChromeVox</translation>
 <translation id="4665114317261903604">Gaitu/Desgaitu ez molestatzeko modua. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Desaktibatu gailu honetako kamera atzitzeko baimena kamera guztiak blokeatuta egon daitezen beti.</translation>
+<translation id="4666911709726371538">Aplikazio gehiago</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> deskargatzen</translation>
 <translation id="4690510401873698237">Apala behealdean dago</translation>
 <translation id="4696813013609194136">Desblokeatu gailua gurasoen kodearekin</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index 3a89f7c..891eb6a 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">به‌روزرسانی و خروج از سیستم</translation>
 <translation id="1864454756846565995">‏دستگاه USB-C (درگاه عقب)</translation>
 <translation id="1869497990620230175">فایل‌های سریع</translation>
+<translation id="1871703283152909317">روشن کردن هردو دسترسی</translation>
 <translation id="1879018240766558464">درحال‌حاضر از پنجره‌های «ناشناس» پشتیبانی نمی‌شود. برنامه‌های دیگر ذخیره خواهد شد.</translation>
 <translation id="1882814835921407042">عدم وجود شبکه تلفن همراه</translation>
 <translation id="1882897271359938046">بازتاب به <ph name="DISPLAY_NAME" /></translation>
@@ -667,6 +668,7 @@
 <translation id="4659419629803378708">‏ChromeVox فعال شد</translation>
 <translation id="4665114317261903604">روشن/خاموش کردن «مزاحم نشوید». <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">برای اینکه همه دوربین‌ها همیشه مسدود شوند، دسترسی دوربین را در این دستگاه خاموش کنید.</translation>
+<translation id="4666911709726371538">برنامه‌های بیشتر</translation>
 <translation id="4667099493359681081">درحال بارگیری <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">قفسه در پایین است</translation>
 <translation id="4696813013609194136">باز کردن قفل دستگاه با کد والدین</translation>
@@ -922,6 +924,7 @@
 <translation id="6095008505822982596">سرعت گفتار</translation>
 <translation id="6099678161144790572">ماه گذشته ویرایش شده است</translation>
 <translation id="6103838137565245112">سیستم</translation>
+<translation id="6107292179555508368">دسترسی میکروفون و دوربین در این دستگاه خاموش است</translation>
 <translation id="6114505516289286752">فایل‌های گفتار <ph name="LANGUAGE" /> بارگیری شد</translation>
 <translation id="6116825164611323644">دسترسی به دوربین در این دستگاه خاموش است</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -950,6 +953,7 @@
 <translation id="6259254695169772643">برای انتخاب از قلم استفاده کنید</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: در حال فعال‌سازی…</translation>
 <translation id="6274202259872570803">ضبط ویدیویی از صفحه</translation>
+<translation id="6282694724099204652">این دسترسی‌ها را روشن کنید تا برنامه‌ها و صفحه‌های وب دارای اجازه بتوانند از میکروفون‌(ها) و دوربین‌(های) این دستگاه استفاده کنند.</translation>
 <translation id="6283712521836204486">«مزاحم نشوید» خاموش است.</translation>
 <translation id="6284232397434400372">وضوح تغییر کرد</translation>
 <translation id="6288235558961782912">بعداً می‌توانید <ph name="USER_EMAIL_ADDRESS" /> را با اجازه ولی دوباره اضافه کنید.</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index e18f223..3081cc5 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox käytössä</translation>
 <translation id="4665114317261903604">Älä häiritse ‑tila päälle tai pois. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Laita kameran pääsyoikeus pois päältä tällä laitteella estääksesi kaikki kamerat aina.</translation>
+<translation id="4666911709726371538">Lisää sovelluksia</translation>
 <translation id="4667099493359681081">Ladataan: <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Hylly alareunassa</translation>
 <translation id="4696813013609194136">Avaa lukitus vanhemman koodilla</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 8c35966..f74800c 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">I-update at mag-sign out</translation>
 <translation id="1864454756846565995">USB-C device (port sa rear)</translation>
 <translation id="1869497990620230175">Mga mabilisang file</translation>
+<translation id="1871703283152909317">I-on ang parehong access</translation>
 <translation id="1879018240766558464">Kasalukuyang hindi sinusuportahan ang mga Incognito window. Mase-save ang iba pang app.</translation>
 <translation id="1882814835921407042">Walang mobile network</translation>
 <translation id="1882897271359938046">Nagmi-mirror sa <ph name="DISPLAY_NAME" /></translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">Na-enable ang ChromeVox</translation>
 <translation id="4665114317261903604">I-toggle ang Huwag istorbohin. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">I-off ang access sa camera sa device na ito para i-block ang lahat ng camera sa lahat ng pagkakataon.</translation>
+<translation id="4666911709726371538">Higit pang app</translation>
 <translation id="4667099493359681081">Dina-download ang <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Nasa ibaba ang shelf</translation>
 <translation id="4696813013609194136">I-unlock ang device gamit ang parent code</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">Bilis ng pagsasalita</translation>
 <translation id="6099678161144790572">Na-edit sa nakalipas na buwan</translation>
 <translation id="6103838137565245112">system</translation>
+<translation id="6107292179555508368">Naka-off ang mga access sa mikropono at camera sa device na ito</translation>
 <translation id="6114505516289286752">Na-download na ang mga <ph name="LANGUAGE" /> na speech file</translation>
 <translation id="6116825164611323644">Naka-off ang access sa camera sa device na ito</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">Gamitin ang iyong stylus para pumili</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Ina-activate...</translation>
 <translation id="6274202259872570803">Screencast</translation>
+<translation id="6282694724099204652">I-on ang mga access para mapayagan ang mga app at webpage na may pahintulot na gamitin ang (mga) mikropono at (mga) camera sa device na ito.</translation>
 <translation id="6283712521836204486">Naka-off ang Huwag istorbohin.</translation>
 <translation id="6284232397434400372">Binago ang resolution</translation>
 <translation id="6288235558961782912">Puwedeng idagdag ulit ang <ph name="USER_EMAIL_ADDRESS" /> kung may pahintulot ng magulang.</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 209b63d..6d42cc11 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Mettre à jour et se déconnecter</translation>
 <translation id="1864454756846565995">Appareil USB-C (port arrière)</translation>
 <translation id="1869497990620230175">Accès rapide aux fichiers</translation>
+<translation id="1871703283152909317">Activer les deux accès</translation>
 <translation id="1879018240766558464">Les fenêtres de navigation privée ne sont pas prises en charge actuellement. Les autres applications seront enregistrées.</translation>
 <translation id="1882814835921407042">Aucun réseau cellulaire</translation>
 <translation id="1882897271359938046">Mise en miroir pour <ph name="DISPLAY_NAME" /></translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox activé</translation>
 <translation id="4665114317261903604">Basculer le mode Ne pas déranger. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Désactivez l'accès à l'appareil photo sur cet appareil pour bloquer tous les appareils en permanence.</translation>
+<translation id="4666911709726371538">Autres applications</translation>
 <translation id="4667099493359681081">Téléchargement du fichier <ph name="FILENAME" /> en cours…</translation>
 <translation id="4690510401873698237">Étagère dans le bas</translation>
 <translation id="4696813013609194136">Déverrouiller l'appareil avec le code parental</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">Vitesse de la voix</translation>
 <translation id="6099678161144790572">Modifié au cours du dernier mois</translation>
 <translation id="6103838137565245112">système</translation>
+<translation id="6107292179555508368">L'accès au micro et à la caméra est désactivé sur cet appareil</translation>
 <translation id="6114505516289286752">Fichiers vocaux en <ph name="LANGUAGE" /> téléchargés</translation>
 <translation id="6116825164611323644">L'accès à l'appareil photo est désactivé sur cet appareil</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">Utilisez votre stylet pour effectuer une sélection</translation>
 <translation id="6267036997247669271"><ph name="NAME" /> : activation en cours…</translation>
 <translation id="6274202259872570803">Vidéocapture d'écran</translation>
+<translation id="6282694724099204652">Activer les accès pour accorder aux applications et aux pages Web l'autorisation d'utiliser le(s) microphone(s) et la ou les caméra(s) sur cet appareil.</translation>
 <translation id="6283712521836204486">Le mode Ne pas déranger est désactivé.</translation>
 <translation id="6284232397434400372">Résolution modifiée</translation>
 <translation id="6288235558961782912">L'utilisateur <ph name="USER_EMAIL_ADDRESS" /> peut être ajouté de nouveau plus tard, avec l'autorisation d'un parent.</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 174342cb..6301a55 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -667,6 +667,7 @@
 <translation id="4659419629803378708">ChromeVox activé</translation>
 <translation id="4665114317261903604">Activer/Désactiver le mode Ne pas déranger. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Désactivez l'accès à l'appareil photo sur cet appareil pour bloquer tous les appareils photo en permanence.</translation>
+<translation id="4666911709726371538">Plus d'applications</translation>
 <translation id="4667099493359681081">Téléchargement du fichier <ph name="FILENAME" /> en cours</translation>
 <translation id="4690510401873698237">Étagère en bas</translation>
 <translation id="4696813013609194136">Déverrouiller l'appareil avec le code parental</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb
index 7ff8472d..f2dc37b 100644
--- a/ash/strings/ash_strings_gl.xtb
+++ b/ash/strings/ash_strings_gl.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">Activouse ChromeVox</translation>
 <translation id="4665114317261903604">Activar/desactivar o modo Non molestar. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Para bloquear todas as cámaras continuamente, desactiva o acceso ás cámaras neste dispositivo.</translation>
+<translation id="4666911709726371538">Máis aplicacións</translation>
 <translation id="4667099493359681081">Descargando <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">O estante está na parte inferior</translation>
 <translation id="4696813013609194136">Desbloquea o dispositivo co código parental</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 9002aae..b21213a 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox સક્ષમ કર્યું</translation>
 <translation id="4665114317261903604">'ખલેલ પાડશો નહીં'ને ટૉગલ કરો. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">તમામ કૅમેરાને હંમેશાં બ્લૉક કરવા માટે આ ડિવાઇસ પર કૅમેરાનો ઍક્સેસ બંધ કરો.</translation>
+<translation id="4666911709726371538">વધુ ઍપ</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> ડાઉનલોડ કરી રહ્યાં છીએ</translation>
 <translation id="4690510401873698237">શેલ્ફ સૌથી નીચે છે</translation>
 <translation id="4696813013609194136">માતાપિતાના કોડ વડે ડિવાઇસને અનલૉક કરો</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index f21208b1..d22fc07 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox सक्षम है</translation>
 <translation id="4665114317261903604">'परेशान न करें' को टॉगल करें. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">अगर आपको सभी कैमरे हमेशा के लिए ब्लॉक करने हैं, तो इस डिवाइस पर कैमरे को ऐक्सेस करने की सुविधा बंद करें.</translation>
+<translation id="4666911709726371538">और ऐप्लिकेशन</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> डाउनलोड हो रही है</translation>
 <translation id="4690510401873698237">शेल्फ़, स्क्रीन पर सबसे नीचे है</translation>
 <translation id="4696813013609194136">माता-पिता के कोड से डिवाइस अनलॉक करें</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index a68d16e..b13e566 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Ažuriraj i odjavi se</translation>
 <translation id="1864454756846565995">USB-C uređaj (stražnji priključak)</translation>
 <translation id="1869497990620230175">Brz pristup datotekama</translation>
+<translation id="1871703283152909317">Uključi oba pristupa</translation>
 <translation id="1879018240766558464">Anonimni prozori trenutačno nisu podržani. Ostale će se aplikacije spremiti.</translation>
 <translation id="1882814835921407042">Nema mobilne mreže</translation>
 <translation id="1882897271359938046">Zrcaljenje na zaslon <ph name="DISPLAY_NAME" /></translation>
@@ -667,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox omogućen</translation>
 <translation id="4665114317261903604">Prebacivanje načina Ne uznemiravaj. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Isključite pristup kameri na ovom uređaju da biste blokirali sve kamere cijelo vrijeme.</translation>
+<translation id="4666911709726371538">Više aplikacija</translation>
 <translation id="4667099493359681081">Preuzima se <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Polica pri dnu</translation>
 <translation id="4696813013609194136">Otključajte uređaj roditeljskim kodom</translation>
@@ -922,6 +924,7 @@
 <translation id="6095008505822982596">Brzina govora</translation>
 <translation id="6099678161144790572">Uređivano prošli mjesec</translation>
 <translation id="6103838137565245112">sustav</translation>
+<translation id="6107292179555508368">Na ovom je uređaju isključen pristup mikrofonu i kameri</translation>
 <translation id="6114505516289286752">Preuzete su govorne datoteke za <ph name="LANGUAGE" /></translation>
 <translation id="6116825164611323644">Pristup fotoaparatu isključen je na ovom uređaju</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -950,6 +953,7 @@
 <translation id="6259254695169772643">Odaberite pomoću pisaljke</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: aktiviranje...</translation>
 <translation id="6274202259872570803">Zaslonska prezentacija</translation>
+<translation id="6282694724099204652">Uključite pristup da biste aplikacijama i web-stranicama s dopuštenjem omogućili upotrebu mikrofona i kamere na ovom uređaju.</translation>
 <translation id="6283712521836204486">Način Ne uznemiravaj je isključen.</translation>
 <translation id="6284232397434400372">Razlučivost je promijenjena</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> može se kasnije ponovno dodati uz dopuštenje roditelja.</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index d5924c6..1033243 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox bekapcsolva</translation>
 <translation id="4665114317261903604">A Ne zavarjanak funkció ki- vagy bekapcsolása. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Ha azt szeretné, hogy az összes kamera, mindig le legyen tiltva, kapcsolja ki az eszköz kamerájához való hozzáférést.</translation>
+<translation id="4666911709726371538">További alkalmazások</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> letöltése</translation>
 <translation id="4690510401873698237">A polc alul található</translation>
 <translation id="4696813013609194136">Zárolás feloldása szülői kóddal</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb
index 8a264e71fb..0210342 100644
--- a/ash/strings/ash_strings_hy.xtb
+++ b/ash/strings/ash_strings_hy.xtb
@@ -667,6 +667,7 @@
 <translation id="4659419629803378708">ChromeVox-ը միացված է</translation>
 <translation id="4665114317261903604">Միացնել/անջատել «Չանհանգստացնել» ռեժիմը։ <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Անջատեք տեսախցիկն օգտագործելու թույլտվությունն այս սարքում՝ բոլոր տեսախցիկները մշտապես արգելափակելու համար։</translation>
+<translation id="4666911709726371538">Այլ հավելվածներ</translation>
 <translation id="4667099493359681081">Ներբեռնում՝ <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Դարակը ներքևում է</translation>
 <translation id="4696813013609194136">Մուտքագրեք ծնողի մուտքի կոդը</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 99e78858..1e28eaa 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox diaktifkan</translation>
 <translation id="4665114317261903604">Alihkan mode Jangan Ganggu. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Nonaktifkan akses kamera di perangkat ini untuk memblokir semua kamera sepanjang waktu.</translation>
+<translation id="4666911709726371538">Aplikasi lainnya</translation>
 <translation id="4667099493359681081">Mendownload <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Rak di bagian bawah</translation>
 <translation id="4696813013609194136">Buka kunci perangkat dengan kode orang tua</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb
index a5fa7811..134d8375 100644
--- a/ash/strings/ash_strings_is.xtb
+++ b/ash/strings/ash_strings_is.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox virkjað</translation>
 <translation id="4665114317261903604">Kveikja/slökkva á „Ónáðið ekki“. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Slökktu á aðgangi að myndavél í tækinu til að hafa alltaf lokað fyrir allar myndavélar.</translation>
+<translation id="4666911709726371538">Fleiri forrit</translation>
 <translation id="4667099493359681081">Sækir <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Hilla neðst</translation>
 <translation id="4696813013609194136">Opna tæki með kóða foreldris</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index 2e470bc..3ba80a5 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -670,6 +670,7 @@
 <translation id="4659419629803378708">ChromeVox attivato</translation>
 <translation id="4665114317261903604">Attiva/disattiva Non disturbare. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Disattiva l'accesso alla fotocamera su questo dispositivo per bloccare sempre tutte le fotocamere.</translation>
+<translation id="4666911709726371538">Altre app</translation>
 <translation id="4667099493359681081">Download di <ph name="FILENAME" /> in corso…</translation>
 <translation id="4690510401873698237">Barra delle app in basso</translation>
 <translation id="4696813013609194136">Sblocca con codice genitore</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index 4195cd0..152e7ca 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -485,6 +485,7 @@
 <translation id="3633097874324966332">‏צריך לפתוח את הגדרות Bluetooth כדי להתאים את המכשיר</translation>
 <translation id="3638400994746983214">הפעלה וכיבוי של מסך הפרטיות. <ph name="STATE_TEXT" />.</translation>
 <translation id="3649505501900178324">צריך לבצע עדכון</translation>
+<translation id="3659444876902283058">(יום <ph name="CURRENT_DAY" /> מתוך <ph name="TOTAL_DAYS" />)</translation>
 <translation id="3659814201068740063">הזמן שנותר: בערך <ph name="TIME_LEFT" />‏ (<ph name="PERCENTAGE" />%).
 יש לחבר את המכשיר למקור חשמל.</translation>
 <translation id="366222428570480733"><ph name="USER_EMAIL_ADDRESS" /> משתמש מנוהל</translation>
@@ -667,6 +668,7 @@
 <translation id="4659419629803378708">‏ChromeVox הופעל</translation>
 <translation id="4665114317261903604">החלפת מצב 'נא לא להפריע'. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">כדי לחסום את כל המצלמות כל הזמן, צריך להשבית את הגישה למצלמה במכשיר הזה.</translation>
+<translation id="4666911709726371538">עוד אפליקציות</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> בהורדה</translation>
 <translation id="4690510401873698237">המדף בחלק התחתון</translation>
 <translation id="4696813013609194136">ביטול נעילת המכשיר באמצעות קוד הורה</translation>
@@ -1269,9 +1271,11 @@
 <translation id="8052898407431791827">הועתק ללוח</translation>
 <translation id="8054466585765276473">מחשב זמן סוללה</translation>
 <translation id="8083540854303889870">שולחן העבודה נשמר למועד מאוחר יותר</translation>
+<translation id="8091153018031979607">מתחיל בשעה <ph name="START_TIME" /> <ph name="DAYS_ELAPSED" /></translation>
 <translation id="8091387634532529612">עדכונים אוטומטיים</translation>
 <translation id="8098591350844501178">הפסקת העברת המסך אל <ph name="RECEIVER_NAME" /></translation>
 <translation id="8113423164597455979">מופעל, כל האפליקציות</translation>
+<translation id="8113515504791187892">לחצן ההקראה</translation>
 <translation id="8120151603115102514">‏לא מוגדר בטלפון שלך מסך נעילה. צריך להזין סיסמה כדי לפתוח את ה-Chromebook.</translation>
 <translation id="8129620843620772246"><ph name="TEMPERATURE_C" />‎°‎ C</translation>
 <translation id="8131740175452115882">אישור</translation>
@@ -1382,6 +1386,7 @@
 <translation id="8703634754197148428">‏יש להתחיל בהקלטה. לאחר התחלת ההקלטה, יש להקיש על Alt ‏+ Shift ‏+ L כדי לעבור למדף ולמצוא את הלחצן להפסקת ההקלטה</translation>
 <translation id="8721053961083920564">השמעה או השתקה של צלילים. <ph name="STATE_TEXT" /></translation>
 <translation id="8724318433625452070">צילום מסך מלא</translation>
+<translation id="8731487213223706745">מסתיים בשעה <ph name="END_TIME" /> <ph name="DAYS_ELAPSED" /></translation>
 <translation id="8734991477317290293">ייתכן שהיא מנסה לתעד את ההקשות שלך.</translation>
 <translation id="8735678380411481005">הצבע של התאורה האחורית של המקלדת</translation>
 <translation id="8747464587821437069"><ph name="CAMERA_AND_MICROPHONE_ACCESS_STATUS" />,
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index fcc7bcd..4aaff924 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox を有効にしました</translation>
 <translation id="4665114317261903604">サイレント モードを切り替えます。<ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">このデバイスでカメラへのアクセスをオフにすると、すべてのカメラが常にブロックされます。</translation>
+<translation id="4666911709726371538">表示するアプリを増やす</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> をダウンロードしています</translation>
 <translation id="4690510401873698237">シェルフは一番下にあります</translation>
 <translation id="4696813013609194136">保護者のコードでデバイスをロック解除</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb
index 507f733..32096e6 100644
--- a/ash/strings/ash_strings_ka.xtb
+++ b/ash/strings/ash_strings_ka.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox ჩართულია</translation>
 <translation id="4665114317261903604">„არ შემაწუხოთ“ რეჟიმის გადართვა. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">გამორთეთ კამერაზე წვდომა ამ მოწყობილობაზე, რომ ყველა კამერა ყოველთვის დაბლოკილი იყოს.</translation>
+<translation id="4666911709726371538">სხვა აპები</translation>
 <translation id="4667099493359681081">მიმდინარეობს „<ph name="FILENAME" />“-ის ჩამოტვირთვა</translation>
 <translation id="4690510401873698237">თარო მდებარეობს ქვედა ნაწილში</translation>
 <translation id="4696813013609194136">განბლოკეთ მოწყობილობა მშობლის კოდით</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb
index 52a1b45..87193ec 100644
--- a/ash/strings/ash_strings_kk.xtb
+++ b/ash/strings/ash_strings_kk.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox қосылды</translation>
 <translation id="4665114317261903604">Мазаламау режиміне ауысыңыз. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Барлық камера үнемі өшіп тұруы үшін, құрылғыдағы камераны пайдалану рұқсатын өшіріңіз.</translation>
+<translation id="4666911709726371538">Басқа қолданбалар</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> жүктеп алынуда</translation>
 <translation id="4690510401873698237">Төмен жақтағы сөре</translation>
 <translation id="4696813013609194136">Құрылғының құлпын ата-ана кодымен ашыңыз</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index 9bf4fd8..187027a1 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">បានបើក ChromeVox</translation>
 <translation id="4665114317261903604">បិទ/បើក​មុខងារ​ "កុំរំខាន"។ <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">បិទ​ការចូលប្រើប្រាស់​កាមេរ៉ា​នៅលើ​ឧបករណ៍​នេះ ដើម្បីទប់ស្កាត់​កាមេរ៉ា​ទាំងអស់​គ្រប់ពេល។</translation>
+<translation id="4666911709726371538">កម្ម​វិធី​​ច្រើន​ទៀត</translation>
 <translation id="4667099493359681081">កំពុង​ទាញយក <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">ធ្នើនៅ​ខាងក្រោម</translation>
 <translation id="4696813013609194136">ដោះ​សោ​ឧបករណ៍​ដោយ​ប្រើ​កូដ​សម្រាប់​មាតា​បិតា</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index f0a919a..21811be 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="4665114317261903604">'ಅಡಚಣೆ ಮಾಡಬೇಡಿ' ಸ್ಥಿತಿಯನ್ನು ಟಾಗಲ್ ಮಾಡಿ. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">ಎಲ್ಲಾ ಸಮಯದಲ್ಲೂ ಎಲ್ಲಾ ಕ್ಯಾಮರಾಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲು ಈ ಸಾಧನದಲ್ಲಿ ಕ್ಯಾಮರಾ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಆಫ್ ಮಾಡಿ.</translation>
+<translation id="4666911709726371538">ಇನ್ನಷ್ಟು ಆ್ಯಪ್‌ಗಳು</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation>
 <translation id="4690510401873698237">ಪರದೆಯ ಕೆಳಭಾಗದಲ್ಲಿ ಶೆಲ್ಫ್ ಇದೆ</translation>
 <translation id="4696813013609194136">ಪೋಷಕ ಕೋಡ್ ಬಳಸಿಕೊಂಡು ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index 8678ccf..a17f2c3 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox가 사용 설정됨</translation>
 <translation id="4665114317261903604">방해 금지 모드를 켜고 끕니다. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">모든 카메라를 항상 차단하려면 이 기기에서 카메라 액세스를 사용 중지하세요.</translation>
+<translation id="4666911709726371538">앱 더보기</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> 파일을 다운로드하는 중입니다</translation>
 <translation id="4690510401873698237">실행기 하단에 표시</translation>
 <translation id="4696813013609194136">부모 코드로 기기 잠금 해제</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index 1a2ee1706..e09bf73 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox иштетилди</translation>
 <translation id="4665114317261903604">"Тынчымды алба" режимин күйгүзүү/өчүрүү. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Бардык камераларды биротоло бөгөттөө үчүн бул түзмөктө камераны колдонуу мүмкүнчүлүгүн өчүрүңүз.</translation>
+<translation id="4666911709726371538">Дагы башка колдонмолор</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> жүктөлүп алынууда</translation>
 <translation id="4690510401873698237">Текче экрандын ылдый жагында</translation>
 <translation id="4696813013609194136">Түзмөктүн кулпусун ата-эненин коду менен ачуу</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index 98d268d..7f17867 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ເປີດນຳໃຊ້ ChromeVox ແລ້ວ</translation>
 <translation id="4665114317261903604">ປິດເປີດຫ້າມລົບກວນ. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">ປິດສິດເຂົ້າເຖິງກ້ອງຖ່າຍຮູບຢູ່ອຸປະກອນນີ້ເພື່ອບລັອກກ້ອງຖ່າຍຮູບທັງໝົດຕະຫຼອດເວລາ.</translation>
+<translation id="4666911709726371538">ແອັບເພີ່ມເຕີມ</translation>
 <translation id="4667099493359681081">ກຳລັງດາວໂຫຼດ <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">ຊັ້ນວາງຢູ່ລຸ່ມສຸດ</translation>
 <translation id="4696813013609194136">ປົດລັອກອຸປະກອນດ້ວຍລະຫັດພໍ່ແມ່</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index ea1a30f..a0f461f 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">„ChromeVox“ įgalinta</translation>
 <translation id="4665114317261903604">Perjungti netrukdymo režimą. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Išjunkite prieigą prie vaizdo kameros šiame įrenginyje, kad visą laiką blokuotumėte visas vaizdo kameras.</translation>
+<translation id="4666911709726371538">Daugiau programų</translation>
 <translation id="4667099493359681081">Atsisiunčiamas failas <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Lentyna apačioje</translation>
 <translation id="4696813013609194136">Atrakinkite įrenginį naudodami tėvų kodą</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index 7946d4fd..79f62134 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox iespējots</translation>
 <translation id="4665114317261903604">Pārslēgt režīmu “Netraucēt”. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Lai vienmēr bloķētu visas kameras, izslēdziet piekļuvi kamerai šajā ierīcē.</translation>
+<translation id="4666911709726371538">Citas lietotnes</translation>
 <translation id="4667099493359681081">Notiek faila <ph name="FILENAME" /> lejupielāde</translation>
 <translation id="4690510401873698237">Plaukts tiek rādīts apakšā</translation>
 <translation id="4696813013609194136">Ierīces atbloķēšana, ievadot vecāku kodu</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb
index 550d449..45406b5 100644
--- a/ash/strings/ash_strings_mk.xtb
+++ b/ash/strings/ash_strings_mk.xtb
@@ -670,6 +670,7 @@
 <translation id="4659419629803378708">ChromeVox е овозможен</translation>
 <translation id="4665114317261903604">Вклучи/исклучи „Не вознемирувај“. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Исклучете го пристапот до камерата на уредов за да се блокираат сите камери цело време.</translation>
+<translation id="4666911709726371538">Повеќе апликации</translation>
 <translation id="4667099493359681081">Се презема <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Полицата е најдолу</translation>
 <translation id="4696813013609194136">Отклучете го уредот со код на родител</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index 2a269108..dcc81d9 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox പ്രവർത്തനക്ഷമമാക്കി</translation>
 <translation id="4665114317261903604">ശല്യപ്പെടുത്തരുത് മോഡ് മാറ്റുക. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">എല്ലാ സമയത്തും എല്ലാ ക്യാമറകളും ബ്ലോക്ക് ചെയ്യാൻ ഈ ഉപകരണത്തിൽ ക്യാമറ ആക്‌സസ് ഓഫാക്കുക.</translation>
+<translation id="4666911709726371538">കൂടുതൽ ആപ്പുകൾ</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> ഡൗൺലോഡ് ചെയ്യുന്നു</translation>
 <translation id="4690510401873698237">സ്‌ക്രീനിൻ്റെ ചുവടെയാണ് ഷെൽഫ്</translation>
 <translation id="4696813013609194136">രക്ഷാകർതൃ കോഡ് ഉപയോഗിച്ച് ഉപകരണം അൺലോക്ക് ചെയ്യുക</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index 59fdaa9e..895624f 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox-г идэвхжүүлсэн</translation>
 <translation id="4665114317261903604">Бүү саад бол горимыг асаах/унтраах. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Бүх камерыг үргэлж блоклохын тулд энэ төхөөрөмж дээр камерын хандалтыг унтраана уу.</translation>
+<translation id="4666911709726371538">Бусад апп</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" />-г татаж байна</translation>
 <translation id="4690510401873698237">Доор байгаа shelf</translation>
 <translation id="4696813013609194136">Төхөөрөмжийн түгжээг эцэг эхийн кодоор тайлна уу</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index 7a502f2..f3b513c 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox सुरू केले</translation>
 <translation id="4665114317261903604">व्यत्यय आणू नका टॉगल करा. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">सर्व कॅमेरा कायमस्वरूपी ब्लॉक करण्यासाठी या डिव्हाइसवर कॅमेराचा अ‍ॅक्सेस बंद करा.</translation>
+<translation id="4666911709726371538">आणखी अ‍ॅप्‍स</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> डाउनलोड करत आहे</translation>
 <translation id="4690510401873698237">शेल्फ तळाशी आहे</translation>
 <translation id="4696813013609194136">पालक कोडने डिव्हाइस अनलॉक करा</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index fe5778c..81921ff 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox didayakan</translation>
 <translation id="4665114317261903604">Togol Jangan ganggu. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Matikan akses kamera pada peranti ini untuk menyekat semua kamera pada setiap masa.</translation>
+<translation id="4666911709726371538">Lagi apl</translation>
 <translation id="4667099493359681081">Memuat turun <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Rak di bahagian bawah</translation>
 <translation id="4696813013609194136">Buka kunci peranti menggunakan kod ibu bapa</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 3da33ea..b592e3d 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox ကို ဖွင့်ထားပါသည်</translation>
 <translation id="4665114317261903604">'မနှောင့်ယှက်ရ' ဖွင့်/ပိတ်ရန်။ <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">ကင်မရာအားလုံးကို အချိန်ပြည့်ပိတ်ထားရန် ဤစက်တွင် ကင်မရာသုံးခွင့်ကို ပိတ်နိုင်သည်။</translation>
+<translation id="4666911709726371538">အက်ပ်များ ပိုပြပါ</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> ကို ဒေါင်းလုဒ်လုပ်နေသည်</translation>
 <translation id="4690510401873698237">စင်ကို အောက်ခြေသို့ ရွှေ့လိုက်ပါပြီ</translation>
 <translation id="4696813013609194136">စက်ပစ္စည်းကို မိဘသုံးကုဒ်ဖြင့် ဖွင့်ပါ</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb
index 4f516ed..aaa4c7a 100644
--- a/ash/strings/ash_strings_ne.xtb
+++ b/ash/strings/ash_strings_ne.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox सक्षम पारियो</translation>
 <translation id="4665114317261903604">बाधा नपुर्‍याउनुहोस् नामक मोड टगल गर्नुहोस्। <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">तपाईं सबै क्यामेराहरू सदाका लागि ब्लक गर्न चाहनुहुन्छ भने यो डिभाइसमा क्यामेरा प्रयोग गर्ने अनुमति अफ गर्नुहोस्।</translation>
+<translation id="4666911709726371538">थप एपहरू</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> डाउनलोड गरिँदै छ</translation>
 <translation id="4690510401873698237">सेल्फ पुछारमा छ</translation>
 <translation id="4696813013609194136">अभिभावकको कोडमार्फत डिभाइस अनलक गर्नुहोस्</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index 1839732e..3a4f98a 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Updaten en uitloggen</translation>
 <translation id="1864454756846565995">USB-C-apparaat (poort aan achterkant)</translation>
 <translation id="1869497990620230175">Snelle bestanden</translation>
+<translation id="1871703283152909317">Beide toegangstypen aanzetten</translation>
 <translation id="1879018240766558464">Incognitovensters worden momenteel niet ondersteund. Andere apps worden opgeslagen.</translation>
 <translation id="1882814835921407042">Geen mobiel netwerk</translation>
 <translation id="1882897271359938046">Spiegelen naar <ph name="DISPLAY_NAME" /></translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox staat aan</translation>
 <translation id="4665114317261903604">Niet storen aan/uit. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Zet de cameratoegang op dit apparaat uit om alle camera's altijd te blokkeren.</translation>
+<translation id="4666911709726371538">Meer apps</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> downloaden</translation>
 <translation id="4690510401873698237">Plank aan onderkant</translation>
 <translation id="4696813013609194136">Apparaat ontgrendelen met oudercode</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">Spreeksnelheid</translation>
 <translation id="6099678161144790572">In de afgelopen maand bewerkt</translation>
 <translation id="6103838137565245112">systeem</translation>
+<translation id="6107292179555508368">Microfoon- en cameratoegang staan uit op dit apparaat</translation>
 <translation id="6114505516289286752">Spraakbestanden in het <ph name="LANGUAGE" /> gedownload</translation>
 <translation id="6116825164611323644">Cameratoegang staat uit op dit apparaat</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" />.</translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">Gebruik je stylus om te selecteren</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: activeren...</translation>
 <translation id="6274202259872570803">Screencast</translation>
+<translation id="6282694724099204652">Zet de toegang aan zodat apps en webpagina's met toestemming de microfoon(s) en camera('s) op dit apparaat kunnen gebruiken.</translation>
 <translation id="6283712521836204486">Niet storen staat uit.</translation>
 <translation id="6284232397434400372">Resolutie gewijzigd</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> kan later opnieuw worden toegevoegd met toestemming van een ouder.</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index b404b989..01cf6bc 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Oppdater og logg av</translation>
 <translation id="1864454756846565995">USB-C-enhet (porten på baksiden)</translation>
 <translation id="1869497990620230175">Hurtigfiler</translation>
+<translation id="1871703283152909317">Slå på begge tilgangene</translation>
 <translation id="1879018240766558464">Inkognitovinduer støttes ikke for øyeblikket. Andre apper blir lagret.</translation>
 <translation id="1882814835921407042">Ingen mobilnettverk</translation>
 <translation id="1882897271359938046">Speiler <ph name="DISPLAY_NAME" /></translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox er slått på</translation>
 <translation id="4665114317261903604">Slå av/på Ikke forstyrr. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Slå av kameratilgangen på denne enheten for å blokkere alle kameraer hele tiden.</translation>
+<translation id="4666911709726371538">Flere apper</translation>
 <translation id="4667099493359681081">Laster ned <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Hyllen er nederst</translation>
 <translation id="4696813013609194136">Lås opp enheten med foreldrekode</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">Lesehastighet</translation>
 <translation id="6099678161144790572">Redigert den siste måneden</translation>
 <translation id="6103838137565245112">system</translation>
+<translation id="6107292179555508368">Mikrofon- og kameratilgang er avslått på denne enheten</translation>
 <translation id="6114505516289286752">Talefiler for <ph name="LANGUAGE" /> er lastet ned</translation>
 <translation id="6116825164611323644">Kameratilgang er avslått på denne enheten</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">Bruk pekepennen til å velge</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: aktiveres …</translation>
 <translation id="6274202259872570803">Skjermopptak</translation>
+<translation id="6282694724099204652">Slå på tilgangene for å tillate at apper og nettsider med tillatelsen bruker mikrofonen(e) og kameraet/kameraene på denne enheten.</translation>
 <translation id="6283712521836204486">Ikke forstyrr er av.</translation>
 <translation id="6284232397434400372">Oppløsningen er endret</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> kan legges til på nytt senere med tillatelse fra en forelder.</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb
index 19d7d5d..1a6d4dd8 100644
--- a/ash/strings/ash_strings_or.xtb
+++ b/ash/strings/ash_strings_or.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">ଅପଡେଟ କରି ସାଇନ ଆଉଟ କରନ୍ତୁ</translation>
 <translation id="1864454756846565995">USB-C ଡିଭାଇସ୍ (ପଛ ପୋର୍ଟ)</translation>
 <translation id="1869497990620230175">କ୍ୱିକ ଫାଇଲଗୁଡ଼ିକ</translation>
+<translation id="1871703283152909317">ଉଭୟ ଆକ୍ସେସକୁ ଚାଲୁ କରନ୍ତୁ</translation>
 <translation id="1879018240766558464">ବର୍ତ୍ତମାନ ଇନକଗ୍ନିଟୋ ୱିଣ୍ଡୋଗୁଡ଼ିକ ସମର୍ଥିତ ନୁହେଁ। ଅନ୍ୟ ଆପଗୁଡ଼ିକ ସେଭ ହୋଇଯିବ।</translation>
 <translation id="1882814835921407042">କୌଣସି ମୋବାଇଲ ନେଟୱାର୍କ ନାହିଁ</translation>
 <translation id="1882897271359938046"><ph name="DISPLAY_NAME" />ର ପ୍ରତିଫଳନ</translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox ସକ୍ଷମ କରାଯାଇଛି</translation>
 <translation id="4665114317261903604">'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ' ଟୋଗଲ୍ କରନ୍ତୁ। <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">ସର୍ବଦା ସମସ୍ତ କେମେରାକୁ ବ୍ଲକ କରିବା ପାଇଁ ଏହି ଡିଭାଇସରେ କେମେରା ଆକ୍ସେସକୁ ବନ୍ଦ କରନ୍ତୁ।</translation>
+<translation id="4666911709726371538">ଅଧିକ ଆପ୍</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> ଡାଉନଲୋଡ ହେଉଛି</translation>
 <translation id="4690510401873698237">ତଳ ପଟକୁ ସେଲ୍ଫ</translation>
 <translation id="4696813013609194136">ମାତାପିତାଙ୍କ କୋଡ୍‌ରେ ଡିଭାଇସ୍ ଅନଲକ୍ କରନ୍ତୁ</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">ସ୍ପିଚ ରେଟ</translation>
 <translation id="6099678161144790572">ଗତ ମାସରେ ଏଡିଟ କରାଯାଇଛି</translation>
 <translation id="6103838137565245112">ସିଷ୍ଟମ</translation>
+<translation id="6107292179555508368">ଏହି ଡିଭାଇସରେ ମାଇକ୍ରୋଫୋନ ଏବଂ କେମେରା ଆକ୍ସେସଗୁଡ଼ିକ ବନ୍ଦ ଅଛି</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> ସ୍ପିଚ୍ ଫାଇଲଗୁଡ଼ିକ ଡାଉନଲୋଡ୍ କରାଯାଇଛି</translation>
 <translation id="6116825164611323644">ଏହି ଡିଭାଇସରେ କେମେରା ଆକ୍ସେସ ବନ୍ଦ ଅଛି</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />। <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">ଚୟନ କରିବାକୁ ଆପଣଙ୍କର ଷ୍ଟାଇଲସ୍ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: ସକ୍ରିୟ ହେଉଛି...</translation>
 <translation id="6274202259872570803">ସ୍କ୍ରିନକାଷ୍ଟ</translation>
+<translation id="6282694724099204652">ଏହି ଡିଭାଇସରେ ମାଇକ୍ରୋଫୋନ(ଗୁଡ଼ିକ) ଏବଂ କେମେରା(ଗୁଡ଼ିକ) ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ସହିତ ଆପ୍ସ ଏବଂ ୱେବପୃଷ୍ଠାଗୁଡ଼ିକୁ ଅନୁମତି ଦେବା ପାଇଁ ଆକ୍ସେସ ଚାଲୁ କରନ୍ତୁ।</translation>
 <translation id="6283712521836204486">'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ' ବନ୍ଦ ଅଛି।</translation>
 <translation id="6284232397434400372">ରିଜୋଲ୍ୟୁସନ୍ ପରିବର୍ତ୍ତିତ ହୋଇଛି</translation>
 <translation id="6288235558961782912">ବାପାମା'ଙ୍କ ଅନୁମତି ସହିତ <ph name="USER_EMAIL_ADDRESS" /> ପୁଣି-ଯୋଗ କରିପାରିବେ।</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb
index 2292e5d..a600b42 100644
--- a/ash/strings/ash_strings_pa.xtb
+++ b/ash/strings/ash_strings_pa.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">ਅੱਪਡੇਟ ਕਰ ਕੇ ਸਾਈਨ-ਆਊਟ ਕਰੋ</translation>
 <translation id="1864454756846565995">USB-C ਡੀਵਾਈਸ (ਪਿਛਲਾ ਪੋਰਟ)</translation>
 <translation id="1869497990620230175">ਤਤਕਾਲ ਫ਼ਾਈਲਾਂ</translation>
+<translation id="1871703283152909317">ਦੋਵਾਂ ਪਹੁੰਚਾਂ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation>
 <translation id="1879018240766558464">ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋਆਂ ਫ਼ਿਲਹਾਲ ਸਮਰਥਿਤ ਨਹੀਂ ਹਨ। ਹੋਰ ਐਪਾਂ ਨੂੰ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾਵੇਗਾ।</translation>
 <translation id="1882814835921407042">ਕੋਈ ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਨਹੀਂ ਹੈ</translation>
 <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> ਲਈ ਪ੍ਰਤਿਬਿੰਬੀਕਰਨ</translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox ਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ</translation>
 <translation id="4665114317261903604">'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ' ਨੂੰ ਟੌਗਲ ਕਰੋ। <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">ਹਰ ਸਮੇਂ ਸਾਰੇ ਕੈਮਰਿਆਂ ਨੂੰ ਬਲਾਕ ਕਰਨ ਲਈ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਕੈਮਰਾ ਪਹੁੰਚ ਨੂੰ ਬੰਦ ਕਰੋ।</translation>
+<translation id="4666911709726371538">ਹੋਰ ਐਪਾਂ</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> ਨੂੰ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation>
 <translation id="4690510401873698237">ਹੇਠਲੇ 'ਤੇ ਸ਼ੈਲਫ਼</translation>
 <translation id="4696813013609194136">ਮਾਂ-ਪਿਓ ਦੇ ਕੋਡ ਨਾਲ ਡੀਵਾਈਸ ਅਣਲਾਕ ਕਰੋ</translation>
@@ -924,6 +926,7 @@
 <translation id="6095008505822982596">ਬੋਲਣ ਦੀ ਗਤੀ</translation>
 <translation id="6099678161144790572">ਪਿਛਲੇ ਮਹੀਨੇ ਸੰਪਾਦਨ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="6103838137565245112">ਸਿਸਟਮ</translation>
+<translation id="6107292179555508368">ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਅਤੇ ਕੈਮਰਾ ਪਹੁੰਚਾਂ ਬੰਦ ਹਨ</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> ਦੀਆਂ ਬੋਲੀ ਵਾਲੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="6116825164611323644">ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਕੈਮਰਾ ਪਹੁੰਚ ਬੰਦ ਹੈ</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />। <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +955,7 @@
 <translation id="6259254695169772643">ਚੁਣਨ ਲਈ ਆਪਣੇ ਸਟਾਈਲਸ ਦੀ ਵਰਤੋਂ ਕਰੋ</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: ਐਕਟੀਵੇਟ ਹੋ ਰਿਹਾ ਹੈ...</translation>
 <translation id="6274202259872570803">ਸਕ੍ਰੀਨਕਾਸਟ</translation>
+<translation id="6282694724099204652">ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਇਜਾਜ਼ਤ ਵਾਲੀਆਂ ਐਪਾਂ ਅਤੇ ਵੈੱਬ-ਪੰਨਿਆਂ ਨੂੰ ਮਾਈਕ੍ਰੋਫ਼ੋਨਾਂ ਅਤੇ ਕੈਮਰਿਆਂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣ ਲਈ ਪਹੁੰਚਾਂ ਨੂੰ ਚਾਲੂ ਕਰੋ।</translation>
 <translation id="6283712521836204486">'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ' ਬੰਦ ਹੈ।</translation>
 <translation id="6284232397434400372">ਰੈਜ਼ੋਲਿਊਸ਼ਨ ਬਦਲ ਗਿਆ</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਮਾਂ-ਪਿਓ ਦੀ ਇਜਾਜ਼ਤ ਨਾਲ ਮੁੜ-ਸ਼ਾਮਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index 9801fa0e..2f5641f 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">Włączono ChromeVox</translation>
 <translation id="4665114317261903604">Włącz lub wyłącz tryb Nie przeszkadzać. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Wyłącz dostęp do kamery na tym urządzeniu, aby na stałe zablokować wszystkie kamery.</translation>
+<translation id="4666911709726371538">Więcej aplikacji</translation>
 <translation id="4667099493359681081">Pobieram <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Półka na dole</translation>
 <translation id="4696813013609194136">Odblokuj urządzenie kodem rodzica</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index b2944db..250d409 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox ativado</translation>
 <translation id="4665114317261903604">Alternar "Não perturbe". <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Desative o acesso à câmera neste dispositivo para bloquear todas as câmeras o tempo todo.</translation>
+<translation id="4666911709726371538">Mais apps</translation>
 <translation id="4667099493359681081">Fazendo o download do arquivo <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Estante na parte inferior</translation>
 <translation id="4696813013609194136">Desbloquear dispositivo usando o código de pai/mãe</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index c08fccc9..4b9aa3b 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox ativado</translation>
 <translation id="4665114317261903604">Ative/desative o modo Não incomodar. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Desative o acesso à câmara neste dispositivo para bloquear sempre todas as câmaras.</translation>
+<translation id="4666911709726371538">Mais apps</translation>
 <translation id="4667099493359681081">A transferir <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Prateleira na parte inferior</translation>
 <translation id="4696813013609194136">Desbloquear o dispositivo com o código parental</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index 3211585..4d68133 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Actualizează și deconectează-te</translation>
 <translation id="1864454756846565995">Dispozitiv USB-C (portul din spate)</translation>
 <translation id="1869497990620230175">Fișiere rapide</translation>
+<translation id="1871703283152909317">Activează ambele accesuri</translation>
 <translation id="1879018240766558464">Ferestrele incognito nu sunt acceptate. Alte aplicații se vor salva.</translation>
 <translation id="1882814835921407042">Nu este disponibilă nicio rețea mobilă</translation>
 <translation id="1882897271359938046">Se oglindește pe <ph name="DISPLAY_NAME" /></translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox este activat</translation>
 <translation id="4665114317261903604">Comută Nu deranja. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Dezactivează accesul la camera foto al acestui dispozitiv pentru a bloca întotdeauna toate camerele.</translation>
+<translation id="4666911709726371538">Mai multe aplicații</translation>
 <translation id="4667099493359681081">Se descarcă <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Raft în partea de jos</translation>
 <translation id="4696813013609194136">Deblochează dispozitivul cu codul părintelui</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">Ritmul vorbirii</translation>
 <translation id="6099678161144790572">Editat în ultima lună</translation>
 <translation id="6103838137565245112">sistem</translation>
+<translation id="6107292179555508368">Accesul la microfon și la camera foto este dezactivat pe acest dispozitiv</translation>
 <translation id="6114505516289286752">Fișierele de redare în scris a vorbirii în <ph name="LANGUAGE" /> s-au descărcat</translation>
 <translation id="6116825164611323644">Accesul la camera foto este dezactivat pe acest dispozitiv</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">Folosește creionul pentru a selecta</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: se activează...</translation>
 <translation id="6274202259872570803">Înregistrare de pe ecran</translation>
+<translation id="6282694724099204652">Activează accesul pentru a permite aplicațiilor și paginilor web cu permisiunea respectivă să folosească microfoanele și camerele video de pe acest dispozitiv.</translation>
 <translation id="6283712521836204486">Funcția Nu deranja este dezactivată.</translation>
 <translation id="6284232397434400372">Rezoluția a fost schimbată</translation>
 <translation id="6288235558961782912">Utilizatorul <ph name="USER_EMAIL_ADDRESS" /> poate fi adăugat din nou mai târziu, cu permisiunea părintelui.</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index c982bb8..1b75b44 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">Функция ChromeVox включена</translation>
 <translation id="4665114317261903604">Включить или отключить режим "Не беспокоить". <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Запретите доступ к камерам на этом устройстве, чтобы заблокировать все камеры.</translation>
+<translation id="4666911709726371538">Больше приложений</translation>
 <translation id="4667099493359681081">Скачивание файла <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Временное хранилище размещено в нижней части экрана</translation>
 <translation id="4696813013609194136">Требуется родительский код доступа</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb
index ae99bdc..6c42324 100644
--- a/ash/strings/ash_strings_si.xtb
+++ b/ash/strings/ash_strings_si.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox සබලයි</translation>
 <translation id="4665114317261903604">බාධා නොකරන්න ටොගල් කරන්න. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">සියලු කැමරා සෑම විටම අවහිර කිරීමට මෙම උපාංගයේ කැමරා ප්‍රවේශය ක්‍රියාවිරහිත කරන්න.</translation>
+<translation id="4666911709726371538">තවත් යෙදුම්</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> බාගනිමින්</translation>
 <translation id="4690510401873698237">පහළ ඇති රාක්කය</translation>
 <translation id="4696813013609194136">මාපිය කේතය සමඟ උපාංගය අඟුලු අරින්න</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index 5212d84..581bcf7 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Aktualizovať a odhlásiť sa</translation>
 <translation id="1864454756846565995">Zariadenie USB-C (port vzadu)</translation>
 <translation id="1869497990620230175">Rýchle súbory</translation>
+<translation id="1871703283152909317">Zapnúť oba prístupy</translation>
 <translation id="1879018240766558464">Okná inkognito momentálne nie sú podporované. Ostatné aplikácie budú uložené.</translation>
 <translation id="1882814835921407042">Žiadna mobilná sieť</translation>
 <translation id="1882897271359938046">Zrkadlenie na displej <ph name="DISPLAY_NAME" /></translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">Funkcia ChromeVox je povolená</translation>
 <translation id="4665114317261903604">Prepnúť režim bez vyrušení. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Ak chcete, aby boli všetky kamery stále blokované, vypnite v tomto zariadení prístup ku kamere.</translation>
+<translation id="4666911709726371538">Ďalšie aplikácie</translation>
 <translation id="4667099493359681081">Sťahuje sa <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Polička dolu</translation>
 <translation id="4696813013609194136">Odomknutie zariadenia kódom rodiča</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">Rýchlosť reči</translation>
 <translation id="6099678161144790572">Upravené za posledný mesiac</translation>
 <translation id="6103838137565245112">systém</translation>
+<translation id="6107292179555508368">Prístupy k mikrofónu a kamere sú v tomto zariadení vypnuté</translation>
 <translation id="6114505516289286752">Súbory s balíkmi reči <ph name="LANGUAGE" /> boli stiahnuté</translation>
 <translation id="6116825164611323644">Prístup ku kamere je v tomto zariadení vypnutý</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">Vyberte pomocou dotykového pera</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Aktivuje sa...</translation>
 <translation id="6274202259872570803">Záznam z obrazovky</translation>
+<translation id="6282694724099204652">Zapnite prístupy a umožnite tak aplikáciám a webovým stránkam s daným povolením používať mikrofóny a kamery v tomto zariadení.</translation>
 <translation id="6283712521836204486">Režim bez vyrušení je vypnutý.</translation>
 <translation id="6284232397434400372">Rozlíšenie sa zmenilo</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> môžete znova pridať neskôr s povolením rodiča.</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index d3057ed..46959d48 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">Omogočen je ChromeVox</translation>
 <translation id="4665114317261903604">Preklop načina »ne moti«. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Izklopite dostop do kamere v tej napravi, če želite ves čas blokirati vse kamere.</translation>
+<translation id="4666911709726371538">Več aplikacij</translation>
 <translation id="4667099493359681081">Prenašanje datoteke <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Polica na dnu</translation>
 <translation id="4696813013609194136">Odklepanje naprave s kodo starša</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index 7e594aec..ee0fbc8 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox është aktivizuar</translation>
 <translation id="4665114317261903604">Aktivizo/çaktivizo modalitetin "Mos shqetëso". <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Çaktivizo qasjen te kamera në këtë pajisje për të bllokuar të gjitha kamerat gjatë të gjithë kohës.</translation>
+<translation id="4666911709726371538">Aplikacione të tjera</translation>
 <translation id="4667099493359681081">Po shkarkon <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Rafti në fund</translation>
 <translation id="4696813013609194136">Shkyç pajisjen me kodin e prindit</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb
index 8d9d365..caada50 100644
--- a/ash/strings/ash_strings_sr-Latn.xtb
+++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox je omogućen</translation>
 <translation id="4665114317261903604">Uključite/isključite režim Ne uznemiravaj. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Isključite pristup kameri na ovom uređaju da biste blokirali sve kamere sve vreme.</translation>
+<translation id="4666911709726371538">Još aplikacija</translation>
 <translation id="4667099493359681081">Preuzima se fajl <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Polica u dnu</translation>
 <translation id="4696813013609194136">Otključajte uređaj pomoću koda roditelja</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index 19eb5c3..04be243 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox је омогућен</translation>
 <translation id="4665114317261903604">Укључите/искључите режим Не узнемиравај. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Искључите приступ камери на овом уређају да бисте блокирали све камере све време.</translation>
+<translation id="4666911709726371538">Још апликација</translation>
 <translation id="4667099493359681081">Преузима се фајл <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Полица у дну</translation>
 <translation id="4696813013609194136">Откључајте уређај помоћу кода родитеља</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index 0271680..b109337 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox har aktiverats</translation>
 <translation id="4665114317261903604">Aktivera och inaktivera Stör ej. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Inaktivera kameraåtkomst på den här enheten om du vill blockera alla kameror hela tiden.</translation>
+<translation id="4666911709726371538">Fler appar</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> laddas ned</translation>
 <translation id="4690510401873698237">Hyllan längst ned</translation>
 <translation id="4696813013609194136">Lås upp enheten med föräldrakod</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb
index d14c7de4..fb0fcfe 100644
--- a/ash/strings/ash_strings_sw.xtb
+++ b/ash/strings/ash_strings_sw.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox imewashwa</translation>
 <translation id="4665114317261903604">Washa/zima 'Usinisumbue'. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Zima ufikiaji wa kamera kwenye kifaa hiki ili uzuie kamera zote wakati wote.</translation>
+<translation id="4666911709726371538">Programu zaidi</translation>
 <translation id="4667099493359681081">Inapakua <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Rafu iko upande wa chini</translation>
 <translation id="4696813013609194136">Fungua kifaa ukitumia msimbo wa mzazi</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 6bc9581..791c058 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox இயக்கப்பட்டது</translation>
 <translation id="4665114317261903604">'தொந்தரவு செய்ய வேண்டாம்' அம்சத்தை ஆன்/ஆஃப் செய்யும். <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">எல்லாக் கேமராக்களையும் எப்போதும் தடுத்து வைத்திருக்க, இந்தச் சாதனத்தில் கேமரா அணுகலை முடக்குங்கள்.</translation>
+<translation id="4666911709726371538">மேலும் ஆப்ஸ்</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> ஃபைலைப் பதிவிறக்குகிறது</translation>
 <translation id="4690510401873698237">ஷெல்ஃப் கீழே உள்ளது</translation>
 <translation id="4696813013609194136">பெற்றோர் குறியீட்டின் மூலம் சாதனத்தை அன்லாக் செய்தல்</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index f376ac1..17862de 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox ప్రారంభించబడింది</translation>
 <translation id="4665114317261903604">'అంతరాయం కలిగించవద్దు' ఎంపికను టోగుల్ చేయండి. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">అన్ని కెమెరాలను అన్నివేళలా బ్లాక్ చేయడానికి ఈ పరికరంలో కెమెరా యాక్సెస్‌ను ఆఫ్ చేయండి.</translation>
+<translation id="4666911709726371538">మరిన్ని యాప్‌లు</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" />ను డౌన్‌లోడ్ చేస్తోంది</translation>
 <translation id="4690510401873698237">అర కింది భాగంలో ఉంది</translation>
 <translation id="4696813013609194136">తల్లి/తండ్రి కోడ్‌తో పరికరాన్ని అన్‌లాక్ చేయండి</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index bbe3ce9..f5c662e 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">อัปเดตและออกจากระบบ</translation>
 <translation id="1864454756846565995">อุปกรณ์ USB-C (พอร์ตด้านหลัง)</translation>
 <translation id="1869497990620230175">ไฟล์ด่วน</translation>
+<translation id="1871703283152909317">เปิดการเข้าถึงทั้ง 2 อย่าง</translation>
 <translation id="1879018240766558464">ขณะนี้ยังไม่รองรับหน้าต่างที่ไม่ระบุตัวตน ระบบจะบันทึกแอปอื่นๆ</translation>
 <translation id="1882814835921407042">ไม่มีเครือข่ายมือถือ</translation>
 <translation id="1882897271359938046">กำลังแสดงผลไปที่ <ph name="DISPLAY_NAME" /></translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">เปิดใช้ ChromeVox แล้ว</translation>
 <translation id="4665114317261903604">เปิด/ปิด "ห้ามรบกวน" <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">ปิดการเข้าถึงกล้องในอุปกรณ์นี้เพื่อบล็อกกล้องทั้งหมดตลอดเวลา</translation>
+<translation id="4666911709726371538">แสดงแอปเพิ่มเติม</translation>
 <translation id="4667099493359681081">กำลังดาวน์โหลด <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">ชั้นวางอยู่ด้านล่าง</translation>
 <translation id="4696813013609194136">ปลดล็อกอุปกรณ์ด้วยรหัสของผู้ปกครอง</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">ความเร็วในการพูด</translation>
 <translation id="6099678161144790572">แก้ไขในเดือนที่ผ่านมา</translation>
 <translation id="6103838137565245112">ระบบ</translation>
+<translation id="6107292179555508368">การเข้าถึงไมโครโฟนและกล้องปิดอยู่ในอุปกรณ์นี้</translation>
 <translation id="6114505516289286752">ดาวน์โหลดไฟล์คำพูดภาษา<ph name="LANGUAGE" />แล้ว</translation>
 <translation id="6116825164611323644">การเข้าถึงกล้องปิดอยู่ในอุปกรณ์นี้</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" /> <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">ใช้สไตลัสเพื่อเลือก</translation>
 <translation id="6267036997247669271"><ph name="NAME" /> กำลังเปิดใช้งาน...</translation>
 <translation id="6274202259872570803">Screencast</translation>
+<translation id="6282694724099204652">เปิดการเข้าถึงเพื่ออนุญาตให้แอปและหน้าเว็บที่มีสิทธิ์ดังกล่าวใช้ไมโครโฟนและกล้องในอุปกรณ์นี้</translation>
 <translation id="6283712521836204486">โหมดห้ามรบกวนปิดอยู่</translation>
 <translation id="6284232397434400372">เปลี่ยนความละเอียดแล้ว</translation>
 <translation id="6288235558961782912">คุณจะเพิ่ม <ph name="USER_EMAIL_ADDRESS" /> ได้อีกครั้งในภายหลังโดยต้องได้รับอนุญาตจากผู้ปกครอง</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index 35b8bd9..4ac45b4 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox etkinleştirildi</translation>
 <translation id="4665114317261903604">Rahatsız Etmeyin modunu aç/kapat. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Tüm kameraları her zaman engellemek için bu cihazda kamera erişimini kapatın.</translation>
+<translation id="4666911709726371538">Diğer uygulamalar</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> indiriliyor</translation>
 <translation id="4690510401873698237">Raf, ekranın alt tarafında</translation>
 <translation id="4696813013609194136">Kilidi ebeveyn koduyla açın</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index da698ad..c413646c 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Оновити й вийти</translation>
 <translation id="1864454756846565995">Пристрій із портом USB типу C (на задній панелі)</translation>
 <translation id="1869497990620230175">Швидкий доступ до файлів</translation>
+<translation id="1871703283152909317">Надати обидва дозволи на доступ</translation>
 <translation id="1879018240766558464">Вікна в режимі анонімного перегляду наразі не підтримуються. Інші додатки буде збережено.</translation>
 <translation id="1882814835921407042">Немає мобільних мереж</translation>
 <translation id="1882897271359938046">Дзеркалювання на <ph name="DISPLAY_NAME" /></translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox увімкнено</translation>
 <translation id="4665114317261903604">Увімкнути/вимкнути режим "Не турбувати". <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Вимкніть доступ до камери на цьому пристрої, щоб інші камери були постійно заблоковані.</translation>
+<translation id="4666911709726371538">Більше додатків</translation>
 <translation id="4667099493359681081">Завантажується файл <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Полицю розміщено внизу</translation>
 <translation id="4696813013609194136">Введіть код доступу батьків</translation>
@@ -923,6 +925,7 @@
 <translation id="6095008505822982596">Темп мовлення</translation>
 <translation id="6099678161144790572">Змінено минулого місяця</translation>
 <translation id="6103838137565245112">система</translation>
+<translation id="6107292179555508368">На цьому пристрої не надано доступ до мікрофона й камери</translation>
 <translation id="6114505516289286752">Файли живих субтитрів завантажено (<ph name="LANGUAGE" />)</translation>
 <translation id="6116825164611323644">Доступ до камери вимкнено на цьому пристрої</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -951,6 +954,7 @@
 <translation id="6259254695169772643">Вибирайте елементи за допомогою стилуса</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: активація…</translation>
 <translation id="6274202259872570803">Скрінкаст</translation>
+<translation id="6282694724099204652">Надайте доступ, щоб додатки й веб-сторінки з дозволом могли використовувати мікрофон і камеру на цьому пристрої.</translation>
 <translation id="6283712521836204486">Режим "Не турбувати" вимкнено.</translation>
 <translation id="6284232397434400372">Роздільну здатність змінено</translation>
 <translation id="6288235558961782912">Користувача <ph name="USER_EMAIL_ADDRESS" /> можна буде знову додати з дозволу батьків.</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb
index 5841e530..96e604ba 100644
--- a/ash/strings/ash_strings_ur.xtb
+++ b/ash/strings/ash_strings_ur.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">‏ChromeVox فعال ہے</translation>
 <translation id="4665114317261903604">ڈسٹرب نہ کریں کو ٹوگل کریں۔ <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">تمام کیمروں کو ہمیشہ کے لیے اس آلے پر کیمرا تک رسائی کو آف کریں۔</translation>
+<translation id="4666911709726371538">مزید ایپس</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> ڈاؤن لوڈ ہو رہی ہے</translation>
 <translation id="4690510401873698237">شیلف نچلے حصے میں ہے</translation>
 <translation id="4696813013609194136">والدین کے کوڈ سے آلہ غیر مقفل کریں</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb
index 40e44941..88de68e 100644
--- a/ash/strings/ash_strings_uz.xtb
+++ b/ash/strings/ash_strings_uz.xtb
@@ -669,6 +669,7 @@
 <translation id="4659419629803378708">ChromeVox yoqildi</translation>
 <translation id="4665114317261903604">“Bezovta qilinmasin” tugmasi. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Kameraga ruxsat faolsizlantirilganda bu qurilmadagi barcha kameralar butunlay bloklanadi.</translation>
+<translation id="4666911709726371538">Boshqa ilovalar</translation>
 <translation id="4667099493359681081"><ph name="FILENAME" /> yuklab olinmoqda</translation>
 <translation id="4690510401873698237">Javon pastda</translation>
 <translation id="4696813013609194136">Ota-ona kodi bilan qurilmani qulfdan chiqarish</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index 5fa35608..ea5dc58 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">Đã bật ChromeVox</translation>
 <translation id="4665114317261903604">Bật/tắt chế độ Không làm phiền. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Tắt quyền truy cập vào máy ảnh trên thiết bị này để luôn chặn tất cả máy ảnh.</translation>
+<translation id="4666911709726371538">Hiện thêm ứng dụng</translation>
 <translation id="4667099493359681081">Đang tải <ph name="FILENAME" /> xuống</translation>
 <translation id="4690510401873698237">Giá ở dưới cùng</translation>
 <translation id="4696813013609194136">Mở khóa thiết bị bằng mã dành cho cha mẹ</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index 18fca17..90ed7a5 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">已启用 ChromeVox</translation>
 <translation id="4665114317261903604">开启/关闭“勿扰”模式。<ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">如果您这样做,系统便会始终禁止使用所有摄像头。</translation>
+<translation id="4666911709726371538">更多应用</translation>
 <translation id="4667099493359681081">正在下载 <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">任务栏位于屏幕底部</translation>
 <translation id="4696813013609194136">使用家长访问代码解锁设备</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb
index 93ac5928..82555be3 100644
--- a/ash/strings/ash_strings_zh-HK.xtb
+++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">更新並登出</translation>
 <translation id="1864454756846565995">USB-C 裝置 (後方連接埠)</translation>
 <translation id="1869497990620230175">快速檔案</translation>
+<translation id="1871703283152909317">啟用這兩項存取權</translation>
 <translation id="1879018240766558464">目前不支援無痕式視窗。系統將儲存其他應用程式。</translation>
 <translation id="1882814835921407042">沒有流動網絡</translation>
 <translation id="1882897271359938046">正在建立<ph name="DISPLAY_NAME" />鏡像</translation>
@@ -668,6 +669,7 @@
 <translation id="4659419629803378708">已啟用 ChromeVox</translation>
 <translation id="4665114317261903604">切換「請勿騷擾」模式。<ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">請關閉此裝置上的相機存取權,以便一律封鎖所有相機。</translation>
+<translation id="4666911709726371538">更多應用程式</translation>
 <translation id="4667099493359681081">下載緊 <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">捷徑列喺螢幕個底度</translation>
 <translation id="4696813013609194136">使用家長存取碼解鎖裝置</translation>
@@ -922,6 +924,7 @@
 <translation id="6095008505822982596">語速</translation>
 <translation id="6099678161144790572">上個月編輯過</translation>
 <translation id="6103838137565245112">系統</translation>
+<translation id="6107292179555508368">這部裝置已停用麥克風和相機的存取權</translation>
 <translation id="6114505516289286752">已下載<ph name="LANGUAGE" />語音檔案</translation>
 <translation id="6116825164611323644">此裝置的相機存取權已關閉</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />。<ph name="BATTERY_SAVER_STATE" /></translation>
@@ -950,6 +953,7 @@
 <translation id="6259254695169772643">使用觸控筆選擇</translation>
 <translation id="6267036997247669271"><ph name="NAME" />:正在啟用…</translation>
 <translation id="6274202259872570803">螢幕截圖</translation>
+<translation id="6282694724099204652">啟用這兩項存取權,允許具有權限的應用程式和網頁使用這部裝置的麥克風和相機。</translation>
 <translation id="6283712521836204486">「請勿騷擾」已關閉。</translation>
 <translation id="6284232397434400372">解像度已變更</translation>
 <translation id="6288235558961782912">您可稍後在家長許可下重新新增 <ph name="USER_EMAIL_ADDRESS" />。</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index 06da491..79338c2a 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">更新並登出</translation>
 <translation id="1864454756846565995">USB-C 裝置 (背面連接埠)</translation>
 <translation id="1869497990620230175">快速檔案</translation>
+<translation id="1871703283152909317">啟用這兩項存取權</translation>
 <translation id="1879018240766558464">目前不支援無痕式視窗。系統將儲存其他應用程式。</translation>
 <translation id="1882814835921407042">沒有行動網路</translation>
 <translation id="1882897271359938046">正在建立 <ph name="DISPLAY_NAME" /> 鏡像</translation>
@@ -667,6 +668,7 @@
 <translation id="4659419629803378708">ChromeVox 已啟用</translation>
 <translation id="4665114317261903604">切換零打擾模式。<ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">關閉這部裝置的相機存取權,一律封鎖所有相機。</translation>
+<translation id="4666911709726371538">更多應用程式</translation>
 <translation id="4667099493359681081">正在下載 <ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">在底部顯示檔案櫃</translation>
 <translation id="4696813013609194136">使用家長存取碼將裝置解鎖</translation>
@@ -922,6 +924,7 @@
 <translation id="6095008505822982596">語音速率</translation>
 <translation id="6099678161144790572">過去一個月內編輯過</translation>
 <translation id="6103838137565245112">系統</translation>
+<translation id="6107292179555508368">這部裝置已停用麥克風和相機的存取權</translation>
 <translation id="6114505516289286752">已下載<ph name="LANGUAGE" />語音檔案</translation>
 <translation id="6116825164611323644">這部裝置的相機存取權已關閉</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />。<ph name="BATTERY_SAVER_STATE" /></translation>
@@ -950,6 +953,7 @@
 <translation id="6259254695169772643">請使用觸控筆選取</translation>
 <translation id="6267036997247669271"><ph name="NAME" />:正在啟用...</translation>
 <translation id="6274202259872570803">螢幕側錄</translation>
+<translation id="6282694724099204652">啟用這兩項存取權,允許具有權限的應用程式和網頁使用這部裝置的麥克風和相機。</translation>
 <translation id="6283712521836204486">零打擾模式已關閉。</translation>
 <translation id="6284232397434400372">解析度已變更</translation>
 <translation id="6288235558961782912">取得家長同意後即可再次新增 <ph name="USER_EMAIL_ADDRESS" />。</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb
index 8266b46..3f8a3e7 100644
--- a/ash/strings/ash_strings_zu.xtb
+++ b/ash/strings/ash_strings_zu.xtb
@@ -668,6 +668,7 @@
 <translation id="4659419629803378708">I-ChromeVox inikwe amandla</translation>
 <translation id="4665114317261903604">Shintsha okuthi ungaphazamisi. <ph name="STATE_TEXT" /></translation>
 <translation id="4666082839192943839">Vala ukufinyelela ikhamera kule divayisi ukuze uvimbele wonke amakhamera ngaso sonke isikhathi.</translation>
+<translation id="4666911709726371538">Izinhlelo zokusebenza eziningi</translation>
 <translation id="4667099493359681081">Idawuniloda i-<ph name="FILENAME" /></translation>
 <translation id="4690510401873698237">Ishelufu phansi</translation>
 <translation id="4696813013609194136">Vula idivayisi ngekhodi yomzali</translation>
diff --git a/ash/system/accessibility/accessibility_detailed_view_pixeltest.cc b/ash/system/accessibility/accessibility_detailed_view_pixeltest.cc
new file mode 100644
index 0000000..7e468ccc
--- /dev/null
+++ b/ash/system/accessibility/accessibility_detailed_view_pixeltest.cc
@@ -0,0 +1,41 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/system/unified/unified_system_tray.h"
+#include "ash/system/unified/unified_system_tray_bubble.h"
+#include "ash/system/unified/unified_system_tray_controller.h"
+#include "ash/system/unified/unified_system_tray_view.h"
+#include "ash/test/ash_test_base.h"
+#include "ash/test/pixel/ash_pixel_differ.h"
+#include "ash/test/pixel/ash_pixel_test_init_params.h"
+
+namespace ash {
+
+// Pixel tests for the quick settings accessibility detailed view.
+class AccessibilityDetailedViewPixelTest : public AshTestBase {
+ public:
+  // AshTestBase:
+  absl::optional<pixel_test::InitParams> CreatePixelTestInitParams()
+      const override {
+    return pixel_test::InitParams();
+  }
+};
+
+TEST_F(AccessibilityDetailedViewPixelTest, Basics) {
+  UnifiedSystemTray* system_tray = GetPrimaryUnifiedSystemTray();
+  system_tray->ShowBubble();
+  ASSERT_TRUE(system_tray->bubble());
+
+  system_tray->bubble()
+      ->unified_system_tray_controller()
+      ->ShowAccessibilityDetailedView();
+  views::View* detailed_view =
+      system_tray->bubble()->unified_view()->detailed_view();
+  ASSERT_TRUE(detailed_view);
+
+  EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen(
+      "accessibility_detailed_view.rev_0", detailed_view));
+}
+
+}  // namespace ash
diff --git a/ash/wm/desks/desk_animation_base.cc b/ash/wm/desks/desk_animation_base.cc
index 1490d2fe..c7b2eb8 100644
--- a/ash/wm/desks/desk_animation_base.cc
+++ b/ash/wm/desks/desk_animation_base.cc
@@ -118,9 +118,7 @@
   // see an animation but expect to. If the gesture has ended, and has been
   // determined to be fast, we will start the animation to delete `this`.
   const bool skip_start_animation =
-      is_continuous_gesture_animation_ &&
-      (!features::AreDesksTrackpadSwipeImprovementsEnabled() ||
-       !did_continuous_gesture_end_fast_);
+      is_continuous_gesture_animation_ && !did_continuous_gesture_end_fast_;
   if (skip_start_animation)
     return;
 
diff --git a/ash/wm/desks/desk_animation_impl_unittest.cc b/ash/wm/desks/desk_animation_impl_unittest.cc
index 963eb94..84603c4a 100644
--- a/ash/wm/desks/desk_animation_impl_unittest.cc
+++ b/ash/wm/desks/desk_animation_impl_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "ash/wm/desks/desk_animation_impl.h"
 
-#include "ash/constants/ash_features.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/wm/desks/desks_constants.h"
 #include "ash/wm/desks/desks_controller.h"
@@ -12,7 +11,6 @@
 #include "ash/wm/desks/desks_test_util.h"
 #include "ash/wm/desks/root_window_desk_switch_animator_test_api.h"
 #include "base/barrier_closure.h"
-#include "base/test/scoped_feature_list.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/layer_animator.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
@@ -140,10 +138,6 @@
 // Tests that if a fast swipe is detected, we will still wait for the ending
 // screenshot to be taken and animated to.
 TEST_F(DeskActivationAnimationTest, AnimatingAfterFastSwipe) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(
-      features::kEnableDesksTrackpadSwipeImprovements);
-
   ui::ScopedAnimationDurationScaleMode animation_scale(
       ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
 
diff --git a/ash/wm/desks/root_window_desk_switch_animator.cc b/ash/wm/desks/root_window_desk_switch_animator.cc
index 462aba1..6ffe1047 100644
--- a/ash/wm/desks/root_window_desk_switch_animator.cc
+++ b/ash/wm/desks/root_window_desk_switch_animator.cc
@@ -336,9 +336,9 @@
   // local so we do not try to access a member of a deleted object.
   int local_ending_desk_index = -1;
 
-  // For the improvements trial, try animating to `ending_desk_index_`
-  // regardless of how much of it is visible.
-  if (is_fast_swipe && features::AreDesksTrackpadSwipeImprovementsEnabled()) {
+  // Try animating to `ending_desk_index_` regardless of how much of it is
+  // visible.
+  if (is_fast_swipe) {
     local_ending_desk_index = ending_desk_index_;
     // If the ending desk screenshot is underway, it will call
     // `StartAnimation()` when finished.
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 819db9b4..2de52a9 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -3801,6 +3801,7 @@
     sources += [
       "allocator/partition_allocator/address_pool_manager_unittest.cc",
       "allocator/partition_allocator/address_space_randomization_unittest.cc",
+      "allocator/partition_allocator/compressed_pointer_unittest.cc",
       "allocator/partition_allocator/freeslot_bitmap_unittest.cc",
       "allocator/partition_allocator/hardening_unittest.cc",
       "allocator/partition_allocator/memory_reclaimer_unittest.cc",
@@ -4235,7 +4236,6 @@
       "android/java/src/org/chromium/base/CollectionUtil.java",
       "android/java/src/org/chromium/base/CommandLine.java",
       "android/java/src/org/chromium/base/CommandLineInitUtil.java",
-      "android/java/src/org/chromium/base/Consumer.java",
       "android/java/src/org/chromium/base/ContentUriUtils.java",
       "android/java/src/org/chromium/base/ContextUtils.java",
       "android/java/src/org/chromium/base/CpuFeatures.java",
@@ -4266,7 +4266,6 @@
       "android/java/src/org/chromium/base/PiiElider.java",
       "android/java/src/org/chromium/base/PowerMonitor.java",
       "android/java/src/org/chromium/base/PowerMonitorForQ.java",
-      "android/java/src/org/chromium/base/Predicate.java",
       "android/java/src/org/chromium/base/Promise.java",
       "android/java/src/org/chromium/base/RadioUtils.java",
       "android/java/src/org/chromium/base/StreamUtil.java",
@@ -4344,7 +4343,6 @@
       "android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionFactory.java",
       "android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionImpl.java",
       "android/java/src/org/chromium/base/process_launcher/FileDescriptorInfo.java",
-      "android/java/src/org/chromium/base/supplier/BooleanSupplier.java",
       "android/java/src/org/chromium/base/supplier/DestroyableObservableSupplier.java",
       "android/java/src/org/chromium/base/supplier/ObservableSupplier.java",
       "android/java/src/org/chromium/base/supplier/ObservableSupplierImpl.java",
diff --git a/base/allocator/dispatcher/tls.h b/base/allocator/dispatcher/tls.h
index e161bcb7..1f7ba3d 100644
--- a/base/allocator/dispatcher/tls.h
+++ b/base/allocator/dispatcher/tls.h
@@ -29,7 +29,7 @@
 
 #include <pthread.h>
 
-#if defined(__has_feature) && __has_feature(thread_sanitizer)
+#if HAS_FEATURE(thread_sanitizer)
 #define DISABLE_TSAN_INSTRUMENTATION __attribute__((no_sanitize("thread")))
 #else
 #define DISABLE_TSAN_INSTRUMENTATION
diff --git a/base/allocator/partition_allocator/BUILD.gn b/base/allocator/partition_allocator/BUILD.gn
index a653b4d..290ed1a 100644
--- a/base/allocator/partition_allocator/BUILD.gn
+++ b/base/allocator/partition_allocator/BUILD.gn
@@ -58,6 +58,8 @@
     "address_space_stats.h",
     "allocation_guard.cc",
     "allocation_guard.h",
+    "compressed_pointer.cc",
+    "compressed_pointer.h",
     "dangling_raw_ptr_checks.cc",
     "dangling_raw_ptr_checks.h",
     "freeslot_bitmap.h",
@@ -420,6 +422,7 @@
     "RECORD_ALLOC_INFO=$_record_alloc_info",
     "USE_FREESLOT_BITMAP=$use_freeslot_bitmap",
     "GLUE_CORE_POOLS=$glue_core_pools",
+    "ENABLE_POINTER_COMPRESSION=$enable_pointer_compression_support",
     "ENABLE_SHADOW_METADATA_FOR_64_BITS_POINTERS=$_enable_shadow_metadata_for_64_bits_pointers",
 
     # *Scan is currently only used by Chromium.
diff --git a/base/allocator/partition_allocator/compressed_pointer.cc b/base/allocator/partition_allocator/compressed_pointer.cc
new file mode 100644
index 0000000..0350be9
--- /dev/null
+++ b/base/allocator/partition_allocator/compressed_pointer.cc
@@ -0,0 +1,28 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/allocator/partition_allocator/compressed_pointer.h"
+
+#if defined(PA_POINTER_COMPRESSION)
+
+namespace partition_alloc::internal {
+
+// We keep the useful part in |g_base_| as 1s to speed up decompression.
+alignas(kPartitionCachelineSize)
+    PA_COMPONENT_EXPORT(PARTITION_ALLOC) CompressedPointerBaseGlobal::Base
+    CompressedPointerBaseGlobal::g_base_ = {.base = kUsefulBitsMask};
+
+void CompressedPointerBaseGlobal::SetBase(uintptr_t base) {
+  PA_DCHECK(!IsSet());
+  PA_DCHECK((base & kUsefulBitsMask) == 0);
+  g_base_.base = base | kUsefulBitsMask;
+}
+
+void CompressedPointerBaseGlobal::ResetBaseForTesting() {
+  g_base_.base = kUsefulBitsMask;
+}
+
+}  // namespace partition_alloc::internal
+
+#endif  // defined(PA_POINTER_COMPRESSION)
diff --git a/base/allocator/partition_allocator/compressed_pointer.h b/base/allocator/partition_allocator/compressed_pointer.h
new file mode 100644
index 0000000..c827f84
--- /dev/null
+++ b/base/allocator/partition_allocator/compressed_pointer.h
@@ -0,0 +1,673 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_ALLOCATOR_PARTITION_ALLOCATOR_COMPRESSED_POINTER_H_
+#define BASE_ALLOCATOR_PARTITION_ALLOCATOR_COMPRESSED_POINTER_H_
+
+#include <climits>
+#include <type_traits>
+
+#include "base/allocator/partition_allocator/partition_address_space.h"
+#include "base/allocator/partition_allocator/partition_alloc_base/bits.h"
+#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h"
+#include "base/allocator/partition_allocator/partition_alloc_base/component_export.h"
+
+#if defined(PA_POINTER_COMPRESSION)
+
+#if !defined(PA_GLUE_CORE_POOLS)
+#error "Pointer compression only works with glued pools"
+#endif  //! defined(PA_GLUE_CORE_POOLS)
+#if defined(PA_DYNAMICALLY_SELECT_POOL_SIZE)
+#error "Pointer compression currently supports constant pool size"
+#endif  // defined(PA_DYNAMICALLY_SELECT_POOL_SIZE)
+
+#endif  // defined(PA_POINTER_COMPRESSION)
+
+namespace partition_alloc {
+
+namespace internal {
+
+template <typename T1, typename T2>
+constexpr bool IsDecayedSame =
+    std::is_same_v<std::decay_t<T1>, std::decay_t<T2>>;
+
+#if defined(PA_POINTER_COMPRESSION)
+
+// Pointer compression works by storing only the 'useful' 32-bit part of the
+// pointer. The other half (the base) is stored in a global variable
+// (CompressedPointerBaseGlobal::g_base_), which is used on decompression. To
+// support fast branchless decompression of nullptr, we use the most significant
+// bit in the compressed pointer to leverage sign-extension (for non-nullptr
+// pointers, the most significant bit is set, whereas for nullptr it's not).
+// Using this bit and supporting heaps larger than 4GB relies on having
+// alignment bits in pointers. Assuming that all pointers point to at least
+// 8-byte alignment objects, pointer compression can support heaps of size <=
+// 16GB.
+// ((3 alignment bits) = (1 bit for sign-extension) + (2 bits for 16GB heap)).
+//
+// Example: heap base: 0x4b0'ffffffff
+//  - g_base: 0x4b3'ffffffff (lower 34 bits set)
+//  - normal pointer: 0x4b2'a08b6480
+//    - compression:
+//      - shift right by 3:        0x96'54116c90
+//      - truncate:                   0x54116c90
+//      - mark MSB:                   0xd4116c90
+//    - decompression:
+//      - sign-extend:       0xffffffff'd4116c90
+//      - shift left by 3:   0xfffffffe'a08b6480
+//      - 'and' with g_base: 0x000004b2'a08b6480
+//
+//  - nullptr: 0x00000000'00000000
+//    - compression:
+//      - shift right by 3:  0x00000000'00000000
+//      - truncate:                   0x00000000
+//      - (don't mark MSB for nullptr)
+//    - decompression:
+//      - sign-extend:       0x00000000'00000000
+//      - shift left by 3:   0x00000000'00000000
+//      - 'and' with g_base: 0x00000000'00000000
+//
+// Pointer compression relies on having both the regular and the BRP pool (core
+// pools) 'glued', so that the same base could be used for both. For simplicity,
+// the configurations with dynamically selected pool size are not supported.
+// However, they can be at the cost of performing an extra load for
+// core-pools-shift-size on both compression and decompression.
+
+class CompressedPointerBaseGlobal final {
+ public:
+  static constexpr size_t kUsefulBits =
+      base::bits::CountTrailingZeroBits(PartitionAddressSpace::CorePoolsSize());
+  static_assert(kUsefulBits >= sizeof(uint32_t) * CHAR_BIT);
+  static constexpr size_t kBitsToShift =
+      kUsefulBits - sizeof(uint32_t) * CHAR_BIT;
+
+  CompressedPointerBaseGlobal() = delete;
+
+  // Attribute const allows the compiler to assume that
+  // CompressedPointerBaseGlobal::g_base_ doesn't change (e.g. across calls) and
+  // thereby avoid redundant loads.
+  PA_ALWAYS_INLINE __attribute__((const)) static uintptr_t Get() {
+    PA_DCHECK(IsBaseConsistent());
+    return g_base_.base;
+  }
+
+  PA_ALWAYS_INLINE static bool IsSet() {
+    PA_DCHECK(IsBaseConsistent());
+    return (g_base_.base & ~kUsefulBitsMask) != 0;
+  }
+
+ private:
+  static constexpr uintptr_t kUsefulBitsMask =
+      PartitionAddressSpace::CorePoolsSize() - 1;
+
+  static union alignas(kPartitionCachelineSize)
+      PA_COMPONENT_EXPORT(PARTITION_ALLOC) Base {
+    uintptr_t base;
+    char cache_line[kPartitionCachelineSize];
+  } g_base_ PA_CONSTINIT;
+
+  PA_ALWAYS_INLINE static bool IsBaseConsistent() {
+    return kUsefulBitsMask == (g_base_.base & kUsefulBitsMask);
+  }
+
+  static void SetBase(uintptr_t base);
+  static void ResetBaseForTesting();
+
+  friend class PartitionAddressSpace;
+};
+
+#endif  // defined(PA_POINTER_COMPRESSION)
+
+}  // namespace internal
+
+#if defined(PA_POINTER_COMPRESSION)
+
+template <typename T>
+class PA_TRIVIAL_ABI CompressedPointer final {
+ public:
+  using UnderlyingType = uint32_t;
+
+  PA_ALWAYS_INLINE constexpr CompressedPointer() = default;
+  PA_ALWAYS_INLINE CompressedPointer(T* ptr) : value_(Compress(ptr)) {}
+  PA_ALWAYS_INLINE constexpr CompressedPointer(std::nullptr_t) : value_(0u) {}
+
+  PA_ALWAYS_INLINE constexpr CompressedPointer(const CompressedPointer&) =
+      default;
+  PA_ALWAYS_INLINE constexpr CompressedPointer(
+      CompressedPointer&& other) noexcept = default;
+
+  template <typename U,
+            std::enable_if_t<std::is_convertible_v<U*, T*>>* = nullptr>
+  PA_ALWAYS_INLINE constexpr CompressedPointer(
+      const CompressedPointer<U>& other) {
+    if constexpr (internal::IsDecayedSame<T, U>) {
+      // When pointers have the same type modulo constness, avoid the
+      // compress-decompress round.
+      value_ = other.value_;
+    } else {
+      // When the types are different, perform the round, because the pointer
+      // may need to be adjusted.
+      // TODO(1376980): Avoid the cycle here.
+      value_ = Compress(other.get());
+    }
+  }
+
+  template <typename U,
+            std::enable_if_t<std::is_convertible_v<U*, T*>>* = nullptr>
+  PA_ALWAYS_INLINE constexpr CompressedPointer(
+      CompressedPointer<U>&& other) noexcept
+      : CompressedPointer(other) {}
+
+  ~CompressedPointer() = default;
+
+  PA_ALWAYS_INLINE constexpr CompressedPointer& operator=(T* ptr) {
+    value_ = Compress(ptr);
+    return *this;
+  }
+
+  PA_ALWAYS_INLINE constexpr CompressedPointer& operator=(
+      const CompressedPointer&) = default;
+  PA_ALWAYS_INLINE constexpr CompressedPointer& operator=(
+      CompressedPointer&& other) noexcept = default;
+
+  template <typename U,
+            std::enable_if_t<std::is_convertible_v<U*, T*>>* = nullptr>
+  PA_ALWAYS_INLINE constexpr CompressedPointer& operator=(
+      const CompressedPointer<U>& other) {
+    CompressedPointer copy(other);
+    value_ = copy.value_;
+    return *this;
+  }
+
+  template <typename U,
+            std::enable_if_t<std::is_convertible_v<U*, T*>>* = nullptr>
+  PA_ALWAYS_INLINE constexpr CompressedPointer& operator=(
+      CompressedPointer<U>&& other) noexcept {
+    *this = other;
+    return *this;
+  }
+
+  // Don't perform compression when assigning to nullptr.
+  PA_ALWAYS_INLINE constexpr CompressedPointer& operator=(std::nullptr_t) {
+    value_ = 0u;
+    return *this;
+  }
+
+  PA_ALWAYS_INLINE T* get() const { return Decompress(value_); }
+
+  PA_ALWAYS_INLINE constexpr bool is_nonnull() const { return value_; }
+
+  PA_ALWAYS_INLINE constexpr UnderlyingType GetAsIntegral() const {
+    return value_;
+  }
+
+  PA_ALWAYS_INLINE constexpr explicit operator bool() const {
+    return is_nonnull();
+  }
+
+  template <typename U = T,
+            std::enable_if_t<!std::is_void_v<std::remove_cv_t<U>>>* = nullptr>
+  PA_ALWAYS_INLINE U& operator*() const {
+    PA_DCHECK(is_nonnull());
+    return *get();
+  }
+
+  PA_ALWAYS_INLINE T* operator->() const {
+    PA_DCHECK(is_nonnull());
+    return get();
+  }
+
+  PA_ALWAYS_INLINE constexpr void swap(CompressedPointer& other) {
+    std::swap(value_, other.value_);
+  }
+
+ private:
+  template <typename>
+  friend class CompressedPointer;
+
+  static constexpr size_t kBitsForSignExtension = 1;
+  static constexpr size_t kOverallBitsToShift =
+      internal::CompressedPointerBaseGlobal::kBitsToShift +
+      kBitsForSignExtension;
+
+  static PA_ALWAYS_INLINE UnderlyingType Compress(T* ptr) {
+    static constexpr size_t kMinimalRequiredAlignment = 8;
+    static_assert((1 << kOverallBitsToShift) == kMinimalRequiredAlignment);
+
+#if BUILDFLAG(PA_DCHECK_IS_ON)
+    PA_DCHECK(reinterpret_cast<uintptr_t>(ptr) % kMinimalRequiredAlignment ==
+              0);
+    PA_DCHECK(internal::CompressedPointerBaseGlobal::IsSet());
+
+    const uintptr_t base = internal::CompressedPointerBaseGlobal::Get();
+    static constexpr size_t kCorePoolsBaseMask =
+        ~(internal::PartitionAddressSpace::CorePoolsSize() - 1);
+    PA_DCHECK(!ptr ||
+              (base & kCorePoolsBaseMask) ==
+                  (reinterpret_cast<uintptr_t>(ptr) & kCorePoolsBaseMask));
+#endif  // BUILDFLAG(PA_DCHECK_IS_ON)
+
+    const auto uptr = reinterpret_cast<uintptr_t>(ptr);
+    // Shift the pointer and truncate.
+    auto compressed = static_cast<UnderlyingType>(uptr >> kOverallBitsToShift);
+    // If the pointer is non-null, mark the most-significant-bit to sign-extend
+    // it on decompression. Assuming compression is a significantly less
+    // frequent operation, we let more work here in favor of faster
+    // decompression.
+    // TODO(1376980): Avoid this by overreserving the heap.
+    if (compressed)
+      compressed |= (1u << (sizeof(uint32_t) * CHAR_BIT - 1));
+
+    return compressed;
+  }
+
+  static PA_ALWAYS_INLINE T* Decompress(UnderlyingType ptr) {
+    PA_DCHECK(internal::CompressedPointerBaseGlobal::IsSet());
+    const uintptr_t base = internal::CompressedPointerBaseGlobal::Get();
+    // Treat compressed pointer as signed and cast it to uint64_t, which will
+    // sign-extend it. Then, shift the result by one. It's important to shift
+    // the already unsigned value, as otherwise it would result in undefined
+    // behavior.
+    const uint64_t mask = static_cast<uint64_t>(static_cast<int32_t>(ptr))
+                          << (kOverallBitsToShift);
+    return reinterpret_cast<T*>(mask & base);
+  }
+
+  UnderlyingType value_;
+};
+
+template <typename T>
+PA_ALWAYS_INLINE constexpr void swap(CompressedPointer<T>& a,
+                                     CompressedPointer<T>& b) {
+  a.swap(b);
+}
+
+// operators==.
+template <typename T, typename U>
+PA_ALWAYS_INLINE bool operator==(CompressedPointer<T> a,
+                                 CompressedPointer<U> b) {
+  if constexpr (internal::IsDecayedSame<T, U>) {
+    // When pointers have the same type modulo constness, simply compare
+    // compressed values.
+    return a.GetAsIntegral() == b.GetAsIntegral();
+  } else {
+    // When the types are different, compare decompressed pointers, because the
+    // pointers may need to be adjusted.
+    // TODO(1376980): Avoid decompression here.
+    return a.get() == b.get();
+  }
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator==(CompressedPointer<T> a, U* b) {
+  // Do compression, since it is less expensive.
+  return a == static_cast<CompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator==(T* a, CompressedPointer<U> b) {
+  return b == a;
+}
+
+template <typename T>
+PA_ALWAYS_INLINE constexpr bool operator==(CompressedPointer<T> a,
+                                           std::nullptr_t) {
+  return !a.is_nonnull();
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator==(std::nullptr_t,
+                                           CompressedPointer<U> b) {
+  return b == nullptr;
+}
+
+// operators!=.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator!=(CompressedPointer<T> a,
+                                           CompressedPointer<U> b) {
+  return !(a == b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator!=(CompressedPointer<T> a, U* b) {
+  // Do compression, since it is less expensive.
+  return a != static_cast<CompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator!=(T* a, CompressedPointer<U> b) {
+  return b != a;
+}
+
+template <typename T>
+PA_ALWAYS_INLINE constexpr bool operator!=(CompressedPointer<T> a,
+                                           std::nullptr_t) {
+  return a.is_nonnull();
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator!=(std::nullptr_t,
+                                           CompressedPointer<U> b) {
+  return b != nullptr;
+}
+
+// operators<.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<(CompressedPointer<T> a,
+                                          CompressedPointer<U> b) {
+  if constexpr (internal::IsDecayedSame<T, U>) {
+    // When pointers have the same type modulo constness, simply compare
+    // compressed values.
+    return a.GetAsIntegral() < b.GetAsIntegral();
+  } else {
+    // When the types are different, compare decompressed pointers, because the
+    // pointers may need to be adjusted.
+    // TODO(1376980): Avoid decompression here.
+    return a.get() < b.get();
+  }
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<(CompressedPointer<T> a, U* b) {
+  // Do compression, since it is less expensive.
+  return a < static_cast<CompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<(T* a, CompressedPointer<U> b) {
+  // Do compression, since it is less expensive.
+  return static_cast<CompressedPointer<T>>(a) < b;
+}
+
+// operators<=.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<=(CompressedPointer<T> a,
+                                           CompressedPointer<U> b) {
+  if constexpr (internal::IsDecayedSame<T, U>) {
+    // When pointers have the same type modulo constness, simply compare
+    // compressed values.
+    return a.GetAsIntegral() <= b.GetAsIntegral();
+  } else {
+    // When the types are different, compare decompressed pointers, because the
+    // pointers may need to be adjusted.
+    // TODO(1376980): Avoid decompression here.
+    return a.get() <= b.get();
+  }
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<=(CompressedPointer<T> a, U* b) {
+  // Do compression, since it is less expensive.
+  return a <= static_cast<CompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<=(T* a, CompressedPointer<U> b) {
+  // Do compression, since it is less expensive.
+  return static_cast<CompressedPointer<T>>(a) <= b;
+}
+
+// operators>.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>(CompressedPointer<T> a,
+                                          CompressedPointer<U> b) {
+  return !(a <= b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>(CompressedPointer<T> a, U* b) {
+  // Do compression, since it is less expensive.
+  return a > static_cast<CompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>(T* a, CompressedPointer<U> b) {
+  // Do compression, since it is less expensive.
+  return static_cast<CompressedPointer<T>>(a) > b;
+}
+
+// operators>=.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>=(CompressedPointer<T> a,
+                                           CompressedPointer<U> b) {
+  return !(a < b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>=(CompressedPointer<T> a, U* b) {
+  // Do compression, since it is less expensive.
+  return a >= static_cast<CompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>=(T* a, CompressedPointer<U> b) {
+  // Do compression, since it is less expensive.
+  return static_cast<CompressedPointer<T>>(a) >= b;
+}
+
+#endif  // defined(PA_POINTER_COMPRESSION)
+
+// Simple wrapper over the raw pointer.
+template <typename T>
+class PA_TRIVIAL_ABI UncompressedPointer final {
+ public:
+  PA_ALWAYS_INLINE constexpr UncompressedPointer() = default;
+  PA_ALWAYS_INLINE constexpr UncompressedPointer(T* ptr) : ptr_(ptr) {}
+
+  PA_ALWAYS_INLINE constexpr UncompressedPointer(const UncompressedPointer&) =
+      default;
+  PA_ALWAYS_INLINE constexpr UncompressedPointer(
+      UncompressedPointer&& other) noexcept = default;
+
+  template <typename U,
+            std::enable_if_t<std::is_convertible_v<U*, T*>>* = nullptr>
+  PA_ALWAYS_INLINE constexpr UncompressedPointer(
+      const UncompressedPointer<U>& other)
+      : ptr_(other.ptr_) {}
+
+  template <typename U,
+            std::enable_if_t<std::is_convertible_v<U*, T*>>* = nullptr>
+  PA_ALWAYS_INLINE constexpr UncompressedPointer(
+      UncompressedPointer<U>&& other) noexcept
+      : ptr_(std::move(other.ptr_)) {}
+
+  ~UncompressedPointer() = default;
+
+  PA_ALWAYS_INLINE constexpr UncompressedPointer& operator=(T* ptr) {
+    ptr_ = ptr;
+    return *this;
+  }
+
+  PA_ALWAYS_INLINE constexpr UncompressedPointer& operator=(
+      const UncompressedPointer&) = default;
+  PA_ALWAYS_INLINE constexpr UncompressedPointer& operator=(
+      UncompressedPointer&& other) noexcept = default;
+
+  template <typename U,
+            std::enable_if_t<std::is_convertible_v<U*, T*>>* = nullptr>
+  PA_ALWAYS_INLINE constexpr UncompressedPointer& operator=(
+      const UncompressedPointer<U>& other) {
+    ptr_ = other.ptr_;
+    return *this;
+  }
+
+  template <typename U,
+            std::enable_if_t<std::is_convertible_v<U*, T*>>* = nullptr>
+  PA_ALWAYS_INLINE constexpr UncompressedPointer& operator=(
+      UncompressedPointer<U>&& other) noexcept {
+    ptr_ = std::move(other.ptr_);
+    return *this;
+  }
+
+  PA_ALWAYS_INLINE constexpr UncompressedPointer& operator=(std::nullptr_t) {
+    ptr_ = nullptr;
+    return *this;
+  }
+
+  PA_ALWAYS_INLINE constexpr T* get() const { return ptr_; }
+
+  PA_ALWAYS_INLINE constexpr bool is_nonnull() const { return ptr_; }
+
+  PA_ALWAYS_INLINE constexpr explicit operator bool() const {
+    return is_nonnull();
+  }
+
+  template <typename U = T,
+            std::enable_if_t<!std::is_void_v<std::remove_cv_t<U>>>* = nullptr>
+  PA_ALWAYS_INLINE constexpr U& operator*() const {
+    PA_DCHECK(is_nonnull());
+    return *get();
+  }
+
+  PA_ALWAYS_INLINE constexpr T* operator->() const {
+    PA_DCHECK(is_nonnull());
+    return get();
+  }
+
+  PA_ALWAYS_INLINE constexpr void swap(UncompressedPointer& other) {
+    std::swap(ptr_, other.ptr_);
+  }
+
+ private:
+  template <typename>
+  friend class UncompressedPointer;
+
+  T* ptr_;
+};
+
+template <typename T>
+PA_ALWAYS_INLINE constexpr void swap(UncompressedPointer<T>& a,
+                                     UncompressedPointer<T>& b) {
+  a.swap(b);
+}
+
+// operators==.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator==(UncompressedPointer<T> a,
+                                           UncompressedPointer<U> b) {
+  return a.get() == b.get();
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator==(UncompressedPointer<T> a, U* b) {
+  return a == static_cast<UncompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator==(T* a, UncompressedPointer<U> b) {
+  return b == a;
+}
+
+template <typename T>
+PA_ALWAYS_INLINE constexpr bool operator==(UncompressedPointer<T> a,
+                                           std::nullptr_t) {
+  return !a.is_nonnull();
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator==(std::nullptr_t,
+                                           UncompressedPointer<U> b) {
+  return b == nullptr;
+}
+
+// operators!=.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator!=(UncompressedPointer<T> a,
+                                           UncompressedPointer<U> b) {
+  return !(a == b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator!=(UncompressedPointer<T> a, U* b) {
+  return a != static_cast<UncompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator!=(T* a, UncompressedPointer<U> b) {
+  return b != a;
+}
+
+template <typename T>
+PA_ALWAYS_INLINE constexpr bool operator!=(UncompressedPointer<T> a,
+                                           std::nullptr_t) {
+  return a.is_nonnull();
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator!=(std::nullptr_t,
+                                           UncompressedPointer<U> b) {
+  return b != nullptr;
+}
+
+// operators<.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<(UncompressedPointer<T> a,
+                                          UncompressedPointer<U> b) {
+  return a.get() < b.get();
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<(UncompressedPointer<T> a, U* b) {
+  return a < static_cast<UncompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<(T* a, UncompressedPointer<U> b) {
+  return static_cast<UncompressedPointer<T>>(a) < b;
+}
+
+// operators<=.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<=(UncompressedPointer<T> a,
+                                           UncompressedPointer<U> b) {
+  return a.get() <= b.get();
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<=(UncompressedPointer<T> a, U* b) {
+  return a <= static_cast<UncompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator<=(T* a, UncompressedPointer<U> b) {
+  return static_cast<UncompressedPointer<T>>(a) <= b;
+}
+
+// operators>.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>(UncompressedPointer<T> a,
+                                          UncompressedPointer<U> b) {
+  return !(a <= b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>(UncompressedPointer<T> a, U* b) {
+  return a > static_cast<UncompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>(T* a, UncompressedPointer<U> b) {
+  return static_cast<UncompressedPointer<T>>(a) > b;
+}
+
+// operators>=.
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>=(UncompressedPointer<T> a,
+                                           UncompressedPointer<U> b) {
+  return !(a < b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>=(UncompressedPointer<T> a, U* b) {
+  return a >= static_cast<UncompressedPointer<U>>(b);
+}
+
+template <typename T, typename U>
+PA_ALWAYS_INLINE constexpr bool operator>=(T* a, UncompressedPointer<U> b) {
+  return static_cast<UncompressedPointer<T>>(a) >= b;
+}
+
+}  // namespace partition_alloc
+
+#endif  // BASE_ALLOCATOR_PARTITION_ALLOCATOR_COMPRESSED_POINTER_H_
diff --git a/base/allocator/partition_allocator/compressed_pointer_unittest.cc b/base/allocator/partition_allocator/compressed_pointer_unittest.cc
new file mode 100644
index 0000000..6771b74
--- /dev/null
+++ b/base/allocator/partition_allocator/compressed_pointer_unittest.cc
@@ -0,0 +1,451 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/allocator/partition_allocator/compressed_pointer.h"
+
+#include "base/allocator/partition_allocator/partition_alloc.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace partition_alloc {
+
+namespace {
+
+struct Base {
+  double a;
+};
+struct Derived : Base {
+  double b;
+};
+struct Mixin {
+  double c;
+};
+struct DerivedWithMixin : Base, Mixin {
+  double d;
+};
+
+using PAAllocator = internal::PartitionAllocator<internal::ThreadSafe>;
+
+struct PADeleter final {
+  void operator()(void* ptr) const { allocator_.root()->Free(ptr); }
+  PAAllocator& allocator_;
+};
+
+template <typename T, typename... Args>
+std::unique_ptr<T, PADeleter> make_pa_unique(PAAllocator& alloc,
+                                             Args&&... args) {
+  T* result = new (alloc.root()->Alloc(sizeof(T), nullptr))
+      T(std::forward<Args>(args)...);
+  return std::unique_ptr<T, PADeleter>(result, PADeleter{alloc});
+}
+
+template <typename T>
+std::unique_ptr<T[], PADeleter> make_pa_array_unique(PAAllocator& alloc,
+                                                     size_t num) {
+  T* result = new (alloc.root()->Alloc(sizeof(T) * num, nullptr)) T();
+  return std::unique_ptr<T[], PADeleter>(result, PADeleter{alloc});
+}
+
+// Test that pointer types are trivial.
+#if defined(PA_POINTER_COMPRESSION)
+static_assert(
+    std::is_trivially_default_constructible_v<CompressedPointer<Base>>);
+static_assert(std::is_trivially_copy_constructible_v<CompressedPointer<Base>>);
+static_assert(std::is_trivially_move_constructible_v<CompressedPointer<Base>>);
+static_assert(std::is_trivially_copy_assignable_v<CompressedPointer<Base>>);
+static_assert(std::is_trivially_move_assignable_v<CompressedPointer<Base>>);
+#endif  // if defined(PA_POINTER_COMPRESSION)
+static_assert(
+    std::is_trivially_default_constructible_v<UncompressedPointer<Base>>);
+static_assert(
+    std::is_trivially_copy_constructible_v<UncompressedPointer<Base>>);
+static_assert(
+    std::is_trivially_move_constructible_v<UncompressedPointer<Base>>);
+static_assert(std::is_trivially_copy_assignable_v<UncompressedPointer<Base>>);
+static_assert(std::is_trivially_move_assignable_v<UncompressedPointer<Base>>);
+
+}  // namespace
+
+struct UncompressedTypeTag {};
+struct CompressedTypeTag {};
+
+template <typename TagType>
+class CompressedPointerTest : public ::testing::Test {
+ public:
+#if defined(PA_POINTER_COMPRESSION)
+  template <typename T>
+  using PointerType =
+      std::conditional_t<std::is_same_v<TagType, CompressedTypeTag>,
+                         CompressedPointer<T>,
+                         UncompressedPointer<T>>;
+#else
+  template <typename T>
+  using PointerType = UncompressedPointer<T>;
+#endif
+
+  CompressedPointerTest() {
+    allocator_.init({PartitionOptions::AlignedAlloc::kDisallowed,
+                     PartitionOptions::ThreadCache::kDisabled,
+                     PartitionOptions::Quarantine::kDisallowed,
+                     PartitionOptions::Cookie::kDisallowed,
+                     PartitionOptions::BackupRefPtr::kDisabled,
+                     PartitionOptions::BackupRefPtrZapping::kDisabled,
+                     PartitionOptions::UseConfigurablePool::kNo});
+  }
+
+  static void SetUpTestSuite() {
+#if defined(PA_POINTER_COMPRESSION)
+    internal::PartitionAddressSpace::Init();
+#endif  // defined(PA_POINTER_COMPRESSION)
+  }
+
+  static void TearDownTestSuite() {
+#if defined(PA_POINTER_COMPRESSION)
+    internal::PartitionAddressSpace::UninitForTesting();
+#endif  // defined(PA_POINTER_COMPRESSION)
+  }
+
+ protected:
+  internal::PartitionAllocator<internal::ThreadSafe> allocator_;
+};
+
+#if defined(PA_POINTER_COMPRESSION)
+using ObjectTypes = ::testing::Types<UncompressedTypeTag, CompressedTypeTag>;
+#else   // !defined(PA_POINTER_COMPRESSION)
+using ObjectTypes = ::testing::Types<UncompressedTypeTag>;
+#endif  // !defined(PA_POINTER_COMPRESSION)
+        //
+TYPED_TEST_SUITE(CompressedPointerTest, ObjectTypes);
+
+TYPED_TEST(CompressedPointerTest, NullConstruction) {
+  using DoublePointer = typename TestFixture::template PointerType<double>;
+  {
+    DoublePointer p = nullptr;
+    EXPECT_FALSE(p.is_nonnull());
+    EXPECT_FALSE(p.get());
+    EXPECT_EQ(p, nullptr);
+  }
+  {
+    DoublePointer p1 = nullptr;
+    DoublePointer p2 = p1;
+    EXPECT_FALSE(p2.is_nonnull());
+    EXPECT_FALSE(p2.get());
+    EXPECT_EQ(p2, nullptr);
+  }
+  {
+    DoublePointer p1 = nullptr;
+    DoublePointer p2 = std::move(p1);
+    EXPECT_FALSE(p2.is_nonnull());
+    EXPECT_FALSE(p2.get());
+    EXPECT_EQ(p2, nullptr);
+  }
+}
+
+TYPED_TEST(CompressedPointerTest, NullAssignment) {
+  using DoublePointer = typename TestFixture::template PointerType<double>;
+  {
+    DoublePointer p;
+    p = nullptr;
+    EXPECT_FALSE(p.is_nonnull());
+    EXPECT_FALSE(p.get());
+    EXPECT_EQ(p.get(), nullptr);
+    EXPECT_EQ(p, nullptr);
+  }
+  {
+    DoublePointer p1 = nullptr, p2;
+    p2 = p1;
+    EXPECT_FALSE(p2.is_nonnull());
+    EXPECT_FALSE(p2.get());
+    EXPECT_EQ(p2.get(), nullptr);
+    EXPECT_EQ(p2, nullptr);
+  }
+  {
+    DoublePointer p1 = nullptr, p2;
+    p2 = std::move(p1);
+    EXPECT_FALSE(p2.is_nonnull());
+    EXPECT_FALSE(p2.get());
+    EXPECT_EQ(p2.get(), nullptr);
+    EXPECT_EQ(p2, nullptr);
+  }
+}
+
+TYPED_TEST(CompressedPointerTest, SameTypeValueConstruction) {
+  using DoublePointer = typename TestFixture::template PointerType<double>;
+  auto d = make_pa_unique<double>(this->allocator_);
+  {
+    DoublePointer p = d.get();
+    EXPECT_TRUE(p.is_nonnull());
+    EXPECT_EQ(p.get(), d.get());
+    EXPECT_EQ(p, d.get());
+  }
+  {
+    DoublePointer p1 = d.get();
+    DoublePointer p2 = p1;
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, p1);
+    EXPECT_EQ(p2, d.get());
+  }
+  {
+    DoublePointer p1 = d.get();
+    DoublePointer p2 = std::move(p1);
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, d.get());
+  }
+}
+
+TYPED_TEST(CompressedPointerTest, SameTypeValueAssignment) {
+  using DoublePointer = typename TestFixture::template PointerType<double>;
+  auto d = make_pa_unique<double>(this->allocator_);
+  {
+    DoublePointer p;
+    p = d.get();
+    EXPECT_TRUE(p.is_nonnull());
+    EXPECT_EQ(p.get(), d.get());
+    EXPECT_EQ(p, d.get());
+  }
+  {
+    DoublePointer p1 = d.get();
+    DoublePointer p2;
+    p2 = p1;
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, p1);
+    EXPECT_EQ(p2, d.get());
+  }
+  {
+    DoublePointer p1 = d.get();
+    DoublePointer p2;
+    p2 = std::move(p1);
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, d.get());
+  }
+}
+
+TYPED_TEST(CompressedPointerTest,
+           HeterogeneousValueConstructionSamePointerValue) {
+  using BasePointer = typename TestFixture::template PointerType<Base>;
+  auto d = make_pa_unique<Derived>(this->allocator_);
+  {
+    BasePointer p = d.get();
+    EXPECT_TRUE(p.is_nonnull());
+    EXPECT_EQ(p.get(), d.get());
+  }
+  {
+    BasePointer p1 = d.get();
+    BasePointer p2 = p1;
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, p1);
+    EXPECT_EQ(p2, d.get());
+  }
+  {
+    BasePointer p1 = d.get();
+    BasePointer p2 = std::move(p1);
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, d.get());
+  }
+}
+
+TYPED_TEST(CompressedPointerTest,
+           HeterogeneousValueAssignmentSamePointerValue) {
+  using BasePointer = typename TestFixture::template PointerType<Base>;
+  auto d = make_pa_unique<Derived>(this->allocator_);
+  {
+    BasePointer p;
+    p = d.get();
+    EXPECT_TRUE(p.is_nonnull());
+    EXPECT_EQ(p.get(), d.get());
+  }
+  {
+    BasePointer p1 = d.get();
+    BasePointer p2;
+    p2 = p1;
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, p1);
+    EXPECT_EQ(p2, d.get());
+  }
+  {
+    BasePointer p1 = d.get();
+    BasePointer p2;
+    p2 = std::move(p1);
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, d.get());
+  }
+}
+
+TYPED_TEST(CompressedPointerTest,
+           HeterogeneousValueConstructionDifferentPointerValues) {
+  using MixinPointer = typename TestFixture::template PointerType<Mixin>;
+  auto d = make_pa_unique<DerivedWithMixin>(this->allocator_);
+  {
+    MixinPointer p = d.get();
+    ASSERT_NE(static_cast<void*>(p.get()), static_cast<void*>(d.get()));
+  }
+  {
+    MixinPointer p = d.get();
+    EXPECT_TRUE(p.is_nonnull());
+    EXPECT_EQ(p.get(), d.get());
+  }
+  {
+    MixinPointer p1 = d.get();
+    MixinPointer p2 = p1;
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, p1);
+    EXPECT_EQ(p2, d.get());
+  }
+  {
+    MixinPointer p1 = d.get();
+    MixinPointer p2 = std::move(p1);
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, d.get());
+  }
+}
+
+TYPED_TEST(CompressedPointerTest,
+           HeterogeneousValueAssignmentDifferentPointerValue) {
+  using MixinPointer = typename TestFixture::template PointerType<Mixin>;
+  auto d = make_pa_unique<DerivedWithMixin>(this->allocator_);
+  {
+    MixinPointer p;
+    p = d.get();
+    ASSERT_NE(static_cast<void*>(p.get()), static_cast<void*>(d.get()));
+  }
+  {
+    MixinPointer p;
+    p = d.get();
+    EXPECT_TRUE(p.is_nonnull());
+    EXPECT_EQ(p.get(), d.get());
+  }
+  {
+    MixinPointer p1 = d.get();
+    MixinPointer p2;
+    p2 = p1;
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, p1);
+    EXPECT_EQ(p2, d.get());
+  }
+  {
+    MixinPointer p1 = d.get();
+    MixinPointer p2;
+    p2 = std::move(p1);
+    EXPECT_TRUE(p2.is_nonnull());
+    EXPECT_EQ(p2.get(), d.get());
+    EXPECT_EQ(p2, d.get());
+  }
+}
+
+namespace {
+
+template <template <typename> class PointerType,
+          typename T1,
+          typename T2,
+          typename U>
+void EqualityTest(U* raw) {
+  PointerType<T1> p1 = raw;
+  PointerType<T2> p2 = raw;
+  EXPECT_EQ(p1, raw);
+  EXPECT_EQ(p2, raw);
+  EXPECT_EQ(raw, p1);
+  EXPECT_EQ(raw, p2);
+  EXPECT_EQ(p1, p2);
+}
+
+template <template <typename> class PointerType,
+          typename T1,
+          typename T2,
+          typename U>
+void CompareTest(U* array) {
+  PointerType<T1> p0 = &array[0];
+  PointerType<T2> p1 = &array[1];
+  {
+    EXPECT_NE(p0, &array[1]);
+    EXPECT_NE(p0, p1);
+    EXPECT_NE(p1, &array[0]);
+    EXPECT_NE(p1, p0);
+  }
+  {
+    EXPECT_LT(p0, &array[1]);
+    EXPECT_LT(&array[0], p1);
+    EXPECT_LT(p0, p1);
+  }
+  {
+    EXPECT_LE(p0, &array[0]);
+    EXPECT_LE(p0, &array[1]);
+    EXPECT_LE(&array[0], p0);
+
+    EXPECT_LE(&array[1], p1);
+    EXPECT_LE(p1, &array[1]);
+
+    auto p2 = p0;
+    EXPECT_LE(p0, p2);
+    EXPECT_LE(p2, p1);
+  }
+  {
+    EXPECT_GT(&array[1], p0);
+    EXPECT_GT(p1, &array[0]);
+    EXPECT_GT(p1, p0);
+  }
+  {
+    EXPECT_GE(&array[0], p0);
+    EXPECT_GE(&array[1], p0);
+    EXPECT_GE(p0, &array[0]);
+
+    EXPECT_GE(p1, &array[1]);
+    EXPECT_GE(&array[1], p1);
+
+    auto p2 = p1;
+    EXPECT_GE(p1, p2);
+    EXPECT_GE(p1, p0);
+  }
+}
+
+}  // namespace
+
+TYPED_TEST(CompressedPointerTest, EqualitySamePointerValue) {
+  auto d = make_pa_unique<Derived>(this->allocator_);
+  EqualityTest<TestFixture::template PointerType, Base, Base>(d.get());
+  EqualityTest<TestFixture::template PointerType, Base, Derived>(d.get());
+  EqualityTest<TestFixture::template PointerType, Derived, Base>(d.get());
+  EqualityTest<TestFixture::template PointerType, Derived, Derived>(d.get());
+}
+
+TYPED_TEST(CompressedPointerTest, EqualityDifferentPointerValues) {
+  auto d = make_pa_unique<DerivedWithMixin>(this->allocator_);
+  EqualityTest<TestFixture::template PointerType, Mixin, Mixin>(d.get());
+  EqualityTest<TestFixture::template PointerType, Mixin, DerivedWithMixin>(
+      d.get());
+  EqualityTest<TestFixture::template PointerType, DerivedWithMixin, Mixin>(
+      d.get());
+  EqualityTest<TestFixture::template PointerType, DerivedWithMixin,
+               DerivedWithMixin>(d.get());
+}
+
+TYPED_TEST(CompressedPointerTest, CompareSamePointerValue) {
+  auto d = make_pa_array_unique<Derived>(this->allocator_, 2);
+  CompareTest<TestFixture::template PointerType, Base, Base>(d.get());
+  CompareTest<TestFixture::template PointerType, Base, Derived>(d.get());
+  CompareTest<TestFixture::template PointerType, Derived, Base>(d.get());
+  CompareTest<TestFixture::template PointerType, Derived, Derived>(d.get());
+}
+
+TYPED_TEST(CompressedPointerTest, CompareDifferentPointerValues) {
+  auto d = make_pa_array_unique<DerivedWithMixin>(this->allocator_, 2);
+  CompareTest<TestFixture::template PointerType, Mixin, Mixin>(d.get());
+  CompareTest<TestFixture::template PointerType, Mixin, DerivedWithMixin>(
+      d.get());
+  CompareTest<TestFixture::template PointerType, DerivedWithMixin, Mixin>(
+      d.get());
+  CompareTest<TestFixture::template PointerType, DerivedWithMixin,
+              DerivedWithMixin>(d.get());
+}
+
+}  // namespace partition_alloc
diff --git a/base/allocator/partition_allocator/partition_address_space.cc b/base/allocator/partition_allocator/partition_address_space.cc
index dcaa00d..bb2cb36 100644
--- a/base/allocator/partition_allocator/partition_address_space.cc
+++ b/base/allocator/partition_allocator/partition_address_space.cc
@@ -11,6 +11,7 @@
 #include <string>
 
 #include "base/allocator/partition_allocator/address_pool_manager.h"
+#include "base/allocator/partition_allocator/compressed_pointer.h"
 #include "base/allocator/partition_allocator/page_allocator.h"
 #include "base/allocator/partition_allocator/partition_alloc_base/bits.h"
 #include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h"
@@ -310,6 +311,10 @@
   brp_pool_shadow_offset_ =
       brp_pool_shadow_address - setup_.brp_pool_base_address_;
 #endif
+
+#if defined(PA_POINTER_COMPRESSION)
+  CompressedPointerBaseGlobal::SetBase(setup_.regular_pool_base_address_);
+#endif  // defined(PA_POINTER_COMPRESSION)
 }
 
 void PartitionAddressSpace::InitConfigurablePool(uintptr_t pool_base,
@@ -398,6 +403,9 @@
   setup_.configurable_pool_base_address_ = kUninitializedPoolBaseAddress;
   setup_.configurable_pool_base_mask_ = 0;
   AddressPoolManager::GetInstance().ResetForTesting();
+#if defined(PA_POINTER_COMPRESSION)
+  CompressedPointerBaseGlobal::ResetBaseForTesting();
+#endif  // defined(PA_POINTER_COMPRESSION)
 }
 
 void PartitionAddressSpace::UninitConfigurablePoolForTesting() {
diff --git a/base/allocator/partition_allocator/partition_address_space.h b/base/allocator/partition_allocator/partition_address_space.h
index cce65f1a..5265dbab 100644
--- a/base/allocator/partition_allocator/partition_address_space.h
+++ b/base/allocator/partition_allocator/partition_address_space.h
@@ -165,6 +165,15 @@
     PA_DCHECK(ret == (IsInRegularPool(address) || IsInBRPPool(address)));
     return ret;
   }
+#if defined(PA_DYNAMICALLY_SELECT_POOL_SIZE)
+  static PA_ALWAYS_INLINE size_t CorePoolsSize() {
+    return RegularPoolSize() * 2;
+  }
+#else   // !defined(PA_DYNAMICALLY_SELECT_POOL_SIZE)
+  static PA_ALWAYS_INLINE constexpr size_t CorePoolsSize() {
+    return RegularPoolSize() * 2;
+  }
+#endif  // !defined(PA_DYNAMICALLY_SELECT_POOL_SIZE)
 #endif  // defined(PA_GLUE_CORE_POOLS)
 
   static PA_ALWAYS_INLINE uintptr_t OffsetInBRPPool(uintptr_t address) {
diff --git a/base/allocator/partition_allocator/partition_alloc.gni b/base/allocator/partition_allocator/partition_alloc.gni
index e062913a7..0032c9b 100644
--- a/base/allocator/partition_allocator/partition_alloc.gni
+++ b/base/allocator/partition_allocator/partition_alloc.gni
@@ -44,6 +44,9 @@
   # Puts the regular and BRP pools right next to each other, so that we can
   # check "belongs to one of the two pools" with a single bitmask operation.
   glue_core_pools = false
+
+  # Introduces pointer compression support in PA.
+  enable_pointer_compression_support = false
 }
 
 declare_args() {
@@ -62,6 +65,9 @@
 assert(!(enable_backup_ref_ptr_support && enable_mte_checked_ptr_support),
        "MTECheckedPtrSupport conflicts with BRPSupport.")
 
+assert(!enable_pointer_compression_support || glue_core_pools,
+       "Pointer compression relies on core pools being contiguous.")
+
 declare_args() {
   # The supported platforms are supposed to match `_is_brp_supported`, but we
   # enable the feature on Linux early because it's most widely used for security
diff --git a/base/allocator/partition_allocator/partition_alloc_config.h b/base/allocator/partition_allocator/partition_alloc_config.h
index d5976b2e..27a007c 100644
--- a/base/allocator/partition_allocator/partition_alloc_config.h
+++ b/base/allocator/partition_allocator/partition_alloc_config.h
@@ -284,4 +284,23 @@
 #define PA_ENABLE_MAC11_MALLOC_SIZE_HACK
 #endif
 
+// Enables compressed (4-byte) pointers that can point within the core pools
+// (Regular + BRP).
+#if defined(PA_HAS_64_BITS_POINTERS) && BUILDFLAG(ENABLE_POINTER_COMPRESSION)
+#define PA_POINTER_COMPRESSION
+
+#if !defined(PA_GLUE_CORE_POOLS)
+#error "Pointer compression works only with contiguous pools"
+#endif
+#if defined(PA_DYNAMICALLY_SELECT_POOL_SIZE)
+#error "Dynamically selected pool size is currently not supported"
+#endif
+#if defined(ENABLE_MTE_CHECKED_PTR_SUPPORT) || defined(PA_HAS_MEMORY_TAGGING)
+// TODO(1376980): Address MTE once it's enabled.
+#error "Compressed pointers don't support tag in the upper bits"
+#endif
+
+#endif  // defined(PA_HAS_64_BITS_POINTERS) &&
+        // BUILDFLAG(ENABLE_POINTER_COMPRESSION)
+
 #endif  // BASE_ALLOCATOR_PARTITION_ALLOCATOR_PARTITION_ALLOC_CONFIG_H_
diff --git a/base/allocator/partition_allocator/partition_alloc_constants.h b/base/allocator/partition_allocator/partition_alloc_constants.h
index 5b5e3ed..4d85521e 100644
--- a/base/allocator/partition_allocator/partition_alloc_constants.h
+++ b/base/allocator/partition_allocator/partition_alloc_constants.h
@@ -274,7 +274,11 @@
 // Special-case Android and iOS, which incur test failures with larger
 // pools. Regardless, allocating >8GiB with malloc() on these platforms is
 // unrealistic as of 2022.
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS)
+//
+// When pointer compression is enabled, we cannot use large pools (at most
+// 8GB for each of the glued pools).
+#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) || \
+    defined(PA_POINTER_COMPRESSION)
 constexpr size_t kPoolMaxSize = 8 * kGiB;
 #else
 constexpr size_t kPoolMaxSize = 16 * kGiB;
diff --git a/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java b/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java
index 12ce0e7..fa10ca95 100644
--- a/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java
+++ b/base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java
@@ -16,9 +16,7 @@
 import android.content.res.Resources;
 import android.content.res.Resources.NotFoundException;
 import android.graphics.Bitmap;
-import android.graphics.Color;
 import android.graphics.ImageDecoder;
-import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.hardware.display.DisplayManager;
 import android.net.Uri;
@@ -28,17 +26,11 @@
 import android.os.UserManager;
 import android.provider.MediaStore;
 import android.provider.Settings;
-import android.text.Html;
-import android.text.Spanned;
-import android.text.TextUtils;
 import android.view.Display;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputMethodSubtype;
 import android.view.textclassifier.TextClassifier;
-import android.widget.EditText;
 import android.widget.ImageView;
 import android.widget.TextView;
 
@@ -48,7 +40,7 @@
 import androidx.core.widget.ImageViewCompat;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -117,63 +109,15 @@
         }
     }
 
-    @RequiresApi(Build.VERSION_CODES.N)
-    private static class ApisN {
-        static String toHtml(Spanned spanned, int option) {
-            return Html.toHtml(spanned, option);
-        }
-
-        // This class is sufficiently small that it's fine if it doesn't verify for N devices.
-        @RequiresApi(Build.VERSION_CODES.N_MR1)
+    // This class is sufficiently small that it's fine if it doesn't verify for N devices.
+    @RequiresApi(Build.VERSION_CODES.N_MR1)
+    private static class ApisNMR1 {
         static boolean isDemoUser() {
             UserManager userManager =
                     (UserManager) ContextUtils.getApplicationContext().getSystemService(
                             Context.USER_SERVICE);
             return userManager.isDemoUser();
         }
-
-        static String getLocale(InputMethodSubtype inputMethodSubType) {
-            return inputMethodSubType.getLanguageTag();
-        }
-
-        static boolean isInMultiWindowMode(Activity activity) {
-            return activity.isInMultiWindowMode();
-        }
-    }
-
-    @RequiresApi(Build.VERSION_CODES.M)
-    private static class ApisM {
-        public static void setStatusBarIconColor(View rootView, boolean useDarkIcons) {
-            int systemUiVisibility = rootView.getSystemUiVisibility();
-            if (useDarkIcons) {
-                systemUiVisibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
-            } else {
-                systemUiVisibility &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
-            }
-            rootView.setSystemUiVisibility(systemUiVisibility);
-        }
-    }
-
-    private static class ApisLmr1 {
-        static void setAccessibilityTraversalBefore(View view, int viewFocusedAfter) {
-            view.setAccessibilityTraversalBefore(viewFocusedAfter);
-        }
-    }
-
-    /**
-     * Compares two long values numerically. The value returned is identical to what would be
-     * returned by {@link Long#compare(long, long)} which is available since API level 19.
-     */
-    public static int compareLong(long lhs, long rhs) {
-        return lhs < rhs ? -1 : (lhs == rhs ? 0 : 1);
-    }
-
-    /**
-     * Compares two boolean values. The value returned is identical to what would be returned by
-     * {@link Boolean#compare(boolean, boolean)} which is available since API level 19.
-     */
-    public static int compareBoolean(boolean lhs, boolean rhs) {
-        return lhs == rhs ? 0 : lhs ? 1 : -1;
     }
 
     /**
@@ -204,23 +148,7 @@
      * UnsupportedEncodingException.
      */
     public static byte[] getBytesUtf8(String str) {
-        try {
-            return str.getBytes("UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
-    /**
-     * @see android.text.Html#toHtml(Spanned, int)
-     * @param option is ignored on below N
-     */
-    @SuppressWarnings("deprecation")
-    public static String toHtml(Spanned spanned, int option) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-            return ApisN.toHtml(spanned, option);
-        }
-        return Html.toHtml(spanned);
+        return str.getBytes(StandardCharsets.UTF_8);
     }
 
     /**
@@ -245,16 +173,7 @@
      * @see android.view.Window#setStatusBarColor(int color).
      */
     public static void setStatusBarColor(Window window, int statusBarColor) {
-        // If both system bars are black, we can remove these from our layout,
-        // removing or shrinking the SurfaceFlinger overlay required for our views.
-        // This benefits battery usage on L and M.  However, this no longer provides a battery
-        // benefit as of N and starts to cause flicker bugs on O, so don't bother on O and up.
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O && statusBarColor == Color.BLACK
-                && window.getNavigationBarColor() == Color.BLACK) {
-            window.clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
-        } else {
-            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
-        }
+        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
         window.setStatusBarColor(statusBarColor);
     }
 
@@ -266,9 +185,13 @@
      * @param useDarkIcons Whether the status bar icons should be dark.
      */
     public static void setStatusBarIconColor(View rootView, boolean useDarkIcons) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-            ApisM.setStatusBarIconColor(rootView, useDarkIcons);
+        int systemUiVisibility = rootView.getSystemUiVisibility();
+        if (useDarkIcons) {
+            systemUiVisibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+        } else {
+            systemUiVisibility &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
         }
+        rootView.setSystemUiVisibility(systemUiVisibility);
     }
 
     /**
@@ -281,20 +204,7 @@
     }
 
     public static void setImageTintList(ImageView view, @Nullable ColorStateList tintList) {
-        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
-            // Work around broken workaround in ImageViewCompat, see
-            // https://crbug.com/891609#c3.
-            if (tintList != null && view.getImageTintMode() == null) {
-                view.setImageTintMode(PorterDuff.Mode.SRC_IN);
-            }
-        }
         ImageViewCompat.setImageTintList(view, tintList);
-
-        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
-            // Work around that the tint list is not cleared when setting tint list to null on L
-            // in some cases. See https://crbug.com/983686.
-            if (tintList == null) view.refreshDrawableState();
-        }
     }
 
     /**
@@ -339,7 +249,7 @@
      * @return Whether the device is running in demo mode.
      */
     public static boolean isDemoUser() {
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && ApisN.isDemoUser();
+        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && ApisNMR1.isDemoUser();
     }
 
     /**
@@ -357,25 +267,11 @@
     }
 
     /**
-     * @see android.view.inputmethod.InputMethodSubType#getLocate()
-     */
-    @SuppressWarnings("deprecation")
-    public static String getLocale(InputMethodSubtype inputMethodSubType) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-            return ApisN.getLocale(inputMethodSubType);
-        }
-        return inputMethodSubType.getLocale();
-    }
-
-    /**
      * @param activity The {@link Activity} to check.
      * @return Whether or not {@code activity} is currently in Android N+ multi-window mode.
      */
     public static boolean isInMultiWindowMode(Activity activity) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-            return ApisN.isInMultiWindowMode(activity);
-        }
-        return false;
+        return activity.isInMultiWindowMode();
     }
 
     /**
@@ -416,40 +312,6 @@
         return null;
     }
 
-    /**
-     * @see View#setAccessibilityTraversalBefore(int)
-     */
-    public static void setAccessibilityTraversalBefore(View view, int viewFocusedAfter) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
-            ApisLmr1.setAccessibilityTraversalBefore(view, viewFocusedAfter);
-        }
-    }
-
-    /**
-     * Adds a content description to the provided EditText password field on versions of Android
-     * where the hint text is not used for accessibility. Does nothing if the EditText field does
-     * not have a password input type or the hint text is empty.  See https://crbug.com/911762.
-     *
-     * @param view The EditText password field.
-     */
-    public static void setPasswordEditTextContentDescription(EditText view) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) return;
-
-        if (isPasswordInputType(view.getInputType()) && !TextUtils.isEmpty(view.getHint())) {
-            view.setContentDescription(view.getHint());
-        }
-    }
-
-    private static boolean isPasswordInputType(int inputType) {
-        final int variation =
-                inputType & (EditorInfo.TYPE_MASK_CLASS | EditorInfo.TYPE_MASK_VARIATION);
-        return variation == (EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD)
-                || variation
-                == (EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_WEB_PASSWORD)
-                || variation
-                == (EditorInfo.TYPE_CLASS_NUMBER | EditorInfo.TYPE_NUMBER_VARIATION_PASSWORD);
-    }
-
     // Access this via ContextUtils.getProcessName().
     @SuppressWarnings("PrivateApi")
     static String getProcessName() {
diff --git a/base/android/java/src/org/chromium/base/Predicate.java b/base/android/java/src/org/chromium/base/Predicate.java
deleted file mode 100644
index dc77333..0000000
--- a/base/android/java/src/org/chromium/base/Predicate.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.base;
-
-/**
- * Based on Java 8's {@link java.util.function.Predicate}.
- *
- * <p>A function that takes a single argument and returns a boolean.
- *
- * TODO(crbug.com/1034012): Remove interface once min Android API level reaches 24.
- *
- * @param <T> Function input type.
- */
-public interface Predicate<T> {
-    /**
-     * Evaluates this predicate on the given argument.
-     *
-     * @param input Predicate input argument.
-     * @return Predicate result.
-     */
-    boolean test(T input);
-}
diff --git a/base/android/java/src/org/chromium/base/supplier/BooleanSupplier.java b/base/android/java/src/org/chromium/base/supplier/BooleanSupplier.java
deleted file mode 100644
index f236efa..0000000
--- a/base/android/java/src/org/chromium/base/supplier/BooleanSupplier.java
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.base.supplier;
-
-/**
- * Based on Java 8's java.util.function.BooleanSupplier. Same as Supplier<T>, but with a primitive
- * little b boolean type. TODO(https://crbug.com/1034012): Remove once min Android API level reaches
- * 24.
- */
-public interface BooleanSupplier {
-    /** Returns a value. */
-    boolean getAsBoolean();
-}
diff --git a/base/android/trace_event_binding.h b/base/android/trace_event_binding.h
index 6e30bf8..8927fa67 100644
--- a/base/android/trace_event_binding.h
+++ b/base/android/trace_event_binding.h
@@ -10,7 +10,7 @@
 namespace internal {
 
 constexpr const char kJavaTraceCategory[] = "Java";
-constexpr const char kToplevelTraceCategory[] = "toplevel";
+constexpr const char kToplevelTraceCategory[] = "toplevel,Java";
 
 }  // namespace internal
 }  // namespace android
diff --git a/base/fuchsia/system_build_info_unittest.cc b/base/fuchsia/system_build_info_unittest.cc
index 1880615..dd7c487 100644
--- a/base/fuchsia/system_build_info_unittest.cc
+++ b/base/fuchsia/system_build_info_unittest.cc
@@ -26,7 +26,7 @@
   // All test processes have BuildInfo cached before tests are run. Re-fetch and
   // cache the BuildInfo to restore that state for any tests that are
   // subsequently run in the same process as this one.
-  FetchAndCacheSystemInfo();
+  EXPECT_TRUE(FetchAndCacheSystemInfo());
 }
 
 // TODO(crbug.com/1326674) Ensure the test passes on Fuchsia bots and
@@ -34,7 +34,7 @@
 TEST(BuildInfoTest, DISABLED_GetCachedBuildInfo_CheckExpectedValues) {
   // Ensure the cached BuildInfo is in a known state.
   ClearCachedSystemInfoForTesting();
-  FetchAndCacheSystemInfo();
+  ASSERT_TRUE(FetchAndCacheSystemInfo());
 
   // TODO(crbug.com/1326674): Check for specific values once Fuchsia
   // completes the requested changes to the data returned from the fake.
diff --git a/base/fuchsia/system_info.cc b/base/fuchsia/system_info.cc
index 7649c57..c292357 100644
--- a/base/fuchsia/system_info.cc
+++ b/base/fuchsia/system_info.cc
@@ -28,22 +28,24 @@
 
 // Synchronously fetches BuildInfo from the system and caches it for use in this
 // process.
-void FetchAndCacheBuildInfo() {
+// Returns whether the system info was successfully cached.
+bool FetchAndCacheBuildInfo() {
   DCHECK(CachedBuildInfo().IsEmpty()) << "Only call once per process";
 
   fuchsia::buildinfo::ProviderSyncPtr provider_sync;
   ComponentContextForProcess()->svc()->Connect(provider_sync.NewRequest());
 
   zx_status_t status = provider_sync->GetBuildInfo(&CachedBuildInfo());
-  ZX_CHECK(status == ZX_OK, status);
-  CHECK(!CachedBuildInfo().IsEmpty());
+  ZX_DLOG_IF(ERROR, status != ZX_OK, status);
+  DLOG_IF(ERROR, CachedBuildInfo().IsEmpty()) << "Received empty BuildInfo";
+  return status == ZX_OK && !CachedBuildInfo().IsEmpty();
 }
 
 }  // namespace
 
-void FetchAndCacheSystemInfo() {
+bool FetchAndCacheSystemInfo() {
   ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::WILL_BLOCK);
-  FetchAndCacheBuildInfo();
+  return FetchAndCacheBuildInfo();
 }
 
 const fuchsia::buildinfo::BuildInfo& GetCachedBuildInfo() {
diff --git a/base/fuchsia/system_info.h b/base/fuchsia/system_info.h
index 0ec2899..0a44fac3 100644
--- a/base/fuchsia/system_info.h
+++ b/base/fuchsia/system_info.h
@@ -19,7 +19,8 @@
 // Makes a blocking call to fetch the info from the system and caches it
 // before returning. Must be called in each process during the initialization
 // phase.
-BASE_EXPORT void FetchAndCacheSystemInfo();
+// Returns whether the system info was successfully cached.
+[[nodiscard]] BASE_EXPORT bool FetchAndCacheSystemInfo();
 
 // Returns the cached build info.
 BASE_EXPORT const fuchsia::buildinfo::BuildInfo& GetCachedBuildInfo();
diff --git a/base/functional/callback.h b/base/functional/callback.h
index c0abe4f..5c4bf00 100644
--- a/base/functional/callback.h
+++ b/base/functional/callback.h
@@ -64,26 +64,8 @@
           typename R,
           typename... UnboundArgs,
           typename... BoundArgs>
-std::conditional_t<is_once,
-                   OnceCallback<R(UnboundArgs...)>,
-                   RepeatingCallback<R(UnboundArgs...)>>
-ToDoNothingCallback(DoNothingCallbackTag::WithBoundArguments<BoundArgs...> t) {
-  return std::apply(
-      [](auto&&... args) {
-        if constexpr (is_once) {
-          return base::BindOnce(
-              [](TransformToUnwrappedType<is_once, BoundArgs>...,
-                 UnboundArgs...) {},
-              std::move(args)...);
-        } else {
-          return base::BindRepeating(
-              [](TransformToUnwrappedType<is_once, BoundArgs>...,
-                 UnboundArgs...) {},
-              std::move(args)...);
-        }
-      },
-      std::move(t.bound_args));
-}
+auto ToDoNothingCallback(
+    DoNothingCallbackTag::WithBoundArguments<BoundArgs...> t);
 
 }  // namespace internal
 
@@ -480,6 +462,35 @@
   internal::BindStateHolder holder_;
 };
 
+namespace internal {
+
+// Helper for the `DoNothingWithBoundArgs()` implementation.
+// Unlike the other helpers, this cannot be easily moved to callback_internal.h,
+// since it depends on `BindOnce()` and `BindRepeating()`.
+template <bool is_once,
+          typename R,
+          typename... UnboundArgs,
+          typename... BoundArgs>
+auto ToDoNothingCallback(
+    DoNothingCallbackTag::WithBoundArguments<BoundArgs...> t) {
+  return std::apply(
+      [](auto&&... args) {
+        if constexpr (is_once) {
+          return BindOnce([](TransformToUnwrappedType<is_once, BoundArgs>...,
+                             UnboundArgs...) {},
+                          std::move(args)...);
+        } else {
+          return BindRepeating(
+              [](TransformToUnwrappedType<is_once, BoundArgs>...,
+                 UnboundArgs...) {},
+              std::move(args)...);
+        }
+      },
+      std::move(t.bound_args));
+}
+
+}  // namespace internal
+
 }  // namespace base
 
 #endif  // BASE_FUNCTIONAL_CALLBACK_H_
diff --git a/base/ios/ios_util.h b/base/ios/ios_util.h
index a82a765..feaf7257 100644
--- a/base/ios/ios_util.h
+++ b/base/ios/ios_util.h
@@ -29,6 +29,9 @@
 // TODO(crbug.com/1227419): Remove once minimum supported version is at least 15
 BASE_EXPORT bool IsRunningOnIOS15OrLater();
 
+// Returns whether the operating system is iOS 16 or later.
+BASE_EXPORT bool IsRunningOnIOS16OrLater();
+
 // Returns whether the operating system is at the given version or later.
 BASE_EXPORT bool IsRunningOnOrLater(int32_t major,
                                     int32_t minor,
diff --git a/base/ios/ios_util.mm b/base/ios/ios_util.mm
index c13fa47..45336e24 100644
--- a/base/ios/ios_util.mm
+++ b/base/ios/ios_util.mm
@@ -41,6 +41,11 @@
   return is_running_on_or_later;
 }
 
+bool IsRunningOnIOS16OrLater() {
+  static const bool is_running_on_or_later = IsRunningOnOrLater(16, 0, 0);
+  return is_running_on_or_later;
+}
+
 bool IsRunningOnOrLater(int32_t major, int32_t minor, int32_t bug_fix) {
   static const class OSVersion {
    public:
diff --git a/base/process/current_process.cc b/base/process/current_process.cc
index 71e0843..c12d18a4 100644
--- a/base/process/current_process.cc
+++ b/base/process/current_process.cc
@@ -122,7 +122,7 @@
                         std::memory_order_relaxed);
   }
 #if BUILDFLAG(ENABLE_BASE_TRACING)
-  trace_event::TraceLog::GetInstance()->set_process_name(process_name);
+  trace_event::TraceLog::GetInstance()->OnSetProcessName(process_name);
 #endif
 }
 
diff --git a/base/process/current_process.h b/base/process/current_process.h
index c364b64..764524d 100644
--- a/base/process/current_process.h
+++ b/base/process/current_process.h
@@ -13,6 +13,12 @@
 #include "base/trace_event/base_tracing.h"
 #include "build/buildflag.h"
 
+namespace tracing {
+class TraceEventDataSource;
+class CustomEventRecorder;
+void SetProcessTrackDescriptor(int64_t process_start_timestamp);
+}  // namespace tracing
+
 namespace base {
 namespace test {
 class CurrentProcessForTest;
@@ -41,6 +47,10 @@
    private:
     TypeKey() = default;
     friend class ::base::test::CurrentProcessForTest;
+    friend class ::tracing::TraceEventDataSource;
+    friend class ::tracing::CustomEventRecorder;
+    friend void ::tracing::SetProcessTrackDescriptor(
+        int64_t process_start_timestamp);
   };
   // Returns an enum corresponding to the type of the current process (e.g.
   // browser / renderer / utility / etc). It can be used in metrics or tracing
@@ -60,6 +70,9 @@
    private:
     NameKey() = default;
     friend class ::base::test::CurrentProcessForTest;
+    friend class ::tracing::TraceEventDataSource;
+    friend void ::tracing::SetProcessTrackDescriptor(
+        int64_t process_start_timestamp);
   };
   std::string GetName(NameKey key) {
     AutoLock lock(lock_);
diff --git a/base/test/library_loader/early_native_test_helper.cc b/base/test/library_loader/early_native_test_helper.cc
index 68bb6cec..0b7c2077 100644
--- a/base/test/library_loader/early_native_test_helper.cc
+++ b/base/test/library_loader/early_native_test_helper.cc
@@ -4,6 +4,7 @@
 
 #include "base/base_javatests_jni_headers/EarlyNativeTest_jni.h"
 #include "base/command_line.h"
+#include "base/process/current_process.h"
 #include "base/trace_event/trace_log.h"
 #include "base/tracing_buildflags.h"
 
@@ -18,7 +19,7 @@
 // use things like Tracing that don't depend on content initialization.
 jboolean JNI_EarlyNativeTest_IsProcessNameEmpty(JNIEnv* env) {
 #if BUILDFLAG(ENABLE_BASE_TRACING)
-  return trace_event::TraceLog::GetInstance()->IsProcessNameEmpty();
+  return CurrentProcess::GetInstance().IsProcessNameEmpty();
 #else   // BUILDFLAG(ENABLE_BASE_TRACING)
   return false;
 #endif  // BUILDFLAG(ENABLE_BASE_TRACING)
diff --git a/base/test/test_suite.cc b/base/test/test_suite.cc
index b2ef7e2..bbc6f60 100644
--- a/base/test/test_suite.cc
+++ b/base/test/test_suite.cc
@@ -416,7 +416,7 @@
   // This must be called before Initialize() because, for example,
   // content::ContentTestSuite::Initialize() may use the cached values.
   if (client_func.empty())
-    FetchAndCacheSystemInfo();
+    CHECK(FetchAndCacheSystemInfo());
 #endif
 
   Initialize();
diff --git a/base/trace_event/trace_log.cc b/base/trace_event/trace_log.cc
index 51c0875..dd8cf86 100644
--- a/base/trace_event/trace_log.cc
+++ b/base/trace_event/trace_log.cc
@@ -2207,12 +2207,7 @@
   process_sort_index_ = sort_index;
 }
 
-void TraceLog::set_process_name(const std::string& process_name) {
-  {
-    AutoLock lock(lock_);
-    process_name_ = process_name;
-  }
-
+void TraceLog::OnSetProcessName(const std::string& process_name) {
 #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
   if (perfetto::Tracing::IsInitialized()) {
     auto track = perfetto::ProcessTrack::Current();
diff --git a/base/trace_event/trace_log.h b/base/trace_event/trace_log.h
index 4e24721..c4c448f 100644
--- a/base/trace_event/trace_log.h
+++ b/base/trace_event/trace_log.h
@@ -381,10 +381,6 @@
                         TraceEventHandle handle);
 
   ProcessId process_id() const { return process_id_; }
-  std::string process_name() const {
-    AutoLock lock(lock_);
-    return process_name_;
-  }
 
   std::unordered_map<int, std::string> process_labels() const {
     AutoLock lock(lock_);
@@ -415,13 +411,8 @@
   // on their sort index, ascending, then by their name, and then tid.
   void SetProcessSortIndex(int sort_index);
 
-  // Sets the name of the process.
-  void set_process_name(const std::string& process_name);
-
-  bool IsProcessNameEmpty() const {
-    AutoLock lock(lock_);
-    return process_name_.empty();
-  }
+  // Helper function to set process_name in base::CurrentProcess.
+  void OnSetProcessName(const std::string& process_name);
 
   // Processes can have labels in addition to their names. Use labels, for
   // instance, to list out the web page titles that a process is handling.
@@ -608,7 +599,6 @@
   std::vector<IncrementalStateObserver*> incremental_state_observers_
       GUARDED_BY(observers_lock_);
 
-  std::string process_name_;
   std::unordered_map<int, std::string> process_labels_;
   int process_sort_index_;
   std::unordered_map<PlatformThreadId, int> thread_sort_indices_;
diff --git a/build/android/pylib/local/machine/local_machine_junit_test_run.py b/build/android/pylib/local/machine/local_machine_junit_test_run.py
index a134c73..45e899048 100644
--- a/build/android/pylib/local/machine/local_machine_junit_test_run.py
+++ b/build/android/pylib/local/machine/local_machine_junit_test_run.py
@@ -61,13 +61,13 @@
   def SetUp(self):
     pass
 
-  def _GetFilterArgs(self, shard_test_filter=None):
+  def _GetFilterArgs(self, test_filter_override=None):
     ret = []
-    if shard_test_filter:
-      ret += ['-gtest-filter', ':'.join(shard_test_filter)]
-
-    for test_filter in self._test_instance.test_filters:
-      ret += ['-gtest-filter', test_filter]
+    if test_filter_override:
+      ret += ['-gtest-filter', ':'.join(test_filter_override)]
+    elif self._test_instance.test_filters:
+      for test_filter in self._test_instance.test_filters:
+        ret += ['-gtest-filter', test_filter]
 
     if self._test_instance.package_filter:
       ret += ['-package-filter', self._test_instance.package_filter]
@@ -84,8 +84,8 @@
     jar_args_list = [['-json-results-file', result_file]
                      for result_file in json_result_file_paths]
     for index, jar_arg in enumerate(jar_args_list):
-      shard_test_filter = group_test_list[index] if shards > 1 else None
-      jar_arg += self._GetFilterArgs(shard_test_filter)
+      test_filter_override = group_test_list[index] if shards > 1 else None
+      jar_arg += self._GetFilterArgs(test_filter_override)
 
     return jar_args_list
 
@@ -155,7 +155,9 @@
   def RunTests(self, results, raw_logs_fh=None):
     # This avoids searching through the classparth jars for tests classes,
     # which takes about 1-2 seconds.
-    if (self._test_instance.shards == 1
+    # Do not shard when a test filter is present since we do not know at this
+    # point which tests will be filtered out.
+    if (self._test_instance.shards == 1 or self._test_instance.test_filters
         or self._test_instance.suite in _EXCLUDED_SUITES):
       test_classes = []
       shards = 1
diff --git a/build/config/ios/BUILD.gn b/build/config/ios/BUILD.gn
index 8f7de2e..a62d046 100644
--- a/build/config/ios/BUILD.gn
+++ b/build/config/ios/BUILD.gn
@@ -275,7 +275,10 @@
     xcode_version,
   ]
 
+  # When running under ASan, the ASan runtime library must be packaged alongside
+  # the test runner binary.
+  deps = [ "//build/config/sanitizers:deps" ]
   if (use_system_xcode && (use_goma || use_remoteexec)) {
-    deps = [ ":copy_xctrunner_app" ]
+    deps += [ ":copy_xctrunner_app" ]
   }
 }
diff --git a/build/fuchsia/test/common.py b/build/fuchsia/test/common.py
index 5f35bdd..e9b57629 100644
--- a/build/fuchsia/test/common.py
+++ b/build/fuchsia/test/common.py
@@ -58,7 +58,8 @@
     status = json.loads(
         run_ffx_command(['--machine', 'json', 'daemon', 'socket'],
                         check=True,
-                        suppress_repair=True))
+                        capture_output=True,
+                        suppress_repair=True).stdout.strip())
     return status.get('pid', {}).get('status', {'NotRunning': True})
 
 
@@ -165,7 +166,6 @@
                               env=env,
                               **kwargs)
     except subprocess.CalledProcessError as cpe:
-        logging.exception(cpe)
         if suppress_repair or (cpe.output
                                and not _run_repair_command(cpe.output)):
             raise
diff --git a/build/sanitizers/lsan_suppressions.cc b/build/sanitizers/lsan_suppressions.cc
index eca63d1f..10cd761 100644
--- a/build/sanitizers/lsan_suppressions.cc
+++ b/build/sanitizers/lsan_suppressions.cc
@@ -37,6 +37,7 @@
     "leak:libnvidia-fatbinaryloader.so\n"
     "leak:libnvidia-glcore.so\n"
     "leak:libnvidia-rtcore.so\n"
+    "leak:nvidia0\n"
     "leak:nvidiactl\n"
 
     // XRandR has several one time leaks.
diff --git a/buildtools/deps_revisions.gni b/buildtools/deps_revisions.gni
index 018409e..ff047e6 100644
--- a/buildtools/deps_revisions.gni
+++ b/buildtools/deps_revisions.gni
@@ -5,5 +5,5 @@
 declare_args() {
   # Used to cause full rebuilds on libc++ rolls. This should be kept in sync
   # with the libcxx_revision vars in //DEPS.
-  libcxx_revision = "3fc0bf23fe4fcfb3e952ba9f857ef15eb2603429"
+  libcxx_revision = "81925935fdd2102dbe94aa6aadfa5203a6f11dba"
 }
diff --git a/cc/trees/proxy_main.cc b/cc/trees/proxy_main.cc
index 1792b5fc..774ea52 100644
--- a/cc/trees/proxy_main.cc
+++ b/cc/trees/proxy_main.cc
@@ -217,6 +217,14 @@
     return;
   }
 
+  // This call winds through to the LocalFrameView to mark the beginning
+  // of a main frame for metrics purposes. Some metrics are only gathered
+  // between calls to RecordStartOfFrameMetrics and RecordEndOfFrameMetrics.
+  // This is not wrapped into layer_tree_host_->WillBeginMainFrame because
+  // it should only be called from the multi-threaded proxy (we do not want
+  // metrics gathering in tests).
+  layer_tree_host_->RecordStartOfFrameMetrics();
+
   final_pipeline_stage_ =
       std::max(final_pipeline_stage_, deferred_final_pipeline_stage_);
   deferred_final_pipeline_stage_ = NO_PIPELINE_STAGE;
@@ -248,14 +256,6 @@
 
   layer_tree_host_->WillBeginMainFrame();
 
-  // This call winds through to the LocalFrameView to mark the beginning
-  // of a main frame for metrics purposes. Some metrics are only gathered
-  // between calls to RecordStartOfFrameMetrics and RecordEndOfFrameMetrics.
-  // This is not wrapped into layer_tree_host_->WillBeginMainFrame because
-  // it should only be called from the multi-threaded proxy (we do not want
-  // metrics gathering in tests).
-  layer_tree_host_->RecordStartOfFrameMetrics();
-
   // See LayerTreeHostClient::BeginMainFrame for more documentation on
   // what this does.
   layer_tree_host_->BeginMainFrame(frame_args);
diff --git a/chrome/VERSION b/chrome/VERSION
index be8e0dc0..00d4727 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=110
 MINOR=0
-BUILD=5421
+BUILD=5422
 PATCH=0
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantModuleInstallUiProviderChrome.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantModuleInstallUiProviderChrome.java
index 5bbfba1..8aa8611 100644
--- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantModuleInstallUiProviderChrome.java
+++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AssistantModuleInstallUiProviderChrome.java
@@ -6,13 +6,14 @@
 
 import android.content.Context;
 
-import org.chromium.base.Consumer;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.modules.ModuleInstallUi;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.components.autofill_assistant.AssistantModuleInstallUi;
 import org.chromium.ui.base.WindowAndroid;
 
+import java.util.function.Consumer;
+
 /**
  * Implementation of {@link AssistantModuleInstallUi.Provider} for Chrome.
  */
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb
index 9d655ed..a2a4c9a 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Jy sal 'n opletberig kry wanneer daar 'n laer prys in 'n oop oortjie is</translation>
 <translation id="3328308545011660196">Voorstel: <ph name="NUMBER_OF_TABS" /> oortjies lyk of hulle verwant is. Groepeer hulle?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Miniprent vir deelbladvoorskou.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Vou <ph name="TABS_COUNT_ONE" /> oortjie in.}other{Vou <ph name="TITLE_OF_GROUP" />-oortjiegroep met <ph name="TABS_COUNT_MANY" /> oortjies in.}}</translation>
 <translation id="3882834874697329510">Skakel kennisgewings in Instellings aan om 'n kennisgewing te kry wanneer daar 'n laer prys in 'n oop oortjie is.</translation>
 <translation id="3940195383040445971">Spoor pryse na in oortjies</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Bekyk winkelinligting; opsie beskikbaar naby bokant van die skerm</translation>
 <translation id="5558362125926932819">Maak oortjiegroep met <ph name="NUMBER_OF_TABS" /> oortjies toe</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> oortjies gegroepeer</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> skakel vanaf Chrome}other{<ph name="TABS_COUNT_MANY" /> skakels vanaf Chrome}}</translation>
 <translation id="575494663145460764">Kry opletberigte oor prysdalings?</translation>
 <translation id="58326064309361797">Sleep oortjies om hulle te groepeer</translation>
 <translation id="5846292395804797011">Maak <ph name="TITLE_OF_GROUP" />-groep met <ph name="NUMBER_OF_TABS" /> oortjies toe</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb
index 7db37b17..bb69b2a 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Primit ćete obavještenje kada bude niža cijena na otvorenoj kartici</translation>
 <translation id="3328308545011660196">Prijedlog: čini se da su neke kartice povezane (njih <ph name="NUMBER_OF_TABS" />). Grupirati ih?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" /> od <ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Minijatura za pregled lista za dijeljenje.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Sužavanje <ph name="TABS_COUNT_ONE" /> kartice.}one{Sužavanje grupe kartica <ph name="TITLE_OF_GROUP" /> s <ph name="TABS_COUNT_MANY" /> karticom.}few{Sužavanje grupe kartica <ph name="TITLE_OF_GROUP" /> s <ph name="TABS_COUNT_MANY" /> kartice.}other{Sužavanje grupe kartica <ph name="TITLE_OF_GROUP" /> s <ph name="TABS_COUNT_MANY" /> kartica.}}</translation>
 <translation id="3882834874697329510">Da dobijete obavještenje kada je niža cijena na otvorenoj kartici, uključite obavještenja u Postavkama.</translation>
 <translation id="3940195383040445971">Pratite cijene na karticama</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Prikaz informacija o trgovini. Opcija je dostupna pri vrhu ekrana</translation>
 <translation id="5558362125926932819">Zatvaranje grupe kartica sa sljedećim brojem kartica: <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="5580090775658607195">Grupisan je sljedeći broj kartica: <ph name="TAB_COUNT" /></translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> veza iz Chromea}one{<ph name="TABS_COUNT_MANY" /> veza iz Chromea}few{<ph name="TABS_COUNT_MANY" /> veze iz Chromea}other{<ph name="TABS_COUNT_MANY" /> veza iz Chromea}}</translation>
 <translation id="575494663145460764">Slati obavještenja o padu cijena?</translation>
 <translation id="58326064309361797">Prevucite kartice da ih grupišete</translation>
 <translation id="5846292395804797011">Zatvaranje grupe kartica <ph name="TITLE_OF_GROUP" /> sa sljedećim brojem kartica: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb
index feeef41f7..1af480ff 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Θα λαμβάνετε ειδοποίηση όταν υπάρχει χαμηλότερη τιμή σε μια ανοικτή καρτέλα.</translation>
 <translation id="3328308545011660196">Πρόταση: <ph name="NUMBER_OF_TABS" /> καρτέλες φαίνονται σχετικές. Να γίνει ομαδοποίηση;</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Μικρ. προεπ. φύλλου κοινής χρήσης.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Συμπτύξτε <ph name="TABS_COUNT_ONE" /> καρτέλα.}other{Συμπτύξτε την ομάδα καρτελών <ph name="TITLE_OF_GROUP" /> με τις <ph name="TABS_COUNT_MANY" /> καρτέλες.}}</translation>
 <translation id="3882834874697329510">Για να λαμβάνετε μια ειδοποίηση όταν υπάρχει χαμηλότερη τιμή σε μια ανοικτή καρτέλα, ενεργοποιήστε τις ειδοποιήσεις στις Ρυθμίσεις.</translation>
 <translation id="3940195383040445971">Παρακολούθηση τιμών σε καρτέλες</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Δείτε πληροφορίες καταστήματος, η επιλογή είναι διαθέσιμη στο επάνω μέρος της οθόνης</translation>
 <translation id="5558362125926932819">Κλείσιμο της ομάδας καρτελών με τις <ph name="NUMBER_OF_TABS" /> καρτέλες</translation>
 <translation id="5580090775658607195">Ομαδοποιήθηκαν <ph name="TAB_COUNT" /> καρτέλες</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> σύνδεσμος από το Chrome}other{<ph name="TABS_COUNT_MANY" /> σύνδεσμοι από το Chrome}}</translation>
 <translation id="575494663145460764">Θέλετε να λαμβάνετε ειδοποιήσεις για πτώσεις τιμών;</translation>
 <translation id="58326064309361797">Σύρετε καρτέλες για να τις ομαδοποιήσετε.</translation>
 <translation id="5846292395804797011">Κλείσιμο της ομάδας <ph name="TITLE_OF_GROUP" /> με τις <ph name="NUMBER_OF_TABS" /> καρτέλες</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb
index 9653df6..b830183f 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">وقتی در یکی از برگه‌های باز، قیمت کمتری وجود داشت، اعلان دریافت خواهید کرد</translation>
 <translation id="3328308545011660196">پیشنهاد: به نظر می‌رسد <ph name="NUMBER_OF_TABS" /> برگه مرتبط باشند. گروه‌بندی شوند؟</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">تصویر کوچک پیش‌نمایش برگ هم‌رسانی.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{جمع کردن <ph name="TABS_COUNT_ONE" /> برگه.}one{جمع کردن گروه برگه <ph name="TITLE_OF_GROUP" /> با <ph name="TABS_COUNT_MANY" /> برگه.}other{جمع کردن گروه برگه <ph name="TITLE_OF_GROUP" /> با <ph name="TABS_COUNT_MANY" /> برگه.}}</translation>
 <translation id="3882834874697329510">اعلان‌ها را در «تنظیمات» روشن کنید تا اگر قیمت کمتری در برگه‌ای باز وجود داشت هشدار دریافت کنید.</translation>
 <translation id="3940195383040445971">پیگیری قیمت در برگه‌ها</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">مشاهده اطلاعات فروشگاه، گزینه مربوطه در نزدیکی بالای صفحه قرار دارد</translation>
 <translation id="5558362125926932819">بستن گروه برگه با <ph name="NUMBER_OF_TABS" /> برگه</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> برگه گروه‌بندی شد</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{‏<ph name="TABS_COUNT_ONE" /> پیوند از Chrome}one{‏<ph name="TABS_COUNT_MANY" /> پیوند از Chrome}other{‏<ph name="TABS_COUNT_MANY" /> پیوند از Chrome}}</translation>
 <translation id="575494663145460764">برای کاهش قیمت‌ها اعلان دریافت شود؟</translation>
 <translation id="58326064309361797">برای گروه‌بندی برگه‌ها، آن‌ها را بکشید</translation>
 <translation id="5846292395804797011">بستن گروه <ph name="TITLE_OF_GROUP" /> با <ph name="NUMBER_OF_TABS" /> برگه</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb
index 9b282f8..797afbe8 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Makakatanggap ka ng alerto kapag may mas mababang presyo sa isang nakabukas na tab</translation>
 <translation id="3328308545011660196">Suhestyon: Mukhang magkaugnay ang <ph name="NUMBER_OF_TABS" /> (na) tab. Igrupo ang mga ito?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Thumbnail ng share sheet.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{I-collapse ang <ph name="TABS_COUNT_ONE" /> tab.}one{I-collapse ang grupo ng tab na <ph name="TITLE_OF_GROUP" /> na may <ph name="TABS_COUNT_MANY" /> tab.}other{I-collapse ang grupo ng tab na <ph name="TITLE_OF_GROUP" /> na may <ph name="TABS_COUNT_MANY" /> na tab.}}</translation>
 <translation id="3882834874697329510">Para makakuha ng alerto sa isang bukas na tab kapag may mas mababang presyo, i-on ang mga notification sa Mga Setting.</translation>
 <translation id="3940195383040445971">Subaybayan ang mga presyo sa mga tab</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Tingnan ang impormasyon ng store, available ang opsyon malapit sa itaas ng screen</translation>
 <translation id="5558362125926932819">Isara ang grupo ng tab na may <ph name="NUMBER_OF_TABS" /> (na) tab</translation>
 <translation id="5580090775658607195">Naigrupo ang <ph name="TAB_COUNT" /> tab</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link mula sa Chrome}one{<ph name="TABS_COUNT_MANY" /> link mula sa Chrome}other{<ph name="TABS_COUNT_MANY" /> na link mula sa Chrome}}</translation>
 <translation id="575494663145460764">Makatanggap ng mga alerto para sa mga pagbaba sa presyo?</translation>
 <translation id="58326064309361797">I-drag ang mga tab para pagpangkatin ang mga ito</translation>
 <translation id="5846292395804797011">Isara ang grupong <ph name="TITLE_OF_GROUP" /> na may <ph name="NUMBER_OF_TABS" /> (na) tab</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr-CA.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr-CA.xtb
index dc31a6d3..2ec18cc 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr-CA.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr-CA.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Vous recevrez une alerte si un meilleur prix est détecté dans un onglet ouvert</translation>
 <translation id="3328308545011660196">Suggestion : <ph name="NUMBER_OF_TABS" /> onglets semblent liés. Voulez-vous les regrouper?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Min. aper. feuille partage.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Réduire <ph name="TABS_COUNT_ONE" /> onglet.}one{Réduire le groupe d'onglets <ph name="TITLE_OF_GROUP" /> qui contient <ph name="TABS_COUNT_MANY" /> onglet.}other{Réduire le groupe d'onglets <ph name="TITLE_OF_GROUP" /> qui contient <ph name="TABS_COUNT_MANY" /> onglets.}}</translation>
 <translation id="3882834874697329510">Pour recevoir une alerte si un meilleur prix est détecté dans un onglet ouvert, accédez aux paramètres, puis activez les notifications.</translation>
 <translation id="3940195383040445971">Suivi des prix dans des onglets</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Afficher les renseignements sur le magasin, option accessible dans le haut de l'écran</translation>
 <translation id="5558362125926932819">Fermer le groupe d'onglets qui contient <ph name="NUMBER_OF_TABS" /> onglets</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> onglets groupés</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> lien de Chrome}one{<ph name="TABS_COUNT_MANY" /> lien de Chrome}other{<ph name="TABS_COUNT_MANY" /> liens de Chrome}}</translation>
 <translation id="575494663145460764">Recevoir des alertes pour les baisses de prix?</translation>
 <translation id="58326064309361797">Faites glisser les onglets pour les regrouper</translation>
 <translation id="5846292395804797011">Fermer le groupe <ph name="TITLE_OF_GROUP" /> qui contient <ph name="NUMBER_OF_TABS" /> onglets</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hr.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hr.xtb
index af43d98..8051104 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hr.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hr.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Kad niža cijena bude dostupna, primit ćete obavijest u otvorenoj kartici</translation>
 <translation id="3328308545011660196">Prijedlog: čini se da su neke kartice povezane (njih<ph name="NUMBER_OF_TABS" />). Želite li ih grupirati?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Minijatura za pregled lista za dijeljenje.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Sažmi <ph name="TABS_COUNT_ONE" /> karticu.}one{Sažmi grupu kartica <ph name="TITLE_OF_GROUP" /> koja sadrži <ph name="TABS_COUNT_MANY" /> karticu.}few{Sažmi grupu kartica <ph name="TITLE_OF_GROUP" /> koja sadrži <ph name="TABS_COUNT_MANY" /> kartice.}other{Sažmi grupu kartica <ph name="TITLE_OF_GROUP" /> koja sadrži <ph name="TABS_COUNT_MANY" /> kartica.}}</translation>
 <translation id="3882834874697329510">Da biste primili obavijest u otvorenoj kartici kad niža cijena bude dostupna, uključite obavijesti u postavkama.</translation>
 <translation id="3940195383040445971">Prati cijene na karticama</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Pogledajte podatke o trgovini, opciju koja je dostupna pri vrhu zaslona</translation>
 <translation id="5558362125926932819">Zatvori grupu kartica koja sadrži sljedeći broj kartica: <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="5580090775658607195">Kartice su grupirane (njih <ph name="TAB_COUNT" />)</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> veza iz Chromea}one{<ph name="TABS_COUNT_MANY" /> veza iz Chromea}few{<ph name="TABS_COUNT_MANY" /> veze iz Chromea}other{<ph name="TABS_COUNT_MANY" /> veza iz Chromea}}</translation>
 <translation id="575494663145460764">Želite li primati obavijesti o padu cijena?</translation>
 <translation id="58326064309361797">Povucite kartice da biste ih grupirali</translation>
 <translation id="5846292395804797011">Zatvori grupu <ph name="TITLE_OF_GROUP" /> koja sadrži sljedeći broj kartica: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb
index 11aefdea..1e722fb 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Je krijgt een melding als er een lagere prijs is op een geopend tabblad</translation>
 <translation id="3328308545011660196">Suggestie: <ph name="NUMBER_OF_TABS" /> tabbladen lijken gerelateerd. Wil je deze groeperen?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Thumbnail voor voorbeeld van blad delen.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> tabblad samenvouwen.}other{De tabbladgroep <ph name="TITLE_OF_GROUP" /> met <ph name="TABS_COUNT_MANY" /> tabbladen samenvouwen.}}</translation>
 <translation id="3882834874697329510">Wil je een melding krijgen als er een lagere prijs is op een geopend tabblad, zet dan meldingen aan in Instellingen.</translation>
 <translation id="3940195383040445971">Prijzen volgen op tabbladen</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Winkelinformatie bekijken, optie beschikbaar bovenaan het scherm</translation>
 <translation id="5558362125926932819">Tabbladgroep met <ph name="NUMBER_OF_TABS" /> tabbladen sluiten</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> tabbladen gegroepeerd</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link vanuit Chrome}other{<ph name="TABS_COUNT_MANY" /> links vanuit Chrome}}</translation>
 <translation id="575494663145460764">Meldingen krijgen voor prijsdalingen?</translation>
 <translation id="58326064309361797">Sleep de tabbladen om ze te groeperen</translation>
 <translation id="5846292395804797011">De groep <ph name="TITLE_OF_GROUP" /> met <ph name="NUMBER_OF_TABS" /> tabbladen sluiten</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_no.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_no.xtb
index afc705b..98e142ce 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_no.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_no.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Du blir varslet når det finnes en lavere pris på en åpen fane</translation>
 <translation id="3328308545011660196">Forslag: <ph name="NUMBER_OF_TABS" /> faner ser ut til å være relaterte. Vil du gruppere dem?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Miniatyrbilde for forhåndsvisning av delingsark</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Skjul <ph name="TABS_COUNT_ONE" /> fane.}other{Skjul <ph name="TITLE_OF_GROUP" /> fanegruppe med <ph name="TABS_COUNT_MANY" /> faner.}}</translation>
 <translation id="3882834874697329510">For å bli varslet når det finnes en lavere pris på en åpen fane, slå på varsler i Innstillinger.</translation>
 <translation id="3940195383040445971">Spor priser på faner</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Vis butikkinformasjon – alternativet er tilgjengelig nær toppen av skjermen</translation>
 <translation id="5558362125926932819">Lukk fanegruppe med <ph name="NUMBER_OF_TABS" /> faner</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> faner er gruppert.</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link fra Chrome}other{<ph name="TABS_COUNT_MANY" /> linker fra Chrome}}</translation>
 <translation id="575494663145460764">Vil du ha varsler om avslag?</translation>
 <translation id="58326064309361797">Dra faner for å gruppere dem</translation>
 <translation id="5846292395804797011">Lukk <ph name="TITLE_OF_GROUP" />-gruppen med <ph name="NUMBER_OF_TABS" /> faner</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb
index a8a1201..d01fa7a 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">ଖୋଲା ଥିବା ଏକ ଟାବରେ ମୂଲ୍ୟରେ ହ୍ରାସ ହେବାର ସୂଚନା ଉପଲବ୍ଧ ହେଲେ ଆପଣ ଏକ ଆଲର୍ଟ ପାଇବେ</translation>
 <translation id="3328308545011660196">ପରାମର୍ଶ: <ph name="NUMBER_OF_TABS" />ଟି ଟାବ୍ ସମ୍ବନ୍ଧିତ ଥିଲା ପରି ଜଣାପଡ଼ୁଛି। ସେଗୁଡ଼ିକୁ ଗ୍ରୁପ୍ କରିବେ?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">ସିଟ ପ୍ରିଭ୍ୟୁ ସେୟାର କରିବାକୁ ଥମ୍ବନେଲ।</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" />ଟି ଟାବ୍ ସଙ୍କୁଚିତ କରନ୍ତୁ।}other{<ph name="TITLE_OF_GROUP" />ଟି ଟାବ୍ ଥିବା <ph name="TABS_COUNT_MANY" /> ଟାବ୍ ଗ୍ରୁପକୁ ସଙ୍କୁଚିତ କରନ୍ତୁ।}}</translation>
 <translation id="3882834874697329510">ଖୋଲା ଥିବା ଏକ ଟାବରେ କମ୍ ମୂଲ୍ୟ ସମ୍ବନ୍ଧିତ ସୂଚନା ଉପଲବ୍ଧ ହେଲେ ଆଲର୍ଟ ପାଇବାକୁ ସେଟିଂସରେ "ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ" ଚାଲୁ କରନ୍ତୁ।</translation>
 <translation id="3940195383040445971">ଟାବଗୁଡ଼ିକରେ ମୂଲ୍ୟଗୁଡ଼ିକୁ ଟ୍ରାକ୍ କରନ୍ତୁ</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">ଷ୍ଟୋରର ସୂଚନା ଦେଖନ୍ତୁ, ସ୍କ୍ରିନର ଶୀର୍ଷଭାଗର ନିକଟରେ ବିକଳ୍ପ ଉପଲବ୍ଧ ଅଛି</translation>
 <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" />ଟି ଟାବ୍ ଥିବା ଟାବ୍ ଗ୍ରୁପକୁ ବନ୍ଦ କରନ୍ତୁ</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" />ଟି ଟାବ୍ ଏକତ୍ର କରାଯାଇଛି</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{Chromeରୁ <ph name="TABS_COUNT_ONE" />ଟି ଲିଙ୍କ}other{Chromeରୁ <ph name="TABS_COUNT_MANY" />ଟି ଲିଙ୍କ}}</translation>
 <translation id="575494663145460764">ମୂଲ୍ୟରେ ହ୍ରାସ ବିଷୟରେ ଆଲର୍ଟ ପାଇବେ?</translation>
 <translation id="58326064309361797">ସେଗୁଡ଼ିକର ଗୋଷ୍ଠୀ କରିବାକୁ ଟାବ୍‌ଗୁଡ଼ିକୁ ଟାଣନ୍ତୁ</translation>
 <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" />ଟି ଟାବ୍ ଥିବା <ph name="TITLE_OF_GROUP" /> ଗ୍ରୁପକୁ ବନ୍ଦ କରନ୍ତୁ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb
index ad68ed48..09ea7e7 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">ਖੁੱਲ੍ਹੀ ਟੈਬ ਵਿੱਚ ਕੀਮਤ ਘੱਟ ਹੋਣ 'ਤੇ ਤੁਹਾਨੂੰ ਸੁਚੇਤਨਾ ਪ੍ਰਾਪਤ ਹੋਵੇਗੀ</translation>
 <translation id="3328308545011660196">ਸੁਝਾਅ: <ph name="NUMBER_OF_TABS" /> ਟੈਬਾਂ ਸੰਬੰਧਿਤ ਲੱਗਦੀਆਂ ਹਨ। ਕੀ ਉਹਨਾਂ ਨੂੰ ਗਰੁੱਪਬੱਧ ਕਰਨਾ ਹੈ?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">'ਸਾਂਝਾ ਕਰੋ' ਸ਼ੀਟ ਦੀ ਪੂਰਵ-ਝਲਕ ਲਈ ਲਘੂ-ਚਿੱਤਰ।</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> ਟੈਬ ਨੂੰ ਸਮੇਟੋ।}one{<ph name="TABS_COUNT_MANY" /> ਟੈਬ ਵਾਲੇ <ph name="TITLE_OF_GROUP" /> ਟੈਬ ਗਰੁੱਪ ਨੂੰ ਸਮੇਟੋ।}other{<ph name="TABS_COUNT_MANY" /> ਟੈਬਾਂ ਵਾਲੇ <ph name="TITLE_OF_GROUP" /> ਟੈਬ ਗਰੁੱਪ ਨੂੰ ਸਮੇਟੋ।}}</translation>
 <translation id="3882834874697329510">ਖੁੱਲ੍ਹੀ ਟੈਬ ਵਿੱਚ ਕੀਮਤ ਘੱਟ ਹੋਣ 'ਤੇ ਸੁਚੇਤਨਾ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ, ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਸੂਚਨਾਵਾਂ ਨੂੰ ਚਾਲੂ ਕਰੋ।</translation>
 <translation id="3940195383040445971">ਟੈਬਾਂ ਵਿੱਚ ਕੀਮਤਾਂ 'ਤੇ ਨਜ਼ਰ ਰੱਖੋ</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">ਸਟੋਰ ਦੀ ਜਾਣਕਾਰੀ ਦੇਖੋ, ਇਹ ਵਿਕਲਪ ਸਕ੍ਰੀਨ ਦੇ ਸਿਖਰ ਦੇ ਨੇੜੇ ਉਪਲਬਧ ਹੈ</translation>
 <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> ਟੈਬਾਂ ਵਾਲੇ ਟੈਬ ਗਰੁੱਪ ਨੂੰ ਬੰਦ ਕਰੋ</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> ਟੈਬਾਂ ਗਰੁੱਪਬੱਧ ਕੀਤੀਆਂ ਗਈਆਂ</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{Chrome ਤੋਂ <ph name="TABS_COUNT_ONE" /> ਲਿੰਕ}one{Chrome ਤੋਂ <ph name="TABS_COUNT_MANY" /> ਲਿੰਕ}other{Chrome ਤੋਂ <ph name="TABS_COUNT_MANY" /> ਲਿੰਕ}}</translation>
 <translation id="575494663145460764">ਕੀਮਤ ਘਟਣ 'ਤੇ ਸੁਚੇਤਨਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?</translation>
 <translation id="58326064309361797">ਟੈਬਾਂ ਨੂੰ ਇਕੱਠਾ ਕਰਨ ਲਈ ਉਹਨਾਂ ਨੂੰ ਘਸੀਟੋ</translation>
 <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" /> ਟੈਬਾਂ ਵਾਲੇ <ph name="TITLE_OF_GROUP" /> ਗਰੁੱਪ ਨੂੰ ਬੰਦ ਕਰੋ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb
index bec1bf7..0d537df 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Vei primi o alertă atunci când scade prețul dintr-o filă deschisă.</translation>
 <translation id="3328308545011660196">Sugestie: <ph name="NUMBER_OF_TABS" /> file par similare. Vrei să le grupezi?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Previzualizarea trimiterii foii.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Restrânge <ph name="TABS_COUNT_ONE" /> filă.}few{Restrânge grupul de file <ph name="TITLE_OF_GROUP" /> cu <ph name="TABS_COUNT_MANY" /> file.}other{Restrânge grupul de file <ph name="TITLE_OF_GROUP" /> cu <ph name="TABS_COUNT_MANY" /> de file.}}</translation>
 <translation id="3882834874697329510">Pentru a primi o alertă atunci când scade prețul dintr-o filă deschisă, activează notificările în Setări.</translation>
 <translation id="3940195383040445971">Urmărește prețurile din file</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Vezi informații despre magazin, opțiune disponibilă în partea de sus a ecranului</translation>
 <translation id="5558362125926932819">Închide grupul de file cu <ph name="NUMBER_OF_TABS" /> file</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> file grupate</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link din Chrome}few{<ph name="TABS_COUNT_MANY" /> linkuri din Chrome}other{<ph name="TABS_COUNT_MANY" /> de linkuri din Chrome}}</translation>
 <translation id="575494663145460764">Vrei să primești alerte privind scăderile de prețuri?</translation>
 <translation id="58326064309361797">Trage filele pentru a le grupa</translation>
 <translation id="5846292395804797011">Închide grupul <ph name="TITLE_OF_GROUP" /> cu <ph name="NUMBER_OF_TABS" /> file</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb
index 5e3775d0..08b348251 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Keď bude na otvorenej karte nižšia cena, dostanete upozornenie</translation>
 <translation id="3328308545011660196">Návrh: Zdá, sa že niekoľko (<ph name="NUMBER_OF_TABS" />) kariet spolu súvisí. Chcete ich zoskupiť?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Miniat. zdieľ. ukážky tab.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Zbaliť <ph name="TABS_COUNT_ONE" /> kartu}few{Zbaliť skupinu <ph name="TITLE_OF_GROUP" /> s <ph name="TABS_COUNT_MANY" /> kartami}many{Collapse <ph name="TITLE_OF_GROUP" /> tab group with <ph name="TABS_COUNT_MANY" /> tabs.}other{Zbaliť skupinu <ph name="TITLE_OF_GROUP" /> s <ph name="TABS_COUNT_MANY" /> kartami}}</translation>
 <translation id="3882834874697329510">Ak chcete dostať upozornenie, keď sa na otvorenej karte zníži cena, zapnite upozornenia v Nastaveniach.</translation>
 <translation id="3940195383040445971">Sledovať ceny na kartách</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Zobraziť informácie o obchode, možnosť je k dispozícii v dolnej časti obrazovky</translation>
 <translation id="5558362125926932819">Zavrieť skupinu s <ph name="NUMBER_OF_TABS" /> kartami</translation>
 <translation id="5580090775658607195">Počet zoskupených kariet: <ph name="TAB_COUNT" /></translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> odkaz z Chromu}few{<ph name="TABS_COUNT_MANY" /> odkazy z Chromu}many{<ph name="TABS_COUNT_MANY" /> links from Chrome}other{<ph name="TABS_COUNT_MANY" /> odkazov z Chromu}}</translation>
 <translation id="575494663145460764">Chcete dostávať upozornenia na poklesy cien?</translation>
 <translation id="58326064309361797">Karty zoskupíte presunutím</translation>
 <translation id="5846292395804797011">Zavrieť skupinu <ph name="TITLE_OF_GROUP" /> s <ph name="NUMBER_OF_TABS" /> kartami</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb
index c6dc303d..d8db578 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">คุณจะได้รับการแจ้งเตือนเมื่อมีสินค้าราคาต่ำกว่าในแท็บที่เปิดอยู่</translation>
 <translation id="3328308545011660196">คำแนะนำ: ดูเหมือนว่ามีแท็บที่เกี่ยวข้อง <ph name="NUMBER_OF_TABS" /> แท็บ ต้องการจัดกลุ่มแท็บไหม</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">ภาพแบบย่อตัวอย่างชีตที่แชร์</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{ยุบ <ph name="TABS_COUNT_ONE" /> แท็บ}other{ยุบกลุ่มแท็บ <ph name="TITLE_OF_GROUP" /> ที่มีแท็บอยู่ <ph name="TABS_COUNT_MANY" /> แท็บ}}</translation>
 <translation id="3882834874697329510">หากต้องการรับการแจ้งเตือนเมื่อมีสินค้าราคาต่ำกว่าในแท็บที่เปิดอยู่ ให้เปิดการแจ้งเตือนในการตั้งค่า</translation>
 <translation id="3940195383040445971">ติดตามราคาในแท็บ</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">ดูข้อมูลร้านค้า ตัวเลือกจะอยู่ตรงบริเวณด้านบนของหน้าจอ</translation>
 <translation id="5558362125926932819">ปิดกลุ่มแท็บที่มีแท็บอยู่ <ph name="NUMBER_OF_TABS" /> แท็บ</translation>
 <translation id="5580090775658607195">จัดกลุ่มไว้ <ph name="TAB_COUNT" /> แท็บ</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> ลิงก์จาก Chrome}other{<ph name="TABS_COUNT_MANY" /> ลิงก์จาก Chrome}}</translation>
 <translation id="575494663145460764">รับการแจ้งเตือนการลดราคาไหม</translation>
 <translation id="58326064309361797">ลากแท็บเพื่อจัดกลุ่ม</translation>
 <translation id="5846292395804797011">เลือกกลุ่ม <ph name="TITLE_OF_GROUP" /> ที่มีแท็บอยู่ <ph name="NUMBER_OF_TABS" /> แท็บ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb
index f7d50dc6..6cc49ee 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Коли на відкритій вкладці знизиться ціна, ви отримаєте сповіщення</translation>
 <translation id="3328308545011660196">Підказка: схоже, ви відкрили кілька пов'язаних вкладок (<ph name="NUMBER_OF_TABS" />). Додати їх у групу?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Зменш. зобр. для перегляду екрана поширення.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Згорнути <ph name="TABS_COUNT_ONE" /> вкладку}one{Згорнути групу "<ph name="TITLE_OF_GROUP" />" з <ph name="TABS_COUNT_MANY" /> вкладкою}few{Згорнути групу "<ph name="TITLE_OF_GROUP" />" з <ph name="TABS_COUNT_MANY" /> вкладками}many{Згорнути групу "<ph name="TITLE_OF_GROUP" />" з <ph name="TABS_COUNT_MANY" /> вкладками}other{Згорнути групу "<ph name="TITLE_OF_GROUP" />" з <ph name="TABS_COUNT_MANY" /> вкладки}}</translation>
 <translation id="3882834874697329510">Увімкніть їх у налаштуваннях, щоб дізнаватися, коли на відкритій вкладці знижуватиметься ціна.</translation>
 <translation id="3940195383040445971">Відстежувати ціни на вкладках</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Переглянути інформацію про магазин. Опція доступна вгорі екрана.</translation>
 <translation id="5558362125926932819">Закрити групу зі стількома вкладками: <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="5580090775658607195">Згруповано стільки вкладок: <ph name="TAB_COUNT" /></translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> посилання з Chrome}one{<ph name="TABS_COUNT_MANY" /> посилання з Chrome}few{<ph name="TABS_COUNT_MANY" /> посилання з Chrome}many{<ph name="TABS_COUNT_MANY" /> посилань із Chrome}other{<ph name="TABS_COUNT_MANY" /> посилання з Chrome}}</translation>
 <translation id="575494663145460764">Хочете отримувати сповіщення про зниження цін?</translation>
 <translation id="58326064309361797">Перетягуйте вкладки, щоб групувати їх</translation>
 <translation id="5846292395804797011">Закрити групу "<ph name="TITLE_OF_GROUP" />" зі стількома вкладками: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb
index e451aad..2e1cf55 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">當開啟的分頁中有產品降價,您就會收到通知</translation>
 <translation id="3328308545011660196">建議:似乎有 <ph name="NUMBER_OF_TABS" /> 個相關嘅分頁。要唔要將佢哋分組?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">分享功能表預覽畫面縮圖。</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{收合 <ph name="TABS_COUNT_ONE" /> 個分頁。}other{收合有 <ph name="TABS_COUNT_MANY" /> 個分頁嘅「<ph name="TITLE_OF_GROUP" />」分頁群組。}}</translation>
 <translation id="3882834874697329510">如要在開啟的分頁有降價產品時收到通知,請在「設定」中啟用通知功能。</translation>
 <translation id="3940195383040445971">在分頁上追蹤價格</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">商店資料同可用選項喺螢幕最頂嘅附近</translation>
 <translation id="5558362125926932819">閂有 <ph name="NUMBER_OF_TABS" /> 個分頁嘅分頁群組</translation>
 <translation id="5580090775658607195">已將 <ph name="TAB_COUNT" /> 個分頁加入群組</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> 個來自 Chrome 的連結}other{<ph name="TABS_COUNT_MANY" /> 個來自 Chrome 的連結}}</translation>
 <translation id="575494663145460764">要接收降價快訊嗎?</translation>
 <translation id="58326064309361797">拖曳分頁來分組</translation>
 <translation id="5846292395804797011">閂有 <ph name="NUMBER_OF_TABS" /> 個分頁嘅「<ph name="TITLE_OF_GROUP" />」群組</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb
index 72ea293..2e639ff9 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">每當開啟的分頁中有降價商品,你就會收到通知</translation>
 <translation id="3328308545011660196">建議:似乎有 <ph name="NUMBER_OF_TABS" /> 個相關的分頁。要將這些分頁加入群組嗎?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">分享功能表預覽畫面縮圖。</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{收合 <ph name="TABS_COUNT_ONE" /> 個分頁。}other{收合包含 <ph name="TABS_COUNT_MANY" /> 個分頁的「<ph name="TITLE_OF_GROUP" />」分頁群組。}}</translation>
 <translation id="3882834874697329510">如要在開啟的分頁有降價商品時收到通知,請在設定中啟用通知功能。</translation>
 <translation id="3940195383040445971">在分頁上追蹤價格</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">商店資訊和可用選項位於靠近畫面頂端的地方</translation>
 <translation id="5558362125926932819">關閉包含 <ph name="NUMBER_OF_TABS" /> 個分頁的分頁群組</translation>
 <translation id="5580090775658607195">已將 <ph name="TAB_COUNT" /> 個分頁加入群組</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> 個來自 Chrome 的連結}other{<ph name="TABS_COUNT_MANY" /> 個來自 Chrome 的連結}}</translation>
 <translation id="575494663145460764">要接收降價快訊嗎?</translation>
 <translation id="58326064309361797">拖曳分頁即可進行分組</translation>
 <translation id="5846292395804797011">關閉包含 <ph name="NUMBER_OF_TABS" /> 個分頁的「<ph name="TITLE_OF_GROUP" />」群組</translation>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java
index 0cafc20..f0d594f3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java
@@ -7,7 +7,6 @@
 import android.app.Activity;
 
 import org.chromium.base.jank_tracker.JankTracker;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.browser.app.tab_activity_glue.ActivityTabWebContentsDelegateAndroid;
 import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
@@ -42,6 +41,8 @@
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * {@link TabDelegateFactory} class to be used in all {@link Tab} instances owned by a
  * {@link ChromeTabbedActivity}.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/CardEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/CardEditor.java
index 2f12a872..301a4c3e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/CardEditor.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/CardEditor.java
@@ -13,7 +13,6 @@
 
 import androidx.annotation.Nullable;
 
-import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.Callback;
 import org.chromium.base.task.AsyncTask;
 import org.chromium.base.task.BackgroundOnlyAsyncTask;
@@ -220,7 +219,7 @@
             boolean isBComplete = AutofillAddress.checkAddressCompletionStatus(
                                           b, AutofillAddress.CompletenessCheckType.NORMAL)
                     == AutofillAddress.CompletionStatus.COMPLETE;
-            return ApiCompatibilityUtils.compareBoolean(isBComplete, isAComplete);
+            return Boolean.compare(isBComplete, isAComplete);
         });
 
         mCardIssuerNetworks = new HashMap<>();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
index adffd76..0b1c01e3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
@@ -16,7 +16,6 @@
 import org.chromium.base.Callback;
 import org.chromium.base.IntentUtils;
 import org.chromium.base.jank_tracker.DummyJankTracker;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.OneShotCallback;
 import org.chromium.base.supplier.OneshotSupplierImpl;
@@ -70,6 +69,8 @@
 import org.chromium.ui.base.IntentRequestTracker;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * A {@link RootUiCoordinator} variant that controls UI for {@link BaseCustomTabActivity}.
  */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabTabPersistencePolicy.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabTabPersistencePolicy.java
index dac9955..51fdd88 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabTabPersistencePolicy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabTabPersistencePolicy.java
@@ -14,7 +14,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
-import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.ApplicationStatus;
 import org.chromium.base.Callback;
 import org.chromium.base.Log;
@@ -233,7 +232,7 @@
 
                 // Sort such that older files (those with an lower timestamp number) are at the
                 // end of the sorted listed.
-                return ApiCompatibilityUtils.compareLong(rhsModifiedTime, lhsModifiedTime);
+                return Long.compare(rhsModifiedTime, lhsModifiedTime);
             }
         });
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabTrustedCdnPublisherUrlVisibility.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabTrustedCdnPublisherUrlVisibility.java
index e8fc517..40cad05 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabTrustedCdnPublisherUrlVisibility.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabTrustedCdnPublisherUrlVisibility.java
@@ -5,7 +5,6 @@
 package org.chromium.chrome.browser.customtabs;
 
 import org.chromium.base.UnownedUserData;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
 import org.chromium.chrome.browser.lifecycle.DestroyObserver;
@@ -13,6 +12,8 @@
 import org.chromium.chrome.browser.tab.TrustedCdn.PublisherUrlVisibility;
 import org.chromium.ui.base.WindowAndroid;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * Implementation of {@link TrustedCdn.PublisherUrlVisibility} to provide Tab with
  * the availability of publisher URL of trusted CDN when attached to a custom tab activity.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsOpenTimeRecorder.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsOpenTimeRecorder.java
index c2c9f2d0..944cb66f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsOpenTimeRecorder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsOpenTimeRecorder.java
@@ -12,7 +12,6 @@
 
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.chrome.browser.browserservices.intents.BrowserServicesIntentDataProvider;
 import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController;
 import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController.FinishReason;
@@ -21,6 +20,7 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.function.BooleanSupplier;
 
 /**
  * Records how long CCTs are open and the cause of closing. The open time is logged only if CCTs
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/HiddenTabHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/HiddenTabHolder.java
index 9e01f2e..b817ac3c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/HiddenTabHolder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/HiddenTabHolder.java
@@ -19,6 +19,7 @@
 import org.chromium.base.TraceEvent;
 import org.chromium.chrome.browser.IntentHandler;
 import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingTask;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.tab.EmptyTabObserver;
 import org.chromium.chrome.browser.tab.RedirectHandlerTabHelper;
 import org.chromium.chrome.browser.tab.Tab;
@@ -31,6 +32,7 @@
 import org.chromium.network.mojom.ReferrerPolicy;
 import org.chromium.ui.base.PageTransition;
 import org.chromium.ui.base.WindowAndroid;
+import org.chromium.url.Origin;
 
 /**
  * Holds a hidden tab which may be used to preload pages before a CustomTabActivity is launched.
@@ -127,6 +129,11 @@
         if (!referrer.isEmpty()) {
             loadParams.setReferrer(new Referrer(referrer, ReferrerPolicy.DEFAULT));
         }
+        if (ChromeFeatureList.isEnabled(ChromeFeatureList.OPAQUE_ORIGIN_FOR_INCOMING_INTENTS)) {
+            // The sender of an intent can't be trusted, so we navigate from an opaque Origin to
+            // avoid sending same-site cookies.
+            loadParams.setInitiatorOrigin(Origin.createOpaqueOrigin());
+        }
 
         loadParams.setTransitionType(PageTransition.LINK | PageTransition.FROM_API);
         RedirectHandlerTabHelper.getOrCreateHandlerFor(tab).setIsPrefetchLoadForIntent(true);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHandleStrategy.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHandleStrategy.java
index 37f3fcb..6e6d757 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHandleStrategy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHandleStrategy.java
@@ -12,12 +12,13 @@
 import androidx.core.view.MotionEventCompat;
 
 import org.chromium.base.ThreadUtils;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.browser.customtabs.PartialCustomTabHeightStrategy.HeightStatus;
 import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbar;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * Handling touch events for resizing the Window.
  */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java
index 04ea794f..f06dba0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java
@@ -124,7 +124,7 @@
 
     private @Px int mDisplayHeight;
     private @Px int mFullyExpandedAdjustmentHeight;
-    private ValueAnimator mAnimator;
+    private TabAnimator mTabAnimator;
     private int mShadowOffset;
     private boolean mDrawOutlineShadow;
 
@@ -137,7 +137,6 @@
     private ViewGroup mCoordinatorLayout;
 
     private @HeightStatus int mStatus = HeightStatus.INITIAL_HEIGHT;
-    private @HeightStatus int mTargetStatus;
 
     // Bottom navigation bar height. Set to zero when the bar is positioned on the right side
     // in landcape mode.
@@ -163,21 +162,24 @@
     @Nullable
     private Runnable mFinishRunnable;
 
-    // Y offset when a dragging gesture starts.
-    private int mDraggingStartY;
+    // Y offset when a dragging gesture/animation starts.
+    private int mMoveStartY;
     private float mOffsetY;
 
     // These values are persisted to logs. Entries should not be renumbered and
     // numeric values should never be reused.
-    // This should be kept in sync with the definition |CustomTabsResizeType|
+    // This should be kept in sync with the definition |CustomTabsResizeType2|
     // in tools/metrics/histograms/enums.xml.
-    @IntDef({ResizeType.EXPANSION, ResizeType.MINIMIZATION, ResizeType.COUNT})
+    @IntDef({ResizeType.MANUAL_EXPANSION, ResizeType.MANUAL_MINIMIZATION, ResizeType.AUTO_EXPANSION,
+            ResizeType.AUTO_MINIMIZATION, ResizeType.COUNT})
     @Retention(RetentionPolicy.SOURCE)
     @VisibleForTesting
     @interface ResizeType {
-        int EXPANSION = 0;
-        int MINIMIZATION = 1;
-        int COUNT = 2;
+        int MANUAL_EXPANSION = 0;
+        int MANUAL_MINIMIZATION = 1;
+        int AUTO_EXPANSION = 2;
+        int AUTO_MINIMIZATION = 3;
+        int COUNT = 4;
     }
 
     /** A callback to be called once the Custom Tab has been resized. */
@@ -214,23 +216,8 @@
         mOnResizedCallback = onResizedCallback;
         mFullscreenManager = fullscreenManager;
 
-        mAnimator = new ValueAnimator();
-        mAnimator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                mStatus = HeightStatus.TRANSITION;
-            }
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mStatus = mTargetStatus;
-                onMoveEnd();
-            }
-        });
-        mAnimator.addUpdateListener(this);
-        mAnimator.setInterpolator(new AccelerateInterpolator());
-        mAnimator.setDuration(
-                mActivity.getResources().getInteger(android.R.integer.config_mediumAnimTime));
-
+        int animTime = mActivity.getResources().getInteger(android.R.integer.config_mediumAnimTime);
+        mTabAnimator = new TabAnimator(this, animTime, this::onMoveEnd);
         lifecycleDispatcher.register(this);
 
         mOrientation = mActivity.getResources().getConfiguration().orientation;
@@ -279,10 +266,16 @@
             return;
         }
         mSoftKeyboardRunnable = softKeyboardRunnable;
-        animateTabTo(HeightStatus.TOP);
+        animateTabTo(HeightStatus.TOP, /*autoResize=*/true);
     }
 
-    private void animateTabTo(int targetStatus) {
+    /**
+     * Animates the tab to the position associated with the target status.
+     * @param targetStatus Target height status to animate to.
+     * @param autoResize {@code true} if the animation starts not by user gesture dragging
+     *        the tab but by other UI actions such as soft keyboard display/find-in-page command.
+     */
+    private void animateTabTo(int targetStatus, boolean autoResize) {
         // Tab cannot be animated to top/initial when running in full height.
         assert !(isFullHeight()
                 && (targetStatus == HeightStatus.TOP
@@ -292,7 +285,6 @@
         window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
         WindowManager.LayoutParams attrs = window.getAttributes();
 
-        int start = attrs.y;
         int end;
         switch (targetStatus) {
             case HeightStatus.TOP:
@@ -319,9 +311,9 @@
                 assert false : "Target status should be either top or initial height";
         }
 
-        mTargetStatus = targetStatus;
-        mAnimator.setIntValues(start, end);
-        mAnimator.start();
+        mStatus = HeightStatus.TRANSITION;
+        if (autoResize) mMoveStartY = window.getAttributes().y;
+        mTabAnimator.start(attrs.y, end, targetStatus, autoResize);
     }
 
     private void updatePosition() {
@@ -468,7 +460,7 @@
         // We get zero search results if the content view is entirely hidden by the soft keyboard,
         // which can happen if the tab is at initial height. Expand it.
         if (mStatus == HeightStatus.INITIAL_HEIGHT) {
-            animateTabTo(HeightStatus.TOP);
+            animateTabTo(HeightStatus.TOP, /*autoResize=*/true);
             mRestoreAfterFindPage = true;
         }
     }
@@ -480,7 +472,7 @@
 
         if (isFullHeight()) return;
         if (mRestoreAfterFindPage) {
-            animateTabTo(HeightStatus.INITIAL_HEIGHT);
+            animateTabTo(HeightStatus.INITIAL_HEIGHT, /*autoResize=*/true);
             mRestoreAfterFindPage = false;
         }
     }
@@ -640,7 +632,7 @@
         // Show the spinner lazily, only when the tab is dragged _up_, which requires showing
         // more area than initial state.
         if (!mStopShowingSpinner && mStatus != HeightStatus.TRANSITION && !isSpinnerVisible()
-                && y < mDraggingStartY) {
+                && y < mMoveStartY) {
             showSpinnerView();
             // We do not have to keep the spinner till the end of dragging action, since it doesn't
             // have the flickering issue at the end. Keeping it visible up to 500ms is sufficient to
@@ -669,29 +661,40 @@
     }
 
     private void onMoveEnd() {
+        mStatus = mTabAnimator.getTargetStatus();
         if (mFinishRunnable != null) {
             mFinishRunnable.run();
             return;
         }
 
-        int draggingEndY = mActivity.getWindow().getAttributes().y;
-        if (mDraggingStartY >= 0 && mDraggingStartY != draggingEndY) {
-            RecordHistogram.recordEnumeratedHistogram("CustomTabs.ResizeType",
-                    mDraggingStartY < draggingEndY ? ResizeType.MINIMIZATION : ResizeType.EXPANSION,
-                    ResizeType.COUNT);
+        int moveEndY = mActivity.getWindow().getAttributes().y;
+        int targetStatus = mTabAnimator.getTargetStatus();
+        if (mMoveStartY >= 0 && mMoveStartY != moveEndY
+                && (targetStatus == HeightStatus.TOP
+                        || targetStatus == HeightStatus.INITIAL_HEIGHT)) {
+            int resizeType;
+            if (mTabAnimator.wasAutoResized()) {
+                resizeType = targetStatus == HeightStatus.TOP ? ResizeType.AUTO_EXPANSION
+                                                              : ResizeType.AUTO_MINIMIZATION;
+            } else {
+                resizeType = targetStatus == HeightStatus.TOP ? ResizeType.MANUAL_EXPANSION
+                                                              : ResizeType.MANUAL_MINIMIZATION;
+            }
+            RecordHistogram.recordEnumeratedHistogram(
+                    "CustomTabs.ResizeType2", resizeType, ResizeType.COUNT);
         }
 
         hideSpinnerView();
         showNavbarButtons(true);
         if (mAlwaysShowNavbarButtons) {
-            finishResizing();
+            finishResizing(mStatus);
         } else {
             // Give a small delay in restoring the window to avoid the flashing artifact
             // at the navigation bar area.
-            new Handler().postDelayed(this::finishResizing, NAVBAR_BUTTON_RESTORE_DELAY_MS);
+            new Handler().postDelayed(
+                    () -> finishResizing(mStatus), NAVBAR_BUTTON_RESTORE_DELAY_MS);
 
             // Temporarily disables user input until the window is restored.
-            mTargetStatus = mStatus;
             mStatus = HeightStatus.TRANSITION;
         }
         updateShadowOffset();
@@ -701,12 +704,12 @@
         }
     }
 
-    private void finishResizing() {
+    private void finishResizing(int targetStatus) {
         Window window = mActivity.getWindow();
         window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
         positionAtHeight(mDisplayHeight - window.getAttributes().y);
         maybeInvokeResizeCallback();
-        mStatus = mTargetStatus;
+        mStatus = targetStatus;
         if (mFinishRunnable != null) {
             Runnable oldFinishRunnable = mFinishRunnable;
             mFinishRunnable = null;
@@ -848,7 +851,7 @@
         // begins when it detects the presence of |mFinishRunnable|.
         if (mStatus == HeightStatus.TRANSITION) return;
 
-        animateTabTo(HeightStatus.CLOSE);
+        animateTabTo(HeightStatus.CLOSE, /*autoResize=*/true);
     }
 
     // DragEventCallback implementation
@@ -857,8 +860,8 @@
     public void onDragStart(int y) {
         onMoveStart();
         Window window = mActivity.getWindow();
-        mDraggingStartY = window.getAttributes().y;
-        mOffsetY = mDraggingStartY - y;
+        mMoveStartY = window.getAttributes().y;
+        mOffsetY = mMoveStartY - y;
         mStopShowingSpinner = false;
     }
 
@@ -878,14 +881,15 @@
         if (finalY < initialY) { // Move up
             animateTabTo(Math.abs(topY - finalY) < Math.abs(finalY - initialY)
                             ? HeightStatus.TOP
-                            : HeightStatus.INITIAL_HEIGHT);
+                            : HeightStatus.INITIAL_HEIGHT,
+                    /*autoResize=*/false);
             return true;
         } else { // Move down
             // Prevents skipping initial state when swiping from the top.
             if (mStatus == HeightStatus.TOP) finalY = Math.min(initialY, finalY);
 
             if (Math.abs(initialY - finalY) < Math.abs(finalY - bottomY)) {
-                animateTabTo(HeightStatus.INITIAL_HEIGHT);
+                animateTabTo(HeightStatus.INITIAL_HEIGHT, /*autoResize=*/false);
                 return true;
             }
         }
@@ -970,6 +974,45 @@
         public void onCancelled(WindowInsetsAnimationControllerCompat controller) {}
     }
 
+    // Wrapper around Animator class, also holding the information to use after the animation ends.
+    private static class TabAnimator {
+        private final ValueAnimator mAnimator;
+        private @HeightStatus int mTargetStatus;
+        private boolean mAutoResize;
+
+        private TabAnimator(ValueAnimator.AnimatorUpdateListener listener, int animTime,
+                Runnable finishRunnable) {
+            mAnimator = new ValueAnimator();
+            mAnimator.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationStart(Animator animation) {}
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    finishRunnable.run();
+                }
+            });
+            mAnimator.addUpdateListener(listener);
+            mAnimator.setInterpolator(new AccelerateInterpolator());
+            mAnimator.setDuration(animTime);
+        }
+
+        private void start(int startY, int endY, int targetStatus, boolean autoResize) {
+            mTargetStatus = targetStatus;
+            mAutoResize = autoResize;
+            mAnimator.setIntValues(startY, endY);
+            mAnimator.start();
+        }
+
+        @HeightStatus
+        private int getTargetStatus() {
+            return mTargetStatus;
+        }
+
+        private boolean wasAutoResized() {
+            return mAutoResize;
+        }
+    }
+
     @VisibleForTesting
     static void setHasLoggedImmersiveModeConfirmationSettingForTesting(boolean value) {
         sHasLoggedImmersiveModeConfirmationSetting = value;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityNavigationController.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityNavigationController.java
index 80e2fa8a..efdb6bf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityNavigationController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityNavigationController.java
@@ -32,6 +32,7 @@
 import org.chromium.chrome.browser.customtabs.CustomTabsConnection;
 import org.chromium.chrome.browser.dependency_injection.ActivityScope;
 import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
 import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
 import org.chromium.chrome.browser.lifecycle.StartStopWithNativeObserver;
@@ -45,6 +46,7 @@
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.ui.base.PageTransition;
 import org.chromium.url.GURL;
+import org.chromium.url.Origin;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -201,6 +203,12 @@
         params.setTransitionType(IntentHandler.getTransitionTypeFromIntent(
                 mIntentDataProvider.getIntent(), transition));
 
+        if (ChromeFeatureList.isEnabled(ChromeFeatureList.OPAQUE_ORIGIN_FOR_INCOMING_INTENTS)) {
+            // The sender of an intent can't be trusted, so we navigate from an opaque Origin to
+            // avoid sending same-site cookies.
+            params.setInitiatorOrigin(Origin.createOpaqueOrigin());
+        }
+
         tab.loadUrl(params);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/RealtimeEngagementSignalObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/RealtimeEngagementSignalObserver.java
index 11e94ba0..6751d2d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/RealtimeEngagementSignalObserver.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/RealtimeEngagementSignalObserver.java
@@ -256,7 +256,9 @@
         int mMaxReportedScrollPercentage;
 
         void onScrollStarted(boolean isDirectionUp) {
-            assert !mIsScrollActive;
+            // We shouldn't get an |onScrollStarted()| call while a scroll is still in progress,
+            // but it can happen. Call |onScrollEnded()| to make sure we're in a valid state.
+            if (mIsScrollActive) onScrollEnded();
             mIsScrollActive = true;
             mIsDirectionUp = isDirectionUp;
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/FileAccessPermissionHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/download/FileAccessPermissionHelper.java
index 2481104f..e6613d2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/FileAccessPermissionHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/FileAccessPermissionHelper.java
@@ -13,7 +13,6 @@
 
 import org.chromium.base.BuildInfo;
 import org.chromium.base.Callback;
-import org.chromium.base.Consumer;
 import org.chromium.components.permissions.AndroidPermissionRequester;
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
@@ -22,6 +21,8 @@
 import org.chromium.ui.permissions.AndroidPermissionDelegate;
 import org.chromium.ui.permissions.PermissionCallback;
 
+import java.util.function.Consumer;
+
 /**
  * Handles file access permission requests.
  * TODO(shaktisahu): Move this to a generic location, preferably ui/android.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java
index 5b87583..e83b79ee 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java
@@ -10,7 +10,6 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.Callback;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.night_mode.AutoDarkFeedbackSource;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.url.GURL;
@@ -79,8 +78,7 @@
 
         // FamilyInfoFeedbackSource relies on IdentityManager which is not available for the
         // incognito profile.
-        if (ChromeFeatureList.isEnabled(ChromeFeatureList.ENABLE_FAMILY_INFO_FEEDBACK)
-                && !initParams.profile.isOffTheRecord()) {
+        if (!initParams.profile.isOffTheRecord()) {
             sources.add(new FamilyInfoFeedbackSource(initParams.profile));
         }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
index cb9f5a77..c64f6685 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
@@ -24,7 +24,6 @@
 import org.chromium.base.ApplicationStatus.ActivityStateListener;
 import org.chromium.base.Promise;
 import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.BackPressHelper;
@@ -43,6 +42,7 @@
 import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.List;
+import java.util.function.BooleanSupplier;
 
 /**
  * Handles the First Run Experience sequences shown to the user launching Chrome for the first time.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunPage.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunPage.java
index 5a00ef4..3f2d4ad4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunPage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunPage.java
@@ -6,7 +6,7 @@
 
 import androidx.fragment.app.Fragment;
 
-import org.chromium.base.supplier.BooleanSupplier;
+import java.util.function.BooleanSupplier;
 
 /**
  * Represents first run page shown during the First Run. Actual page implementation is created
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedSheetDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedSheetDelegate.java
index dc5200d..418973ed 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedSheetDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedSheetDelegate.java
@@ -4,7 +4,6 @@
 
 package org.chromium.chrome.browser.gesturenav;
 
-import org.chromium.base.Consumer;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.components.embedder_support.util.UrlConstants;
@@ -12,6 +11,8 @@
 import org.chromium.content_public.browser.NavigationHistory;
 import org.chromium.url.GURL;
 
+import java.util.function.Consumer;
+
 /**
  * Implementation of {@link NavigationSheet#Delegate} that works with
  * native/rendered pages in tabbed mode. Uses interface methods of {@link Tab}.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
index 0f297eb..3244fed3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
@@ -12,7 +12,6 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.jank_tracker.JankTracker;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.DestroyableObservableSupplier;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.browser.app.download.home.DownloadPage;
@@ -51,6 +50,8 @@
 import org.chromium.ui.base.DeviceFormFactor;
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.ui.util.ColorUtils;
+
+import java.util.function.BooleanSupplier;
 /**
  * Creates NativePage objects to show chrome-native:// URLs using the native Android view system.
  */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/ChromePageInfoControllerDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/ChromePageInfoControllerDelegate.java
index e493cf2..c6786f0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/ChromePageInfoControllerDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/ChromePageInfoControllerDelegate.java
@@ -18,7 +18,6 @@
 import androidx.fragment.app.FragmentManager;
 
 import org.chromium.base.Callback;
-import org.chromium.base.Consumer;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator;
@@ -64,6 +63,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
+import java.util.function.Consumer;
 
 /**
  * Chrome's customization of PageInfoControllerDelegate. This class provides Chrome-specific info to
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/SiteSettingsHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/SiteSettingsHelper.java
index e8974769..430a6457 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/SiteSettingsHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/SiteSettingsHelper.java
@@ -10,7 +10,9 @@
 
 import org.chromium.base.StrictModeContext;
 import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
+import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
+import org.chromium.chrome.browser.site_settings.ChromeSiteSettingsDelegate;
 import org.chromium.components.browser_ui.settings.SettingsLauncher;
 import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
 import org.chromium.components.browser_ui.site_settings.SingleCategorySettings;
@@ -50,7 +52,9 @@
                 SiteSettingsCategory.preferenceKey(category));
         extras.putString(SingleCategorySettings.EXTRA_TITLE,
                 context.getResources().getString(ContentSettingsResources.getTitle(
-                        SiteSettingsCategory.contentSettingsType(category))));
+                        SiteSettingsCategory.contentSettingsType(category),
+                        new ChromeSiteSettingsDelegate(
+                                context, Profile.getLastUsedRegularProfile()))));
         Intent preferencesIntent = settingsLauncher.createSettingsActivityIntent(
                 context, SingleCategorySettings.class.getName(), extras);
         launchIntent(context, preferencesIntent);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java
index d43aaa03..33a3214 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java
@@ -20,7 +20,6 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.core.app.ActivityOptionsCompat;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.IntentUtils;
 import org.chromium.base.Log;
@@ -33,6 +32,8 @@
 import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityPreferencesManager;
 import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityPreferencesManager.SearchActivityPreferences;
 
+import java.util.function.Consumer;
+
 /**
  * Widget that lets the user search using their default search engine.
  *
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
index c3f66da2..85bcf9e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
@@ -121,6 +121,11 @@
                 return ContentFeatureList.isEnabled(ContentFeatures.FED_CM);
             case SiteSettingsCategory.Type.NFC:
                 return ContentFeatureList.isEnabled(ContentFeatureList.WEB_NFC);
+            case SiteSettingsCategory.Type.COOKIES:
+                return !isPrivacySandboxSettings4Enabled();
+            case SiteSettingsCategory.Type.SITE_DATA:
+            case SiteSettingsCategory.Type.THIRD_PARTY_COOKIES:
+                return isPrivacySandboxSettings4Enabled();
             default:
                 return true;
         }
@@ -142,6 +147,11 @@
     }
 
     @Override
+    public boolean isPrivacySandboxSettings4Enabled() {
+        return ChromeFeatureList.isEnabled(ChromeFeatureList.PRIVACY_SANDBOX_SETTINGS_4);
+    }
+
+    @Override
     public String getChannelIdForOrigin(String origin) {
         return SiteChannelsManager.getInstance().getChannelIdForOrigin(origin);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/survey/SurveyHttpClientBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/survey/SurveyHttpClientBridge.java
index 84554b6..cea6ae9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/survey/SurveyHttpClientBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/survey/SurveyHttpClientBridge.java
@@ -7,7 +7,6 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.Callback;
-import org.chromium.base.Consumer;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
@@ -19,6 +18,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Consumer;
 
 /**
  * Class used as HTTP client to send and receive survey-related requests and responses.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java
index da09a6e1..231aac1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java
@@ -8,7 +8,6 @@
 
 import androidx.annotation.VisibleForTesting;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.Promise;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.NativeMethods;
@@ -21,6 +20,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.function.Consumer;
 
 /**
  * Client used to communicate with GmsCore about sync encryption keys.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
index c8e28bf..efcf4bc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java
@@ -16,7 +16,6 @@
 import org.chromium.base.Function;
 import org.chromium.base.TraceEvent;
 import org.chromium.base.jank_tracker.JankTracker;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.supplier.OneshotSupplier;
@@ -131,6 +130,8 @@
 import org.chromium.ui.base.IntentRequestTracker;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * A {@link RootUiCoordinator} variant that controls tabbed-mode specific UI.
  */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
index 05d4165..b9f103d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -27,7 +27,6 @@
 import org.chromium.base.TraceEvent;
 import org.chromium.base.jank_tracker.JankTracker;
 import org.chromium.base.metrics.RecordUserAction;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.supplier.OneShotCallback;
@@ -177,6 +176,7 @@
 import java.io.Serializable;
 import java.util.Arrays;
 import java.util.List;
+import java.util.function.BooleanSupplier;
 import java.util.function.Consumer;
 
 /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
index f5168c1..37097c7d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
@@ -60,6 +60,7 @@
 import androidx.browser.customtabs.CustomTabsService;
 import androidx.browser.customtabs.CustomTabsSession;
 import androidx.browser.customtabs.CustomTabsSessionToken;
+import androidx.test.filters.LargeTest;
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SmallTest;
 
@@ -1842,6 +1843,62 @@
         eventHelper.waitForCallback(0);
     }
 
+    private void doOpaqueOriginTest(boolean enabled, boolean prefetch) throws Exception {
+        TestWebServer webServer = createTestWebServer();
+        String url = webServer.setResponse("/ok.html", "<html>ok</html>", null);
+        CustomTabsConnection connection = CustomTabsTestUtils.warmUpAndWait();
+        Context context = InstrumentationRegistry.getInstrumentation()
+                                  .getTargetContext()
+                                  .getApplicationContext();
+        Intent intent = CustomTabsIntentTestUtils.createMinimalCustomTabIntent(context, url);
+        CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFromIntent(intent);
+        connection.newSession(token);
+
+        if (prefetch) {
+            setCanUseHiddenTabForSession(connection, token, true);
+            Assert.assertTrue(connection.mayLaunchUrl(token, Uri.parse(url), null, null));
+            CriteriaHelper.pollUiThread(() -> {
+                Criteria.checkThat(connection.getHiddenTab(), Matchers.notNullValue());
+            });
+            Tab hiddenTab = TestThreadUtils.runOnUiThreadBlocking(
+                    () -> { return connection.getHiddenTab(); });
+            ChromeTabUtils.waitForTabPageLoaded(hiddenTab, url);
+        } else {
+            mCustomTabActivityTestRule.startCustomTabActivityWithIntent(intent);
+        }
+        String actualHeader = webServer.getLastRequest("/ok.html").headerValue("Sec-Fetch-Site");
+        assertEquals(enabled ? "cross-site" : "none", actualHeader);
+        webServer.shutdown();
+    }
+
+    @Test
+    @LargeTest
+    @Features.EnableFeatures(ChromeFeatureList.OPAQUE_ORIGIN_FOR_INCOMING_INTENTS)
+    public void testOpaqueOriginFromPrefetch_Enabled() throws Exception {
+        doOpaqueOriginTest(true, true);
+    }
+
+    @Test
+    @LargeTest
+    @Features.DisableFeatures(ChromeFeatureList.OPAQUE_ORIGIN_FOR_INCOMING_INTENTS)
+    public void testOpaqueOriginFromPrefetch_Disabled() throws Exception {
+        doOpaqueOriginTest(false, true);
+    }
+
+    @Test
+    @LargeTest
+    @Features.EnableFeatures(ChromeFeatureList.OPAQUE_ORIGIN_FOR_INCOMING_INTENTS)
+    public void testOpaqueOriginFromIntent_Enabled() throws Exception {
+        doOpaqueOriginTest(true, false);
+    }
+
+    @Test
+    @LargeTest
+    @Features.DisableFeatures(ChromeFeatureList.OPAQUE_ORIGIN_FOR_INCOMING_INTENTS)
+    public void testOpaqueOriginFromIntent_Disabled() throws Exception {
+        doOpaqueOriginTest(false, false);
+    }
+
     /** Asserts that the Overlay Panel is set to allow or not allow ever hiding the Toolbar. */
     private void assertOverlayPanelCanHideAndroidBrowserControls(boolean canEverHide) {
         // Wait for CS to get initialized.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java
index 14fb777..668e19d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java
@@ -19,18 +19,15 @@
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.Feature;
 import org.chromium.chrome.browser.feedback.ChromeFeedbackCollector.InitParams;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.test.ChromeBrowserTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
-import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
 import java.util.List;
 
 @RunWith(ChromeJUnit4ClassRunner.class)
 @Batch(Batch.PER_CLASS)
-@EnableFeatures(ChromeFeatureList.ENABLE_FAMILY_INFO_FEEDBACK)
 public class ChromeFeedbackCollectorTest {
     private static final String FEEDBACK_URL = "https://google.com";
     private static final String FEEDBACK_CONSTANT = "feedbackContext";
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java
index c8ed1a7..abde2bd 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java
@@ -12,6 +12,8 @@
 
 import static org.hamcrest.Matchers.allOf;
 import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.refEq;
 
@@ -90,6 +92,7 @@
 import org.chromium.components.browser_ui.site_settings.SingleCategorySettings;
 import org.chromium.components.browser_ui.site_settings.SingleCategorySettingsConstants;
 import org.chromium.components.browser_ui.site_settings.SingleWebsiteSettings;
+import org.chromium.components.browser_ui.site_settings.SiteSettings;
 import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
 import org.chromium.components.browser_ui.site_settings.SiteSettingsFeatureList;
 import org.chromium.components.browser_ui.site_settings.TriStateSiteSettingsPreference;
@@ -1111,6 +1114,39 @@
     }
 
     /**
+     * Test that showing the Site Settings menu contains only the "Cookies" row.
+     */
+    @Test
+    @SmallTest
+    @Feature({"Preferences"})
+    @DisableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_SETTINGS_4)
+    public void testSiteSettingsMenuWithPSS4Disabled() {
+        final SettingsActivity settingsActivity = SiteSettingsTestUtils.startSiteSettingsMenu("");
+        SiteSettings websitePreferences = (SiteSettings) settingsActivity.getMainFragment();
+        assertNotNull(websitePreferences.findPreference("cookies"));
+        assertNull(websitePreferences.findPreference("third_party_cookies"));
+        assertNull(websitePreferences.findPreference("site_data"));
+        settingsActivity.finish();
+    }
+
+    /**
+     * Test that showing the Site Settings menu contains the "Third-party cookies" and "Site data"
+     * rows.
+     */
+    @Test
+    @SmallTest
+    @Feature({"Preferences"})
+    @EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_SETTINGS_4)
+    public void testSiteSettingsMenuWithPSS4Enabled() {
+        final SettingsActivity settingsActivity = SiteSettingsTestUtils.startSiteSettingsMenu("");
+        SiteSettings websitePreferences = (SiteSettings) settingsActivity.getMainFragment();
+        assertNull(websitePreferences.findPreference("cookies"));
+        assertNotNull(websitePreferences.findPreference("third_party_cookies"));
+        assertNotNull(websitePreferences.findPreference("site_data"));
+        settingsActivity.finish();
+    }
+
+    /**
      * Tests that only expected Preferences are shown for a category. This
      * santiy checks the number of categories only. Each category has its own
      * individual test below.
@@ -1121,7 +1157,7 @@
     public void testOnlyExpectedPreferencesShown() {
         // If you add a category in the SiteSettings UI, please update this total AND add a test for
         // it below, named "testOnlyExpectedPreferences<Category>".
-        Assert.assertEquals(26, SiteSettingsCategory.Type.NUM_ENTRIES);
+        Assert.assertEquals(28, SiteSettingsCategory.Type.NUM_ENTRIES);
     }
 
     @Test
@@ -1224,6 +1260,8 @@
         checkPreferencesForCategory(SiteSettingsCategory.Type.COOKIES, cookie);
     }
 
+    // TODO(b/254415173): Add tests for site data and third-party cookies page.
+
     @Test
     @SmallTest
     @Feature({"Preferences"})
@@ -1948,7 +1986,7 @@
                     blockedGroup.getPreference(0).getSummary());
 
             // Blocked origin should has no summary.
-            Assert.assertNull(blockedGroup.getPreference(1).getSummary());
+            assertNull(blockedGroup.getPreference(1).getSummary());
         });
         settingsActivity.finish();
     }
@@ -2200,7 +2238,7 @@
 
             ChromeSwitchPreference toggle =
                     singleCategorySettings.findPreference(SingleCategorySettings.BINARY_TOGGLE_KEY);
-            Assert.assertNotNull("Toggle should not be null.", toggle);
+            assertNotNull("Toggle should not be null.", toggle);
 
             singleCategorySettings.onPreferenceChange(toggle, mIsCategoryEnabled);
             Assert.assertEquals(exceptionString, mIsCategoryEnabled,
@@ -2212,14 +2250,16 @@
         private void assertToggleTitleAndSummary(SingleCategorySettings singleCategorySettings) {
             ChromeSwitchPreference toggle =
                     singleCategorySettings.findPreference(SingleCategorySettings.BINARY_TOGGLE_KEY);
+            assert toggle != null;
 
             Assert.assertEquals("Preference title is not set correctly.",
                     singleCategorySettings.getResources().getString(
-                            ContentSettingsResources.getTitle(mContentSettingsType)),
+                            ContentSettingsResources.getTitle(mContentSettingsType,
+                                    new ChromeSiteSettingsDelegate(toggle.getContext(),
+                                            Profile.getLastUsedRegularProfile()))),
                     toggle.getTitle());
-            Assert.assertNotNull("Enabled summary text should not be null.", toggle.getSummaryOn());
-            Assert.assertNotNull(
-                    "Disabled summary text should not be null.", toggle.getSummaryOff());
+            assertNotNull("Enabled summary text should not be null.", toggle.getSummaryOn());
+            assertNotNull("Disabled summary text should not be null.", toggle.getSummaryOff());
 
             String summary = mIsCategoryEnabled ? toggle.getSummaryOn().toString()
                                                 : toggle.getSummaryOff().toString();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategyTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategyTest.java
index 3534671..91620519 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategyTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategyTest.java
@@ -759,6 +759,8 @@
         PartialCustomTabHeightStrategy strategy = createPcctAtHeight(500);
         assertEquals(1, mAttributeResults.size());
         assertTabIsAtInitialPos(mAttributeResults.get(0));
+        int expected = PartialCustomTabHeightStrategy.ResizeType.AUTO_EXPANSION;
+        HistogramDelta histogramExpansion = new HistogramDelta("CustomTabs.ResizeType2", expected);
 
         strategy.onShowSoftInput(() -> {});
         shadowOf(Looper.getMainLooper()).idle();
@@ -769,6 +771,8 @@
 
         // Verify that the tab expands to full height.
         assertTabIsFullHeight(mAttributeResults.get(length - 1));
+        assertEquals("ResizeType.AUTO_EXPANSION should be recorded once.", 1,
+                histogramExpansion.getDelta());
     }
 
     @Test
@@ -841,15 +845,15 @@
 
         PartialCustomTabHandleStrategy handleStrategy = strategy.createHandleStrategyForTesting();
 
-        int expected = PartialCustomTabHeightStrategy.ResizeType.EXPANSION;
-        HistogramDelta histogramExpansion = new HistogramDelta("CustomTabs.ResizeType", expected);
+        int expected = PartialCustomTabHeightStrategy.ResizeType.MANUAL_EXPANSION;
+        HistogramDelta histogramExpansion = new HistogramDelta("CustomTabs.ResizeType2", expected);
 
         // Drag to the top.
         assertTabIsFullHeight(dragTab(handleStrategy, 1500, 1000, 0));
 
-        // invokeResizeCallback() should have been called and ResizeType.EXPANSION logged once.
-        assertEquals(
-                "ResizeType.EXPANSION should be recorded once.", 1, histogramExpansion.getDelta());
+        // invokeResizeCallback() should have been called and MANUAL_EXPANSION logged once.
+        assertEquals("ResizeType.MANUAL_EXPANSION should be recorded once.", 1,
+                histogramExpansion.getDelta());
     }
 
     @Test
@@ -866,15 +870,15 @@
         // Drag to the top so it can be minimized in the next step.
         assertTabIsFullHeight(dragTab(handleStrategy, 1500, 1000, 0));
 
-        int expected = PartialCustomTabHeightStrategy.ResizeType.MINIMIZATION;
+        int expected = PartialCustomTabHeightStrategy.ResizeType.MANUAL_MINIMIZATION;
         HistogramDelta histogramMinimization =
-                new HistogramDelta("CustomTabs.ResizeType", expected);
+                new HistogramDelta("CustomTabs.ResizeType2", expected);
 
         // Drag down enough -> slide to the initial position.
         assertTabIsAtInitialPos(dragTab(handleStrategy, 50, 650, 1300));
 
-        // invokeResizeCallback() should have been called and ResizeType.MINIMIZATION logged once.
-        assertEquals("ResizeType.MINIMIZATION should be recorded once.", 1,
+        // invokeResizeCallback() should have been called and MANUAL_MINIMIZATION logged once.
+        assertEquals("ResizeType.MANUAL_MINIMIZATION should be recorded once.", 1,
                 histogramMinimization.getDelta());
     }
 
@@ -1067,17 +1071,33 @@
     public void expandToFullHeightOnFindInPage() {
         PartialCustomTabHeightStrategy strategy = createPcctAtHeight(800);
         doReturn(mDragBarBackground).when(mDragBar).getBackground();
+        int expected = PartialCustomTabHeightStrategy.ResizeType.AUTO_EXPANSION;
+        HistogramDelta histogramExpansion = new HistogramDelta("CustomTabs.ResizeType2", expected);
         strategy.onFindToolbarShown();
-        WindowManager.LayoutParams attrs = mAttributeResults.get(mAttributeResults.size() - 1);
-        assertTabIsFullHeight(attrs);
+        waitAnimationToFinish();
 
+        assertTabIsFullHeight(getWindowAttributes());
+        assertEquals("ResizeType.AUTO_EXPANSION should be recorded once.", 1,
+                histogramExpansion.getDelta());
+
+        expected = PartialCustomTabHeightStrategy.ResizeType.AUTO_MINIMIZATION;
+        HistogramDelta histogramMinimization =
+                new HistogramDelta("CustomTabs.ResizeType2", expected);
         strategy.onFindToolbarHidden();
-        attrs = mAttributeResults.get(mAttributeResults.size() - 1);
-        assertTabIsAtInitialPos(attrs);
+        waitAnimationToFinish();
+
+        assertTabIsAtInitialPos(getWindowAttributes());
+        assertEquals("ResizeType.AUTO_MINIMIZATION should be recorded once.", 1,
+                histogramMinimization.getDelta());
     }
 
     private boolean isFullscreen() {
         WindowManager.LayoutParams attrs = mAttributeResults.get(mAttributeResults.size() - 1);
         return attrs.isFullscreen();
     }
+
+    private static void waitAnimationToFinish() {
+        shadowOf(Looper.getMainLooper()).idle();
+        ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
+    }
 }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityUrlLoadingTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityUrlLoadingTest.java
index 01bc85c3..cf822b5 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityUrlLoadingTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityUrlLoadingTest.java
@@ -30,6 +30,8 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
 
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.base.test.util.JniMocker;
@@ -41,20 +43,31 @@
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.test.util.browser.Features;
 import org.chromium.chrome.test.util.browser.Features.DisableFeatures;
+import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
 import org.chromium.components.embedder_support.util.UrlUtilities;
 import org.chromium.components.embedder_support.util.UrlUtilitiesJni;
 import org.chromium.content_public.browser.LoadUrlParams;
+import org.chromium.url.Origin;
 
 /**
  * Integration tests involving several classes in Custom Tabs content layer, checking that urls are
  * properly loaded in Custom Tabs in different conditions.
  */
 @RunWith(BaseRobolectricTestRunner.class)
-@Config(manifest = Config.NONE)
+@Config(manifest = Config.NONE, shadows = {CustomTabActivityUrlLoadingTest.ShadowOrigin.class})
 @DisableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS})
+@EnableFeatures({ChromeFeatureList.OPAQUE_ORIGIN_FOR_INCOMING_INTENTS})
 public class CustomTabActivityUrlLoadingTest {
     public static final String PASSWORD_CHANGE_USERNAME = "Peter";
 
+    @Implements(Origin.class)
+    public static class ShadowOrigin {
+        @Implementation
+        public static Origin createOpaqueOrigin() {
+            return null;
+        }
+    }
+
     @Rule
     public final CustomTabActivityContentTestEnvironment env =
             new CustomTabActivityContentTestEnvironment();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarUnitTest.java
index 067d7839..a96bb12 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarUnitTest.java
@@ -45,7 +45,6 @@
 import org.robolectric.shadows.ShadowLooper;
 
 import org.chromium.base.UserDataHost;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.task.TaskTraits;
 import org.chromium.base.task.test.ShadowPostTask;
@@ -73,6 +72,7 @@
 import org.chromium.url.JUnitTestGURLs;
 
 import java.util.concurrent.TimeUnit;
+import java.util.function.BooleanSupplier;
 
 /**
  * Tests AMP url handling in the CustomTab Toolbar.
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 94c09d77..909a40e 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -7198,6 +7198,12 @@
       <message name="IDS_BOOKMARKS_SORT_MENU_A11Y_LABEL" is_accessibility_with_no_ui="true" desc="Screen reader label for the button which opens the sort menu in the bookmarks side panel.">
         Sort Options
       </message>
+      <message name="IDS_BOOKMARKS_EMPTY_STATE_TITLE" desc="Title for the bookmarks side panel empty state">
+        You'll find your bookmarks here
+      </message>
+      <message name="IDS_BOOKMARKS_EMPTY_STATE_BODY" desc="Body text for the bookmarks side panel empty state">
+        Bookmark things you want to come back to later
+      </message>
 
       <!-- Read Anything strings -->
       <!-- TODO(crbug.com/1266555): Add final strings and make them translateable. -->
@@ -7337,7 +7343,7 @@
         upload a file
       </message>
       <message name="IDS_LENS_SEARCH_UPLOAD_DIALOG_OR_TEXT" desc="Message to user on drop zone where they can select a file to search.">
-        or
+        OR
       </message>
       <message name="IDS_LENS_SEARCH_UPLOAD_DIALOG_TEXT_PLACEHOLDER" desc="Label on the input box for Lens search URL upload.">
         Paste image link
@@ -13980,6 +13986,151 @@
       Settings
     </message>
 
+    <!-- Privacy Sandbox Dialog M1 strings -->
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_TITLE" translateable="false" desc="Title of privacy sandbox consent dialog">
+      Lorem ipsum Consent
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_DESCRIPTION_1" translateable="false" desc="First part of description in privacy sandbox consent dialog">
+      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pretium pulvinar metus non mollis. Quisque placerat eget nisl sit amet facilisis.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_DESCRIPTION_2" translateable="false" desc="Second part of description in privacy sandbox consent dialog">
+      Nulla in tortor a ligula scelerisque laoreet. Sed sem velit, varius non purus vitae, imperdiet porttitor elit. Integer et libero id metus egestas consequat non a ipsum.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_DESCRIPTION_3" translateable="false" desc="Third part of description in privacy sandbox consent dialog">
+      Vestibulum pretium placerat justo vel suscipit. Quisque urna arcu, elementum ut venenatis ornare, consequat ac turpis.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_EXPAND_LABEL" translateable="false" desc="Learn more expand label in privacy sandbox consent dialog">
+      Vestibulum orci risus, consectetur
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_DESCRIPTION_4" translateable="false" desc="Forth part of description in privacy sandbox consent dialog">
+      Vestibulum pretium placerat justo vel suscipit. Quisque urna arcu, elementum ut venenatis ornare, consequat ac turpis.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_SAVING_LABEL" translateable="false" desc="Saving state label in privacy sandbox consent dialog">
+      Consectetur
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_ACCEPT_BUTTON" translateable="false" desc="Accept button label in privacy sandbox consent dialog">
+      Quisque
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_DECLINE_BUTTON" translateable="false" desc="Decline button label in privacy sandbox consent dialog">
+      Lorem
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_HEADING" translateable="false" desc="Learn more heading in privacy sandbox consent dialog">
+      Esed purus vestibulum velit convalli
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_BULLET_1" translateable="false" desc="Learn more bullet point 1 in privacy sandbox consent dialog">
+      Nulla in tortor: a ligula scelerisque laoreet. Sed sem velit, varius non purus vitae, imperdiet porttitor elit.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_BULLET_2" translateable="false" desc="Learn more bullet point 2 in privacy sandbox consent dialog">
+      Consectetur adipiscing elit: Duis pretium pulvinar metus non mollis
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_BULLET_3" translateable="false" desc="Learn more bullet point 3 in privacy sandbox consent dialog">
+      Sed purus vestibulum: velit convallis suscipit. Aenean aliquam ut velit eget dapibus. Vestibulum orci risus, consectetur non odio vulputate, mattis dignissim purus. Cras id tempor mi.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_LINK" translateable="false" desc="Learn more link in privacy sandbox consent dialog">
+      Esed purus vestibulum velit convalli
+    </message>
+
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_TITLE" translateable="false" desc="Title of privacy sandbox notice EEA dialog">
+      Lorem ipsum Notice EEA
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_DESCRIPTION_1" translateable="false" desc="First part of description in privacy sandbox notice EEA dialog">
+      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pretium pulvinar metus non mollis. Quisque placerat eget nisl sit amet facilisis.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_BULLET_1" translateable="false" desc="First bullet point in the description in privacy sandbox notice EEA dialog">
+      Nulla in tortor: a ligula scelerisque laoreet. Sed sem velit, varius non purus vitae, imperdiet porttitor elit.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_BULLET_2" translateable="false" desc="Second bullet point in the description in privacy sandbox notice EEA dialog">
+      Sed purus vestibulum: velit convallis suscipit. Aenean aliquam ut velit eget dapibus. Vestibulum orci risus, consectetur non odio vulputate, mattis dignissim purus. Cras id tempor mi.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_EXPAND_LABEL" translateable="false" desc="Learn more expand label in privacy sandbox notice EEA dialog">
+      Vestibulum orci risus, consectetur
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_DESCRIPTION_2" translateable="false" desc="Second part of description in privacy sandbox notice EEA dialog">
+      Consectetur adipiscing elit duis pretium pulvinar metus non mollis
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_ACK_BUTTON" translateable="false" desc="Acknowledge button label in privacy sandbox notice EEA dialog">
+      Sed
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_SETTINGS_BUTTON" translateable="false" desc="Open settings button label in privacy sandbox notice EEA dialog">
+      Cras id
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_HEADING_1" translateable="false" desc="Learn more first heading in privacy sandbox notice EEA dialog">
+      Esed purus vestibulum velit convalli
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_DESCRIPTION" translateable="false" desc="Learn more description in privacy sandbox notice EEA dialog">
+      Nulla in tortor a ligula scelerisque laoreet. Sed sem velit, varius non purus vitae, imperdiet porttitor elit. Integer et libero id metus egestas consequat non a ipsum.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_HEADING_2" translateable="false" desc="Learn more second heading in privacy sandbox notice EEA dialog">
+      Proin sed purus vestibulum velit velit eget dapibus.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_BULLET_1" translateable="false" desc="Learn more bullet point 1 in privacy sandbox notice EEA dialog">
+      Nulla in tortor: a ligula scelerisque laoreet. Sed sem velit, varius non purus vitae, imperdiet porttitor elit.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_BULLET_2" translateable="false" desc="Learn more bullet point 2 in privacy sandbox notice EEA dialog">
+      Consectetur adipiscing elit: Duis pretium pulvinar metus non mollis
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_BULLET_3" translateable="false" desc="Learn more bullet point 3 in privacy sandbox notice EEA dialog">
+      Sed purus vestibulum: velit convallis suscipit. Aenean aliquam ut velit eget dapibus. Vestibulum orci risus, consectetur non odio vulputate, mattis dignissim purus. Cras id tempor mi.
+    </message>
+
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_TITLE" translateable="false" desc="Title of privacy sandbox notice ROW dialog">
+       Lorem ipsum Notice ROW
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_DESCRIPTION_1" translateable="false" desc="First part of description in privacy sandbox notice ROW dialog">
+       Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pretium pulvinar metus non mollis.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_DESCRIPTION_2" translateable="false" desc="Second part of description in privacy sandbox notice ROW dialog">
+      Nulla in tortor a ligula scelerisque laoreet. Sed sem velit, varius non purus vitae, imperdiet porttitor elit. Integer et libero id metus egestas consequat non a ipsum. Quisque placerat eget nisl sit amet facilisis.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_DESCRIPTION_3" translateable="false" desc="Third part of description in privacy sandbox notice ROW dialog">
+      Vestibulum pretium placerat justo vel suscipit. Quisque urna arcu, elementum ut venenatis ornare, consequat ac turpis. Vestibulum orci risus, consectetur non odio vulputate, mattis dignissim purus. Cras id tempor mi.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_DESCRIPTION_4" translateable="false" desc="Fourth part of description in privacy sandbox notice ROW dialog">
+      Proin sed purus vestibulum velit convallis suscipit eget dapibus.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_ACK_BUTTON" translateable="false" desc="Acknowledge button label in privacy sandbox notice EEA dialog">
+      Sed
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_SETTINGS_BUTTON" translateable="false" desc="Open settings button label in privacy sandbox notice EEA dialog">
+      Cras id
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_EXPAND_LABEL" translateable="false" desc="Learn more expand label in privacy sandbox notice ROW dialog">
+      Vestibulum orci risus consectetur
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_HEADING_1" translateable="false" desc="Learn more first heading in privacy sandbox notice ROW dialog">
+      Esed purus vestibulum velit convalli
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_1" translateable="false" desc="First part of learn more description in privacy sandbox notice ROW dialog">
+      Etiam dictum sem et neque molestie lobortis. Morbi quam tellus, tincidunt eget dapibus ac, lobortis et lacus. Integer nec egestas elit. Nulla venenatis facilisis dui eget suscipit.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_HEADING_2" translateable="false" desc="Learn more second heading in privacy sandbox notice ROW dialog">
+      Class aptent taciti sociosqu ad
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_2" translateable="false" desc="Second part of learn more description in privacy sandbox notice ROW dialog">
+      Vestibulum pretium placerat justo vel suscipit. Quisque urna arcu.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_BULLET_1" translateable="false" desc="Learn more bullet point 1 in privacy sandbox notice ROW dialog">
+      Sed elementum tellus condimentum quam vestibulum lacinia. Ut eu lobortis massa, venenatis sodales lacus. Nulla elementum magna et tortor efficitur, at volutpat metus varius.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_BULLET_2" translateable="false" desc="Learn more bullet point 2 in privacy sandbox notice ROW dialog">
+      Duis tempor nulla nisi, ac bibendum lorem tempus sit amet. Proin non blandit risus. Maecenas facilisis enim nec tristique tristique. Eelementum ut venenatis ornare, consequat ac turpis. Vestibulum orci risus, consectetur non odio vulputate, mattis dignissim purus. Cras id tempor mi.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_3" translateable="false" desc="Third part of learn more description in privacy sandbox notice ROW dialog">
+      Etiam hendrerit turpis nibh, ac maximus lectus placerat at. Vivamus ligula quam, posuere luctus felis eu, dictum egestas arcu. per conubia nostra, per inceptos himenaeos. Cras ut metus vel est molestie finibus nec ut orci.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_4" translateable="false" desc="Fourth part of learn more description in privacy sandbox notice ROW dialog">
+      Aliquam euismod scelerisque metus, in aliquet est vehicula ut. Curabitur sit amet ligula quis ante maximus gravida non id magna. Pellentesque interdum venenatis leo, at ultrices felis mollis nec. Integer vulputate velit eget mauris lacinia, ut ullamcorper mauris vehicula.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_HEADING_3" translateable="false" desc="Learn more third heading in privacy sandbox notice ROW dialog">
+      Orci varius natoque penatibus et
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_5" translateable="false" desc="Fifth part of description in privacy sandbox notice ROW dialog">
+      Suspendisse at dui pulvinar, rhoncus orci at, porttitor nibh. Curabitur lacinia nulla sem, eu euismod dolor vulputate quis. Duis mattis eros et arcu elementum tempor. Duis pharetra eleifend sagittis.
+    </message>
+    <message name="IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_6" translateable="false" desc="Sixth part of description in privacy sandbox notice ROW dialog">
+      Cras sed lacus suscipit, efficitur erat nec, semper sapien. Fusce at nunc molestie, elementum augue at, auctor nunc. Sed dui nisi, consectetur sit amet urna vitae, facilisis scelerisque justo.
+    </message>
+
     <!-- Automated Password Change on Desktop strings -->
     <if expr="not is_android">
       <message name="IDS_AUTOFILL_ASSISTANT" desc="The text rendered on the side panel entry.">
diff --git a/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EMPTY_STATE_BODY.png.sha1 b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EMPTY_STATE_BODY.png.sha1
new file mode 100644
index 0000000..2fa2881
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EMPTY_STATE_BODY.png.sha1
@@ -0,0 +1 @@
+b9bdc1031837ff93fb80e6a9e35396f4982ecca9
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EMPTY_STATE_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EMPTY_STATE_TITLE.png.sha1
new file mode 100644
index 0000000..2fa2881
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EMPTY_STATE_TITLE.png.sha1
@@ -0,0 +1 @@
+b9bdc1031837ff93fb80e6a9e35396f4982ecca9
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_LENS_SEARCH_UPLOAD_DIALOG_OR_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_LENS_SEARCH_UPLOAD_DIALOG_OR_TEXT.png.sha1
index d5eda144..8d96b3bd 100644
--- a/chrome/app/generated_resources_grd/IDS_LENS_SEARCH_UPLOAD_DIALOG_OR_TEXT.png.sha1
+++ b/chrome/app/generated_resources_grd/IDS_LENS_SEARCH_UPLOAD_DIALOG_OR_TEXT.png.sha1
@@ -1 +1 @@
-7dd0eb5b56a7128b3f828fbf0ab949bbfc0143df
\ No newline at end of file
+ff85a6318dca35532205fcbe36c665b54ecfb8da
\ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index 5c8d5933..61053a5c 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -2387,6 +2387,7 @@
 <translation id="3143515551205905069">Kanselleer sinkronisering</translation>
 <translation id="3143754809889689516">Speel van die begin af</translation>
 <translation id="3144647712221361880">Maak skakel oop as</translation>
+<translation id="3144896554017119333">UItbreidings en meer</translation>
 <translation id="3149510190863420837">Chrome-programme</translation>
 <translation id="3150693969729403281">Doen veiligheidskontrole nou</translation>
 <translation id="3150927491400159470">Harde-herlaai</translation>
@@ -2495,6 +2496,7 @@
 <translation id="3268451620468152448">Maak oortjies oop</translation>
 <translation id="3269093882174072735">Laai prent</translation>
 <translation id="326911502853238749">Moenie <ph name="MODULE_NAME" /> wys nie</translation>
+<translation id="3269175001434213183">Skakel sinkronisering aan om jou goed te rugsteun en dit op enige toestel te gebruik</translation>
 <translation id="3269612321104318480">Liggroenblou en wit</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Lêer}other{# lêers}}</translation>
 <translation id="326999365752735949">Laai tans verskilvergelyking af</translation>
@@ -4293,6 +4295,7 @@
 <translation id="4950993567860689081">Jou sessie word deur jou organisasie bestuur. Administrateurs kan jou profiel uitvee en ook jou netwerkverkeer monitor.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{’n lêer}other{# lêers}}</translation>
 <translation id="495170559598752135">Handelinge</translation>
+<translation id="4951966678293618079">Moet nooit wagwoorde vir hierdie werf stoor nie</translation>
 <translation id="4953808748584563296">Verstek- oranje avatar</translation>
 <translation id="4955710816792587366">Kies jou PIN</translation>
 <translation id="4959262764292427323">Wagwoorde word in jou Google-rekening gestoor sodat jy hulle op enige toestel kan gebruik</translation>
@@ -4322,6 +4325,7 @@
 <translation id="4981449534399733132"><ph name="BEGIN_LINK" />Meld aan<ph name="END_LINK" /> om jou blaaierdata van al jou gesinkroniseerde toestelle en jou Google-rekening af uit te vee.</translation>
 <translation id="4982111327868342436">Gaan aan waar jy laas opgehou het op enige toestel</translation>
 <translation id="4982236238228587209">Toestelsagteware</translation>
+<translation id="4986706507552097681">Jy kan altyd in instellings kies wat om te sinkroniseer. Google kan Search en ander dienste op grond van jou geskiedenis personaliseer.</translation>
 <translation id="4986728572522335985">Dit sal alle data op die sekuriteitsleutel, insluitend sy PIN, uitvee</translation>
 <translation id="4988526792673242964">Bladsye</translation>
 <translation id="49896407730300355">Draai antikloksgewys</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 47d368f..9171b165 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -2386,6 +2386,7 @@
 <translation id="3143515551205905069">Otkaži sinhronizaciju</translation>
 <translation id="3143754809889689516">Reproduciraj od početka</translation>
 <translation id="3144647712221361880">Otvori link kao</translation>
+<translation id="3144896554017119333">Proširenja i drugo</translation>
 <translation id="3149510190863420837">Chromeove aplikacije</translation>
 <translation id="3150693969729403281">Odmah pokrenite sigurnosnu provjeru</translation>
 <translation id="3150927491400159470">Ponovno učitavanje bez keš memorije</translation>
@@ -2494,6 +2495,7 @@
 <translation id="3268451620468152448">Otvorene kartice</translation>
 <translation id="3269093882174072735">Učitaj sliku</translation>
 <translation id="326911502853238749">Ne prikazuj: <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Uključite sinkronizaciju da biste sigurnosno kopirali svoje sadržaje i upotrebljavali ih na bilo kojem uređaju</translation>
 <translation id="3269612321104318480">Svijetlotirkizna i bijela</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Fajl}one{# fajl}few{# fajla}other{# fajlova}}</translation>
 <translation id="326999365752735949">Preuzimanje razlika</translation>
@@ -4292,6 +4294,7 @@
 <translation id="4950993567860689081">Vašom sesijom upravlja vaša organizacija. Administratori mogu izbrisati vaš profil i nadzirati vaš mrežni saobraćaj.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{fajl}one{# fajl}few{# fajla}other{# fajlova}}</translation>
 <translation id="495170559598752135">Radnje</translation>
+<translation id="4951966678293618079">Nikad ne spremaj zaporke za ovu web-lokaciju</translation>
 <translation id="4953808748584563296">Zadani narandžasti avatar</translation>
 <translation id="4955710816792587366">Odaberite PIN</translation>
 <translation id="4959262764292427323">Lozinke se pohranjuju na vaš Google račun da ih možete koristiti na bilo kojem uređaju</translation>
@@ -4321,6 +4324,7 @@
 <translation id="4981449534399733132"><ph name="BEGIN_LINK" />Prijavite se<ph name="END_LINK" /> da obrišete podatke o pregledanju sa svih svojih sinhroniziranih uređaja i Google računa.</translation>
 <translation id="4982111327868342436">Nastavite gdje ste stali na bilo kojem uređaju</translation>
 <translation id="4982236238228587209">Softver uređaja</translation>
+<translation id="4986706507552097681">U postavkama možete odabrati što će se sinkronizirati. Google može personalizirati Pretraživanje i druge usluge na temelju vaše povijesti.</translation>
 <translation id="4986728572522335985">Ovim će se izbrisati svi podaci na sigurnosnom ključu, uključujući njegov PIN</translation>
 <translation id="4988526792673242964">Stranice</translation>
 <translation id="49896407730300355">Rotiraj u smjeru suprotnom od k&amp;azaljke na satu</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index b9025e9..728c4cc1 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -2387,6 +2387,7 @@
 <translation id="3143515551205905069">Ακύρωση συγχρονισμού</translation>
 <translation id="3143754809889689516">Αναπαραγωγή από την αρχή</translation>
 <translation id="3144647712221361880">Άνοιγμα συνδέσμου ως</translation>
+<translation id="3144896554017119333">Επεκτάσεις και άλλα</translation>
 <translation id="3149510190863420837">Εφαρμογές Chrome</translation>
 <translation id="3150693969729403281">Εκτέλεση ελέγχου ασφαλείας τώρα</translation>
 <translation id="3150927491400159470">Υποχρεωτική επανάληψη φόρτωσης</translation>
@@ -2495,6 +2496,7 @@
 <translation id="3268451620468152448">Ανοικτές καρτέλες</translation>
 <translation id="3269093882174072735">Φόρτωση εικόνας</translation>
 <translation id="326911502853238749">Να μην εμφανίζονται <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Ενεργοποιήστε τον συγχρονισμό για δημιουργία αντιγράφων ασφαλείας των στοιχείων σας και χρήση τους σε οποιαδήποτε συσκευή</translation>
 <translation id="3269612321104318480">Ανοιχτό γαλαζοπράσινο και λευκό</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Αρχείο}other{# αρχεία}}</translation>
 <translation id="326999365752735949">Διαφορά λήψεων</translation>
@@ -4293,6 +4295,7 @@
 <translation id="4950993567860689081">Η διαχείριση της περιόδου λειτουργίας γίνεται από τον οργανισμό σας. Οι διαχειριστές μπορούν να διαγράψουν το προφίλ σας και επίσης να παρακολουθούν την επισκεψιμότητα δικτύου.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ένα αρχείο}other{# αρχεία}}</translation>
 <translation id="495170559598752135">Ενέργειες</translation>
+<translation id="4951966678293618079">Να μην γίνεται ποτέ αποθήκευση των κωδικών πρόσβασης για αυτόν τον ιστότοπο</translation>
 <translation id="4953808748584563296">Προεπιλεγμένο πορτοκαλί avatar</translation>
 <translation id="4955710816792587366">Επιλογή PIN</translation>
 <translation id="4959262764292427323">Οι κωδικοί πρόσβασης αποθηκεύονται στον Λογαριασμό σας Google, ώστε να μπορείτε να τους χρησιμοποιήσετε σε οποιαδήποτε συσκευή</translation>
@@ -4322,6 +4325,7 @@
 <translation id="4981449534399733132">Για να διαγράψετε τα δεδομένα περιήγησης από όλες τις συγχρονισμένες συσκευές σας και τον Λογαριασμό σας Google, <ph name="BEGIN_LINK" />συνδεθείτε<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Συνεχίστε από εκεί που σταματήσατε σε οποιαδήποτε συσκευή</translation>
 <translation id="4982236238228587209">Λογισμικό συσκευής</translation>
+<translation id="4986706507552097681">Μπορείτε πάντα να επιλέξετε τα στοιχεία που θέλετε να συγχρονίσετε στις ρυθμίσεις. Η Google μπορεί να εξατομικεύει την Αναζήτηση και άλλες υπηρεσίες με βάση το ιστορικό σας.</translation>
 <translation id="4986728572522335985">Με αυτήν την ενέργεια θα διαγραφούν όλα τα δεδομένα στο κλειδί ασφαλείας, συμπεριλαμβανομένου του PIN του</translation>
 <translation id="4988526792673242964">Σελίδες</translation>
 <translation id="49896407730300355">Περιστροφή προς τα &amp;αριστερά</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index b92e308..598608b 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -2384,6 +2384,7 @@
 <translation id="3143515551205905069">لغو همگام‌سازی</translation>
 <translation id="3143754809889689516">پخش از ابتدا</translation>
 <translation id="3144647712221361880">بازکردن پیوند به‌عنوان</translation>
+<translation id="3144896554017119333">افزونه‌ها و موارد دیگر</translation>
 <translation id="3149510190863420837">‏برنامه‌های Chrome</translation>
 <translation id="3150693969729403281">همین‌حالا «بررسی ایمنی» اجرا شود</translation>
 <translation id="3150927491400159470">تازه سازی سخت</translation>
@@ -2492,6 +2493,7 @@
 <translation id="3268451620468152448">برگه‌های باز</translation>
 <translation id="3269093882174072735">بارگیری تصویر</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" /> نشان داده نشود</translation>
+<translation id="3269175001434213183">همگام‌سازی را روشن کنید تا از داده‌هایتان پشتیبان بگیرید و در هر دستگاهی از آن‌ها استفاده کنید</translation>
 <translation id="3269612321104318480">سبز دودی روشن و سفید</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{فایل}one{# فایل}other{# فایل}}</translation>
 <translation id="326999365752735949">در حال بارگیری تفاوت</translation>
@@ -4290,6 +4292,7 @@
 <translation id="4950993567860689081">سازمان شما جلسه‌تان را مدیریت می‌کند. سرپرستان می‌توانند نمایه‌تان را حذف کنند و بر ترافیک شبکه‌تان نیز نظارت داشته باشند.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{یک فایل}one{# فایل}other{# فایل}}</translation>
 <translation id="495170559598752135">کنش‌ها</translation>
+<translation id="4951966678293618079">هرگز گذرواژه‌ها برای این سایت ذخیره نشود</translation>
 <translation id="4953808748584563296">چهره‌نمای پیش‌فرض نارنجی</translation>
 <translation id="4955710816792587366">پین خودتان را انتخاب کنید</translation>
 <translation id="4959262764292427323">‏گذرواژه‌ها در حساب Google شما ذخیره می‌شود تا بتوانید در همه دستگاه‌هایتان از آن‌ها استفاده کنید</translation>
@@ -4319,6 +4322,7 @@
 <translation id="4981449534399733132">‏برای اینکه داده‌های محصول مرور را از همه دستگاه‌های همگام‌سازی‌شده و حساب Google خود پاک کنید، <ph name="BEGIN_LINK" />به سیستم وارد شوید<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">در هر دستگاهی کار را از جایی که متوقف کرده‌اید ادامه دهید</translation>
 <translation id="4982236238228587209">نرم‌افزار دستگاه</translation>
+<translation id="4986706507552097681">‏هرزمان بخواهید می‌توانید موارد مدنظرتان را برای همگام‌سازی در تنظیمات انتخاب کنید. Google ممکن است «جستجو» و سرویس‌های دیگر را براساس سابقه‌تان شخصی کند.</translation>
 <translation id="4986728572522335985">با این کار، همه داده‌های موجود در کلید امنیتی، ازجمله پین آن، پاک می‌شود</translation>
 <translation id="4988526792673242964">صفحات</translation>
 <translation id="49896407730300355">چرخاندن خلاف جهت ع&amp;قربه‌های ساعت</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 42828024..1160c93 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -2388,6 +2388,7 @@
 <translation id="3143515551205905069">Kanselahin ang pag-sync</translation>
 <translation id="3143754809889689516">I-play mula sa simula</translation>
 <translation id="3144647712221361880">Buksan ang link bilang</translation>
+<translation id="3144896554017119333">Mga extension at higit pa</translation>
 <translation id="3149510190863420837">Chrome Apps</translation>
 <translation id="3150693969729403281">Magpatakbo ng pag-check sa kaligtasan ngayon</translation>
 <translation id="3150927491400159470">I-hard Reload</translation>
@@ -2496,6 +2497,7 @@
 <translation id="3268451620468152448">Mga Bukas na Tab</translation>
 <translation id="3269093882174072735">I-load ang larawan</translation>
 <translation id="326911502853238749">Huwag ipakita ang <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">I-on ang pag-sync para i-back up ang iyong mga file at magamit ito sa anumang device</translation>
 <translation id="3269612321104318480">Light teal at puti</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{File}one{# file}other{# na file}}</translation>
 <translation id="326999365752735949">Dina-download ang diff</translation>
@@ -4294,6 +4296,7 @@
 <translation id="4950993567860689081">Pinapamahalaan ng iyong organisasyon ang session mo. Magagawa ng mga administrator na i-delete ang iyong profile at subaybayan ang trapiko sa network mo.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{isang file}one{# file}other{# na file}}</translation>
 <translation id="495170559598752135">Mga Pagkilos</translation>
+<translation id="4951966678293618079">Huwag kailanman mag-save ng mga password para sa site na ito</translation>
 <translation id="4953808748584563296">Default na orange na avatar</translation>
 <translation id="4955710816792587366">Piliin ang iyong PIN</translation>
 <translation id="4959262764292427323">Sine-save ang mga password sa iyong Google Account para magamit mo ang mga ito sa anumang device</translation>
@@ -4323,6 +4326,7 @@
 <translation id="4981449534399733132">Para i-clear ang data sa pag-browse sa lahat ng iyong naka-sync na device at sa Google Account mo, <ph name="BEGIN_LINK" />mag-sign in<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Magpatuloy kung saan ka huminto sa anumang device</translation>
 <translation id="4982236238228587209">Software ng device</translation>
+<translation id="4986706507552097681">Mapipili mo kung ano ang isi-sync anumang oras sa mga setting. Puwedeng i-personalize ng Google ang Search at iba pang serbisyo batay sa iyong history.</translation>
 <translation id="4986728572522335985">Ide-delete nito ang lahat ng data sa security key, kabilang ang PIN nito</translation>
 <translation id="4988526792673242964">Mga Page</translation>
 <translation id="49896407730300355">I-rotate p&amp;akaliwa</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index e1441af..8accf5e 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -2374,6 +2374,7 @@
 <translation id="3143515551205905069">Annuler la synchronisation</translation>
 <translation id="3143754809889689516">Faire jouer depuis le début</translation>
 <translation id="3144647712221361880">Ouvrir le lien en tant que</translation>
+<translation id="3144896554017119333">Extensions et plus</translation>
 <translation id="3149510190863420837">Applications Chrome</translation>
 <translation id="3150693969729403281">Exécuter la vérification de sécurité maintenant</translation>
 <translation id="3150927491400159470">Actualisation forcée</translation>
@@ -2482,6 +2483,7 @@
 <translation id="3268451620468152448">Onglets ouverts</translation>
 <translation id="3269093882174072735">Charger l'image</translation>
 <translation id="326911502853238749">Ne pas afficher le module <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Activer la synchronisation pour sauvegarder vos données et les utiliser sur n'importe quel appareil</translation>
 <translation id="3269612321104318480">Turquoise clair et blanc</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Fichier}one{# fichier}other{# fichiers}}</translation>
 <translation id="326999365752735949">Différence de téléchargement</translation>
@@ -4279,6 +4281,7 @@
 <translation id="4950993567860689081">Votre session est gérée par votre organisation. Les administrateurs peuvent supprimer votre profil ainsi que surveiller votre trafic réseau.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{un fichier}one{# fichier}other{# fichiers}}</translation>
 <translation id="495170559598752135">Actions</translation>
+<translation id="4951966678293618079">Ne jamais enregistrer les mots de passe pour ce site</translation>
 <translation id="4953808748584563296">Avatar orange par défaut</translation>
 <translation id="4955710816792587366">Choisir votre NIP</translation>
 <translation id="4959262764292427323">Les mots de passe sont enregistrés dans votre compte Google afin que vous puissiez les utiliser sur n'importe quel appareil</translation>
@@ -4308,6 +4311,7 @@
 <translation id="4981449534399733132">Pour effacer les données de navigation de tous vos appareils synchronisés et de votre compte Google, <ph name="BEGIN_LINK" />connectez-vous<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Reprenez là où vous vous étiez arrêté sur n'importe quel appareil</translation>
 <translation id="4982236238228587209">Logiciels sur l'appareil</translation>
+<translation id="4986706507552097681">Vous pouvez toujours choisir les éléments à synchroniser dans les paramètres. Google peut personnaliser la recherche et d'autres services en fonction de votre historique.</translation>
 <translation id="4986728572522335985">Cette action effacera toutes les données contenues sur la clé de sécurité, y compris son NIP</translation>
 <translation id="4988526792673242964">Pages</translation>
 <translation id="49896407730300355">Rotation dans le sens antih&amp;oraire</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index fd9ea67..dbcdade 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1490,7 +1490,7 @@
 <translation id="2318817390901984578">Android ऐप्लिकेशन का इस्तेमाल करने के लिए, अपना <ph name="DEVICE_TYPE" /> चार्ज करें और अपडेट करें.</translation>
 <translation id="2319459402137712349">कीबोर्ड खोलने के लिए कोई टेक्स्ट फ़ील्ड चुनें. आपके पास स्क्रीन पर सबसे नीचे कीबोर्ड आइकॉन को चुनने का विकल्प भी मौजूद होता है.</translation>
 <translation id="2319993584768066746">साइन-इन स्क्रीन पर दी गई फ़ोटो</translation>
-<translation id="2322193970951063277">शीर्षलेख और पादलेख</translation>
+<translation id="2322193970951063277">हेडर और फ़ुटर</translation>
 <translation id="2322318151094136999">जब कोई साइट सीरियल पाेर्ट (सुझाया गया) ऐक्सेस करना चाहे, तो इसके लिए पूछें</translation>
 <translation id="2322622365472107569">खत्म होने का समय <ph name="TIME" /></translation>
 <translation id="2323018538045954000">सेव किए गए वाई-फ़ाई नेटवर्क</translation>
@@ -8263,7 +8263,7 @@
 <translation id="8712637175834984815">समझ लिया</translation>
 <translation id="8713110120305151436">फटाफट सेटिंग में जाकर सुलभता के विकल्प दिखाएं</translation>
 <translation id="8713570323158206935"><ph name="BEGIN_LINK1" />सिस्‍टम जानकारी<ph name="END_LINK1" /> भेजें</translation>
-<translation id="8714838604780058252">पृष्‍ठभूमि ग्राफ़िक</translation>
+<translation id="8714838604780058252">बैकग्राउंड ग्राफ़िक</translation>
 <translation id="871515167518607670">कोई डिवाइस चुनें. इसके बाद, पेज को देखने के लिए, वहां Chrome खोलें.</translation>
 <translation id="8715480913140015283">बैकग्राउंड टैब आपके कैमरे का इस्तेमाल कर रहा है</translation>
 <translation id="8716931980467311658">इस <ph name="DEVICE_TYPE" /> से अपने सभी Linux ऐप्लिकेशन और अपनी Linux फ़ाइलों में मौजूद डेटा मिटाना चाहते हैं?</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 65c7895..c8349e7c 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -2375,6 +2375,7 @@
 <translation id="3143515551205905069">Otkaži sinkronizaciju</translation>
 <translation id="3143754809889689516">Reproduciraj od početka</translation>
 <translation id="3144647712221361880">Otvori vezu kao</translation>
+<translation id="3144896554017119333">Proširenja i drugo</translation>
 <translation id="3149510190863420837">Aplikacije sustava Chrome</translation>
 <translation id="3150693969729403281">Odmah pokrenite sigurnosnu provjeru</translation>
 <translation id="3150927491400159470">Tvrdo ponovno učitavanje</translation>
@@ -2483,6 +2484,7 @@
 <translation id="3268451620468152448">Otvorene kartice</translation>
 <translation id="3269093882174072735">Učitaj sliku</translation>
 <translation id="326911502853238749">Ne prikazuj <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Uključite sinkronizaciju da biste sigurnosno kopirali svoje sadržaje i upotrebljavali ih na bilo kojem uređaju</translation>
 <translation id="3269612321104318480">Svijetlotirkiznoplava i bijela</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Datoteka}one{# datoteka}few{# datoteke}other{# datoteka}}</translation>
 <translation id="326999365752735949">Preuzimanje razlika</translation>
@@ -4280,6 +4282,7 @@
 <translation id="4950993567860689081">Vašom sesijom upravlja vaša organizacija. Administratori mogu izbrisati vaš profil te pratiti vaš mrežni promet.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{datoteku}one{# datoteku}few{# datoteke}other{# datoteka}}</translation>
 <translation id="495170559598752135">Radnje</translation>
+<translation id="4951966678293618079">Nikad ne spremaj zaporke za ovu web-lokaciju</translation>
 <translation id="4953808748584563296">Zadani narančasti avatar</translation>
 <translation id="4955710816792587366">Odaberite PIN</translation>
 <translation id="4959262764292427323">Zaporke se spremaju na vaš Google račun kako biste ih mogli upotrebljavati na bilo kojem uređaju</translation>
@@ -4309,6 +4312,7 @@
 <translation id="4981449534399733132">Da biste izbrisali podatke o pregledavanju sa svih svojih sinkroniziranih uređaja i svojeg Google računa, <ph name="BEGIN_LINK" />prijavite se<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Nastavite tamo gdje ste stali na bilo kojem uređaju</translation>
 <translation id="4982236238228587209">Softver uređaja</translation>
+<translation id="4986706507552097681">U postavkama možete odabrati što će se sinkronizirati. Google može personalizirati Pretraživanje i druge usluge na temelju vaše povijesti.</translation>
 <translation id="4986728572522335985">Time će se izbrisati svi podaci na sigurnosnom ključu, uključujući PIN</translation>
 <translation id="4988526792673242964">Stranice</translation>
 <translation id="49896407730300355">Zakreni u smjeru suprotnom od &amp;kretanja kazaljke na satu</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 23301aa5..3c8ceb44 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -542,6 +542,7 @@
 <translation id="1495677929897281669">חזרה לכרטיסייה</translation>
 <translation id="1500297251995790841">מכשיר לא ידוע [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation>
 <translation id="1500801317528437432">‏מידע נוסף על אפליקציות Chrome שלא נתמכות</translation>
+<translation id="1503392482221435031">‏שליחת סטטיסטיקת שימוש אל Google באופן אוטומטי. בהגדרות המכשיר יש אפשרות להפעיל או להשבית את דוחות הקריסה.</translation>
 <translation id="150411034776756821">הסרה של <ph name="SITE" /></translation>
 <translation id="1504551620756424144">‏התיקיות המשותפות זמינות ב-Windows בספרייה <ph name="BASE_DIR" />.</translation>
 <translation id="1505494256539862015">לייצא את הסיסמאות</translation>
@@ -1395,6 +1396,7 @@
 <translation id="2256115617011615191">יש להפעיל מחדש כעת</translation>
 <translation id="2257053455312861282">הוספת חשבון בית ספרי מאפשרת לתלמיד או לתלמידה להיכנס בנוחות לאתרים, לתוספים ולאפליקציות, ועדיין לפעול במסגרת המגבלות של בקרת ההורים.</translation>
 <translation id="2261323523305321874">מנהל המערכת ביצע שינוי כללי במערכת שמשבית חלק מהפרופילים הישנים.</translation>
+<translation id="22614517036276112">המסמך הזה או המכשיר שלך לא עומדים בחלק מהכללים של מדיניות האבטחה של הארגון. עליך לברר עם האדמין מה צריך לתקן.</translation>
 <translation id="2262477216570151239">השהיה לפני חזרה</translation>
 <translation id="2263189956353037928">עליך לצאת ולהיכנס שוב</translation>
 <translation id="2263371730707937087">קצב הרענון של המסך</translation>
@@ -2702,6 +2704,7 @@
 <translation id="3461766685318630278">כאן יש אפשרות ליצור ולמחוק קונטיינרים נוספים.</translation>
 <translation id="3462311546193741693">‏הפעולה הזו תוציא אותך מרוב האתרים אך לא מחשבון Google, כדי שניתן יהיה לנקות את הנתונים המסונכרנים.</translation>
 <translation id="3462413494201477527">האם לבטל את הגדרת החשבון?</translation>
+<translation id="3462958980772249646">{COUNT,plural, =1{במכשיר הזה שמורה סיסמה אחת ({COUNT})}two{במכשיר הזה שמורות {COUNT} סיסמאות}many{במכשיר הזה שמורות {COUNT} סיסמאות}other{במכשיר הזה שמורות {COUNT} סיסמאות}}</translation>
 <translation id="346298925039590474">הרשת הסלולרית הזו תהיה זמינה לכל המשתמשים במכשיר הזה</translation>
 <translation id="3464145797867108663">הוספת פרופיל עבודה</translation>
 <translation id="346431825526753">זהו חשבון לילדים, המנוהל על-ידי <ph name="CUSTODIAN_EMAIL" />.</translation>
@@ -2997,6 +3000,7 @@
 <translation id="3743842571276656710">צריך להזין קוד אימות כדי ליצור התאמה עם <ph name="DEVICE_NAME" /></translation>
 <translation id="3747077776423672805">‏כדי להסיר אפליקציות, צריך לעבור אל 'הגדרות' &gt; 'חנות Google Play' &gt; 'ניהול העדפות Android' &gt;'אפליקציות' או 'מנהל אפליקציות'. לאחר מכן צריך להקיש על האפליקציה שרוצים להסיר (ייתכן שיהיה צורך להחליק ימינה או שמאלה כדי למצוא את האפליקציה). לסיום, יש להקיש על 'הסרת התקנה' או 'השבתה'.</translation>
 <translation id="3747603683749989726">להפעיל את האבטחה המשופרת?</translation>
+<translation id="3748424433435232460">כבר שמורה במכשיר הזה סיסמה לחשבון הזה</translation>
 <translation id="3748706263662799310">דיווח על באג</translation>
 <translation id="3750562496035670393">‏מערכת Chrome שמרה את הסיסמה שלך במכשיר הזה, אבל יש לך אפשרות לשמור אותה בחשבון Google במקום. לאחר מכן, כל הסיסמאות שבחשבון Google שלך יהיו זמינות גם כשיהיה לך חיבור לחשבון.</translation>
 <translation id="3752253558646317685">כדי לשמור את טביעת האצבע, על הילד או הילדה להרים ולהחזיר את האצבע כמה פעמים</translation>
@@ -3176,6 +3180,7 @@
 <translation id="3897746662269329507">‏מכשיר <ph name="DEVICE_TYPE" /> מיועד למשחקים. בשלב הבא, תיפתח האפליקציה 'מה חדש ב-Chromebook', ובה תהיה לך גישה למאות משחקים עדכניים, למבצעים על משחקים ולתכונות הגיימינג של המכשיר.</translation>
 <translation id="3898233949376129212">שפת המכשיר</translation>
 <translation id="3898327728850887246">האתר <ph name="SITE_NAME" /> מבקש את ההרשאות הבאות: <ph name="FIRST_PERMISSION" /> וגם <ph name="SECOND_PERMISSION" /></translation>
+<translation id="3898743717925399322">‏הסיסמה שלך לאתר <ph name="WEBSITE" /> שמורה במכשיר הזה ובחשבון Google. מאיפה למחוק את הסיסמה?</translation>
 <translation id="389901847090970821">בחירת מקלדת</translation>
 <translation id="3900966090527141178">ייצוא סיסמאות</translation>
 <translation id="3902789559055749153">עליך לבחור איך ברצונך ליצור מפתח גישה עבור <ph name="APP_NAME" /></translation>
@@ -5088,6 +5093,7 @@
 <translation id="5733866499231170760">מזהה לא תקין. הפורמט שהזנת שגוי. יש לקרוא את ההוראות שקיבלת ולוודא שהמזהה מוזן בפורמט הנכון. אם לא הצלחת לפתור את הבעיה, אפשר להשאיר את השדה ריק ולהמשיך בהתקנה.</translation>
 <translation id="5734362860645681824">תקשורת</translation>
 <translation id="5734697361979786483">הוספת התקן רשת לשיתוף קבצים</translation>
+<translation id="5736092224453113618">{NUM_FILES,plural, =0{הנתונים האלה או המכשיר שלך לא עומדים בחלק מהכללים של מדיניות האבטחה של הארגון. עליך לברר עם האדמין מה צריך לתקן.}=1{הקובץ הזה או המכשיר שלך לא עומדים בחלק מהכללים של מדיניות האבטחה של הארגון. עליך לברר עם האדמין מה צריך לתקן.}two{הקבצים האלה לא עומדים בחלק מהכללים של מדיניות האבטחה של הארגון. עליך לברר עם האדמין מה צריך לתקן.}many{הקבצים האלה לא עומדים בחלק מהכללים של מדיניות האבטחה של הארגון. עליך לברר עם האדמין מה צריך לתקן.}other{הקבצים האלה לא עומדים בחלק מהכללים של מדיניות האבטחה של הארגון. עליך לברר עם האדמין מה צריך לתקן.}}</translation>
 <translation id="5736796278325406685">יש להזין שם משתמש חוקי</translation>
 <translation id="5738093759615225354">מפתח הגישה הזה ישמש לכניסה למחשב</translation>
 <translation id="5738329404678738022">אפשר לאחסן את הסימניות ופריטים נוספים בעזרת הסנכרון</translation>
@@ -5906,6 +5912,7 @@
 <translation id="6508261954199872201">יישום: <ph name="APP_NAME" /></translation>
 <translation id="6509207748479174212">רישיון מדיה</translation>
 <translation id="6511827214781912955">כדאי למחוק את <ph name="FILENAME" /> כדי שמשתמשים אחרים במכשיר לא יוכלו לראות את הסיסמאות שלך</translation>
+<translation id="6512808201725371249">‏כבר שמורה במנהל הסיסמאות של Google סיסמה לחשבון הזה (<ph name="USER_EMAIL" />)</translation>
 <translation id="6513247462497316522">‏Google Chrome ישתמש בחבילת הגלישה אם אין לך חיבור לרשת אחרת.</translation>
 <translation id="6514010653036109809">מכשיר זמין:</translation>
 <translation id="6514565641373682518">דף זה השבית את סמן העכבר שלך.</translation>
@@ -6328,6 +6335,7 @@
 <translation id="6896758677409633944">העתקה</translation>
 <translation id="6897363604023044284">בחירת אתרים שהנתונים שלהם יוסרו</translation>
 <translation id="6897688156970667447">שימושי בתנאי תאורה חלשה וחוסך בצריכת הסוללה</translation>
+<translation id="6897972855231767338">מידע נוסף על גלישה כאורח</translation>
 <translation id="6898440773573063262">כעת ניתן להגדיר הפעלה אוטומטית עבור יישומי קיוסק במכשיר הזה.</translation>
 <translation id="6900284862687837908">יישום רקע: <ph name="BACKGROUND_APP_URL" /></translation>
 <translation id="6900532703269623216">הגנה משופרת</translation>
@@ -6582,6 +6590,7 @@
 <translation id="7123030151043029868">מורשים להוריד מספר קבצים באופן אוטומטי</translation>
 <translation id="7123302939607518173">כאן אפשר להוסיף תחום עניין או אתר, אם לדעתך מודעות שקשורות לפריט יהיו רלוונטיות לך.</translation>
 <translation id="7124013154139278147">הקצאת מתג לפעולה "הקודם"</translation>
+<translation id="7124712201233930202">ההורדה לא עומדת בדרישות המדיניות של הארגון שלך</translation>
 <translation id="7125029162161377569">במסגרת גרסאות הניסיון של ארגז החול לפרטיות, אתרים יכולים לספק את אותה חוויית גלישה תוך שימוש בפחות נתונים אישיים. כך מוגברת ההגנה על הפרטיות שלך והמעקב באתרים שונים מופחת. נוסיף גרסאות ניסיון חדשות ברגע שיהיו מוכנות לבדיקה.</translation>
 <translation id="7125148293026877011">‏מחיקה של Crostini</translation>
 <translation id="7127980134843952133">היסטוריית הורדות</translation>
@@ -8550,6 +8559,7 @@
 <translation id="897939795688207351">ב-<ph name="ORIGIN" /></translation>
 <translation id="8980345560318123814">דוחות משוב</translation>
 <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – קרס</translation>
+<translation id="8981038076986775523">מידע נוסף על השימוש במיקרופון</translation>
 <translation id="8981825781894055334">הנייר אוזל</translation>
 <translation id="8983018820925880511">הפרופיל החדש הזה ינוהל על ידי <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation>
 <translation id="8983632908660087688">ל-<ph name="ORIGIN" /> יש הרשאה לערוך את <ph name="FILENAME" /></translation>
@@ -8637,6 +8647,7 @@
 <translation id="9057007989365783744"><ph name="SUPERVISED_USER_NAME" /> רוצה לקבל גישה לתוכן הבא:</translation>
 <translation id="9057354806206861646">לוח זמנים של עדכונים</translation>
 <translation id="9058070466596314168">{NUM_NOTIFICATION,plural, =1{בערך התראה אחת ביום}two{בערך {NUM_NOTIFICATION} התראות ביום}many{בערך {NUM_NOTIFICATION} התראות ביום}other{בערך {NUM_NOTIFICATION} התראות ביום}}</translation>
+<translation id="9061383912634843744">כניסה אוטומטית לאפליקציות באמצעות פרטי כניסה שמורים. אם התכונה מושבתת, תישלח אליך בקשת אימות בכל פעם לפני כניסה לאתר או לאפליקציה.</translation>
 <translation id="9062468308252555888">14x</translation>
 <translation id="9063208415146866933">שגיאה משורה <ph name="ERROR_LINE_START" /> עד <ph name="ERROR_LINE_END" /></translation>
 <translation id="9064275926664971810">הפעלת האפשרות של 'מילוי אוטומטי' למלא טפסים בלחיצה אחת</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 6b09c90..41a09d6 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -2372,6 +2372,7 @@
 <translation id="3143515551205905069">Synchronisatie annuleren</translation>
 <translation id="3143754809889689516">Afspelen vanaf het begin</translation>
 <translation id="3144647712221361880">Link openen als</translation>
+<translation id="3144896554017119333">Extensies en meer</translation>
 <translation id="3149510190863420837">Chrome-apps</translation>
 <translation id="3150693969729403281">Veiligheidscheck nu uitvoeren</translation>
 <translation id="3150927491400159470">Geforceerd opnieuw laden</translation>
@@ -2480,6 +2481,7 @@
 <translation id="3268451620468152448">Geopende tabbladen</translation>
 <translation id="3269093882174072735">Afbeelding laden</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" /> niet bekijken</translation>
+<translation id="3269175001434213183">Zet synchronisatie aan om een back-up van je gegevens te maken en deze op elk apparaat te gebruiken</translation>
 <translation id="3269612321104318480">Lichtdonkergroen/wit</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Bestand}other{# bestanden}}</translation>
 <translation id="326999365752735949">Diff downloaden</translation>
@@ -4275,6 +4277,7 @@
 <translation id="4950993567860689081">Je sessie wordt beheerd door je organisatie. Beheerders kunnen je profiel verwijderen en ook je netwerkverkeer bijhouden.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{een bestand}other{# bestanden}}</translation>
 <translation id="495170559598752135">Acties</translation>
+<translation id="4951966678293618079">Nooit wachtwoorden opslaan voor deze site</translation>
 <translation id="4953808748584563296">Standaard oranje avatar</translation>
 <translation id="4955710816792587366">Je pincode kiezen</translation>
 <translation id="4959262764292427323">Wachtwoorden worden in je Google-account opgeslagen, zodat je deze op elk apparaat kunt gebruiken</translation>
@@ -4304,6 +4307,7 @@
 <translation id="4981449534399733132">Als je browsegegevens wilt wissen van al je gesynchroniseerde apparaten en je Google-account, <ph name="BEGIN_LINK" />log je in<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Ga op elk apparaat verder waar je gebleven was</translation>
 <translation id="4982236238228587209">Apparaatsoftware</translation>
+<translation id="4986706507552097681">Je kunt altijd in de instellingen bepalen wat je wilt synchroniseren. Google kan Zoeken en andere services personaliseren op basis van je geschiedenis.</translation>
 <translation id="4986728572522335985">Hierdoor worden alle gegevens op de beveiligingssleutel, waaronder de pincode, verwijderd.</translation>
 <translation id="4988526792673242964">Pagina's</translation>
 <translation id="49896407730300355">Linksom &amp;draaien</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 4dd25699..5cbd26f 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -2381,6 +2381,7 @@
 <translation id="3143515551205905069">Avbryt synkronisering</translation>
 <translation id="3143754809889689516">Spill av fra begynnelsen</translation>
 <translation id="3144647712221361880">Åpne linken som</translation>
+<translation id="3144896554017119333">Utvidelser med mer</translation>
 <translation id="3149510190863420837">Chrome-apper</translation>
 <translation id="3150693969729403281">Kjør sikkerhetssjekk nå</translation>
 <translation id="3150927491400159470">Hard innlasting på nytt</translation>
@@ -2489,6 +2490,7 @@
 <translation id="3268451620468152448">Åpne faner</translation>
 <translation id="3269093882174072735">Last inn bildet</translation>
 <translation id="326911502853238749">Ikke vis <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Slå på synkronisering for å sikkerhetskopiere tingene dine og bruke dem på alle enheter</translation>
 <translation id="3269612321104318480">Lys blågrønn og hvit</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Fil}other{# filer}}</translation>
 <translation id="326999365752735949">Nedlastingsproblemer</translation>
@@ -4284,6 +4286,7 @@
 <translation id="4950993567860689081">Økten din administreres av organisasjonen din. Administratorer kan slette profilen din og dessuten overvåke nettverkstrafikken din.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{en fil}other{# filer}}</translation>
 <translation id="495170559598752135">Handlinger</translation>
+<translation id="4951966678293618079">Lagre aldri passord for dette nettstedet</translation>
 <translation id="4953808748584563296">Oransje standardbrukerbilde</translation>
 <translation id="4955710816792587366">Velg PIN-koden din</translation>
 <translation id="4959262764292427323">Passordene er lagret i Google-kontoen din, slik at du kan bruke dem på alle enheter</translation>
@@ -4313,6 +4316,7 @@
 <translation id="4981449534399733132">For å slette nettlesingsdata på alle synkroniserte enheter og Google-kontoen din må du <ph name="BEGIN_LINK" />logge på<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Fortsett der du slapp – på hvilken som helst enhet.</translation>
 <translation id="4982236238228587209">Enhetsprogramvare</translation>
+<translation id="4986706507552097681">Du kan når som helst velge hva du vil synkronisere, i innstillingene. Google kan gi Søk og andre tjenester personlig preg basert på loggen din.</translation>
 <translation id="4986728572522335985">Dette fører til at alle dataene på sikkerhetsnøkkelen, inkludert PIN-koden, blir slettet</translation>
 <translation id="4988526792673242964">Sider</translation>
 <translation id="49896407730300355">Rotér m&amp;ot klokken</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index d049f34..ee3feef 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -2370,6 +2370,7 @@
 <translation id="3143515551205905069">ସିଙ୍କ୍‌ ବାତିଲ୍‍ କରନ୍ତୁ</translation>
 <translation id="3143754809889689516">ଆରମ୍ଭରୁ ଚଲାନ୍ତୁ</translation>
 <translation id="3144647712221361880">ଏହିପରି ଭାବେ ଲିଙ୍କ୍ ଖୋଲନ୍ତୁ</translation>
+<translation id="3144896554017119333">ଏକ୍ସଟେନସନ ଏବଂ ଆହୁରି ଅନେକ କିଛି</translation>
 <translation id="3149510190863420837">Chrome ଆପ୍ସ</translation>
 <translation id="3150693969729403281">ବର୍ତ୍ତମାନ ସୁରକ୍ଷା ଯାଞ୍ଚ ଚଲାନ୍ତୁ</translation>
 <translation id="3150927491400159470">ହାର୍ଡ ରିଲୋଡ୍</translation>
@@ -2478,6 +2479,7 @@
 <translation id="3268451620468152448">ଖୋଲାଥିବା ଟାବ୍‌ଗୁଡ଼ିକ</translation>
 <translation id="3269093882174072735">ଛବିକୁ ଲୋଡ୍ କରନ୍ତୁ</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" /> ଦେଖାନ୍ତୁ ନାହିଁ</translation>
+<translation id="3269175001434213183">ଆପଣଙ୍କ ଷ୍ଟଫର ବେକଅପ ନେବା ପାଇଁ ସିଙ୍କ ଚାଲୁ କରି ଯେ କୌଣସି ଡିଭାଇସରେ ଏହାକୁ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="3269612321104318480">ହାଲୁକା ଟିଲ୍ ଓ ଧଳା</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{ଫାଇଲ୍}other{#ଟି ଫାଇଲ୍}}</translation>
 <translation id="326999365752735949">diff ଡାଉନ୍‍‍ଲୋଡ୍ ହେଉଛି</translation>
@@ -4275,6 +4277,7 @@
 <translation id="4950993567860689081">ଆପଣଙ୍କ ସେସନ ଆପଣଙ୍କ ସଂସ୍ଥା ଦ୍ୱାରା ପରିଚାଳିତ ହେଉଛି। ଆଡମିନିଷ୍ଟ୍ରେଟରମାନେ ଆପଣଙ୍କ ପ୍ରୋଫାଇଲକୁ ଡିଲିଟ କରିପାରିବେ ଏବଂ ଆପଣଙ୍କ ନେଟୱାର୍କ ଟ୍ରାଫିକକୁ ମଧ୍ୟ ମନିଟର କରିପାରିବେ।</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ଏକ ଫାଇଲ୍}other{#ଟି ଫାଇଲ୍}}</translation>
 <translation id="495170559598752135">କାର୍ଯ୍ୟ</translation>
+<translation id="4951966678293618079">ଏହି ସାଇଟ ପାଇଁ କେବେ ବି ପାସୱାର୍ଡଗୁଡ଼ିକୁ ସେଭ କରନ୍ତୁ ନାହିଁ</translation>
 <translation id="4953808748584563296">ଡିଫଲ୍ଟ ଅରେଞ୍ଜ ଅବତାର</translation>
 <translation id="4955710816792587366">ଆପଣଙ୍କର ପିନ୍‌ ନମ୍ବର ବାଛନ୍ତୁ</translation>
 <translation id="4959262764292427323">ପାସ୍‌ୱାର୍ଡଗୁଡ଼ିକ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରେ ସେଭ୍ କରାଯାଇଛି ତେଣୁ ଆପଣ ସେଗୁଡ଼ିକୁ ଯେକୌଣସି ଡିଭାଇସ୍‌ରେ ବ୍ୟବହାର କରିପାରିବେ</translation>
@@ -4304,6 +4307,7 @@
 <translation id="4981449534399733132">ସିଙ୍କ୍ ହୋଇଥିବା ଆପଣଙ୍କର ସମସ୍ତ ଡିଭାଇସ୍ ଏବଂ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରୁ ବ୍ରାଉଜିଂ ଡାଟା ଖାଲି କରିବାକୁ, <ph name="BEGIN_LINK" />ସାଇନ୍ ଇନ୍ କରନ୍ତୁ<ph name="END_LINK" />।</translation>
 <translation id="4982111327868342436">ଯେ କୌଣସି ଡିଭାଇସରେ ଆପଣ ଯେଉଁଠି ଛାଡ଼ିଥିଲେ ସେଠାରୁ ପୁଣି ଆରମ୍ଭ କରନ୍ତୁ</translation>
 <translation id="4982236238228587209">ଡିଭାଇସ୍ ସଫ୍ଟୱେୟାର</translation>
+<translation id="4986706507552097681">ସେଟିଂସରେ କଣ ସିଙ୍କ କରିବାକୁ ହେବ ତାହା ଆପଣ ସର୍ବଦା ବାଛି ପାରିବେ। Google ଆପଣଙ୍କ ଇତିହାସ ଆଧାରରେ Search ଏବଂ ଅନ୍ୟ ସେବାଗୁଡ଼ିକୁ ପର୍ସନାଲାଇଜ କରିପାରେ।</translation>
 <translation id="4986728572522335985">ଏହା ସୁରକ୍ଷା କୀ’ର PIN ସମେତ ଏଥିରେ ଥିବା ସମସ୍ତ ଡାଟା ଡିଲିଟ୍ କରିଦେବ</translation>
 <translation id="4988526792673242964">ପୃଷ୍ଠାଗୁଡ଼ିକ</translation>
 <translation id="49896407730300355">c&amp;ounterclockwise ଘୂରାନ୍ତୁ</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index fe3e70ac..d80ad79 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -2387,6 +2387,7 @@
 <translation id="3143515551205905069">ਸਿੰਕ ਰੱਦ ਕਰੋ</translation>
 <translation id="3143754809889689516">ਸ਼ੁਰੂ ਤੋਂ ਚਲਾਓ</translation>
 <translation id="3144647712221361880">ਦੇ ਤੌਰ 'ਤੇ ਲਿੰਕ ਖੋਲ੍ਹੋ</translation>
+<translation id="3144896554017119333">ਐਕਸਟੈਂਸ਼ਨਾਂ ਅਤੇ ਹੋਰ ਚੀਜ਼ਾਂ</translation>
 <translation id="3149510190863420837">Chrome ਐਪਸ</translation>
 <translation id="3150693969729403281">ਹੁਣੇ ਸੁਰੱਖਿਆ ਜਾਂਚ ਚਲਾਓ</translation>
 <translation id="3150927491400159470">ਹਾਰਡ ਰੀਲੋਡ</translation>
@@ -2495,6 +2496,7 @@
 <translation id="3268451620468152448">ਟੈਬਸ ਖੋਲ੍ਹੋ</translation>
 <translation id="3269093882174072735">ਚਿੱਤਰ ਲੋਡ ਕਰੋ</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" /> ਨਾ ਦਿਖਾਓ</translation>
+<translation id="3269175001434213183">ਆਪਣੀ ਸਮੱਗਰੀ ਦਾ ਬੈਕਅੱਪ ਲੈਣ ਅਤੇ ਉਸਨੂੰ ਕਿਸੇ ਵੀ ਡੀਵਾਈਸ 'ਤੇ ਵਰਤਣ ਲਈ, ਸਿੰਕ ਚਾਲੂ ਕਰੋ</translation>
 <translation id="3269612321104318480">ਹਲਕਾ ਹਰਾ-ਨੀਲਾ ਅਤੇ ਸਫ਼ੈਦ</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{ਫ਼ਾਈਲ}one{# ਫ਼ਾਈਲ}other{# ਫ਼ਾਈਲਾਂ}}</translation>
 <translation id="326999365752735949">diff ਡਾਊਨਲੋਡ ਕਰ ਰਿਹਾ ਹੈ</translation>
@@ -4293,6 +4295,7 @@
 <translation id="4950993567860689081">ਤੁਹਾਡੇ ਸੈਸ਼ਨ ਦਾ ਪ੍ਰਬੰਧਨ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੇ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਮਿਟਾ ਸਕਦੇ ਹਨ ਅਤੇ ਤੁਹਾਡੇ ਨੈੱਟਵਰਕ ਟਰੈਫ਼ਿਕ ਦੀ ਨਿਗਰਾਨੀ ਵੀ ਕਰ ਸਕਦੇ ਹਨ।</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ਇੱਕ ਫ਼ਾਈਲ}one{# ਫ਼ਾਈਲ}other{# ਫ਼ਾਈਲਾਂ}}</translation>
 <translation id="495170559598752135">ਕਿਰਿਆਵਾਂ</translation>
+<translation id="4951966678293618079">ਇਸ ਸਾਈਟ 'ਤੇ ਕਦੇ ਵੀ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਨਾ ਕਰੋ</translation>
 <translation id="4953808748584563296">ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੰਤਰੀ ਅਵਤਾਰ</translation>
 <translation id="4955710816792587366">ਆਪਣਾ ਪਿੰਨ ਚੁਣੋ</translation>
 <translation id="4959262764292427323">ਪਾਸਵਰਡ ਤੁਹਾਡੇ 'Google ਖਾਤੇ' ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤੇ ਜਾਂਦੇ ਹਨ ਤਾਂ ਕਿ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਕਿਸੇ ਡੀਵਾਈਸ 'ਤੇ ਵਰਤ ਸਕੋ</translation>
@@ -4322,6 +4325,7 @@
 <translation id="4981449534399733132">ਤੁਹਾਡੇ ਸਾਰੇ ਸਿੰਕ ਕੀਤੇ ਡੀਵਾਈਸਾਂ ਅਤੇ ਤੁਹਾਡੇ 'Google ਖਾਤੇ' ਵਿੱਚੋਂ ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟਾ ਕਲੀਅਰ ਕਰਨ ਲਈ, <ph name="BEGIN_LINK" />ਸਾਈਨ-ਇਨ ਕਰੋ<ph name="END_LINK" />।</translation>
 <translation id="4982111327868342436">ਕਿਸੇ ਵੀ ਡੀਵਾਈਸ 'ਤੇ ਉੱਥੋਂ ਹੀ ਸ਼ੁਰੂ ਕਰੋ ਜਿੱਥੇ ਤੁਸੀਂ ਛੱਡਿਆ ਸੀ</translation>
 <translation id="4982236238228587209">ਡੀਵਾਈਸ ਸਾਫ਼ਟਵੇਅਰ</translation>
+<translation id="4986706507552097681">ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਕਿਸੇ ਵੀ ਵੇਲੇ ਇਹ ਚੁਣ ਸਕਦੇ ਹੋ ਕਿ ਕੀ ਸਿੰਕ ਕਰਨਾ ਹੈ। Google ਤੁਹਾਡੇ ਇਤਿਹਾਸ ਦੇ ਆਧਾਰ 'ਤੇ Search ਅਤੇ ਹੋਰ ਸੇਵਾਵਾਂ ਨੂੰ ਵਿਅਕਤੀਗਤ ਬਣਾ ਸਕਦਾ ਹੈ।</translation>
 <translation id="4986728572522335985">ਇੰਝ ਕਰਨ ਨਾਲ ਸੁਰੱਖਿਆ ਕੁੰਜੀ 'ਤੇ ਸਟੋਰ ਕੀਤੇ ਇਸਦੇ ਪਿੰਨ ਸਮੇਤ ਸਾਰਾ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ</translation>
 <translation id="4988526792673242964">ਸਫ਼ੇ</translation>
 <translation id="49896407730300355">ਕਾ&amp;ਊਂਟਰਕਲੌਕਵਾਈਜ ਰੋਟੇਟ ਕਰੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 56be9ac..a2d7ba8 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -3743,6 +3743,7 @@
 <translation id="445099924538929605">O <ph name="DEVICE_OS" /> detetou um TPM ativo que pode armazenar os seus dados com mais segurança.</translation>
 <translation id="4451479197788154834">A sua palavra-passe foi guardada neste dispositivo e na sua Conta Google.</translation>
 <translation id="4451757071857432900">Bloqueado em sites que apresentam anúncios intrusivos ou enganadores (recomendado)</translation>
+<translation id="4452898361839215358">ou selecionar um PPD. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="4453946976636652378">Procurar no <ph name="SEARCH_ENGINE_NAME" /> ou introduzir um URL</translation>
 <translation id="4458535500699390320">Enquanto este separador estava inativo, a Poupança de memória libertou memória para outras tarefas. Pode alterar esta definição em qualquer altura nas definições.</translation>
 <translation id="4459169140545916303">Ativo há <ph name="DEVICE_LAST_ACTIVATED_TIME" /> dias</translation>
@@ -8374,6 +8375,7 @@
 <translation id="8823514049557262177">Copiar te&amp;xto do link</translation>
 <translation id="8823559166155093873">Bloquear cookies</translation>
 <translation id="8823704566850948458">Sugerir palavra-passe…</translation>
+<translation id="8823963789776061136">Em alternativa, selecione o PPD da impressora. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="8824701697284169214">Adicionar Pá&amp;gina...</translation>
 <translation id="8827125715368568315">Bloqueou <ph name="PERMISSION" /> e mais <ph name="COUNT" /></translation>
 <translation id="8827289157496676362">Afixar extensão</translation>
@@ -8630,6 +8632,7 @@
 <translation id="9057007989365783744"><ph name="SUPERVISED_USER_NAME" /> pretende aceder ao seguinte conteúdo:</translation>
 <translation id="9057354806206861646">Programa de atualizações</translation>
 <translation id="9058070466596314168">{NUM_NOTIFICATION,plural, =1{Cerca de 1 notificação por dia}other{Cerca de {NUM_NOTIFICATION} notificações por dia}}</translation>
+<translation id="9058760336383947367">Ver PPD da impressora</translation>
 <translation id="9061383912634843744">Inicie sessão automaticamente nos sites e apps com as credenciais guardadas. Se esta funcionalidade estiver desativada, é-lhe pedida sempre uma confirmação antes de iniciar sessão num site ou numa app.</translation>
 <translation id="9062468308252555888">14x</translation>
 <translation id="9063208415146866933">Erro da linha <ph name="ERROR_LINE_START" /> até <ph name="ERROR_LINE_END" />.</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index dff4dbf..ecda073 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -2373,6 +2373,7 @@
 <translation id="3143515551205905069">Anulează sincronizarea</translation>
 <translation id="3143754809889689516">Redă de la început</translation>
 <translation id="3144647712221361880">Deschide linkul ca</translation>
+<translation id="3144896554017119333">Extensii și altele</translation>
 <translation id="3149510190863420837">Aplicații Chrome</translation>
 <translation id="3150693969729403281">Rulează acum verificarea de siguranță</translation>
 <translation id="3150927491400159470">Reîncărcați forțat</translation>
@@ -2481,6 +2482,7 @@
 <translation id="3268451620468152448">File deschise</translation>
 <translation id="3269093882174072735">Încarcă imaginea</translation>
 <translation id="326911502853238749">Nu afișa <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Activează sincronizarea ca să faci backup pentru date și să le folosești pe orice dispozitiv</translation>
 <translation id="3269612321104318480">Turcoaz deschis și alb</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Fișier}few{# fișiere}other{# de fișiere}}</translation>
 <translation id="326999365752735949">Se descarcă diferențele</translation>
@@ -4278,6 +4280,7 @@
 <translation id="4950993567860689081">Sesiunea este gestionată de organizație. Administratorii pot să-ți șteargă profilul și să monitorizeze traficul de rețea.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{un fișier}few{# fișiere}other{# de fișiere}}</translation>
 <translation id="495170559598752135">Acțiuni</translation>
+<translation id="4951966678293618079">Nu salva niciodată parolele pentru acest site</translation>
 <translation id="4953808748584563296">Avatar portocaliu prestabilit</translation>
 <translation id="4955710816792587366">Alege codul PIN</translation>
 <translation id="4959262764292427323">Parolele sunt salvate în Contul tău Google, astfel încât să le poți folosi pe orice dispozitiv</translation>
@@ -4307,6 +4310,7 @@
 <translation id="4981449534399733132">Pentru a șterge datele de navigare de pe toate dispozitivele sincronizate și din Contul Google, <ph name="BEGIN_LINK" />conectează-te<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Reia de unde ai rămas, pe orice dispozitiv</translation>
 <translation id="4982236238228587209">Software-ul de pe dispozitiv</translation>
+<translation id="4986706507552097681">Poți să alegi oricând ce să sincronizezi în setări. Google poate personaliza Căutarea și alte servicii pe baza istoricului.</translation>
 <translation id="4986728572522335985">Vor fi șterse toate datele de pe cheia de securitate, inclusiv codul său PIN</translation>
 <translation id="4988526792673242964">Pagini</translation>
 <translation id="49896407730300355">Rotiți în sens &amp;invers acelor de ceasornic</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 070cf78f..bbb26d6 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -2374,6 +2374,7 @@
 <translation id="3143515551205905069">Zrušiť synchronizáciu</translation>
 <translation id="3143754809889689516">Prehrať od začiatku</translation>
 <translation id="3144647712221361880">Otvoriť odkaz ako</translation>
+<translation id="3144896554017119333">Rozšírenia a ďalšie možnosti</translation>
 <translation id="3149510190863420837">Aplikácie Chrome</translation>
 <translation id="3150693969729403281">Spustiť kontrolu bezpečnosti</translation>
 <translation id="3150927491400159470">Vynútiť opätovné načítanie</translation>
@@ -2482,6 +2483,7 @@
 <translation id="3268451620468152448">Otvorené karty</translation>
 <translation id="3269093882174072735">Načítať obrázok</translation>
 <translation id="326911502853238749">Nezobrazovať <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Zapnite synchronizáciu a zálohujte svoj obsah, pričom ho môžete používať v ľubovoľnom zariadení</translation>
 <translation id="3269612321104318480">Svetlá modrozelená a biela</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Súbor}few{# súbory}many{# files}other{# súborov}}</translation>
 <translation id="326999365752735949">Súbor diff sa sťahuje</translation>
@@ -4279,6 +4281,7 @@
 <translation id="4950993567860689081">Reláciu spravuje vaša organizácia. Správcovia môžu odstrániť váš profil aj sledovať vašu sieťovú premávku.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{súbor}few{# súbory}many{# files}other{# súborov}}</translation>
 <translation id="495170559598752135">Akcie</translation>
+<translation id="4951966678293618079">Nikdy neukladať heslá tohto webu</translation>
 <translation id="4953808748584563296">Predvolený oranžový avatar</translation>
 <translation id="4955710816792587366">Vyberte si PIN</translation>
 <translation id="4959262764292427323">Heslá sa ukladajú do účtu Google, takže ich môžete používať v ľubovoľnom zariadení</translation>
@@ -4308,6 +4311,7 @@
 <translation id="4981449534399733132">Ak chcete vymazať dáta prehliadania zo všetkých synchronizovaných zariadení a účtu Google, <ph name="BEGIN_LINK" />prihláste sa<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Pokračujte v ľubovoľnom zariadení tam, kde ste prestali</translation>
 <translation id="4982236238228587209">Softvér zariadenia</translation>
+<translation id="4986706507552097681">Obsah, ktorý chcete synchronizovať, môžete kedykoľvek vybrať v nastaveniach. Google môže prispôsobiť Vyhľadávanie a ďalšie služby na základe vašej histórie.</translation>
 <translation id="4986728572522335985">Odstránia sa všetky údaje v bezpečnostnom kľúči vrátane kódu PIN</translation>
 <translation id="4988526792673242964">Stránky</translation>
 <translation id="49896407730300355">Otočiť &amp;proti smeru hodinových ručičiek</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index b1a05e0..88db52b2 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -2372,6 +2372,7 @@
 <translation id="3143515551205905069">ยกเลิกการซิงค์</translation>
 <translation id="3143754809889689516">เริ่มเล่นตั้งแต่ต้น</translation>
 <translation id="3144647712221361880">เปิดลิงก์ในฐานะ</translation>
+<translation id="3144896554017119333">ส่วนขยายและอื่นๆ</translation>
 <translation id="3149510190863420837">แอป Chrome</translation>
 <translation id="3150693969729403281">เรียกใช้การตรวจสอบความปลอดภัยเลย</translation>
 <translation id="3150927491400159470">โหลดซ้ำแบบดึงข้อมูลใหม่ทั้งหมด</translation>
@@ -2480,6 +2481,7 @@
 <translation id="3268451620468152448">แท็บที่เปิดอยู่</translation>
 <translation id="3269093882174072735">โหลดภาพ</translation>
 <translation id="326911502853238749">ไม่แสดง<ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">เปิดการซิงค์เพื่อสำรองข้อมูลและใช้ในอุปกรณ์เครื่องใดก็ได้</translation>
 <translation id="3269612321104318480">สีน้ำเงินอมเขียวอ่อนและสีขาว</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{ไฟล์}other{# ไฟล์}}</translation>
 <translation id="326999365752735949">กำลังดาวน์โหลดความต่าง</translation>
@@ -4277,6 +4279,7 @@
 <translation id="4950993567860689081">องค์กรเป็นผู้จัดการเซสชันของคุณ ผู้ดูแลระบบจะลบโปรไฟล์ รวมทั้งตรวจสอบการจราจรของข้อมูลในเครือข่ายได้</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{1 ไฟล์}other{# ไฟล์}}</translation>
 <translation id="495170559598752135">การทำงาน</translation>
+<translation id="4951966678293618079">ไม่บันทึกรหัสผ่านสำหรับเว็บไซต์นี้</translation>
 <translation id="4953808748584563296">รูปโปรไฟล์เริ่มต้นสีส้ม</translation>
 <translation id="4955710816792587366">เลือก PIN ของคุณ</translation>
 <translation id="4959262764292427323">เราจะบันทึกรหัสผ่านไว้ในบัญชี Google เพื่อให้คุณใช้ในอุปกรณ์เครื่องใดก็ได้</translation>
@@ -4306,6 +4309,7 @@
 <translation id="4981449534399733132"><ph name="BEGIN_LINK" />ลงชื่อเข้าใช้<ph name="END_LINK" />เพื่อล้างข้อมูลการท่องเว็บในอุปกรณ์ทุกเครื่องที่ซิงค์และบัญชี Google</translation>
 <translation id="4982111327868342436">เล่นต่อจากที่ค้างไว้ในทุกอุปกรณ์</translation>
 <translation id="4982236238228587209">ซอฟต์แวร์ของอุปกรณ์</translation>
+<translation id="4986706507552097681">คุณเลือกสิ่งที่ต้องการซิงค์ได้เสมอในการตั้งค่า Google อาจปรับเปลี่ยน Search และบริการอื่นๆ ให้เหมาะกับคุณโดยอิงจากประวัติการเข้าชม</translation>
 <translation id="4986728572522335985">การดำเนินการนี้จะลบข้อมูลทั้งหมดในคีย์ความปลอดภัย รวมถึง PIN ของคีย์ด้วย</translation>
 <translation id="4988526792673242964">หน้า</translation>
 <translation id="49896407730300355">หมุน&amp;ทวนเข็มนาฬิกา</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index b9e7dbc..74cd78ba0 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -2390,6 +2390,7 @@
 <translation id="3143515551205905069">Скасувати синхронізацію</translation>
 <translation id="3143754809889689516">Відтворити з початку</translation>
 <translation id="3144647712221361880">Відкрити посилання як</translation>
+<translation id="3144896554017119333">Розширення тощо</translation>
 <translation id="3149510190863420837">Додатки Chrome</translation>
 <translation id="3150693969729403281">Виконати перевірку безпеки</translation>
 <translation id="3150927491400159470">Жорстке перезавантаження</translation>
@@ -2498,6 +2499,7 @@
 <translation id="3268451620468152448">Відкриті вкладки</translation>
 <translation id="3269093882174072735">Завантажити зображення</translation>
 <translation id="326911502853238749">Не показувати <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Увімкніть синхронізацію, щоб створювати резервні копії даних і використовувати їх на будь-якому пристрої</translation>
 <translation id="3269612321104318480">Світло-бірюзовий і білий</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Файл}one{# файл}few{# файли}many{# файлів}other{# файлу}}</translation>
 <translation id="326999365752735949">Завантаження відмінностей</translation>
@@ -4296,6 +4298,7 @@
 <translation id="4950993567860689081">Сеансом керує адміністратор вашої організації. Адміністратори можуть видалити ваш профіль, а також відстежувати мережевий трафік.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{файл}one{# файл}few{# файли}many{# файлів}other{# файлу}}</translation>
 <translation id="495170559598752135">Дії</translation>
+<translation id="4951966678293618079">Ніколи не зберігати паролі для цього сайту</translation>
 <translation id="4953808748584563296">Стандартний оранжевий аватар</translation>
 <translation id="4955710816792587366">Придумайте PIN-код</translation>
 <translation id="4959262764292427323">Паролі зберігаються в обліковому записі Google, щоб ви могли користуватися ними на будь-якому пристрої</translation>
@@ -4325,6 +4328,7 @@
 <translation id="4981449534399733132">Щоб очистити дані веб-перегляду на всіх синхронізованих пристроях і в обліковому записі Google, <ph name="BEGIN_LINK" />увійдіть в обліковий запис<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Продовжуйте роботу з місця, де ви зупинилися, на будь-якому пристрої</translation>
 <translation id="4982236238228587209">Програмне забезпечення на пристрої</translation>
+<translation id="4986706507552097681">Ви можете будь-коли вибрати дані для синхронізації в налаштуваннях. Google може персоналізувати Пошук та інші сервіси на основі вашої історії.</translation>
 <translation id="4986728572522335985">Усі дані на ключі безпеки (зокрема, PIN-код) буде видалено</translation>
 <translation id="4988526792673242964">Сторінки</translation>
 <translation id="49896407730300355">Повернути п&amp;роти годинникової стрілки</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index c477990..0925d28 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -2387,6 +2387,7 @@
 <translation id="3143515551205905069">取消同步處理</translation>
 <translation id="3143754809889689516">從頭開始播放</translation>
 <translation id="3144647712221361880">以其他身分開啟連結</translation>
+<translation id="3144896554017119333">擴充功能和其他項目</translation>
 <translation id="3149510190863420837">Chrome 應用程式</translation>
 <translation id="3150693969729403281">即刻執行安全檢查</translation>
 <translation id="3150927491400159470">強制重新載入</translation>
@@ -2495,6 +2496,7 @@
 <translation id="3268451620468152448">開啟的分頁</translation>
 <translation id="3269093882174072735">載入圖片</translation>
 <translation id="326911502853238749">不要顯示<ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">開啟同步功能即可備份資料,並在任何裝置上使用</translation>
 <translation id="3269612321104318480">淺藍綠色和白色</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{檔案}other{# 個檔案}}</translation>
 <translation id="326999365752735949">正在下載差異部分</translation>
@@ -4293,6 +4295,7 @@
 <translation id="4950993567860689081">工作階段由您的機構管理。管理員可刪除設定檔並監察網絡流量。</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{1 個檔案}other{# 個檔案}}</translation>
 <translation id="495170559598752135">動作</translation>
+<translation id="4951966678293618079">一律不儲存這個網站的密碼</translation>
 <translation id="4953808748584563296">預設橙色圖片</translation>
 <translation id="4955710816792587366">選擇 PIN</translation>
 <translation id="4959262764292427323">密碼會儲存在您的 Google 帳戶中,讓您可在任何裝置上使用</translation>
@@ -4322,6 +4325,7 @@
 <translation id="4981449534399733132">如要從所有已同步的裝置和 Google 帳戶中清除瀏覽資料,請<ph name="BEGIN_LINK" />登入<ph name="END_LINK" />。</translation>
 <translation id="4982111327868342436">在任何裝置上繼續未完成的工作</translation>
 <translation id="4982236238228587209">裝置軟件</translation>
+<translation id="4986706507552097681">你隨時可以在設定中選擇要同步處理的資料。Google 可能會根據你的歷史記錄在 Google 搜尋等其他服務中提供個人化體驗。</translation>
 <translation id="4986728572522335985">此操作將刪除這個安全密鑰上的所有資料,包括 PIN</translation>
 <translation id="4988526792673242964">網頁</translation>
 <translation id="49896407730300355">逆時針旋轉(&amp;O)</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index d9cb01b2..0a017c79 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -2372,6 +2372,7 @@
 <translation id="3143515551205905069">取消同步處理</translation>
 <translation id="3143754809889689516">從頭播放</translation>
 <translation id="3144647712221361880">以其他身分開啟連結</translation>
+<translation id="3144896554017119333">擴充功能和其他項目</translation>
 <translation id="3149510190863420837">Chrome 應用程式</translation>
 <translation id="3150693969729403281">立即執行安全檢查</translation>
 <translation id="3150927491400159470">強制重新載入</translation>
@@ -2480,6 +2481,7 @@
 <translation id="3268451620468152448">開啟的分頁</translation>
 <translation id="3269093882174072735">載入圖片</translation>
 <translation id="326911502853238749">不顯示<ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">開啟同步功能即可備份資料,並在任何裝置上使用</translation>
 <translation id="3269612321104318480">淺藍綠色與白色</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{檔案}other{# 個檔案}}</translation>
 <translation id="326999365752735949">正在下載差異部分</translation>
@@ -4276,6 +4278,7 @@
 <translation id="4950993567860689081">工作階段是由貴機構管理。管理員可以刪除設定檔並監控網路流量。</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{1 個檔案}other{# 個檔案}}</translation>
 <translation id="495170559598752135">動作</translation>
+<translation id="4951966678293618079">一律不儲存這個網站的密碼</translation>
 <translation id="4953808748584563296">預設的橘色顯示圖片</translation>
 <translation id="4955710816792587366">選擇 PIN 碼</translation>
 <translation id="4959262764292427323">系統會將密碼儲存在你的 Google 帳戶中,方便你在任何裝置上使用密碼</translation>
@@ -4305,6 +4308,7 @@
 <translation id="4981449534399733132">如要從所有同步的裝置和 Google 帳戶中清除瀏覽資料,請先<ph name="BEGIN_LINK" />登入<ph name="END_LINK" />。</translation>
 <translation id="4982111327868342436">使用任何裝置都能接續先前的活動進度</translation>
 <translation id="4982236238228587209">裝置上的軟體</translation>
+<translation id="4986706507552097681">你隨時可以在設定中選擇要同步處理的資料。Google 可能會根據你的歷史記錄在 Google 搜尋等其他服務中提供個人化體驗。</translation>
 <translation id="4986728572522335985">這項操作將刪除這個安全金鑰上的所有資料,包括 PIN 碼</translation>
 <translation id="4988526792673242964">網頁</translation>
 <translation id="49896407730300355">逆時針旋轉(&amp;O)</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index f418bd3..0459eac7 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -6096,7 +6096,6 @@
       "//ui/aura_extra",
       "//ui/base:fullscreen_win",
       "//ui/color:accent_color_observer",
-      "//ui/color:color_switches",
       "//ui/display/util:util",
     ]
     allow_circular_includes_from +=
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 5663d772..b4e640d6 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -302,7 +302,6 @@
 #include "base/win/windows_version.h"
 #include "chrome/browser/enterprise/platform_auth/platform_auth_features.h"
 #include "chrome/browser/win/titlebar_config.h"
-#include "ui/color/color_switches.h"  // nogncheck
 #endif
 
 #if defined(TOOLKIT_VIEWS)
@@ -5308,10 +5307,6 @@
      flag_descriptions::kArcVmBalloonPolicyName,
      flag_descriptions::kArcVmBalloonPolicyDesc, kOsCrOS,
      FEATURE_VALUE_TYPE(arc::kVmBalloonPolicy)},
-    {"secondary-google-account-usage",
-     flag_descriptions::kSecondaryGoogleAccountUsageName,
-     flag_descriptions::kSecondaryGoogleAccountUsageDescription, kOsCrOS,
-     FEATURE_VALUE_TYPE(ash::features::kSecondaryGoogleAccountUsage)},
     {"enable-arc-host-vpn", flag_descriptions::kEnableArcHostVpnName,
      flag_descriptions::kEnableArcHostVpnDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(arc::kEnableArcHostVpn)},
@@ -5338,11 +5333,6 @@
      flag_descriptions::kEnableAutofillRefreshStyleName,
      flag_descriptions::kEnableAutofillRefreshStyleDescription, kOsAndroid,
      FEATURE_VALUE_TYPE(autofill::features::kAutofillRefreshStyleAndroid)},
-
-    {"enable-family-info-feedback",
-     flag_descriptions::kEnableFamilyInfoFeedbackName,
-     flag_descriptions::kEnableFamilyInfoFeedbackDescription, kOsAndroid,
-     FEATURE_VALUE_TYPE(kEnableFamilyInfoFeedback)},
 #endif
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -8416,6 +8406,11 @@
                                     kFedCmFeatureVariations,
                                     "FedCmFeatureVariations")},
 
+    {"fedcm-without-third-party-cookies",
+     flag_descriptions::kFedCmWithoutThirdPartyCookiesName,
+     flag_descriptions::kFedCmWithoutThirdPartyCookiesDescription, kOsAll,
+     FEATURE_VALUE_TYPE(features::kFedCmWithoutThirdPartyCookies)},
+
     {"fedcm-metrics-endpoint", flag_descriptions::kFedCmMetricsEndpointName,
      flag_descriptions::kFedCmMetricsEndpointDescription, kOsAll,
      FEATURE_VALUE_TYPE(features::kFedCmMetricsEndpoint)},
@@ -8724,19 +8719,6 @@
      FEATURE_VALUE_TYPE(features::kDebugHistoryInterventionNoUserActivation)},
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-    {"smart-lock-sign-in-removed",
-     flag_descriptions::kSmartLockSignInRemovedName,
-     flag_descriptions::kSmartLockSignInRemovedDescription, kOsCrOS,
-     FEATURE_VALUE_TYPE(ash::features::kSmartLockSignInRemoved)},
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-    {"smart-lock-ui-revamp", flag_descriptions::kSmartLockUIRevampName,
-     flag_descriptions::kSmartLockUIRevampDescription, kOsCrOS,
-     FEATURE_VALUE_TYPE(ash::features::kSmartLockUIRevamp)},
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-
-#if BUILDFLAG(IS_CHROMEOS_ASH)
     {"enable-phone-hub-call-notification",
      flag_descriptions::kPhoneHubCallNotificationName,
      flag_descriptions::kPhoneHubCallNotificationDescription, kOsCrOS,
@@ -8968,13 +8950,6 @@
      kOsAndroid, FEATURE_VALUE_TYPE(media::kUseRealColorSpaceForAndroidVideo)},
 #endif
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-    {"enable-desks-trackpad-swipe-improvements",
-     flag_descriptions::kDesksTrackpadSwipeImprovementsName,
-     flag_descriptions::kDesksTrackpadSwipeImprovementsDescription, kOsCrOS,
-     FEATURE_VALUE_TYPE(ash::features::kEnableDesksTrackpadSwipeImprovements)},
-#endif
-
     {"enable-commerce-developer", flag_descriptions::kCommerceDeveloperName,
      flag_descriptions::kCommerceDeveloperDescription, kOsAll,
      FEATURE_VALUE_TYPE(commerce::kCommerceDeveloper)},
@@ -9065,13 +9040,6 @@
      FEATURE_VALUE_TYPE(ash::features::kVCPortraitRelighting)},
 #endif
 
-#if BUILDFLAG(IS_WIN)
-    {"pervasive-system-accent-color",
-     flag_descriptions::kPervasiveSystemAccentColorName,
-     flag_descriptions::kPervasiveSystemAccentColorDescription, kOsWin,
-     SINGLE_VALUE_TYPE(switches::kPervasiveSystemAccentColor)},
-#endif
-
 #if BUILDFLAG(IS_CHROMEOS_ASH)
     {"use-multiple-overlays", flag_descriptions::kUseMultipleOverlaysName,
      flag_descriptions::kUseMultipleOverlaysDescription, kOsCrOS,
@@ -9150,16 +9118,7 @@
      kOsDesktop,
      FEATURE_VALUE_TYPE(
          policy::features::kEnableUserCloudSigninRestrictionPolicyFetcher)},
-#endif
 
-    {"autofill-enable-sending-bcn-in-get-upload-details",
-     flag_descriptions::kAutofillEnableSendingBcnInGetUploadDetailsName,
-     flag_descriptions::kAutofillEnableSendingBcnInGetUploadDetailsDescription,
-     kOsAll,
-     FEATURE_VALUE_TYPE(
-         autofill::features::kAutofillEnableSendingBcnInGetUploadDetails)},
-
-#if !BUILDFLAG(IS_ANDROID)
     {"enable-code-based-rbd", flag_descriptions::kCodeBasedRBDName,
      flag_descriptions::kCodeBasedRBDDescription, kOsDesktop,
      FEATURE_WITH_PARAMS_VALUE_TYPE(commerce::kCodeBasedRBD,
@@ -9178,7 +9137,6 @@
      FEATURE_WITH_PARAMS_VALUE_TYPE(commerce::kMerchantWidePromotion,
                                     kMerchantWidePromotionVariations,
                                     "MerchantWidePromotion")},
-
 #endif
 
     {"autofill-enable-unmask-card-request-set-instrument-id",
diff --git a/chrome/browser/android/httpclient/java/src/org/chromium/chrome/browser/android/httpclient/SimpleHttpClient.java b/chrome/browser/android/httpclient/java/src/org/chromium/chrome/browser/android/httpclient/SimpleHttpClient.java
index 42e0728..767d5e38 100644
--- a/chrome/browser/android/httpclient/java/src/org/chromium/chrome/browser/android/httpclient/SimpleHttpClient.java
+++ b/chrome/browser/android/httpclient/java/src/org/chromium/chrome/browser/android/httpclient/SimpleHttpClient.java
@@ -7,7 +7,6 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.Callback;
-import org.chromium.base.Consumer;
 import org.chromium.base.JNIUtils;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
@@ -18,6 +17,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Consumer;
 
 /**
  * A very simple http client
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index e178cf0e..f0eb82d 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -1418,8 +1418,6 @@
     "login/app_mode/force_install_observer.h",
     "login/app_mode/kiosk_launch_controller.cc",
     "login/app_mode/kiosk_launch_controller.h",
-    "login/auth/chrome_cryptohome_authenticator.cc",
-    "login/auth/chrome_cryptohome_authenticator.h",
     "login/auth/chrome_login_performer.cc",
     "login/auth/chrome_login_performer.h",
     "login/auth/chrome_safe_mode_delegate.cc",
@@ -4562,7 +4560,6 @@
     "lock_screen_apps/lock_screen_profile_creator_impl_unittest.cc",
     "lock_screen_apps/state_controller_unittest.cc",
     "login/app_mode/kiosk_launch_controller_unittest.cc",
-    "login/auth/cryptohome_authenticator_unittest.cc",
     "login/consolidated_consent_field_trial_unittest.cc",
     "login/demo_mode/demo_components_unittest.cc",
     "login/demo_mode/demo_extensions_external_loader_unittest.cc",
diff --git a/chrome/browser/ash/app_mode/app_launch_utils.cc b/chrome/browser/ash/app_mode/app_launch_utils.cc
index bff89870..d2b3ffd6 100644
--- a/chrome/browser/ash/app_mode/app_launch_utils.cc
+++ b/chrome/browser/ash/app_mode/app_launch_utils.cc
@@ -50,14 +50,16 @@
 
     if (kiosk_app_id.type == KioskAppType::kChromeApp) {
       app_launcher_ = std::make_unique<StartupAppLauncher>(
-          profile, *kiosk_app_id.app_id, this);
+          profile, *kiosk_app_id.app_id, /*should_skip_install=*/true,
+          /*delegate=*/this);
     } else if (base::FeatureList::IsEnabled(features::kKioskEnableAppService) &&
                !crosapi::browser_util::IsLacrosEnabled()) {
       app_launcher_ = std::make_unique<WebKioskAppServiceLauncher>(
-          profile, this, *kiosk_app_id.account_id);
+          profile, *kiosk_app_id.account_id, /*delegate=*/this);
     } else {
       app_launcher_ = std::make_unique<WebKioskAppLauncher>(
-          profile, this, *kiosk_app_id.account_id);
+          profile, *kiosk_app_id.account_id,
+          /*should_skip_install=*/true, /*delegate=*/this);
     }
   }
   AppLaunchManager(const AppLaunchManager&) = delete;
@@ -79,13 +81,6 @@
     // See comments above. Network is assumed to be online here.
     return true;
   }
-  bool ShouldSkipAppInstallation() const override {
-    // Given that this delegate does not reliably report whether the network is
-    // ready, avoid making app update checks - this might take a while if
-    // network is not online. Also, during crash-restart, we should continue
-    // with the same app version as the restored session.
-    return true;
-  }
   void OnAppInstalling() override {}
   void OnAppPrepared() override { app_launcher_->LaunchApp(); }
   void OnAppLaunched() override {}
diff --git a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service_unittest.cc b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service_unittest.cc
index e76e69af..fe37a5bd3 100644
--- a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service_unittest.cc
+++ b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service_unittest.cc
@@ -54,7 +54,6 @@
   // KioskAppLauncher::Delegate:
   bool IsNetworkReady() const override { return true; }
   bool IsShowingNetworkConfigScreen() const override { return false; }
-  bool ShouldSkipAppInstallation() const override { return false; }
 
   void OnAppWindowCreated() override {
     window_created_semaphore_.AddValue(true);
diff --git a/chrome/browser/ash/app_mode/kiosk_app_launcher.h b/chrome/browser/ash/app_mode/kiosk_app_launcher.h
index e6af94b4..be20beb 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_launcher.h
+++ b/chrome/browser/ash/app_mode/kiosk_app_launcher.h
@@ -38,9 +38,6 @@
     // TODO(crbug.com/1015383): Refactor out this method at some moment.
     // Whether network configure UI is shown.
     virtual bool IsShowingNetworkConfigScreen() const = 0;
-    // Whether app launch flow can assume all required apps are installed, and
-    // skip app installation steps.
-    virtual bool ShouldSkipAppInstallation() const = 0;
     virtual void OnAppDataUpdated() {}
     virtual void OnAppInstalling() {}
     virtual void OnAppPrepared() {}
diff --git a/chrome/browser/ash/app_mode/startup_app_launcher.cc b/chrome/browser/ash/app_mode/startup_app_launcher.cc
index 1229650..1dc9efb 100644
--- a/chrome/browser/ash/app_mode/startup_app_launcher.cc
+++ b/chrome/browser/ash/app_mode/startup_app_launcher.cc
@@ -94,8 +94,12 @@
 
 StartupAppLauncher::StartupAppLauncher(Profile* profile,
                                        const std::string& app_id,
+                                       bool should_skip_install,
                                        StartupAppLauncher::Delegate* delegate)
-    : KioskAppLauncher(delegate), profile_(profile), app_id_(app_id) {
+    : KioskAppLauncher(delegate),
+      profile_(profile),
+      app_id_(app_id),
+      should_skip_install_(should_skip_install) {
   DCHECK(profile_);
   DCHECK(crx_file::id_util::IdIsValid(app_id_));
 }
@@ -107,7 +111,7 @@
          state_ != LaunchState::kWaitingForWindow &&
          state_ != LaunchState::kLaunchSucceeded);
 
-  if (delegate_->ShouldSkipAppInstallation()) {
+  if (should_skip_install_) {
     OnInstallSuccess();
     return;
   }
@@ -138,7 +142,7 @@
     return;
   }
 
-  if (delegate_->ShouldSkipAppInstallation()) {
+  if (should_skip_install_) {
     OnInstallSuccess();
     return;
   }
diff --git a/chrome/browser/ash/app_mode/startup_app_launcher.h b/chrome/browser/ash/app_mode/startup_app_launcher.h
index b2cb3c5f2..9e1e487 100644
--- a/chrome/browser/ash/app_mode/startup_app_launcher.h
+++ b/chrome/browser/ash/app_mode/startup_app_launcher.h
@@ -29,6 +29,7 @@
  public:
   StartupAppLauncher(Profile* profile,
                      const std::string& app_id,
+                     bool should_skip_install,
                      Delegate* delegate);
   StartupAppLauncher(const StartupAppLauncher&) = delete;
   StartupAppLauncher& operator=(const StartupAppLauncher&) = delete;
@@ -77,6 +78,8 @@
 
   Profile* const profile_;
   const std::string app_id_;
+  const bool should_skip_install_;
+
   int launch_attempt_ = 0;
   LaunchState state_ = LaunchState::kNotStarted;
 
diff --git a/chrome/browser/ash/app_mode/startup_app_launcher_unittest.cc b/chrome/browser/ash/app_mode/startup_app_launcher_unittest.cc
index 636f1de3..63d464a 100644
--- a/chrome/browser/ash/app_mode/startup_app_launcher_unittest.cc
+++ b/chrome/browser/ash/app_mode/startup_app_launcher_unittest.cc
@@ -91,9 +91,6 @@
   KioskAppLaunchError::Error launch_error() const { return launch_error_; }
 
   void set_network_ready(bool network_ready) { network_ready_ = network_ready; }
-  void set_should_skip_app_installation(bool skip_app_installation) {
-    should_skip_app_installation_ = skip_app_installation;
-  }
   void set_showing_network_config_screen(bool showing) {
     showing_network_config_screen_ = showing;
   }
@@ -117,9 +114,6 @@
     SetLaunchState(LaunchState::kInitializingNetwork);
   }
   bool IsNetworkReady() const override { return network_ready_; }
-  bool ShouldSkipAppInstallation() const override {
-    return should_skip_app_installation_;
-  }
   void OnAppInstalling() override {
     SetLaunchState(LaunchState::kInstallingApp);
   }
@@ -145,8 +139,6 @@
   bool network_ready_ = false;
   bool showing_network_config_screen_ = false;
 
-  bool should_skip_app_installation_ = false;
-
   base::test::RepeatingTestFuture<LaunchState> launch_state_changes_;
 };
 
@@ -396,7 +388,8 @@
         std::make_unique<AppLaunchTracker>(kTestPrimaryAppId, event_router);
 
     startup_app_launcher_ = std::make_unique<StartupAppLauncher>(
-        profile(), kTestPrimaryAppId, &startup_launch_delegate_);
+        profile(), kTestPrimaryAppId, /*should_skip_install=*/false,
+        &startup_launch_delegate_);
   }
 
   void TearDown() override {
@@ -1448,7 +1441,10 @@
 
   // This matches the delegate settings during session restart (e.g. after a
   // browser process crash).
-  startup_launch_delegate_.set_should_skip_app_installation(true);
+  startup_app_launcher_ = std::make_unique<StartupAppLauncher>(
+      profile(), kTestPrimaryAppId, /*should_skip_install=*/true,
+      &startup_launch_delegate_);
+
   startup_launch_delegate_.set_network_ready(true);
   startup_app_launcher_->Initialize();
 
diff --git a/chrome/browser/ash/app_mode/web_app/mock_web_kiosk_app_launcher.cc b/chrome/browser/ash/app_mode/web_app/mock_web_kiosk_app_launcher.cc
index 9a331c9..cc75c45a 100644
--- a/chrome/browser/ash/app_mode/web_app/mock_web_kiosk_app_launcher.cc
+++ b/chrome/browser/ash/app_mode/web_app/mock_web_kiosk_app_launcher.cc
@@ -7,7 +7,7 @@
 namespace ash {
 
 MockWebKioskAppLauncher::MockWebKioskAppLauncher()
-    : WebKioskAppLauncher(nullptr, nullptr, EmptyAccountId()) {}
+    : WebKioskAppLauncher(nullptr, EmptyAccountId(), false, nullptr) {}
 
 MockWebKioskAppLauncher::~MockWebKioskAppLauncher() = default;
 
diff --git a/chrome/browser/ash/app_mode/web_app/mock_web_kiosk_app_launcher.h b/chrome/browser/ash/app_mode/web_app/mock_web_kiosk_app_launcher.h
index 15078151..f46f1c4 100644
--- a/chrome/browser/ash/app_mode/web_app/mock_web_kiosk_app_launcher.h
+++ b/chrome/browser/ash/app_mode/web_app/mock_web_kiosk_app_launcher.h
@@ -6,7 +6,6 @@
 #define CHROME_BROWSER_ASH_APP_MODE_WEB_APP_MOCK_WEB_KIOSK_APP_LAUNCHER_H_
 
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h"
-#include "components/account_id/account_id.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
 namespace ash {
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.cc
index 4693da5..91cec5ba 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.cc
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.cc
@@ -45,11 +45,13 @@
 
 WebKioskAppLauncher::WebKioskAppLauncher(
     Profile* profile,
-    WebKioskAppLauncher::Delegate* delegate,
-    const AccountId& account_id)
+    const AccountId& account_id,
+    bool should_skip_install,
+    WebKioskAppLauncher::Delegate* delegate)
     : KioskAppLauncher(delegate),
       profile_(profile),
       account_id_(account_id),
+      should_skip_install_(should_skip_install),
       url_loader_(std::make_unique<web_app::WebAppUrlLoader>()),
       data_retriever_factory_(base::BindRepeating(
           &std::make_unique<web_app::WebAppDataRetriever>)) {}
@@ -62,7 +64,7 @@
   DCHECK(app);
   SYSLOG(INFO) << "Launching web kiosk for url: " << app->install_url();
   if (app->status() == WebKioskAppData::Status::kInstalled ||
-      delegate_->ShouldSkipAppInstallation()) {
+      should_skip_install_) {
     delegate_->OnAppPrepared();
     return;
   }
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h
index 30a34bb..6453f71 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h
@@ -12,15 +12,10 @@
 #include "base/scoped_observation.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_launcher.h"
 #include "chrome/browser/ash/crosapi/browser_manager.h"
-#include "chrome/browser/web_applications/web_app_constants.h"
-#include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_task.h"
-#include "chrome/browser/web_applications/web_app_install_utils.h"
 #include "chrome/browser/web_applications/web_app_url_loader.h"
 #include "components/account_id/account_id.h"
 #include "components/exo/wm_helper.h"
-#include "content/public/browser/web_contents.h"
-#include "url/gurl.h"
 
 class Browser;
 class BrowserWindow;
@@ -42,8 +37,9 @@
                             public exo::WMHelper::ExoWindowObserver {
  public:
   WebKioskAppLauncher(Profile* profile,
-                      Delegate* delegate,
-                      const AccountId& account_id);
+                      const AccountId& account_id,
+                      bool should_skip_install,
+                      Delegate* delegate);
   WebKioskAppLauncher(const WebKioskAppLauncher&) = delete;
   WebKioskAppLauncher& operator=(const WebKioskAppLauncher&) = delete;
   ~WebKioskAppLauncher() override;
@@ -90,6 +86,7 @@
   bool is_installed_ = false;  // Whether the installation was completed.
   Profile* const profile_;
   const AccountId account_id_;
+  const bool should_skip_install_;
 
   Browser* browser_ = nullptr;  // Browser instance that runs the web kiosk app.
 
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher_unittest.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher_unittest.cc
index 6faddbd8..7026068 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher_unittest.cc
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher_unittest.cc
@@ -70,7 +70,6 @@
 
   MOCK_CONST_METHOD0(IsNetworkReady, bool());
   MOCK_CONST_METHOD0(IsShowingNetworkConfigScreen, bool());
-  MOCK_CONST_METHOD0(ShouldSkipAppInstallation, bool());
 };
 
 const char kAppEmail[] = "lala@example.com";
@@ -126,13 +125,8 @@
   void SetUp() override {
     BrowserWithTestWindowTest::SetUp();
     app_manager_ = std::make_unique<WebKioskAppManager>();
-    launcher_ = std::make_unique<WebKioskAppLauncher>(
-        profile(), &delegate_, AccountId::FromUserEmail(kAppEmail));
 
-    launcher_->SetBrowserWindowForTesting(window());
-    url_loader_ = new web_app::TestWebAppUrlLoader();
-    launcher_->SetUrlLoaderForTesting(
-        std::unique_ptr<web_app::TestWebAppUrlLoader>(url_loader_));
+    ConstructLauncher(/*should_skip_install=*/false);
 
     closer_ = std::make_unique<AppWindowCloser>();
   }
@@ -144,6 +138,16 @@
     BrowserWithTestWindowTest::TearDown();
   }
 
+  void ConstructLauncher(bool should_skip_install) {
+    launcher_ = std::make_unique<WebKioskAppLauncher>(
+        profile(), AccountId::FromUserEmail(kAppEmail), should_skip_install,
+        &delegate_);
+    launcher_->SetBrowserWindowForTesting(window());
+    auto url_loader = std::make_unique<web_app::TestWebAppUrlLoader>();
+    url_loader_ = url_loader.get();
+    launcher_->SetUrlLoaderForTesting(std::move(url_loader));
+  }
+
   void SetupAppData(bool installed) {
     account_id_ = AccountId::FromUserEmail(kAppEmail);
     app_manager_->AddAppForTesting(account_id_, GURL(kAppInstallUrl));
@@ -202,8 +206,8 @@
 
 TEST_F(WebKioskAppLauncherTest, NormalFlowNotInstalled) {
   SetupAppData(/*installed*/ false);
+  ConstructLauncher(/*should_skip_install=*/false);
 
-  EXPECT_CALL(delegate(), ShouldSkipAppInstallation()).WillOnce(Return(false));
   EXEC_AND_WAIT_FOR_CALL(launcher()->Initialize(), delegate(),
                          InitializeNetwork());
 
@@ -234,7 +238,6 @@
 TEST_F(WebKioskAppLauncherTest, NormalFlowBadLaunchUrl) {
   SetupAppData(/*installed*/ false);
 
-  EXPECT_CALL(delegate(), ShouldSkipAppInstallation()).WillOnce(Return(false));
   EXEC_AND_WAIT_FOR_CALL(launcher()->Initialize(), delegate(),
                          InitializeNetwork());
 
@@ -253,7 +256,6 @@
   // Freezes url requests until they are manually processed.
   url_loader_->SaveLoadUrlRequests();
 
-  EXPECT_CALL(delegate(), ShouldSkipAppInstallation()).WillOnce(Return(false));
   EXEC_AND_WAIT_FOR_CALL(launcher()->Initialize(), delegate(),
                          InitializeNetwork());
 
@@ -262,7 +264,6 @@
   EXPECT_CALL(delegate(), OnAppInstalling());
   launcher()->ContinueWithNetworkReady();
 
-  EXPECT_CALL(delegate(), ShouldSkipAppInstallation()).WillOnce(Return(false));
   EXPECT_CALL(delegate(), InitializeNetwork()).Times(1);
   launcher()->RestartLauncher();
 
@@ -294,7 +295,6 @@
 
   SetupAppData(/*installed*/ false);
 
-  EXPECT_CALL(delegate(), ShouldSkipAppInstallation()).WillOnce(Return(false));
   EXEC_AND_WAIT_FOR_CALL(launcher()->Initialize(), delegate(),
                          InitializeNetwork());
 
@@ -316,7 +316,8 @@
 TEST_F(WebKioskAppLauncherTest, SkipInstallation) {
   SetupAppData(/*installed*/ false);
 
-  EXPECT_CALL(delegate(), ShouldSkipAppInstallation()).WillOnce(Return(true));
+  ConstructLauncher(/*should_skip_install=*/true);
+
   EXEC_AND_WAIT_FOR_CALL(launcher()->Initialize(), delegate(), OnAppPrepared());
 
   EXPECT_EQ(app_data()->status(), WebKioskAppData::Status::kInit);
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc
index 3cf68aa..cf07469 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc
@@ -20,8 +20,8 @@
 
 WebKioskAppServiceLauncher::WebKioskAppServiceLauncher(
     Profile* profile,
-    KioskAppLauncher::Delegate* delegate,
-    const AccountId& account_id)
+    const AccountId& account_id,
+    KioskAppLauncher::Delegate* delegate)
     : KioskAppLauncher(delegate), profile_(profile), account_id_(account_id) {}
 
 WebKioskAppServiceLauncher::~WebKioskAppServiceLauncher() = default;
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.h b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.h
index 8908d34..1377a86 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.h
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.h
@@ -41,8 +41,8 @@
       "Kiosk.AppService.WebApp.InstallResult";
 
   WebKioskAppServiceLauncher(Profile* profile,
-                             KioskAppLauncher::Delegate* delegate,
-                             const AccountId& account_id);
+                             const AccountId& account_id,
+                             KioskAppLauncher::Delegate* delegate);
   WebKioskAppServiceLauncher(const WebKioskAppServiceLauncher&) = delete;
   WebKioskAppServiceLauncher& operator=(const WebKioskAppServiceLauncher&) =
       delete;
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc
index 78d62c9..2b7317e 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher_unittest.cc
@@ -155,7 +155,7 @@
 
     delegate_ = std::make_unique<MockAppLauncherDelegate>();
     launcher_ = std::make_unique<WebKioskAppServiceLauncher>(
-        profile(), delegate_.get(), AccountId::FromUserEmail(kAppEmail));
+        profile(), AccountId::FromUserEmail(kAppEmail), delegate_.get());
   }
 
   void TearDown() override {
diff --git a/chrome/browser/ash/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/ash/extensions/autotest_private/autotest_private_api.cc
index 57e89c1..314a4223 100644
--- a/chrome/browser/ash/extensions/autotest_private/autotest_private_api.cc
+++ b/chrome/browser/ash/extensions/autotest_private/autotest_private_api.cc
@@ -11,6 +11,7 @@
 #include <sstream>
 #include <utility>
 
+#include "ash/app_list/app_list_public_test_util.h"
 #include "ash/components/arc/arc_prefs.h"
 #include "ash/components/arc/metrics/arc_metrics_constants.h"
 #include "ash/components/arc/mojom/system_ui.mojom-shared.h"
@@ -3842,6 +3843,26 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////
+// AutotestPrivateGetLauncherSearchBoxStateFunction
+///////////////////////////////////////////////////////////////////////////////
+
+AutotestPrivateGetLauncherSearchBoxStateFunction::
+    AutotestPrivateGetLauncherSearchBoxStateFunction() = default;
+
+AutotestPrivateGetLauncherSearchBoxStateFunction::
+    ~AutotestPrivateGetLauncherSearchBoxStateFunction() = default;
+
+ExtensionFunction::ResponseAction
+AutotestPrivateGetLauncherSearchBoxStateFunction::Run() {
+  DVLOG(1) << "AutotestPrivateGetLauncherSearchBoxStateFunction";
+
+  api::autotest_private::LauncherSearchBoxState launcher_search_box_state;
+  launcher_search_box_state.ghost_text = ash::GetSearchBoxGhostTextForTest();
+
+  return RespondNow(WithArguments(launcher_search_box_state.ToValue()));
+}
+
+///////////////////////////////////////////////////////////////////////////////
 // AutotestPrivateGetShelfAutoHideBehaviorFunction
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/chrome/browser/ash/extensions/autotest_private/autotest_private_api.h b/chrome/browser/ash/extensions/autotest_private/autotest_private_api.h
index 42845a46..690db15 100644
--- a/chrome/browser/ash/extensions/autotest_private/autotest_private_api.h
+++ b/chrome/browser/ash/extensions/autotest_private/autotest_private_api.h
@@ -956,6 +956,19 @@
   ResponseAction Run() override;
 };
 
+// Returns launcher's search box state.
+class AutotestPrivateGetLauncherSearchBoxStateFunction
+    : public ExtensionFunction {
+ public:
+  AutotestPrivateGetLauncherSearchBoxStateFunction();
+  DECLARE_EXTENSION_FUNCTION("autotestPrivate.getLauncherSearchBoxState",
+                             AUTOTESTPRIVATE_GETLAUNCHERSSEARCHBOXSTATE)
+
+ private:
+  ~AutotestPrivateGetLauncherSearchBoxStateFunction() override;
+  ResponseAction Run() override;
+};
+
 // Returns the shelf auto hide behavior.
 class AutotestPrivateGetShelfAutoHideBehaviorFunction
     : public ExtensionFunction {
diff --git a/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc b/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
index 986daf0..258e1040 100644
--- a/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
+++ b/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
@@ -6,6 +6,8 @@
 
 #include <memory>
 
+#include "ash/app_list/app_list_public_test_util.h"
+#include "ash/app_list/views/search_box_view.h"
 #include "ash/components/arc/arc_prefs.h"
 #include "ash/components/arc/session/arc_bridge_service.h"
 #include "ash/components/arc/session/arc_service_manager.h"
@@ -16,8 +18,10 @@
 #include "ash/components/arc/test/fake_arc_session.h"
 #include "ash/components/arc/test/fake_process_instance.h"
 #include "ash/constants/ash_features.h"
+#include "ash/public/cpp/app_list/app_list_types.h"
 #include "ash/public/cpp/holding_space/holding_space_prefs.h"
 #include "ash/public/cpp/overview_test_api.h"
+#include "ash/public/cpp/test/app_list_test_api.h"
 #include "ash/public/cpp/test/shell_test_api.h"
 #include "base/json/json_writer.h"
 #include "base/test/bind.h"
@@ -33,6 +37,10 @@
 #include "chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.h"
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
+#include "chrome/browser/ui/app_list/search/search_provider.h"
+#include "chrome/browser/ui/app_list/search/test/app_list_search_test_helper.h"
+#include "chrome/browser/ui/app_list/search/test/search_results_changed_waiter.h"
+#include "chrome/browser/ui/app_list/search/test/test_result.h"
 #include "chrome/browser/ui/ash/shelf/chrome_shelf_prefs.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "components/feature_engagement/public/feature_constants.h"
@@ -57,6 +65,45 @@
 
 namespace extensions {
 
+namespace {
+
+class TestSearchProvider : public app_list::SearchProvider {
+ public:
+  explicit TestSearchProvider(ash::AppListSearchResultType result_type)
+      : result_type_(result_type) {}
+
+  ~TestSearchProvider() override = default;
+
+  void SetNextResults(
+      std::vector<std::unique_ptr<ChromeSearchResult>> results) {
+    results_ = std::move(results);
+  }
+
+  ash::AppListSearchResultType ResultType() const override {
+    return result_type_;
+  }
+
+  void Start(const std::u16string& query) override {
+    DCHECK(!ash::IsZeroStateResultType(result_type_));
+    base::ThreadTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(&TestSearchProvider::SetResults,
+                                  query_weak_factory_.GetWeakPtr()));
+  }
+
+  void StopQuery() override { query_weak_factory_.InvalidateWeakPtrs(); }
+
+  void StartZeroState() override {}
+
+ private:
+  void SetResults() { SwapResults(&results_); }
+
+  std::vector<std::unique_ptr<ChromeSearchResult>> results_;
+  ash::AppListSearchResultType result_type_;
+  base::WeakPtrFactory<TestSearchProvider> query_weak_factory_{this};
+};
+
+}  // namespace
+
 class AutotestPrivateApiTest : public ExtensionApiTest {
  public:
   AutotestPrivateApiTest() {
@@ -468,4 +515,96 @@
   ASSERT_TRUE(RunAutotestPrivateExtensionTest("lacrosEnabled")) << message_;
 }
 
+class AutotestPrivateSearchTest
+    : public AutotestPrivateApiTest,
+      public ::testing::WithParamInterface</* tablet_mode =*/bool> {
+ public:
+  AutotestPrivateSearchTest() {
+    feature_list.InitAndEnableFeature(
+        ash::features::kAutocompleteExtendedSuggestions);
+  }
+
+  ~AutotestPrivateSearchTest() override = default;
+  AutotestPrivateSearchTest(const AutotestPrivateSearchTest&) = delete;
+  AutotestPrivateSearchTest& operator=(const AutotestPrivateSearchTest&) =
+      delete;
+
+  std::vector<ChromeSearchResult*> PublishedResults() {
+    return AppListClientImpl::GetInstance()
+        ->GetModelUpdaterForTest()
+        ->GetPublishedSearchResultsForTest();
+  }
+
+  void SetUpSearchResults() {
+    auto search_provider_ = std::make_unique<TestSearchProvider>(
+        ash::AppListSearchResultType::kOmnibox);
+    search_provider_->SetNextResults(
+        MakeResults({"youtube"}, {ash::SearchResultDisplayType::kList},
+                    {ash::AppListSearchResultCategory::kWeb}, {1}, {0.8}));
+
+    app_list::SearchController* search_controller =
+        AppListClientImpl::GetInstance()->search_controller();
+    EXPECT_EQ(1u, search_controller->ReplaceProvidersForResultTypeForTest(
+                      ash::AppListSearchResultType::kOmnibox,
+                      std::move(search_provider_)));
+  }
+
+ protected:
+  std::vector<std::unique_ptr<ChromeSearchResult>> MakeResults(
+      const std::vector<std::string>& ids,
+      const std::vector<ash::SearchResultDisplayType>& display_types,
+      const std::vector<ash::AppListSearchResultCategory>& categories,
+      const std::vector<int>& best_match_ranks,
+      const std::vector<double>& scores) {
+    std::vector<std::unique_ptr<ChromeSearchResult>> results;
+    for (size_t i = 0; i < ids.size(); ++i) {
+      results.emplace_back(std::make_unique<app_list::TestResult>(
+          ids[i], display_types[i], categories[i], best_match_ranks[i],
+          /*relevance=*/scores[i], /*ftrl_result_score=*/scores[i]));
+    }
+    return results;
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list;
+};
+
+INSTANTIATE_TEST_SUITE_P(All,
+                         AutotestPrivateSearchTest,
+                         /* tablet_mode= */ ::testing::Bool());
+
+IN_PROC_BROWSER_TEST_P(AutotestPrivateSearchTest,
+                       LauncherSearchBoxStateAPITest) {
+  ash::ShellTestApi().SetTabletModeEnabledForTest(GetParam());
+  test::GetAppListClient()->ShowAppList();
+  if (!GetParam()) {
+    ash::AppListTestApi().WaitForBubbleWindow(
+        /*wait_for_opening_animation=*/false);
+  }
+
+  ui::test::EventGenerator generator(
+      browser()->window()->GetNativeWindow()->GetRootWindow());
+  generator.GestureTapAt(
+      ash::GetSearchBoxView()->GetBoundsInScreen().CenterPoint());
+
+  app_list::SearchResultsChangedWaiter results_changed_waiter(
+      AppListClientImpl::GetInstance()->search_controller(),
+      {app_list::ResultType::kOmnibox});
+  app_list::ResultsWaiter results_waiter(u"outube");
+
+  SetUpSearchResults();
+  ash::AppListTestApi().SimulateSearch(u"outube");
+
+  results_changed_waiter.Wait();
+  results_waiter.Wait();
+
+  const auto results = PublishedResults();
+  ASSERT_EQ(results.size(), 1u);
+  ASSERT_TRUE(results[0]);
+  EXPECT_EQ(base::UTF16ToASCII(results[0]->title()), "youtube");
+
+  ASSERT_TRUE(RunAutotestPrivateExtensionTest("launcherSearchBoxState"))
+      << message_;
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/ash/extensions/default_app_order.cc b/chrome/browser/ash/extensions/default_app_order.cc
index f5c2ac30..18c7b9dd 100644
--- a/chrome/browser/ash/extensions/default_app_order.cc
+++ b/chrome/browser/ash/extensions/default_app_order.cc
@@ -20,7 +20,6 @@
 #include "chrome/browser/ash/guest_os/guest_os_terminal.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h"
-#include "chrome/browser/ui/app_list/page_break_constants.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chromeos/constants/chromeos_features.h"
@@ -158,9 +157,6 @@
 
     web_app::kStadiaAppId,
 
-    // First default page break
-    app_list::kDefaultPageBreak1,
-
     arc::kGoogleMapsAppId,
     web_app::kGoogleMapsAppId,
 
diff --git a/chrome/browser/ash/extensions/install_limiter.cc b/chrome/browser/ash/extensions/install_limiter.cc
index 7eb1f9d8..850d26b8 100644
--- a/chrome/browser/ash/extensions/install_limiter.cc
+++ b/chrome/browser/ash/extensions/install_limiter.cc
@@ -78,8 +78,8 @@
   base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE, {base::MayBlock()},
       base::BindOnce(&GetFileSize, file_info.path),
-      base::BindOnce(&InstallLimiter::AddWithSize, AsWeakPtr(), installer,
-                     file_info));
+      base::BindOnce(&InstallLimiter::AddWithSize,
+                     weak_ptr_factory_.GetWeakPtr(), installer, file_info));
 }
 
 void InstallLimiter::OnAllExternalProvidersReady() {
@@ -132,8 +132,8 @@
 
 void InstallLimiter::RunInstall(const scoped_refptr<CrxInstaller>& installer,
                                 const CRXFileInfo& file_info) {
-  installer->AddInstallerCallback(
-      base::BindOnce(&InstallLimiter::OnInstallerDone, AsWeakPtr()));
+  installer->AddInstallerCallback(base::BindOnce(
+      &InstallLimiter::OnInstallerDone, weak_ptr_factory_.GetWeakPtr()));
   installer->InstallCrxFile(file_info);
   num_running_installs_++;
 }
diff --git a/chrome/browser/ash/extensions/install_limiter.h b/chrome/browser/ash/extensions/install_limiter.h
index eac2412..ee7b416d 100644
--- a/chrome/browser/ash/extensions/install_limiter.h
+++ b/chrome/browser/ash/extensions/install_limiter.h
@@ -21,8 +21,7 @@
 // InstallLimiter defers big app installs after all small app installs and then
 // runs big app installs one by one. This improves first-time login experience.
 // See http://crbug.com/166296
-class InstallLimiter : public KeyedService,
-                       public base::SupportsWeakPtr<InstallLimiter> {
+class InstallLimiter : public KeyedService {
  public:
   static InstallLimiter* Get(Profile* profile);
 
@@ -96,6 +95,8 @@
 
   bool all_external_providers_ready_ = false;
   int num_installs_waiting_for_file_size_ = 0;
+
+  base::WeakPtrFactory<InstallLimiter> weak_ptr_factory_{this};
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc b/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc
index 09f76e39..e406793 100644
--- a/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc
+++ b/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc
@@ -21,7 +21,6 @@
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h"
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h"
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.h"
-#include "chrome/browser/ash/crosapi/browser_data_back_migrator.h"
 #include "chrome/browser/ash/crosapi/browser_data_migrator.h"
 #include "chrome/browser/ash/crosapi/browser_util.h"
 #include "chrome/browser/ash/login/app_mode/force_install_observer.h"
@@ -247,11 +246,12 @@
         // ArcKioskAppService lifetime is bound to the profile, therefore
         // wrap it into a separate object.
         app_launcher_ = std::make_unique<ArcKioskAppServiceWrapper>(
-            ArcKioskAppService::Get(profile_), this);
+            ArcKioskAppService::Get(profile_), /*delegate=*/this);
         break;
       case KioskAppType::kChromeApp:
         app_launcher_ = std::make_unique<StartupAppLauncher>(
-            profile_, *kiosk_app_id_.app_id, this);
+            profile_, *kiosk_app_id_.app_id, /*should_skip_install=*/false,
+            /*delegate=*/this);
         break;
       case KioskAppType::kWebApp:
         // Make keyboard config sync with the `VirtualKeyboardFeatures` policy.
@@ -261,10 +261,11 @@
         if (base::FeatureList::IsEnabled(features::kKioskEnableAppService) &&
             !crosapi::browser_util::IsLacrosEnabled()) {
           app_launcher_ = std::make_unique<WebKioskAppServiceLauncher>(
-              profile, this, *kiosk_app_id_.account_id);
+              profile, *kiosk_app_id_.account_id, /*delegate=*/this);
         } else {
           app_launcher_ = std::make_unique<WebKioskAppLauncher>(
-              profile, this, *kiosk_app_id_.account_id);
+              profile, *kiosk_app_id_.account_id,
+              /*should_skip_install=*/false, /*delegate=*/this);
         }
         break;
     }
@@ -470,10 +471,6 @@
   return network_ui_state_ == NetworkUIState::kShowing;
 }
 
-bool KioskLaunchController::ShouldSkipAppInstallation() const {
-  return false;
-}
-
 void KioskLaunchController::OnLaunchFailed(KioskAppLaunchError::Error error) {
   if (cleaned_up_)
     return;
diff --git a/chrome/browser/ash/login/app_mode/kiosk_launch_controller.h b/chrome/browser/ash/login/app_mode/kiosk_launch_controller.h
index 50bc6d478..737b66a 100644
--- a/chrome/browser/ash/login/app_mode/kiosk_launch_controller.h
+++ b/chrome/browser/ash/login/app_mode/kiosk_launch_controller.h
@@ -151,7 +151,6 @@
   void InitializeNetwork() override;
   bool IsNetworkReady() const override;
   bool IsShowingNetworkConfigScreen() const override;
-  bool ShouldSkipAppInstallation() const override;
   void OnLaunchFailed(KioskAppLaunchError::Error error) override;
   void OnAppInstalling() override;
   void OnAppPrepared() override;
diff --git a/chrome/browser/ash/login/auth/chrome_cryptohome_authenticator.cc b/chrome/browser/ash/login/auth/chrome_cryptohome_authenticator.cc
deleted file mode 100644
index 025063f..0000000
--- a/chrome/browser/ash/login/auth/chrome_cryptohome_authenticator.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/login/auth/chrome_cryptohome_authenticator.h"
-
-#include "base/threading/thread_task_runner_handle.h"
-#include "chrome/browser/ash/login/auth/chrome_safe_mode_delegate.h"
-#include "chrome/browser/ash/ownership/owner_settings_service_ash.h"
-#include "chrome/browser/ash/ownership/owner_settings_service_ash_factory.h"
-#include "chrome/browser/ash/settings/cros_settings.h"
-#include "chrome/browser/browser_process.h"
-#include "chromeos/login/login_state/login_state.h"
-#include "components/ownership/owner_key_util.h"
-#include "content/public/browser/browser_thread.h"
-
-namespace ash {
-
-using ::content::BrowserThread;
-
-ChromeCryptohomeAuthenticator::ChromeCryptohomeAuthenticator(
-    AuthStatusConsumer* consumer)
-    : CryptohomeAuthenticator(base::ThreadTaskRunnerHandle::Get(),
-                              g_browser_process->local_state(),
-                              std::make_unique<ChromeSafeModeDelegate>(),
-                              consumer) {}
-
-ChromeCryptohomeAuthenticator::~ChromeCryptohomeAuthenticator() = default;
-
-}  // namespace ash
diff --git a/chrome/browser/ash/login/auth/chrome_cryptohome_authenticator.h b/chrome/browser/ash/login/auth/chrome_cryptohome_authenticator.h
deleted file mode 100644
index 98e46e4..0000000
--- a/chrome/browser/ash/login/auth/chrome_cryptohome_authenticator.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ASH_LOGIN_AUTH_CHROME_CRYPTOHOME_AUTHENTICATOR_H_
-#define CHROME_BROWSER_ASH_LOGIN_AUTH_CHROME_CRYPTOHOME_AUTHENTICATOR_H_
-
-#include "chromeos/ash/components/login/auth/cryptohome_authenticator.h"
-
-namespace ash {
-
-class ChromeCryptohomeAuthenticator : public CryptohomeAuthenticator {
- public:
-  explicit ChromeCryptohomeAuthenticator(AuthStatusConsumer* consumer);
-
-  ChromeCryptohomeAuthenticator(const ChromeCryptohomeAuthenticator&) = delete;
-  ChromeCryptohomeAuthenticator& operator=(
-      const ChromeCryptohomeAuthenticator&) = delete;
-
- protected:
-  ~ChromeCryptohomeAuthenticator() override;
-};
-
-}  // namespace ash
-
-// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos
-// source migration is finished.
-namespace chromeos {
-using ::ash::ChromeCryptohomeAuthenticator;
-}
-
-#endif  // CHROME_BROWSER_ASH_LOGIN_AUTH_CHROME_CRYPTOHOME_AUTHENTICATOR_H_
diff --git a/chrome/browser/ash/login/auth/cryptohome_authenticator_unittest.cc b/chrome/browser/ash/login/auth/cryptohome_authenticator_unittest.cc
deleted file mode 100644
index 2bd47e79..0000000
--- a/chrome/browser/ash/login/auth/cryptohome_authenticator_unittest.cc
+++ /dev/null
@@ -1,842 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdint.h>
-
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "ash/constants/ash_switches.h"
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/memory/ptr_util.h"
-#include "base/run_loop.h"
-#include "base/strings/string_util.h"
-#include "chrome/browser/ash/login/auth/chrome_cryptohome_authenticator.h"
-#include "chrome/browser/ash/login/users/fake_chrome_user_manager.h"
-#include "chrome/browser/ash/ownership/owner_settings_service_ash.h"
-#include "chrome/browser/ash/ownership/owner_settings_service_ash_factory.h"
-#include "chrome/browser/ash/profiles/profile_helper.h"
-#include "chrome/browser/ash/settings/cros_settings.h"
-#include "chrome/browser/ash/settings/scoped_cros_settings_test_helper.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "chrome/test/base/testing_profile.h"
-#include "chrome/test/base/testing_profile_manager.h"
-#include "chromeos/ash/components/cryptohome/common_types.h"
-#include "chromeos/ash/components/cryptohome/cryptohome_parameters.h"
-#include "chromeos/ash/components/cryptohome/cryptohome_util.h"
-#include "chromeos/ash/components/cryptohome/system_salt_getter.h"
-#include "chromeos/ash/components/dbus/cros_disks/cros_disks_client.h"
-#include "chromeos/ash/components/dbus/cryptohome/account_identifier_operators.h"
-#include "chromeos/ash/components/dbus/cryptohome/rpc.pb.h"
-#include "chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.h"
-#include "chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h"
-#include "chromeos/ash/components/login/auth/mock_auth_status_consumer.h"
-#include "chromeos/ash/components/login/auth/public/auth_failure.h"
-#include "chromeos/ash/components/login/auth/public/cryptohome_key_constants.h"
-#include "chromeos/ash/components/login/auth/public/key.h"
-#include "chromeos/ash/components/login/auth/public/user_context.h"
-#include "chromeos/ash/components/login/auth/test_attempt_state.h"
-#include "chromeos/login/login_state/login_state.h"
-#include "components/ownership/mock_owner_key_util.h"
-#include "components/user_manager/scoped_user_manager.h"
-#include "content/public/test/browser_task_environment.h"
-#include "content/public/test/test_utils.h"
-#include "crypto/nss_key_util.h"
-#include "crypto/nss_util_internal.h"
-#include "crypto/scoped_test_nss_chromeos_user.h"
-#include "net/base/net_errors.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/cros_system_api/dbus/service_constants.h"
-#include "url/gurl.h"
-
-namespace ash {
-
-namespace {
-
-using ::cryptohome::KeyLabel;
-using ::testing::_;
-using ::testing::Invoke;
-
-// A fake sanitized username used for testing.
-constexpr char kFakeSanitizedUsername[] = "01234567890ABC";
-
-// An owner key in PKCS#8 PrivateKeyInfo for testing owner checks.
-const uint8_t kOwnerPrivateKey[] = {
-    0x30, 0x82, 0x01, 0x53, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a,
-    0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82,
-    0x01, 0x3d, 0x30, 0x82, 0x01, 0x39, 0x02, 0x01, 0x00, 0x02, 0x41, 0x00,
-    0xb4, 0xf5, 0xab, 0xfe, 0xd8, 0xf1, 0xcb, 0x5f, 0x8f, 0x48, 0x3e, 0xdf,
-    0x40, 0x8e, 0x2b, 0x15, 0x43, 0x6c, 0x67, 0x74, 0xa2, 0xcb, 0xe4, 0xf3,
-    0xec, 0xab, 0x41, 0x57, 0x1d, 0x5f, 0xed, 0xcf, 0x09, 0xf4, 0xcc, 0xbb,
-    0x52, 0x52, 0xe8, 0x46, 0xf5, 0xc5, 0x01, 0xa3, 0xd8, 0x24, 0xc0, 0x15,
-    0xc5, 0x65, 0x50, 0x7d, 0xbd, 0x4e, 0x81, 0xb2, 0x28, 0x38, 0xf9, 0x3d,
-    0x3e, 0x2a, 0x68, 0xf7, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x40, 0x40,
-    0xc7, 0xb5, 0xb3, 0xbc, 0xac, 0x0a, 0x77, 0x02, 0x0f, 0x05, 0xda, 0xdb,
-    0xfc, 0x48, 0xf6, 0x0a, 0xb5, 0xf2, 0xef, 0x31, 0x1c, 0x36, 0xb1, 0x0f,
-    0xa7, 0x5a, 0xf3, 0xb9, 0xa3, 0x4e, 0xb8, 0xf6, 0x10, 0xfe, 0x25, 0x7b,
-    0x36, 0xb4, 0x1b, 0x80, 0xe3, 0x92, 0x37, 0x83, 0xf0, 0x43, 0xb3, 0x00,
-    0xa6, 0x53, 0xc6, 0x1b, 0x7e, 0x4b, 0xb0, 0x33, 0xd4, 0xe1, 0x03, 0xc4,
-    0xaa, 0xbc, 0x89, 0x02, 0x21, 0x00, 0xde, 0xc8, 0x8d, 0x10, 0xbc, 0xf3,
-    0x43, 0x49, 0x1f, 0x07, 0xf7, 0x12, 0xeb, 0x0a, 0x90, 0xab, 0xb9, 0xaa,
-    0x81, 0xb5, 0x54, 0x71, 0xf4, 0x2e, 0xc4, 0x44, 0xec, 0xff, 0x7d, 0xff,
-    0xe8, 0xa5, 0x02, 0x21, 0x00, 0xcf, 0xf0, 0xbe, 0xa6, 0xde, 0x9c, 0x70,
-    0xed, 0xf0, 0xc3, 0x18, 0x9b, 0xca, 0xe5, 0x7c, 0x4b, 0x9b, 0xf5, 0x12,
-    0x5d, 0x86, 0xbe, 0x8d, 0xf1, 0xbc, 0x2c, 0x79, 0x59, 0xf5, 0xff, 0xbc,
-    0x6b, 0x02, 0x20, 0x7c, 0x09, 0x1c, 0xc1, 0x1c, 0xf2, 0x33, 0x9c, 0x1a,
-    0x72, 0xcc, 0xd4, 0xf3, 0x97, 0xc6, 0x44, 0x55, 0xf2, 0xe0, 0x94, 0x9c,
-    0x97, 0x75, 0x64, 0x34, 0x52, 0x4b, 0xc1, 0x53, 0xdd, 0x8f, 0x21, 0x02,
-    0x20, 0x0e, 0xef, 0x48, 0x92, 0x2d, 0x9c, 0xe8, 0xd3, 0x7e, 0x1e, 0x55,
-    0x0f, 0x23, 0x74, 0x76, 0x07, 0xec, 0x2c, 0x9e, 0xe4, 0x0e, 0xc0, 0x72,
-    0xeb, 0x70, 0xcb, 0x74, 0xef, 0xcc, 0x26, 0x50, 0xff, 0x02, 0x20, 0x29,
-    0x32, 0xd0, 0xbf, 0x11, 0xf2, 0xbf, 0x54, 0xfd, 0x6d, 0xf2, 0x1c, 0xbe,
-    0x50, 0x18, 0x62, 0x6d, 0x23, 0xe4, 0x26, 0x03, 0x8b, 0xb3, 0x42, 0x24,
-    0x7e, 0x68, 0x37, 0x26, 0xda, 0xb9, 0x87};
-
-// The public key alone matcing kOwnerPrivateKey.
-const uint8_t kOwnerPublicKey[] = {
-    0x30, 0x5c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
-    0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x4b, 0x00, 0x30, 0x48, 0x02, 0x41,
-    0x00, 0xb4, 0xf5, 0xab, 0xfe, 0xd8, 0xf1, 0xcb, 0x5f, 0x8f, 0x48, 0x3e,
-    0xdf, 0x40, 0x8e, 0x2b, 0x15, 0x43, 0x6c, 0x67, 0x74, 0xa2, 0xcb, 0xe4,
-    0xf3, 0xec, 0xab, 0x41, 0x57, 0x1d, 0x5f, 0xed, 0xcf, 0x09, 0xf4, 0xcc,
-    0xbb, 0x52, 0x52, 0xe8, 0x46, 0xf5, 0xc5, 0x01, 0xa3, 0xd8, 0x24, 0xc0,
-    0x15, 0xc5, 0x65, 0x50, 0x7d, 0xbd, 0x4e, 0x81, 0xb2, 0x28, 0x38, 0xf9,
-    0x3d, 0x3e, 0x2a, 0x68, 0xf7, 0x02, 0x03, 0x01, 0x00, 0x01};
-
-std::vector<uint8_t> GetOwnerPublicKey() {
-  return std::vector<uint8_t>(kOwnerPublicKey,
-                              kOwnerPublicKey + std::size(kOwnerPublicKey));
-}
-
-bool CreateOwnerKeyInSlot(PK11SlotInfo* slot) {
-  const std::vector<uint8_t> key(
-      kOwnerPrivateKey, kOwnerPrivateKey + std::size(kOwnerPrivateKey));
-  return crypto::ImportNSSKeyFromPrivateKeyInfo(
-             slot, key, true /* permanent */) != nullptr;
-}
-
-// Fake UserDataAuthClient implementation for this test.
-class TestUserDataAuthClient : public FakeUserDataAuthClient {
- public:
-  TestUserDataAuthClient() = default;
-
-  TestUserDataAuthClient(const TestUserDataAuthClient&) = delete;
-  TestUserDataAuthClient& operator=(const TestUserDataAuthClient&) = delete;
-
-  ~TestUserDataAuthClient() override = default;
-
-  void set_expected_id(const cryptohome::AccountIdentifier& id) {
-    expected_id_ = id;
-  }
-
-  void set_expected_authorization_secret(const std::string& secret) {
-    expected_authorization_secret_ = secret;
-  }
-
-  void set_is_create_attempt_expected(bool expected) {
-    is_create_attempt_expected_ = expected;
-  }
-
-  void set_migrate_key_should_succeed(bool should_succeed) {
-    migrate_key_should_succeed_ = should_succeed;
-  }
-
-  void set_mount_guest_should_succeed(bool should_succeed) {
-    mount_guest_should_succeed_ = should_succeed;
-  }
-
-  void set_remove_should_succeed(bool should_succeed) {
-    remove_should_succeed_ = should_succeed;
-  }
-
-  void set_unmount_should_succeed(bool should_succeed) {
-    unmount_should_succeed_ = should_succeed;
-  }
-
-  void Mount(const ::user_data_auth::MountRequest& request,
-             MountCallback callback) override {
-    if (request.guest_mount()) {
-      // Guest Mount, handle specially.
-      ::user_data_auth::MountReply reply;
-      if (!mount_guest_should_succeed_) {
-        reply.set_error(::user_data_auth::CryptohomeErrorCode::
-                            CRYPTOHOME_ERROR_MOUNT_FATAL);
-      }
-
-      base::ThreadTaskRunnerHandle::Get()->PostTask(
-          FROM_HERE, base::BindOnce(std::move(callback), reply));
-      return;
-    }
-
-    // Normal mount.
-    EXPECT_EQ(is_create_attempt_expected_, request.has_create());
-    if (is_create_attempt_expected_) {
-      EXPECT_EQ(expected_authorization_secret_,
-                request.create().keys(0).secret());
-      EXPECT_EQ(kCryptohomeGaiaKeyLabel,
-                request.create().keys(0).data().label());
-    }
-    EXPECT_EQ(expected_id_, request.account());
-    EXPECT_EQ(expected_authorization_secret_,
-              request.authorization().key().secret());
-
-    ::user_data_auth::MountReply reply;
-    reply.set_sanitized_username(kFakeSanitizedUsername);
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), reply));
-  }
-
-  void CheckKey(const ::user_data_auth::CheckKeyRequest& request,
-                CheckKeyCallback callback) override {
-    EXPECT_EQ(expected_id_, request.account_id());
-    EXPECT_EQ(expected_authorization_secret_,
-              request.authorization_request().key().secret());
-    ::user_data_auth::CheckKeyReply reply;
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), reply));
-  }
-
-  void MigrateKey(const ::user_data_auth::MigrateKeyRequest& request,
-                  MigrateKeyCallback callback) override {
-    EXPECT_EQ(expected_id_.account_id(), request.account_id().account_id());
-
-    ::user_data_auth::MigrateKeyReply reply;
-    if (!migrate_key_should_succeed_) {
-      reply.set_error(::user_data_auth::CryptohomeErrorCode::
-                          CRYPTOHOME_ERROR_MIGRATE_KEY_FAILED);
-    }
-
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), reply));
-  }
-
-  // Calls Remove method.  `callback` is called after the method call
-  // succeeds.
-  void Remove(const ::user_data_auth::RemoveRequest& request,
-              RemoveCallback callback) override {
-    ::user_data_auth::RemoveReply reply;
-    if (!remove_should_succeed_) {
-      reply.set_error(::user_data_auth::CryptohomeErrorCode::
-                          CRYPTOHOME_ERROR_REMOVE_FAILED);
-    }
-
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), reply));
-  }
-
-  void Unmount(const ::user_data_auth::UnmountRequest& request,
-               UnmountCallback callback) override {
-    ::user_data_auth::UnmountReply reply;
-    if (!unmount_should_succeed_)
-      reply.set_error(::user_data_auth::CryptohomeErrorCode::
-                          CRYPTOHOME_ERROR_REMOVE_FAILED);
-
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), reply));
-  }
-
- private:
-  cryptohome::AccountIdentifier expected_id_;
-  std::string expected_authorization_secret_;
-  bool is_create_attempt_expected_ = false;
-  bool migrate_key_should_succeed_ = false;
-  bool mount_guest_should_succeed_ = false;
-  bool remove_should_succeed_ = false;
-  bool unmount_should_succeed_ = false;
-};
-
-}  // namespace
-
-class CryptohomeAuthenticatorTest : public testing::Test {
- public:
-  CryptohomeAuthenticatorTest()
-      : user_context_(user_manager::USER_TYPE_REGULAR,
-                      AccountId::FromUserEmail("me@nowhere.org")),
-        user_manager_(new FakeChromeUserManager()),
-        user_manager_enabler_(base::WrapUnique(user_manager_)),
-        consumer_(run_loop_.QuitClosure()),
-        owner_key_util_(new ownership::MockOwnerKeyUtil()) {
-    // Testing profile must be initialized after user_manager_ +
-    // user_manager_enabler_, because it will create another UserManager
-    // instance if UserManager instance has not been registed before.
-    profile_ = std::make_unique<TestingProfile>();
-    OwnerSettingsServiceAshFactory::GetInstance()->SetOwnerKeyUtilForTesting(
-        owner_key_util_);
-    Key key("fakepass");
-    key.SetLabel(kCryptohomeGaiaKeyLabel);
-    user_context_.SetKey(key);
-    user_context_.SetUserIDHash("me_nowhere_com_hash");
-    const user_manager::User* user =
-        user_manager_->AddUser(user_context_.GetAccountId());
-    profile_->set_profile_name(user_context_.GetAccountId().GetUserEmail());
-
-    ProfileHelper::Get()->SetUserToProfileMappingForTesting(user,
-                                                            profile_.get());
-
-    CreateTransformedKey(Key::KEY_TYPE_SALTED_SHA256_TOP_HALF,
-                         SystemSaltGetter::ConvertRawSaltToHexString(
-                             FakeCryptohomeMiscClient::GetStubSystemSalt()));
-  }
-
-  ~CryptohomeAuthenticatorTest() override {}
-
-  void SetUp() override {
-    base::CommandLine::ForCurrentProcess()->AppendSwitch(
-        switches::kLoginManager);
-
-    // The TestUserDataAuthClient we create here is deleted via the call to
-    // UserDataAuthClient::Shutdown() in TearDown();
-    fake_userdataauth_client_ = new TestUserDataAuthClient();
-    UserDataAuthClient::OverrideGlobalInstanceForTesting(
-        fake_userdataauth_client_);
-    CryptohomeMiscClient::InitializeFake();
-    SystemSaltGetter::Initialize();
-
-    auth_ = new ChromeCryptohomeAuthenticator(&consumer_);
-    state_ = std::make_unique<TestAttemptState>(
-        std::make_unique<UserContext>(user_context_));
-  }
-
-  // Tears down the test fixture.
-  void TearDown() override {
-    SystemSaltGetter::Shutdown();
-    CryptohomeMiscClient::Shutdown();
-    UserDataAuthClient::Shutdown();
-  }
-
-  void CreateTransformedKey(Key::KeyType type, const std::string& salt) {
-    user_context_with_transformed_key_ = user_context_;
-    user_context_with_transformed_key_.GetKey()->Transform(type, salt);
-    transformed_key_ = *user_context_with_transformed_key_.GetKey();
-  }
-
-  base::FilePath PopulateTempFile(const char* data, int data_len) {
-    base::FilePath out;
-    base::ScopedFILE tmp_file = base::CreateAndOpenTemporaryStream(&out);
-    EXPECT_TRUE(tmp_file);
-    EXPECT_EQ(base::WriteFile(out, data, data_len), data_len);
-    return out;
-  }
-
-  // Allow test to fail and exit gracefully, even if OnAuthFailure()
-  // wasn't supposed to happen.
-  void FailOnLoginFailure() {
-    ON_CALL(consumer_, OnAuthFailure(_))
-        .WillByDefault(
-            Invoke(&consumer_, &MockAuthStatusConsumer::OnFailQuitAndFail));
-  }
-
-  // Allow test to fail and exit gracefully, even if OnAuthSuccess()
-  // wasn't supposed to happen.
-  void FailOnLoginSuccess() {
-    ON_CALL(consumer_, OnAuthSuccess(_))
-        .WillByDefault(
-            Invoke(&consumer_, &MockAuthStatusConsumer::OnSuccessQuitAndFail));
-  }
-
-  // Allow test to fail and exit gracefully, even if
-  // OnOffTheRecordAuthSuccess() wasn't supposed to happen.
-  void FailOnGuestLoginSuccess() {
-    ON_CALL(consumer_, OnOffTheRecordAuthSuccess())
-        .WillByDefault(Invoke(
-            &consumer_, &MockAuthStatusConsumer::OnGuestSuccessQuitAndFail));
-  }
-
-  void ExpectLoginFailure(const AuthFailure& failure) {
-    EXPECT_CALL(consumer_, OnAuthFailure(failure))
-        .WillOnce(Invoke(&consumer_, &MockAuthStatusConsumer::OnFailQuit))
-        .RetiresOnSaturation();
-  }
-
-  void ExpectLoginSuccess(const UserContext& user_context) {
-    EXPECT_CALL(consumer_, OnAuthSuccess(user_context))
-        .WillOnce(Invoke(&consumer_, &MockAuthStatusConsumer::OnSuccessQuit))
-        .RetiresOnSaturation();
-  }
-
-  void ExpectGuestLoginSuccess() {
-    EXPECT_CALL(consumer_, OnOffTheRecordAuthSuccess())
-        .WillOnce(
-            Invoke(&consumer_, &MockAuthStatusConsumer::OnGuestSuccessQuit))
-        .RetiresOnSaturation();
-  }
-
-  void ExpectPasswordChange(const UserContext& user_context) {
-    EXPECT_CALL(consumer_, OnPasswordChangeDetected(user_context))
-        .WillOnce(Invoke(&consumer_, &MockAuthStatusConsumer::OnMigrateQuit))
-        .RetiresOnSaturation();
-  }
-
-  void ExpectGetKeyDataExCall(std::unique_ptr<int64_t> key_type,
-                              std::unique_ptr<std::string> salt) {
-    auto key_definition = cryptohome::KeyDefinition::CreateForPassword(
-        std::string() /* secret */, KeyLabel(kCryptohomeGaiaKeyLabel),
-        cryptohome::PRIV_DEFAULT);
-    key_definition.revision = 1;
-    if (key_type) {
-      key_definition.provider_data.push_back(
-          cryptohome::KeyDefinition::ProviderData("type"));
-      key_definition.provider_data.back().number = std::move(key_type);
-    }
-    if (salt) {
-      key_definition.provider_data.push_back(
-          cryptohome::KeyDefinition::ProviderData("salt"));
-      key_definition.provider_data.back().bytes = std::move(salt);
-    }
-
-    // Add the key to the fake.
-    ::user_data_auth::AddKeyRequest request;
-    cryptohome::KeyDefinitionToKey(key_definition, request.mutable_key());
-    *request.mutable_account_id() =
-        cryptohome::CreateAccountIdentifierFromAccountId(
-            user_context_.GetAccountId());
-    request.mutable_authorization_request();
-    fake_userdataauth_client_->AddKey(
-        request,
-        base::BindOnce([](absl::optional<::user_data_auth::AddKeyReply> reply) {
-          ASSERT_TRUE(reply.has_value());
-          EXPECT_EQ(
-              reply->error(),
-              ::user_data_auth::CryptohomeErrorCode::CRYPTOHOME_ERROR_NOT_SET);
-        }));
-    base::RunLoop().RunUntilIdle();
-  }
-
-  void ExpectMountExCall(bool expect_create_attempt) {
-    fake_userdataauth_client_->set_expected_id(
-        cryptohome::CreateAccountIdentifierFromAccountId(
-            user_context_.GetAccountId()));
-    fake_userdataauth_client_->set_expected_authorization_secret(
-        transformed_key_.GetSecret());
-    fake_userdataauth_client_->set_is_create_attempt_expected(
-        expect_create_attempt);
-  }
-
-  void ExpectCheckKeyExCall() {
-    fake_userdataauth_client_->set_expected_id(
-        cryptohome::CreateAccountIdentifierFromAccountId(
-            user_context_.GetAccountId()));
-    fake_userdataauth_client_->set_expected_authorization_secret(
-        transformed_key_.GetSecret());
-  }
-
-  void ExpectMigrateKeyExCall(bool should_succeed) {
-    fake_userdataauth_client_->set_expected_id(
-        cryptohome::CreateAccountIdentifierFromAccountId(
-            user_context_.GetAccountId()));
-    fake_userdataauth_client_->set_migrate_key_should_succeed(should_succeed);
-  }
-
-  void ExpectMountGuestExCall(bool should_succeed) {
-    fake_userdataauth_client_->set_mount_guest_should_succeed(should_succeed);
-  }
-
-  void RunResolve(CryptohomeAuthenticator* auth) {
-    auth->Resolve();
-    base::RunLoop().RunUntilIdle();
-  }
-
-  void SetAttemptState(CryptohomeAuthenticator* auth, TestAttemptState* state) {
-    auth->set_attempt_state(state);
-  }
-
-  CryptohomeAuthenticator::AuthState SetAndResolveState(
-      CryptohomeAuthenticator* auth,
-      TestAttemptState* state) {
-    auth->set_attempt_state(state);
-    return auth->ResolveState();
-  }
-
-  void SetOwnerState(bool owner_check_finished, bool check_result) {
-    auth_->SetOwnerState(owner_check_finished, check_result);
-  }
-
-  content::BrowserTaskEnvironment task_environment_;
-
-  UserContext user_context_;
-  UserContext user_context_with_transformed_key_;
-  Key transformed_key_;
-
-  ScopedCrosSettingsTestHelper cros_settings_test_helper_;
-  FakeChromeUserManager* user_manager_;
-  std::unique_ptr<TestingProfile> profile_;
-  std::unique_ptr<TestingProfileManager> profile_manager_;
-  user_manager::ScopedUserManager user_manager_enabler_;
-
-  base::RunLoop run_loop_;
-  MockAuthStatusConsumer consumer_;
-
-  scoped_refptr<CryptohomeAuthenticator> auth_;
-  std::unique_ptr<TestAttemptState> state_;
-  TestUserDataAuthClient* fake_userdataauth_client_;
-
-  scoped_refptr<ownership::MockOwnerKeyUtil> owner_key_util_;
-};
-
-TEST_F(CryptohomeAuthenticatorTest, OnAuthSuccess) {
-  EXPECT_CALL(consumer_, OnAuthSuccess(user_context_))
-      .Times(1)
-      .RetiresOnSaturation();
-
-  SetAttemptState(auth_.get(), state_.release());
-  auth_->OnAuthSuccess();
-}
-
-TEST_F(CryptohomeAuthenticatorTest, OnPasswordChangeDetected) {
-  EXPECT_CALL(consumer_, OnPasswordChangeDetected(user_context_))
-      .Times(1)
-      .RetiresOnSaturation();
-  SetAttemptState(auth_.get(), state_.release());
-  auth_->OnPasswordChangeDetected();
-}
-
-TEST_F(CryptohomeAuthenticatorTest, ResolveNothingDone) {
-  EXPECT_EQ(CryptohomeAuthenticator::CONTINUE,
-            SetAndResolveState(auth_.get(), state_.release()));
-}
-
-TEST_F(CryptohomeAuthenticatorTest, ResolvePossiblePwChangeToFailedMount) {
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and been rejected.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_KEY_FAILURE);
-
-  // When there is no online attempt and online results, POSSIBLE_PW_CHANGE
-  EXPECT_EQ(CryptohomeAuthenticator::FAILED_MOUNT,
-            SetAndResolveState(auth_.get(), state_.release()));
-}
-
-TEST_F(CryptohomeAuthenticatorTest, ResolveNeedOldPw) {
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and been rejected because of unmatched key; additionally,
-  // an online auth attempt has completed successfully.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_KEY_FAILURE);
-  state_->PresetOnlineLoginComplete();
-
-  EXPECT_EQ(CryptohomeAuthenticator::NEED_OLD_PW,
-            SetAndResolveState(auth_.get(), state_.release()));
-}
-
-TEST_F(CryptohomeAuthenticatorTest, ResolveOwnerNeededDirectFailedMount) {
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and succeeded but we are in safe mode and the current user is not owner.
-  // This is a high level test to verify the proper transitioning in this mode
-  // only. It is not testing that we properly verify that the user is an owner
-  // or that we really are in "safe-mode".
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_NONE);
-  SetOwnerState(true, false);
-
-  EXPECT_EQ(CryptohomeAuthenticator::OWNER_REQUIRED,
-            SetAndResolveState(auth_.get(), state_.release()));
-}
-
-TEST_F(CryptohomeAuthenticatorTest, ResolveOwnerNeededMount) {
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and succeeded but we are in safe mode and the current user is not owner.
-  // This test will check that the "safe-mode" policy is not set and will let
-  // the mount finish successfully.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_NONE);
-  SetOwnerState(false, false);
-  EXPECT_EQ(CryptohomeAuthenticator::OFFLINE_LOGIN,
-            SetAndResolveState(auth_.get(), state_.release()));
-}
-
-// Test the case that login switches to SafeMode and a User that is not the
-// owner tries to log in. The login should fail because of the missing owner
-// private key.
-TEST_F(CryptohomeAuthenticatorTest, ResolveOwnerNeededFailedMount) {
-  crypto::ScopedTestNSSChromeOSUser user_slot(user_context_.GetUserIDHash());
-  owner_key_util_->SetPublicKey(GetOwnerPublicKey());
-
-  profile_manager_ = std::make_unique<TestingProfileManager>(
-      TestingBrowserProcess::GetGlobal());
-  ASSERT_TRUE(profile_manager_->SetUp());
-
-  FailOnLoginSuccess();  // Set failing on success as the default...
-  AuthFailure failure = AuthFailure(AuthFailure::OWNER_REQUIRED);
-  ExpectLoginFailure(failure);
-
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and succeeded but we are in safe mode and the current user is not owner.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_NONE);
-  SetOwnerState(false, false);
-  ScopedCrosSettingsTestHelper settings_helper(false);
-  settings_helper.ReplaceDeviceSettingsProviderWithStub();
-  settings_helper.SetBoolean(kPolicyMissingMitigationMode, true);
-
-  // Initialize login state for this test to verify the login state is changed
-  // to SAFE_MODE.
-  LoginState::Initialize();
-
-  EXPECT_EQ(CryptohomeAuthenticator::CONTINUE,
-            SetAndResolveState(auth_.get(), state_.release()));
-  EXPECT_TRUE(LoginState::Get()->IsInSafeMode());
-
-  // Flush all the pending operations. The operations should induce an owner
-  // verification.
-  content::RunAllTasksUntilIdle();
-
-  state_ = std::make_unique<TestAttemptState>(
-      std::make_unique<UserContext>(user_context_));
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_NONE);
-
-  // The owner key util should not have found the owner key, so login should
-  // not be allowed.
-  EXPECT_EQ(CryptohomeAuthenticator::OWNER_REQUIRED,
-            SetAndResolveState(auth_.get(), state_.release()));
-  EXPECT_TRUE(LoginState::Get()->IsInSafeMode());
-
-  // Unset global objects used by this test.
-  fake_userdataauth_client_->set_unmount_should_succeed(true);
-  LoginState::Shutdown();
-}
-
-// Test the case that login switches to SafeMode and the Owner logs in, which
-// should lead to a successful login.
-TEST_F(CryptohomeAuthenticatorTest, ResolveOwnerNeededSuccess) {
-  crypto::ScopedTestNSSChromeOSUser test_user_db(user_context_.GetUserIDHash());
-  owner_key_util_->SetPublicKey(GetOwnerPublicKey());
-
-  crypto::ScopedPK11Slot user_slot(
-      crypto::GetPublicSlotForChromeOSUser(user_context_.GetUserIDHash()));
-  ASSERT_TRUE(CreateOwnerKeyInSlot(user_slot.get()));
-
-  profile_manager_ = std::make_unique<TestingProfileManager>(
-      TestingBrowserProcess::GetGlobal());
-  ASSERT_TRUE(profile_manager_->SetUp());
-
-  ExpectLoginSuccess(user_context_);
-
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and succeeded but we are in safe mode and the current user is not owner.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_NONE);
-  SetOwnerState(false, false);
-  ScopedCrosSettingsTestHelper settings_helper(false);
-  settings_helper.ReplaceDeviceSettingsProviderWithStub();
-  settings_helper.SetBoolean(kPolicyMissingMitigationMode, true);
-
-  // Initialize login state for this test to verify the login state is changed
-  // to SAFE_MODE.
-  LoginState::Initialize();
-
-  EXPECT_EQ(CryptohomeAuthenticator::CONTINUE,
-            SetAndResolveState(auth_.get(), state_.release()));
-  EXPECT_TRUE(LoginState::Get()->IsInSafeMode());
-
-  // Flush all the pending operations. The operations should induce an owner
-  // verification.
-  content::RunAllTasksUntilIdle();
-
-  state_ = std::make_unique<TestAttemptState>(
-      std::make_unique<UserContext>(user_context_));
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_NONE);
-
-  // The owner key util should find the owner key, so login should succeed.
-  EXPECT_EQ(CryptohomeAuthenticator::OFFLINE_LOGIN,
-            SetAndResolveState(auth_.get(), state_.release()));
-  EXPECT_TRUE(LoginState::Get()->IsInSafeMode());
-
-  // Unset global objects used by this test.
-  fake_userdataauth_client_->set_unmount_should_succeed(true);
-  LoginState::Shutdown();
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveFailedMount) {
-  FailOnLoginSuccess();
-  ExpectLoginFailure(AuthFailure(AuthFailure::COULD_NOT_MOUNT_CRYPTOHOME));
-
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and failed.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_FATAL);
-  SetAttemptState(auth_.get(), state_.release());
-
-  RunResolve(auth_.get());
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveGuestLogin) {
-  ExpectGuestLoginSuccess();
-  FailOnLoginFailure();
-  ExpectMountGuestExCall(true /*should_succeeed*/);
-
-  auth_->LoginOffTheRecord();
-  run_loop_.Run();
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveGuestLoginButFail) {
-  FailOnGuestLoginSuccess();
-  ExpectLoginFailure(AuthFailure(AuthFailure::COULD_NOT_MOUNT_TMPFS));
-  ExpectMountGuestExCall(false /*should_succeed*/);
-
-  auth_->LoginOffTheRecord();
-  run_loop_.Run();
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveDataResync) {
-  UserContext expected_user_context(user_context_with_transformed_key_);
-  expected_user_context.SetUserIDHash(kFakeSanitizedUsername);
-  ExpectLoginSuccess(expected_user_context);
-  FailOnLoginFailure();
-
-  // Set up mock homedir methods to respond successfully to a cryptohome create
-  // attempt.
-  ExpectGetKeyDataExCall(std::unique_ptr<int64_t>(),
-                         std::unique_ptr<std::string>());
-  ExpectMountExCall(true /* expect_create_attempt */);
-  fake_userdataauth_client_->set_remove_should_succeed(
-      true /* should_succeed */);
-
-  state_->PresetOnlineLoginComplete();
-  SetAttemptState(auth_.get(), state_.release());
-
-  auth_->ResyncEncryptedData(std::make_unique<UserContext>(user_context_));
-  run_loop_.Run();
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveResyncFail) {
-  FailOnLoginSuccess();
-  ExpectLoginFailure(AuthFailure(AuthFailure::DATA_REMOVAL_FAILED));
-
-  fake_userdataauth_client_->set_remove_should_succeed(
-      false /* should_succeed */);
-
-  SetAttemptState(auth_.get(), state_.release());
-
-  auth_->ResyncEncryptedData(std::make_unique<UserContext>(user_context_));
-  run_loop_.Run();
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveRequestOldPassword) {
-  FailOnLoginSuccess();
-  ExpectPasswordChange(user_context_);
-
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_KEY_FAILURE);
-  state_->PresetOnlineLoginComplete();
-  SetAttemptState(auth_.get(), state_.release());
-
-  RunResolve(auth_.get());
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveDataRecover) {
-  UserContext expected_user_context(user_context_with_transformed_key_);
-  expected_user_context.SetUserIDHash(kFakeSanitizedUsername);
-  ExpectLoginSuccess(expected_user_context);
-  FailOnLoginFailure();
-
-  // Set up mock homedir methods to respond successfully to a cryptohome mount
-  // attempt.
-  ExpectGetKeyDataExCall(std::unique_ptr<int64_t>(),
-                         std::unique_ptr<std::string>());
-  ExpectMountExCall(false /* expect_create_attempt */);
-  ExpectMigrateKeyExCall(true /*should_succeed*/);
-
-  state_->PresetOnlineLoginComplete();
-  SetAttemptState(auth_.get(), state_.release());
-
-  auth_->RecoverEncryptedData(std::make_unique<UserContext>(user_context_),
-                              std::string());
-  run_loop_.Run();
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveDataRecoverButFail) {
-  FailOnLoginSuccess();
-  ExpectPasswordChange(user_context_);
-  ExpectMigrateKeyExCall(false /*should_succeed*/);
-
-  SetAttemptState(auth_.get(), state_.release());
-
-  auth_->RecoverEncryptedData(std::make_unique<UserContext>(user_context_),
-                              std::string());
-  run_loop_.Run();
-}
-
-TEST_F(CryptohomeAuthenticatorTest, ResolveOfflineNoMount) {
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and been rejected because the user doesn't exist.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_USER_DOES_NOT_EXIST);
-
-  // When there is no online attempt and online results, the missing mount will
-  // be resolved to OFFLINE_NO_MOUNT.
-  EXPECT_EQ(CryptohomeAuthenticator::OFFLINE_NO_MOUNT,
-            SetAndResolveState(auth_.get(), state_.release()));
-
-  ExpectLoginFailure(AuthFailure(AuthFailure::MISSING_CRYPTOHOME));
-  RunResolve(auth_.get());
-}
-
-TEST_F(CryptohomeAuthenticatorTest, ResolveOfflineMountUnrecoverable) {
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and has been rejected because the vault is unrecoverable.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_VAULT_UNRECOVERABLE);
-
-  EXPECT_EQ(CryptohomeAuthenticator::OFFLINE_MOUNT_UNRECOVERABLE,
-            SetAndResolveState(auth_.get(), state_.release()));
-
-  ExpectLoginFailure(AuthFailure(AuthFailure::UNRECOVERABLE_CRYPTOHOME));
-  RunResolve(auth_.get());
-}
-
-TEST_F(CryptohomeAuthenticatorTest, ResolveCreateNew) {
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and been rejected because the user doesn't exist; additionally,
-  // an online auth attempt has completed successfully.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_USER_DOES_NOT_EXIST);
-  state_->PresetOnlineLoginComplete();
-
-  EXPECT_EQ(CryptohomeAuthenticator::CREATE_NEW,
-            SetAndResolveState(auth_.get(), state_.release()));
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveCreateForNewUser) {
-  UserContext expected_user_context(user_context_with_transformed_key_);
-  expected_user_context.SetUserIDHash(kFakeSanitizedUsername);
-  ExpectLoginSuccess(expected_user_context);
-  FailOnLoginFailure();
-
-  // Set up mock homedir methods to respond successfully to a cryptohome create
-  // attempt.
-  ExpectGetKeyDataExCall(std::unique_ptr<int64_t>(),
-                         std::unique_ptr<std::string>());
-  ExpectMountExCall(true /* expect_create_attempt */);
-
-  // Set up state as though a cryptohome mount attempt has occurred
-  // and been rejected because the user doesn't exist; additionally,
-  // an online auth attempt has completed successfully.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_USER_DOES_NOT_EXIST);
-  state_->PresetOnlineLoginComplete();
-  SetAttemptState(auth_.get(), state_.release());
-
-  RunResolve(auth_.get());
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveOfflineLogin) {
-  ExpectLoginSuccess(user_context_);
-  FailOnLoginFailure();
-
-  // Set up state as though a cryptohome mount attempt has occurred and
-  // succeeded.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_NONE);
-  SetAttemptState(auth_.get(), state_.release());
-
-  RunResolve(auth_.get());
-}
-
-TEST_F(CryptohomeAuthenticatorTest, DriveOnlineLogin) {
-  ExpectLoginSuccess(user_context_);
-  FailOnLoginFailure();
-
-  // Set up state as though a cryptohome mount attempt has occurred and
-  // succeeded.
-  state_->PresetCryptohomeStatus(cryptohome::MOUNT_ERROR_NONE);
-  state_->PresetOnlineLoginComplete();
-  SetAttemptState(auth_.get(), state_.release());
-
-  RunResolve(auth_.get());
-}
-
-}  // namespace ash
diff --git a/chrome/browser/ash/login/saml/in_session_password_change_manager.cc b/chrome/browser/ash/login/saml/in_session_password_change_manager.cc
index 95cdbec7..e9ec0a9c 100644
--- a/chrome/browser/ash/login/saml/in_session_password_change_manager.cc
+++ b/chrome/browser/ash/login/saml/in_session_password_change_manager.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
-#include "chrome/browser/ash/login/auth/chrome_cryptohome_authenticator.h"
 #include "chrome/browser/ash/login/auth/chrome_safe_mode_delegate.h"
 #include "chrome/browser/ash/login/login_pref_names.h"
 #include "chrome/browser/ash/login/saml/password_change_success_notification.h"
diff --git a/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.cc b/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.cc
index b34b208..68c1634 100644
--- a/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.cc
+++ b/chrome/browser/ash/login/test/embedded_policy_test_server_mixin.cc
@@ -58,13 +58,9 @@
 
   if (!capabilities_.contains(ENABLE_CANNED_SIGNING_KEYS)) {
     // Create universal signing keys that can sign any domain.
-    std::vector<policy::SignatureProvider::SigningKey> universal_signing_keys;
-    universal_signing_keys.push_back(policy::SignatureProvider::SigningKey(
-        policy::PolicyBuilder::CreateTestSigningKey(),
-        {{"*", policy::PolicyBuilder::GetTestSigningKeySignature()}}));
     policy_test_server_->policy_storage()
         ->signature_provider()
-        ->set_signing_keys(std::move(universal_signing_keys));
+        ->SetUniversalSigningKeys();
   }
 
   if (capabilities_.contains(ENABLE_AUTOMATIC_ROTATION_OF_SIGNINGKEYS)) {
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.cc
index 91833583..fa97ad73 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.cc
@@ -170,7 +170,7 @@
 
 void PersonalizationAppUserProviderImpl::SelectDefaultImage(int index) {
   if (!ash::default_user_image::IsInCurrentImageSet(index)) {
-    mojo::ReportBadMessage("Invalid user image selected");
+    user_receiver_.ReportBadMessage("Invalid user image selected");
     return;
   }
 
diff --git a/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandler.java b/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandler.java
index 106c327a..f7988ea 100644
--- a/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandler.java
+++ b/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandler.java
@@ -10,7 +10,6 @@
 import androidx.annotation.IntDef;
 
 import org.chromium.base.Callback;
-import org.chromium.base.Predicate;
 import org.chromium.base.lifetime.Destroyable;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.supplier.ObservableSupplier;
@@ -22,6 +21,8 @@
 import org.chromium.components.browser_ui.widget.gesture.BackPressHandler;
 import org.chromium.content_public.browser.WebContents;
 
+import java.util.function.Predicate;
+
 /**
  * The back press handler as the final step of back press handling. This is always enabled in order
  * to manually minimize app and close tab if necessary.
diff --git a/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandlerUnitTest.java b/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandlerUnitTest.java
index cfb5891..6947360b 100644
--- a/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandlerUnitTest.java
+++ b/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandlerUnitTest.java
@@ -26,7 +26,6 @@
 import org.chromium.base.Callback;
 import org.chromium.base.FeatureList;
 import org.chromium.base.FeatureList.TestValues;
-import org.chromium.base.Predicate;
 import org.chromium.base.UserDataHost;
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.test.BaseJUnit4ClassRunner;
@@ -39,6 +38,8 @@
 import org.chromium.chrome.browser.tab.TabLaunchType;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
+import java.util.function.Predicate;
+
 /**
  * Unit tests for {@link MinimizeAppAndCloseTabBackPressHandler}.
  */
diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_features.cc
index f7d39b25..0121568 100644
--- a/chrome/browser/browser_features.cc
+++ b/chrome/browser/browser_features.cc
@@ -204,4 +204,10 @@
              "FlexOrgManagementDisclosure",
              base::FEATURE_ENABLED_BY_DEFAULT);
 #endif  // BUILDFLAG(IS_CHROMEOS)
+
+// Enables usage of the FedCM API without third party cookies at the same time.
+BASE_FEATURE(kFedCmWithoutThirdPartyCookies,
+             "FedCmWithoutThirdPartyCookies",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 }  // namespace features
diff --git a/chrome/browser/browser_features.h b/chrome/browser/browser_features.h
index 8fb1ce0..aaa0292 100644
--- a/chrome/browser/browser_features.h
+++ b/chrome/browser/browser_features.h
@@ -76,6 +76,8 @@
 
 BASE_DECLARE_FEATURE(kFlexOrgManagementDisclosure);
 
+BASE_DECLARE_FEATURE(kFedCmWithoutThirdPartyCookies);
+
 }  // namespace features
 
 #endif  // CHROME_BROWSER_BROWSER_FEATURES_H_
diff --git a/chrome/browser/buildflags.gni b/chrome/browser/buildflags.gni
index f40ba33..3e3c261c 100644
--- a/chrome/browser/buildflags.gni
+++ b/chrome/browser/buildflags.gni
@@ -6,5 +6,5 @@
 
 declare_args() {
   # By default, only branded builds integrate with automatic updates.
-  enable_chromium_updater = is_chrome_branded
+  enable_updater = is_chrome_branded
 }
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 9dd46655..23ec3f8 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -5412,6 +5412,16 @@
   DCHECK(browser_context);
   DCHECK(factories);
 
+#if !BUILDFLAG(IS_ANDROID)
+  if (base::FeatureList::IsEnabled(features::kIsolatedWebApps) &&
+      !browser_context->ShutdownStarted()) {
+    factories->emplace(
+        chrome::kIsolatedAppScheme,
+        web_app::IsolatedWebAppURLLoaderFactory::CreateForServiceWorker(
+            browser_context));
+  }
+#endif  // !BUILDFLAG(IS_ANDROID)
+
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   factories->emplace(
       extensions::kExtensionScheme,
@@ -5631,16 +5641,26 @@
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 #if !BUILDFLAG(IS_ANDROID)
-  if (base::FeatureList::IsEnabled(features::kIsolatedWebApps) &&
-      web_contents) {
-    if (auto* browser_context = web_contents->GetBrowserContext();
-        !browser_context->ShutdownStarted()) {
+  if (base::FeatureList::IsEnabled(features::kIsolatedWebApps)) {
+    content::BrowserContext* browser_context =
+        content::RenderProcessHost::FromID(render_process_id)
+            ->GetBrowserContext();
+    DCHECK(browser_context);
+    if (!browser_context->ShutdownStarted()) {
       // TODO(crbug.com/1365848): Only register the factory if we are already in
       // an isolated storage partition.
-      factories->emplace(
-          chrome::kIsolatedAppScheme,
-          web_app::IsolatedWebAppURLLoaderFactory::Create(
-              frame_host->GetFrameTreeNodeId(), browser_context));
+
+      if (frame_host != nullptr) {
+        factories->emplace(
+            chrome::kIsolatedAppScheme,
+            web_app::IsolatedWebAppURLLoaderFactory::Create(
+                frame_host->GetFrameTreeNodeId(), browser_context));
+      } else {
+        factories->emplace(
+            chrome::kIsolatedAppScheme,
+            web_app::IsolatedWebAppURLLoaderFactory::CreateForServiceWorker(
+                browser_context));
+      }
     }
   }
 #endif
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api.cc b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api.cc
index 8d52a0f..f34983c 100644
--- a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api.cc
+++ b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api.cc
@@ -19,6 +19,7 @@
 #include "chrome/common/chromeos/extensions/api/telemetry.h"
 #include "chromeos/crosapi/mojom/probe_service.mojom.h"
 #include "extensions/common/permissions/permissions_data.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace chromeos {
 
@@ -175,15 +176,23 @@
   }
   auto& network_info = ptr->network_result->get_network_health();
 
-  // TODO(b/249246037): This is not part of the converter since we will need to
-  // check permissions here for additional fields like MAC address that we want
-  // to add soon. Add the permission here as soon as it is available.
   api::os_telemetry::InternetConnectivityInfo result;
   for (auto& network : network_info->networks) {
+    absl::optional<std::string> mac_address;
+    if (extension()->permissions_data()->HasAPIPermission(
+            extensions::mojom::APIPermissionID::
+                kChromeOSTelemetryNetworkInformation)) {
+      mac_address = std::move(network->mac_address);
+    }
+
     auto converted_network =
         converters::ConvertPtr<api::os_telemetry::NetworkInfo>(
             std::move(network));
 
+    if (mac_address && !mac_address->empty()) {
+      converted_network.mac_address = std::move(mac_address);
+    }
+
     // Don't include networks with an undefined type.
     if (converted_network.type !=
         api::os_telemetry::NetworkType::NETWORK_TYPE_NONE) {
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api_browsertest.cc b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api_browsertest.cc
index 1f59250..d9c6482 100644
--- a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api_browsertest.cc
+++ b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api_browsertest.cc
@@ -719,6 +719,7 @@
       auto network = chromeos::network_health::mojom::Network::New();
       network->type = chromeos::network_config::mojom::NetworkType::kWiFi;
       network->state = chromeos::network_health::mojom::NetworkState::kOnline;
+      network->mac_address = "00:00:5e:00:53:af";
       network->ipv4_address = "1.1.1.1";
       network->ipv6_addresses = {"FE80:CD00:0000:0CDE:1257:0000:211E:729C"};
       network->signal_strength =
@@ -731,6 +732,7 @@
           chromeos::network_config::mojom::NetworkType::kAll;
       invalid_network->state =
           chromeos::network_health::mojom::NetworkState::kOnline;
+      invalid_network->mac_address = "00:00:5e:00:53:fu";
       invalid_network->ipv4_address = "2.2.2.2";
       invalid_network->ipv6_addresses = {
           "FE80:0000:CD00:729C:0CDE:1257:0000:211E"};
@@ -764,6 +766,7 @@
         const network_result = result.networks[0];
         chrome.test.assertEq('wifi', network_result.type);
         chrome.test.assertEq('online', network_result.state);
+        chrome.test.assertEq('00:00:5e:00:53:af', network_result.macAddress);
         chrome.test.assertEq('1.1.1.1', network_result.ipv4Address);
         chrome.test.assertEq(['FE80:CD00:0000:0CDE:1257:0000:211E:729C'],
           network_result.ipv6Addresses);
@@ -1207,17 +1210,19 @@
   )");
 }
 
-class TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest
+class TelemetryExtensionTelemetryApiWithoutAdditionalPermissionsBrowserTest
     : public TelemetryExtensionTelemetryApiBrowserTest {
  public:
-  TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest() = default;
-  ~TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest() override =
+  TelemetryExtensionTelemetryApiWithoutAdditionalPermissionsBrowserTest() =
       default;
+  ~TelemetryExtensionTelemetryApiWithoutAdditionalPermissionsBrowserTest()
+      override = default;
 
-  TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest(
+  TelemetryExtensionTelemetryApiWithoutAdditionalPermissionsBrowserTest(
       const BaseTelemetryExtensionBrowserTest&) = delete;
-  TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest& operator=(
-      const TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest&) =
+  TelemetryExtensionTelemetryApiWithoutAdditionalPermissionsBrowserTest&
+  operator=(
+      const TelemetryExtensionTelemetryApiWithoutAdditionalPermissionsBrowserTest&) =
       delete;
 
  protected:
@@ -1246,7 +1251,7 @@
 };
 
 IN_PROC_BROWSER_TEST_F(
-    TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest,
+    TelemetryExtensionTelemetryApiWithoutAdditionalPermissionsBrowserTest,
     GetBatteryInfoWithoutSerialNumberPermission) {
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
   // If Probe interface is not available on this version of ash-chrome, this
@@ -1327,7 +1332,69 @@
 }
 
 IN_PROC_BROWSER_TEST_F(
-    TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest,
+    TelemetryExtensionTelemetryApiWithoutAdditionalPermissionsBrowserTest,
+    GetOemInternetConnectivityWithoutPermission) {
+#if BUILDFLAG(IS_CHROMEOS_LACROS)
+  // If Probe interface is not available on this version of ash-chrome, this
+  // test suite will no-op.
+  if (!IsServiceAvailable()) {
+    return;
+  }
+#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
+
+  // Configure FakeProbeService.
+  {
+    auto telemetry_info = crosapi::mojom::ProbeTelemetryInfo::New();
+
+    {
+      auto network = chromeos::network_health::mojom::Network::New();
+      network->type = chromeos::network_config::mojom::NetworkType::kWiFi;
+      network->state = chromeos::network_health::mojom::NetworkState::kOnline;
+      network->mac_address = "00:00:5e:00:53:af";
+      network->ipv4_address = "1.1.1.1";
+      network->ipv6_addresses = {"FE80:CD00:0000:0CDE:1257:0000:211E:729C"};
+      network->signal_strength =
+          chromeos::network_health::mojom::UInt32Value::New(100);
+
+      auto network_info =
+          chromeos::network_health::mojom::NetworkHealthState::New();
+      network_info->networks.push_back(std::move(network));
+
+      telemetry_info->network_result =
+          crosapi::mojom::ProbeNetworkResult::NewNetworkHealth(
+              std::move(network_info));
+    }
+
+    auto fake_service_impl = std::make_unique<FakeProbeService>();
+    fake_service_impl->SetProbeTelemetryInfoResponse(std::move(telemetry_info));
+    fake_service_impl->SetExpectedLastRequestedCategories(
+        {crosapi::mojom::ProbeCategoryEnum::kNetwork});
+
+    SetServiceForTesting(std::move(fake_service_impl));
+  }
+
+  CreateExtensionAndRunServiceWorker(R"(
+    chrome.test.runTests([
+      async function getInternetConnectivityInfo() {
+        const result = await chrome.os.telemetry.getInternetConnectivityInfo();
+        chrome.test.assertEq(1, result.networks.length);
+
+        const network_result = result.networks[0];
+        chrome.test.assertEq('wifi', network_result.type);
+        chrome.test.assertEq('online', network_result.state);
+        chrome.test.assertEq('1.1.1.1', network_result.ipv4Address);
+        chrome.test.assertEq(null, network_result.macAddress);
+        chrome.test.assertEq(['FE80:CD00:0000:0CDE:1257:0000:211E:729C'],
+          network_result.ipv6Addresses);
+        chrome.test.assertEq(100, network_result.signalStrength);
+        chrome.test.succeed();
+      }
+    ]);
+  )");
+}
+
+IN_PROC_BROWSER_TEST_F(
+    TelemetryExtensionTelemetryApiWithoutAdditionalPermissionsBrowserTest,
     GetOemDataWithoutSerialNumberPermission) {
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
   // If Probe interface is not available on this version of ash-chrome, this
@@ -1358,7 +1425,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(
-    TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest,
+    TelemetryExtensionTelemetryApiWithoutAdditionalPermissionsBrowserTest,
     GetVpdInfoWithoutSerialNumberPermission) {
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
   // If Probe interface is not available on this version of ash-chrome, this
diff --git a/chrome/browser/dips/dips_database.cc b/chrome/browser/dips/dips_database.cc
index 127d88b..6436f7a 100644
--- a/chrome/browser/dips/dips_database.cc
+++ b/chrome/browser/dips/dips_database.cc
@@ -233,7 +233,8 @@
       "SELECT site FROM bounces "
         "WHERE (last_stateful_bounce_time > ? "
         "OR last_stateless_bounce_time > ?) AND "
-        "last_user_interaction_time < ? "
+        "last_user_interaction_time < ? AND "
+        "last_user_interaction_time > 0 "
         "ORDER BY site";
   // clang-format on
 
@@ -260,7 +261,8 @@
       "SELECT site FROM bounces "
         "WHERE last_stateful_bounce_time > ? AND "
         "last_site_storage_time > ? AND "
-        "last_user_interaction_time < ? "
+        "last_user_interaction_time < ? AND "
+        "last_user_interaction_time > 0 "
         "ORDER BY site";
   // clang-format on
   DCHECK(db_->IsSQLValid(kReadSql));
@@ -286,7 +288,8 @@
       "SELECT site FROM bounces "
         "WHERE (last_site_storage_time > ? OR "
         "last_stateful_bounce_time > ?) AND "
-        "last_user_interaction_time < ? "
+        "last_user_interaction_time < ? AND "
+        "last_user_interaction_time > 0 "
         "ORDER BY site";
   // clang-format on
   DCHECK(db_->IsSQLValid(kReadSql));
diff --git a/chrome/browser/dips/dips_database_unittest.cc b/chrome/browser/dips/dips_database_unittest.cc
index 20c1652..e47839e 100644
--- a/chrome/browser/dips/dips_database_unittest.cc
+++ b/chrome/browser/dips/dips_database_unittest.cc
@@ -169,7 +169,7 @@
                                          ColumnType::kStatefulBounce,
                                          ColumnType::kStatelessBounce)));
 
-// A test class that verifies the behavior of the methods  used to query the
+// A test class that verifies the behavior of the methods used to query the
 // DIPSDatabase for information more efficiently than using DIPSDatabase::Read.
 //
 // Parameterized over whether the db is in memory.
@@ -198,6 +198,19 @@
                /*stateful_bounce_times=*/{}, stateless_bounce_times);
   }
 
+ protected:
+  // Rewrites the entries that were wrote in SetUp() to not have interactions.
+  void ClearAllInteractions() {
+    db_->Write("https://storage-only.test", storage_times,
+               /*interaction_times=*/{},
+               /*stateful_bounce_times=*/{}, /*stateless_bounce_times=*/{});
+    db_->Write("https://stateful-bounce.test", storage_times,
+               /*interaction_times=*/{}, stateful_bounce_times,
+               /*stateless_bounce_times=*/{});
+    db_->Write("https://stateless-bounce.test",
+               /*storage_times=*/{}, /*interaction_times=*/{},
+               /*stateful_bounce_times=*/{}, stateless_bounce_times);
+  }
   // For ease of testings if a site has an entry in its `user_interaction`
   // column the timestamp is at t=1 and so on.
   base::Time interaction = Time::FromDoubleT(1);
@@ -221,6 +234,16 @@
   TimestampRange stateless_bounce_times = {stateless_bounce, stateless_bounce};
 };
 
+TEST_P(DIPSDatabaseQueryTest, VerifyInteractionsNonNull) {
+  ClearAllInteractions();
+  EXPECT_THAT(db_->GetSitesThatBounced(before_storage, interaction),
+              testing::IsEmpty());
+  EXPECT_THAT(db_->GetSitesThatUsedStorage(before_storage, interaction),
+              testing::IsEmpty());
+  EXPECT_THAT(db_->GetSitesThatBouncedWithState(before_storage, interaction),
+              testing::IsEmpty());
+}
+
 TEST_P(DIPSDatabaseQueryTest, EnsureLastInteractionStrictlyBeforeRangeStart) {
   // Verify that the |last_interaction| shouldn't be greater than |range_start|
   // for each query method.
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn
index 4502448..3f9e3493 100644
--- a/chrome/browser/extensions/BUILD.gn
+++ b/chrome/browser/extensions/BUILD.gn
@@ -910,7 +910,6 @@
     "//device/fido",
     "//extensions:extensions_resources",
     "//extensions/browser",
-    "//extensions/browser:core_api_provider",
     "//extensions/browser/updater",
     "//extensions/browser/updater:keepalive",
     "//extensions/buildflags",
diff --git a/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc b/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc
index b73cc3ca..cfa91675 100644
--- a/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc
+++ b/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc
@@ -186,10 +186,9 @@
         url = extension_host->initial_url();
     }
 
-    bool is_iframe = web_contents->GetPrimaryMainFrame() != host;
     content::RenderProcessHost* process = host->GetProcess();
     result->push_back(ConstructView(url, process->GetID(), host->GetRoutingID(),
-                                    is_incognito, is_iframe,
+                                    is_incognito, !host->IsInPrimaryMainFrame(),
                                     ConvertViewType(host_type)));
   }
 
diff --git a/chrome/browser/extensions/api/image_writer_private/operation_manager.h b/chrome/browser/extensions/api/image_writer_private/operation_manager.h
index ff31dbf..e9b3aff 100644
--- a/chrome/browser/extensions/api/image_writer_private/operation_manager.h
+++ b/chrome/browser/extensions/api/image_writer_private/operation_manager.h
@@ -40,8 +40,7 @@
 // and message routing.
 class OperationManager : public BrowserContextKeyedAPI,
                          public ExtensionRegistryObserver,
-                         public ProcessManagerObserver,
-                         public base::SupportsWeakPtr<OperationManager> {
+                         public ProcessManagerObserver {
  public:
   explicit OperationManager(content::BrowserContext* context);
 
@@ -91,6 +90,10 @@
   static BrowserContextKeyedAPIFactory<OperationManager>* GetFactoryInstance();
   static OperationManager* Get(content::BrowserContext* context);
 
+  base::WeakPtr<OperationManager> AsWeakPtr() {
+    return weak_factory_.GetWeakPtr();
+  }
+
  private:
   static const char* service_name() {
     return "OperationManager";
diff --git a/chrome/browser/extensions/api/printer_provider/printer_provider_apitest.cc b/chrome/browser/extensions/api/printer_provider/printer_provider_apitest.cc
index 319e2da..2775592 100644
--- a/chrome/browser/extensions/api/printer_provider/printer_provider_apitest.cc
+++ b/chrome/browser/extensions/api/printer_provider/printer_provider_apitest.cc
@@ -83,10 +83,10 @@
 
 // Callback for PrinterProvider::DispatchGrantUsbPrinterAccess calls.
 // It expects |value| to equal |expected_value| and runs |callback|.
-void ExpectValueAndRunCallback(const base::Value* expected_value,
+void ExpectValueAndRunCallback(const base::Value::Dict& expected_value,
                                base::OnceClosure callback,
-                               const base::DictionaryValue& value) {
-  EXPECT_EQ(value, *expected_value);
+                               base::Value::Dict value) {
+  EXPECT_EQ(value, expected_value);
   if (!callback.is_null())
     std::move(callback).Run();
 }
@@ -760,12 +760,12 @@
                                            test_param, &extension_id);
     ASSERT_FALSE(extension_id.empty());
 
-    std::unique_ptr<base::Value> expected_printer_info(
-        new base::DictionaryValue());
+    base::Value::Dict expected_printer_info;
     base::RunLoop run_loop;
     StartGetUsbPrinterInfoRequest(
         extension_id, *device,
-        base::BindOnce(&ExpectValueAndRunCallback, expected_printer_info.get(),
+        base::BindOnce(&ExpectValueAndRunCallback,
+                       std::move(expected_printer_info),
                        run_loop.QuitClosure()));
     run_loop.Run();
 
@@ -791,7 +791,7 @@
   ASSERT_FALSE(extension_id.empty());
 
   UsbDeviceManager* device_manager = UsbDeviceManager::Get(profile());
-  std::unique_ptr<base::Value> expected_printer_info(
+  base::Value::Dict expected_printer_info =
       DictionaryBuilder()
           .Set("description", "This printer is a USB device.")
           .Set("extensionId", extension_id)
@@ -800,12 +800,12 @@
                base::StringPrintf("%s:usbDevice-%u", extension_id.c_str(),
                                   device_manager->GetIdFromGuid(device->guid)))
           .Set("name", "Test Printer")
-          .Build());
+          .BuildDict();
   base::RunLoop run_loop;
   StartGetUsbPrinterInfoRequest(
       extension_id, *device,
-      base::BindOnce(&ExpectValueAndRunCallback, expected_printer_info.get(),
-                     run_loop.QuitClosure()));
+      base::BindOnce(&ExpectValueAndRunCallback,
+                     std::move(expected_printer_info), run_loop.QuitClosure()));
   run_loop.Run();
 
   ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
diff --git a/chrome/browser/extensions/blocklist.cc b/chrome/browser/extensions/blocklist.cc
index c7f533d..7cdf9be 100644
--- a/chrome/browser/extensions/blocklist.cc
+++ b/chrome/browser/extensions/blocklist.cc
@@ -199,8 +199,8 @@
   // extensions returned by SafeBrowsing will then be passed to
   // GetBlocklistStateIDs to get the particular BlocklistState for each id.
   SafeBrowsingClientImpl::Start(
-      ids, base::BindOnce(&Blocklist::GetBlocklistStateForIDs, AsWeakPtr(),
-                          std::move(callback)));
+      ids, base::BindOnce(&Blocklist::GetBlocklistStateForIDs,
+                          weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
 }
 
 void Blocklist::GetMalwareIDs(const std::set<std::string>& ids,
@@ -245,8 +245,9 @@
     // these extensions.
     RequestExtensionsBlocklistState(
         ids_unknown_state,
-        base::BindOnce(&Blocklist::ReturnBlocklistStateMap, AsWeakPtr(),
-                       std::move(callback), blocklisted_ids));
+        base::BindOnce(&Blocklist::ReturnBlocklistStateMap,
+                       weak_ptr_factory_.GetWeakPtr(), std::move(callback),
+                       blocklisted_ids));
   }
 }
 
@@ -275,9 +276,9 @@
   state_requests_.emplace_back(std::vector<std::string>(ids.begin(), ids.end()),
                                std::move(callback));
   for (const auto& id : ids) {
-    state_fetcher_->Request(
-        id,
-        base::BindOnce(&Blocklist::OnBlocklistStateReceived, AsWeakPtr(), id));
+    state_fetcher_->Request(id,
+                            base::BindOnce(&Blocklist::OnBlocklistStateReceived,
+                                           weak_ptr_factory_.GetWeakPtr(), id));
   }
 }
 
@@ -354,7 +355,7 @@
                DatabaseReadyCallback callback, bool is_ready) {
               std::move(callback).Run(blocklist_service && is_ready);
             },
-            AsWeakPtr(), std::move(callback)));
+            weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
   }
 }
 
diff --git a/chrome/browser/extensions/blocklist.h b/chrome/browser/extensions/blocklist.h
index 3fe5da2..dc9bf428 100644
--- a/chrome/browser/extensions/blocklist.h
+++ b/chrome/browser/extensions/blocklist.h
@@ -34,7 +34,7 @@
 class ExtensionPrefs;
 
 // The blocklist of extensions backed by safe browsing.
-class Blocklist : public KeyedService, public base::SupportsWeakPtr<Blocklist> {
+class Blocklist : public KeyedService {
  public:
   class Observer {
    public:
@@ -160,6 +160,8 @@
   // is a pair of [vector of string ids to check, response closure].
   std::list<std::pair<std::vector<std::string>, base::OnceClosure>>
       state_requests_;
+
+  base::WeakPtrFactory<Blocklist> weak_ptr_factory_{this};
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/chrome_app_sorting.cc b/chrome/browser/extensions/chrome_app_sorting.cc
index d62f233..c029e719 100644
--- a/chrome/browser/extensions/chrome_app_sorting.cc
+++ b/chrome/browser/extensions/chrome_app_sorting.cc
@@ -30,7 +30,6 @@
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 #include "chrome/browser/ash/extensions/default_app_order.h"
-#include "chrome/browser/ui/app_list/page_break_constants.h"
 #endif
 
 namespace extensions {
@@ -703,15 +702,6 @@
     default_ordinals_[extension_id].page_ordinal = page_ordinal;
     default_ordinals_[extension_id].app_launch_ordinal = app_launch_ordinal;
     app_launch_ordinal = app_launch_ordinal.CreateAfter();
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-    // Default page breaks are installed by default for first-time users so that
-    // we can make default apps span multiple pages in the Launcher without
-    // fully filling those pages. If |extension_id| is of a default page break,
-    // then apps that follow it in the order should have an incremented page
-    // ordinal.
-    if (app_list::IsDefaultPageBreakItem(extension_id))
-      page_ordinal = page_ordinal.CreateAfter();
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
   }
 }
 
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc
index 56004d8..263a052 100644
--- a/chrome/browser/extensions/chrome_extensions_browser_client.cc
+++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc
@@ -68,7 +68,7 @@
 #include "content/public/browser/render_process_host.h"
 #include "content/public/common/content_switches.h"
 #include "extensions/browser/api/content_settings/content_settings_service.h"
-#include "extensions/browser/core_extensions_browser_api_provider.h"
+#include "extensions/browser/api/core_extensions_browser_api_provider.h"
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/extension_util.h"
diff --git a/chrome/browser/extensions/extension_uninstall_dialog.h b/chrome/browser/extensions/extension_uninstall_dialog.h
index 0741d43..9778d99 100644
--- a/chrome/browser/extensions/extension_uninstall_dialog.h
+++ b/chrome/browser/extensions/extension_uninstall_dialog.h
@@ -28,11 +28,9 @@
 namespace extensions {
 class Extension;
 
-class ExtensionUninstallDialog
-    : public base::SupportsWeakPtr<ExtensionUninstallDialog>,
-      public ChromeAppIconDelegate,
-      public ExtensionRegistryObserver,
-      public ProfileObserver {
+class ExtensionUninstallDialog : public ChromeAppIconDelegate,
+                                 public ExtensionRegistryObserver,
+                                 public ProfileObserver {
  public:
   // Implement this callback to handle checking for the dialog's header message.
   using OnWillShowCallback =
@@ -108,6 +106,10 @@
   // Called when the dialog is closing to do any book-keeping.
   void OnDialogClosed(CloseAction action);
 
+  base::WeakPtr<ExtensionUninstallDialog> AsWeakPtr() {
+    return weak_ptr_factory_.GetWeakPtr();
+  }
+
   // Called from unit test to check callbacks in dialog.
   static void SetOnShownCallbackForTesting(OnWillShowCallback* callback);
 
@@ -191,6 +193,8 @@
   base::ScopedObservation<Profile, ProfileObserver> profile_observation_{this};
 
   base::ThreadChecker thread_checker_;
+
+  base::WeakPtrFactory<ExtensionUninstallDialog> weak_ptr_factory_{this};
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/menu_manager.cc b/chrome/browser/extensions/menu_manager.cc
index 0063f4b..481c92b 100644
--- a/chrome/browser/extensions/menu_manager.cc
+++ b/chrome/browser/extensions/menu_manager.cc
@@ -877,9 +877,10 @@
 void MenuManager::OnExtensionLoaded(content::BrowserContext* browser_context,
                                     const Extension* extension) {
   if (store_ && BackgroundInfo::HasLazyContext(extension)) {
-    store_->GetExtensionValue(extension->id(), kContextMenusKey,
-                              base::BindOnce(&MenuManager::ReadFromStorage,
-                                             AsWeakPtr(), extension->id()));
+    store_->GetExtensionValue(
+        extension->id(), kContextMenusKey,
+        base::BindOnce(&MenuManager::ReadFromStorage,
+                       weak_ptr_factory_.GetWeakPtr(), extension->id()));
   }
 }
 
diff --git a/chrome/browser/extensions/menu_manager.h b/chrome/browser/extensions/menu_manager.h
index 4820fb6..76e0c2f 100644
--- a/chrome/browser/extensions/menu_manager.h
+++ b/chrome/browser/extensions/menu_manager.h
@@ -286,7 +286,6 @@
 
 // This class keeps track of menu items added by extensions.
 class MenuManager : public ProfileObserver,
-                    public base::SupportsWeakPtr<MenuManager>,
                     public KeyedService,
                     public ExtensionRegistryObserver {
  public:
@@ -435,6 +434,8 @@
   raw_ptr<StateStore> store_;
 
   base::ObserverList<TestObserver> observers_;
+
+  base::WeakPtrFactory<MenuManager> weak_ptr_factory_{this};
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/webstore_data_fetcher.cc b/chrome/browser/extensions/webstore_data_fetcher.cc
index 7788150..1cb1b9d7 100644
--- a/chrome/browser/extensions/webstore_data_fetcher.cc
+++ b/chrome/browser/extensions/webstore_data_fetcher.cc
@@ -35,10 +35,7 @@
 WebstoreDataFetcher::WebstoreDataFetcher(WebstoreDataFetcherDelegate* delegate,
                                          const GURL& referrer_url,
                                          const std::string webstore_item_id)
-    : delegate_(delegate),
-      referrer_url_(referrer_url),
-      id_(webstore_item_id),
-      max_auto_retries_(0) {}
+    : delegate_(delegate), referrer_url_(referrer_url), id_(webstore_item_id) {}
 
 WebstoreDataFetcher::~WebstoreDataFetcher() {}
 
@@ -146,8 +143,8 @@
 
   // The parser will call us back via one of the callbacks.
   data_decoder::DataDecoder::ParseJsonIsolated(
-      *response_body,
-      base::BindOnce(&WebstoreDataFetcher::OnJsonParsed, AsWeakPtr()));
+      *response_body, base::BindOnce(&WebstoreDataFetcher::OnJsonParsed,
+                                     weak_ptr_factory_.GetWeakPtr()));
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/webstore_data_fetcher.h b/chrome/browser/extensions/webstore_data_fetcher.h
index 90a1c441..34058d13 100644
--- a/chrome/browser/extensions/webstore_data_fetcher.h
+++ b/chrome/browser/extensions/webstore_data_fetcher.h
@@ -27,7 +27,7 @@
 
 // WebstoreDataFetcher fetches web store data and parses it into a
 // DictionaryValue.
-class WebstoreDataFetcher : public base::SupportsWeakPtr<WebstoreDataFetcher> {
+class WebstoreDataFetcher {
  public:
   WebstoreDataFetcher(WebstoreDataFetcherDelegate* delegate,
                       const GURL& referrer_url,
@@ -62,7 +62,9 @@
 
   // Maximum auto retry times on server 5xx error or ERR_NETWORK_CHANGED.
   // Default is 0 which means to use the URLFetcher default behavior.
-  int max_auto_retries_;
+  int max_auto_retries_ = 0;
+
+  base::WeakPtrFactory<WebstoreDataFetcher> weak_ptr_factory_{this};
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index ce91536..4e8702e2 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -501,14 +501,6 @@
     "expiry_milestone": 110
   },
   {
-    "name": "autofill-enable-sending-bcn-in-get-upload-details",
-    "owners": [
-      "jsaul@google.com",
-      "payments-autofill-team@google.com"
-    ],
-    "expiry_milestone": 108
-  },
-  {
     "name": "autofill-enable-sticky-manual-fallback-for-cards",
     "owners": [ "siashah","siyua" ],
     "expiry_milestone": 112
@@ -675,13 +667,13 @@
   },
   {
     "name": "biometric-authentication-for-filling",
-    "owners": ["sygiet@google.com", "vsemeniuk@google.com"],
+    "owners": ["vsemeniuk@google.com", "vasilii"],
     "expiry_milestone": 111
   },
   {
     "name": "biometric-authentication-in-settings",
-    "owners": ["sygiet@google.com", "vsemeniuk@google.com"],
-    "expiry_milestone": 110
+    "owners": ["vsemeniuk@google.com", "vasilii"],
+    "expiry_milestone": 111
   },
   {
     "name": "biometric-reauth-password-filling",
@@ -2061,11 +2053,6 @@
     "expiry_milestone": 120
   },
   {
-    "name": "enable-desks-trackpad-swipe-improvements",
-    "owners": [ "fanafan", "sammiequon", "tclaiborne" ],
-    "expiry_milestone": 110
-  },
-  {
     "name": "enable-desktop-capture-lacros-v2",
     "owners": [ "alcooper", "mfoltz" ],
     "expiry_milestone": 115
@@ -2246,7 +2233,7 @@
     // This should expire once all cookie handling changes have been enabled by
     // default. This is expected to take a while, and this expiry will probably
     // need to be extended.
-    "expiry_milestone": 110
+    "expiry_milestone": 130
   },
   {
     "name": "enable-experimental-rgb-keyboard-patterns",
@@ -3204,7 +3191,7 @@
   {
     "name": "enable-unicorn-account-support",
     "owners": [ "fernandex" ],
-    "expiry_milestone": 106
+    "expiry_milestone": 112
   },
   {
     "name": "enable-universal-links",
@@ -3632,6 +3619,11 @@
     "expiry_milestone": 120
   },
   {
+    "name": "fedcm-without-third-party-cookies",
+    "owners": ["tanzachary", "web-identity-eng@google.com"],
+    "expiry_milestone": 120
+  },
+  {
     "name": "feed-ablation",
     "owners": [ "//chrome/android/feed/OWNERS", "dewittj@chromium.org" ],
     "expiry_milestone": 105
@@ -3754,7 +3746,7 @@
   {
     "name": "filling-across-affiliated-websites",
     "owners": [ "vsemeniuk@google.com", "vasilii" ],
-    "expiry_milestone": 109
+    "expiry_milestone": 111
   },
   {
     "name": "focus-follows-cursor",
@@ -4269,7 +4261,7 @@
   {
     "name": "ios-new-post-restore-experience",
     "owners": [ "scottyoder@google.com", "bling-flags@google.com" ],
-    "expiry_milestone": 110
+    "expiry_milestone": 112
   },
   {
     "name": "ios-password-manager-cross-origin-iframe-support",
@@ -4778,7 +4770,7 @@
   {
     "name": "new-overflow-menu-share-chrome-action",
     "owners": [ "scottyoder@google.com", "bling-flags@google.com" ],
-    "expiry_milestone": 110
+    "expiry_milestone": 112
   },
   {
     "name": "new-overflow-menu-simple-destination-icons",
@@ -5595,11 +5587,6 @@
     "expiry_milestone": 100
   },
   {
-    "name": "pervasive-system-accent-color",
-    "owners": ["pkasting"],
-    "expiry_milestone": 110
-  },
-  {
     "name": "photo-picker-video-support",
     "owners": [ "finnur" ],
     "expiry_milestone": 110
@@ -6102,11 +6089,6 @@
     "expiry_milestone" : 110
   },
   {
-    "name": "secondary-google-account-usage",
-    "owners": [ "rodmartin", "sinhak", "chromeos-commercial-identity@google.com" ],
-    "expiry_milestone": 102
-  },
-  {
     "name": "send-tab-to-self-signin-promo",
     "owners": ["victorvianna@google.com", "harrisonsean@google.com"],
     "expiry_milestone": 107
@@ -6478,11 +6460,6 @@
     "expiry_milestone": 110
   },
   {
-    "name": "sync-trusted-vault-passphrase-ios-rpc",
-    "owners": [ "mastiz", "jlebel" ],
-    "expiry_milestone": 110
-  },
-  {
     "name": "sync-trusted-vault-passphrase-promo",
     "owners": [ "mastiz", "mmoskvitin" ],
     "expiry_milestone": 110
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 77be0ad..99d87811 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -417,12 +417,6 @@
     "When enabled, some extra metrics logging for Autofill Downstream will "
     "start.";
 
-const char kAutofillEnableSendingBcnInGetUploadDetailsName[] =
-    "Enable sending billing customer number in GetUploadDetails";
-const char kAutofillEnableSendingBcnInGetUploadDetailsDescription[] =
-    "When enabled the billing customer number will be sent in the "
-    "GetUploadDetails preflight calls.";
-
 const char kAutofillEnableStickyManualFallbackForCardsName[] =
     "Make manual fallback sticky for credit cards";
 const char kAutofillEnableStickyManualFallbackForCardsDescription[] =
@@ -1462,6 +1456,11 @@
 const char kFedCmDescription[] =
     "Enables JavaScript API to intermediate federated identity requests.";
 
+const char kFedCmWithoutThirdPartyCookiesName[] =
+    "FedCmWithoutThirdPartyCookies";
+const char kFedCmWithoutThirdPartyCookiesDescription[] =
+    "Allows the FedCM API to be enabled when third party cookies are disabled.";
+
 const char kFedCmMetricsEndpointName[] = "FedCmMetricsEndpoint";
 const char kFedCmMetricsEndpointDescription[] =
     "Allows the FedCM API to send performance measurement to the metrics "
@@ -3583,11 +3582,6 @@
 const char kEnableCommandLineOnNoRootedDescription[] =
     "Enable reading command line file on non-rooted devices (DANGEROUS).";
 
-const char kEnableFamilyInfoFeedbackName[] =
-    "Enable feedback from FamilyLink (Android)";
-const char kEnableFamilyInfoFeedbackDescription[] =
-    "Enable FamilyLink feedback source in Chrome Settings feedback";
-
 const char kEnablePasswordsAccountStorageName[] =
     "Enable the account data storage for passwords";
 const char kEnablePasswordsAccountStorageDescription[] =
@@ -4466,12 +4460,6 @@
     "Enable/Disable the use of MediaFoundation for non-protected content "
     "playback on supported systems.";
 
-const char kPervasiveSystemAccentColorName[] = "Pervasive system accent color";
-const char kPervasiveSystemAccentColorDescription[] =
-    "Use the Windows system accent color as the Chrome accent color, if \"Show "
-    "accent color on title bars and windows borders\" is toggled on in the "
-    "Windows system settings.";
-
 const char kRawAudioCaptureName[] = "Raw audio capture";
 const char kRawAudioCaptureDescription[] =
     "Enable/Disable the usage of WASAPI raw audio capture. When enabled, the "
@@ -4911,12 +4899,6 @@
     "Streamline workflows by saving a group of applications and windows as a "
     "launchable template in a new desk";
 
-const char kDesksTrackpadSwipeImprovementsName[] =
-    "Experiment: Trackpad swiping to switch desks.";
-const char kDesksTrackpadSwipeImprovementsDescription[] =
-    "Adds some modifications to the four finger trackpad gesture which "
-    "switches desks.";
-
 const char kPreferConstantFrameRateName[] = "Prefer Constant Frame Rate";
 const char kPreferConstantFrameRateDescription[] =
     "Enables this flag to prefer using constant frame rate for camera when "
@@ -5871,12 +5853,6 @@
     "Enable more features based on ARC Input Overlay Alpha, "
     "so it can change the touch point position.";
 
-const char kSecondaryGoogleAccountUsageName[] =
-    "Enable Secondary Google account usage policy.";
-const char kSecondaryGoogleAccountUsageDescription[] =
-    "Add restrictions on a managed account's usage as a secondary account on "
-    "ChromeOS.";
-
 const char kShelfAutoHideSeparationName[] =
     "Enable separate shelf auto-hide preferences.";
 const char kShelfAutoHideSeparationDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 996824a8..83d74a5 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -236,9 +236,6 @@
 extern const char kAutofillEnableRemadeDownstreamMetricsName[];
 extern const char kAutofillEnableRemadeDownstreamMetricsDescription[];
 
-extern const char kAutofillEnableSendingBcnInGetUploadDetailsName[];
-extern const char kAutofillEnableSendingBcnInGetUploadDetailsDescription[];
-
 extern const char kAutofillEnableStickyManualFallbackForCardsName[];
 extern const char kAutofillEnableStickyManualFallbackForCardsDescription[];
 
@@ -820,6 +817,9 @@
 extern const char kFedCmName[];
 extern const char kFedCmDescription[];
 
+extern const char kFedCmWithoutThirdPartyCookiesName[];
+extern const char kFedCmWithoutThirdPartyCookiesDescription[];
+
 extern const char kFedCmMetricsEndpointName[];
 extern const char kFedCmMetricsEndpointDescription[];
 
@@ -2040,9 +2040,6 @@
 extern const char kEnableCommandLineOnNonRootedName[];
 extern const char kEnableCommandLineOnNoRootedDescription[];
 
-extern const char kEnableFamilyInfoFeedbackName[];
-extern const char kEnableFamilyInfoFeedbackDescription[];
-
 extern const char kEnablePasswordsAccountStorageName[];
 extern const char kEnablePasswordsAccountStorageDescription[];
 
@@ -2562,9 +2559,6 @@
 extern const char kMediaFoundationClearName[];
 extern const char kMediaFoundationClearDescription[];
 
-extern const char kPervasiveSystemAccentColorName[];
-extern const char kPervasiveSystemAccentColorDescription[];
-
 extern const char kRawAudioCaptureName[];
 extern const char kRawAudioCaptureDescription[];
 
@@ -2819,9 +2813,6 @@
 extern const char kDesksTemplatesName[];
 extern const char kDesksTemplatesDescription[];
 
-extern const char kDesksTrackpadSwipeImprovementsName[];
-extern const char kDesksTrackpadSwipeImprovementsDescription[];
-
 extern const char kPreferConstantFrameRateName[];
 extern const char kPreferConstantFrameRateDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 4f3c4cf7..d4ca6471 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -239,7 +239,6 @@
     &kDownloadNotificationBadge,
     &kDownloadRename,
     &kDuetTabStripIntegrationAndroid,
-    &kEnableFamilyInfoFeedback,
     &kExperimentsForAgsa,
     &kExploreSites,
     &kFixedUmaSessionResumeOrder,
@@ -720,7 +719,7 @@
 
 BASE_FEATURE(kContextualSearchForceCaption,
              "ContextualSearchForceCaption",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 BASE_FEATURE(kContextualSearchSuppressShortView,
              "ContextualSearchSuppressShortView",
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index 406b250..5ccf2a1a 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -311,7 +311,6 @@
             "UseDownloadOfflineContentProvider";
     public static final String EARLY_LIBRARY_LOAD = "EarlyLibraryLoad";
     public static final String ENABLE_AUTOMATIC_SNOOZE = "EnableAutomaticSnooze";
-    public static final String ENABLE_FAMILY_INFO_FEEDBACK = "EnableFamilyInfoFeedback";
     public static final String ENABLE_PASSWORDS_ACCOUNT_STORAGE = "EnablePasswordsAccountStorage";
     public static final String ELASTIC_OVERSCROLL = "ElasticOverscroll";
     public static final String EXPERIMENTS_FOR_AGSA = "ExperimentsForAgsa";
diff --git a/chrome/browser/media/webrtc/chrome_screen_enumerator_unittest.cc b/chrome/browser/media/webrtc/chrome_screen_enumerator_unittest.cc
index d6deef11..4dea3eb 100644
--- a/chrome/browser/media/webrtc/chrome_screen_enumerator_unittest.cc
+++ b/chrome/browser/media/webrtc/chrome_screen_enumerator_unittest.cc
@@ -80,6 +80,29 @@
   EXPECT_EQ(blink::mojom::MediaStreamRequestResult::OK, actual_result);
 }
 
+TEST_F(ChromeScreenEnumeratorTest, SingleScreen) {
+  std::vector<aura::Window*> screens_list =
+      GenerateScreensList(/*number_of_screens=*/1u);
+  SetRootWindowsForTesting(&screens_list);
+
+  base::RunLoop run_loop;
+  blink::mojom::StreamDevicesSetPtr actual_stream_devices_set;
+  blink::mojom::MediaStreamRequestResult actual_result;
+  enumerator_->EnumerateScreens(
+      blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET,
+      base::BindLambdaForTesting(
+          [&run_loop, &actual_stream_devices_set, &actual_result](
+              const blink::mojom::StreamDevicesSet& stream_devices_set,
+              blink::mojom::MediaStreamRequestResult result) {
+            actual_stream_devices_set = stream_devices_set.Clone();
+            actual_result = result;
+            run_loop.Quit();
+          }));
+  run_loop.Run();
+  EXPECT_EQ(1u, actual_stream_devices_set->stream_devices.size());
+  EXPECT_EQ(blink::mojom::MediaStreamRequestResult::OK, actual_result);
+}
+
 TEST_F(ChromeScreenEnumeratorTest, MultipleScreens) {
   std::vector<aura::Window*> screens_list =
       GenerateScreensList(/*number_of_screens=*/6u);
@@ -103,26 +126,3 @@
   EXPECT_EQ(6u, actual_stream_devices_set->stream_devices.size());
   EXPECT_EQ(blink::mojom::MediaStreamRequestResult::OK, actual_result);
 }
-
-TEST_F(ChromeScreenEnumeratorTest, SingleScreen) {
-  std::vector<aura::Window*> screens_list =
-      GenerateScreensList(/*number_of_screens=*/1u);
-  SetRootWindowsForTesting(&screens_list);
-
-  base::RunLoop run_loop;
-  blink::mojom::StreamDevicesSetPtr actual_stream_devices_set;
-  blink::mojom::MediaStreamRequestResult actual_result;
-  enumerator_->EnumerateScreens(
-      blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET,
-      base::BindLambdaForTesting(
-          [&run_loop, &actual_stream_devices_set, &actual_result](
-              const blink::mojom::StreamDevicesSet& stream_devices_set,
-              blink::mojom::MediaStreamRequestResult result) {
-            actual_stream_devices_set = stream_devices_set.Clone();
-            actual_result = result;
-            run_loop.Quit();
-          }));
-  run_loop.Run();
-  EXPECT_EQ(1u, actual_stream_devices_set->stream_devices.size());
-  EXPECT_EQ(blink::mojom::MediaStreamRequestResult::OK, actual_result);
-}
diff --git a/chrome/browser/media/webrtc/media_stream_focus_delegate.cc b/chrome/browser/media/webrtc/media_stream_focus_delegate.cc
index e501501..39272142 100644
--- a/chrome/browser/media/webrtc/media_stream_focus_delegate.cc
+++ b/chrome/browser/media/webrtc/media_stream_focus_delegate.cc
@@ -165,8 +165,10 @@
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   std::unique_ptr<webrtc::DesktopCapturer> window_capturer =
-      webrtc::DesktopCapturer::CreateWindowCapturer(
-          content::desktop_capture::CreateDesktopCaptureOptions());
+      window_capturer_for_testing_ != nullptr
+          ? std::move(window_capturer_for_testing_)
+          : webrtc::DesktopCapturer::CreateWindowCapturer(
+                content::desktop_capture::CreateDesktopCaptureOptions());
   if (window_capturer && window_capturer->SelectSource(media_id.id)) {
     window_capturer->FocusOnSelectedSource();
   }
diff --git a/chrome/browser/media/webrtc/media_stream_focus_delegate.h b/chrome/browser/media/webrtc/media_stream_focus_delegate.h
index 314f1bc..a7c49eb6 100644
--- a/chrome/browser/media/webrtc/media_stream_focus_delegate.h
+++ b/chrome/browser/media/webrtc/media_stream_focus_delegate.h
@@ -16,6 +16,7 @@
 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
 #include "content/public/browser/desktop_media_id.h"
 #include "content/public/browser/web_contents.h"
+#include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
 
 // When tab/window-capture is initiated, a window of opportunity opens,
 // during which the render process can instruct the browser process as to
@@ -45,6 +46,11 @@
       const TabStripModelChange& change,
       const TabStripSelectionChange& selection) override;
 
+  void SetWindowCapturerForTesting(
+      std::unique_ptr<webrtc::DesktopCapturer> window_capturer) {
+    window_capturer_for_testing_ = std::move(window_capturer);
+  }
+
  private:
   bool IsWidgetFocused() const;
   void FocusTab(const content::DesktopMediaID& media_id);
@@ -75,6 +81,8 @@
   // want to avoid yanking the user's focus around.
   base::WeakPtr<content::WebContents> capturing_web_contents_ = nullptr;
   bool focus_window_of_opportunity_open_ = true;
+
+  std::unique_ptr<webrtc::DesktopCapturer> window_capturer_for_testing_;
 };
 
 #endif  // CHROME_BROWSER_MEDIA_WEBRTC_MEDIA_STREAM_FOCUS_DELEGATE_H_
diff --git a/chrome/browser/media/webrtc/media_stream_focus_delegate_unittest.cc b/chrome/browser/media/webrtc/media_stream_focus_delegate_unittest.cc
index 184fc58d..6dd10618 100644
--- a/chrome/browser/media/webrtc/media_stream_focus_delegate_unittest.cc
+++ b/chrome/browser/media/webrtc/media_stream_focus_delegate_unittest.cc
@@ -10,6 +10,30 @@
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/web_contents.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+using testing::_;
+using testing::Return;
+
+namespace {
+
+const content::DesktopMediaID kDesktopMediaIDWindow =
+    content::DesktopMediaID(content::DesktopMediaID::TYPE_WINDOW,
+                            content::DesktopMediaID::kNullId);
+
+class MockWindowCapturer : public webrtc::DesktopCapturer {
+ public:
+  MockWindowCapturer() = default;
+  ~MockWindowCapturer() override = default;
+
+  MOCK_METHOD0(FocusOnSelectedSource, bool());
+  MOCK_METHOD1(SelectSource, bool(webrtc::DesktopCapturer::SourceId));
+
+  void Start(Callback* callback) override {}
+  void CaptureFrame() override {}
+};
+
+}  // namespace
 
 class MediaStreamFocusDelegateTest : public BrowserWithTestWindowTest {
  public:
@@ -46,6 +70,11 @@
     delegate_->SetFocus(media_id, focus, is_from_microtask, is_from_timer);
   }
 
+  void SetWindowCapturer(MockWindowCapturer* window_capturer) {
+    delegate_->SetWindowCapturerForTesting(
+        base::WrapUnique<MockWindowCapturer>(window_capturer));
+  }
+
  protected:
   std::unique_ptr<MediaStreamFocusDelegate> delegate_;  // Unit-under-test.
 };
@@ -90,4 +119,24 @@
   EXPECT_EQ(browser()->tab_strip_model()->active_index(), 2);
 }
 
-// TODO(crbug.com/1215480): Add tests for window-focus.
+TEST_F(MediaStreamFocusDelegateTest, SelectedSourceFocusesWindow) {
+  // Setup.
+  raw_ptr<MockWindowCapturer> window_capturer = new MockWindowCapturer();
+  SetWindowCapturer(window_capturer);
+
+  ON_CALL(*window_capturer, SelectSource(_)).WillByDefault(Return(true));
+  EXPECT_CALL(*window_capturer, SelectSource(_)).Times(1);
+  EXPECT_CALL(*window_capturer, FocusOnSelectedSource()).Times(1);
+  SetFocus(kDesktopMediaIDWindow, true);
+}
+
+TEST_F(MediaStreamFocusDelegateTest, NotSelectedSourceDoesNotFocusWindow) {
+  // Setup.
+  raw_ptr<MockWindowCapturer> window_capturer = new MockWindowCapturer();
+  SetWindowCapturer(window_capturer);
+
+  ON_CALL(*window_capturer, SelectSource(_)).WillByDefault(Return(false));
+  EXPECT_CALL(*window_capturer, SelectSource(_)).Times(1);
+  EXPECT_CALL(*window_capturer, FocusOnSelectedSource()).Times(0);
+  SetFocus(kDesktopMediaIDWindow, true);
+}
diff --git a/chrome/browser/net/net_error_tab_helper.cc b/chrome/browser/net/net_error_tab_helper.cc
index f1b6243..4c78453 100644
--- a/chrome/browser/net/net_error_tab_helper.cc
+++ b/chrome/browser/net/net_error_tab_helper.cc
@@ -279,8 +279,8 @@
   if (!CanShowNetworkDiagnosticsDialog(web_contents()))
     return;
 
-  if (network_diagnostics_receivers_.GetCurrentTargetFrame() !=
-      web_contents()->GetPrimaryMainFrame()) {
+  if (!network_diagnostics_receivers_.GetCurrentTargetFrame()
+           ->IsInPrimaryMainFrame()) {
     return;
   }
 
diff --git a/chrome/browser/net/net_error_tab_helper_browsertest.cc b/chrome/browser/net/net_error_tab_helper_browsertest.cc
index 2bef686..19086e7 100644
--- a/chrome/browser/net/net_error_tab_helper_browsertest.cc
+++ b/chrome/browser/net/net_error_tab_helper_browsertest.cc
@@ -209,10 +209,6 @@
   NetErrorTabHelperWithFencedFrameTest& operator=(
       const NetErrorTabHelperWithFencedFrameTest&) = delete;
 
-  RenderFrameHost* primary_main_frame_host() {
-    return GetWebContents()->GetPrimaryMainFrame();
-  }
-
   test::FencedFrameTestHelper& fenced_frame_test_helper() {
     return fenced_frame_test_helper_;
   }
diff --git a/chrome/browser/offline_pages/offline_page_tab_helper.cc b/chrome/browser/offline_pages/offline_page_tab_helper.cc
index 2447dedd..7482cb9a 100644
--- a/chrome/browser/offline_pages/offline_page_tab_helper.cc
+++ b/chrome/browser/offline_pages/offline_page_tab_helper.cc
@@ -130,8 +130,8 @@
     MHTMLLoadResult load_result,
     const GURL& main_frame_url,
     base::Time date) {
-  if (mhtml_page_notifier_receivers_.GetCurrentTargetFrame() !=
-      web_contents()->GetPrimaryMainFrame()) {
+  if (!mhtml_page_notifier_receivers_.GetCurrentTargetFrame()
+           ->IsInPrimaryMainFrame()) {
     return;
   }
 
diff --git a/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc
index 12c87d42..7c484c9 100644
--- a/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc
+++ b/chrome/browser/page_load_metrics/observers/back_forward_cache_page_load_metrics_observer_browsertest.cc
@@ -144,7 +144,7 @@
             kFirstPaintAfterBackForwardCacheRestore);
     web_contents()->GetController().GoBack();
     EXPECT_TRUE(WaitForLoadStop(web_contents()));
-    EXPECT_EQ(rfh_a.get(), top_frame_host());
+    EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
     EXPECT_NE(rfh_a->GetLifecycleState(),
               content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
@@ -176,7 +176,7 @@
             kFirstPaintAfterBackForwardCacheRestore);
     web_contents()->GetController().GoBack();
     EXPECT_TRUE(WaitForLoadStop(web_contents()));
-    EXPECT_EQ(rfh_a.get(), top_frame_host());
+    EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
     EXPECT_NE(rfh_a->GetLifecycleState(),
               content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
@@ -222,7 +222,7 @@
     web_contents()->WasHidden();
 
     EXPECT_TRUE(WaitForLoadStop(web_contents()));
-    EXPECT_EQ(rfh_a.get(), top_frame_host());
+    EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
     EXPECT_NE(rfh_a->GetLifecycleState(),
               content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
@@ -272,7 +272,7 @@
 
     web_contents()->GetController().GoBack();
     EXPECT_TRUE(WaitForLoadStop(web_contents()));
-    EXPECT_EQ(rfh_a.get(), top_frame_host());
+    EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
     EXPECT_NE(rfh_a->GetLifecycleState(),
               content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
@@ -323,7 +323,7 @@
   // Go back to A.
   web_contents()->GetController().GoBack();
   EXPECT_TRUE(WaitForLoadStop(web_contents()));
-  EXPECT_EQ(rfh_a, top_frame_host());
+  EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
   EXPECT_NE(rfh_a->GetLifecycleState(),
             content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
@@ -374,7 +374,7 @@
                                    TimingField::kLayoutShift);
     web_contents()->GetController().GoBack();
     EXPECT_TRUE(WaitForLoadStop(web_contents()));
-    EXPECT_EQ(rfh_a, top_frame_host());
+    EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
     EXPECT_NE(rfh_a->GetLifecycleState(),
               content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
@@ -436,7 +436,7 @@
   // Go back to A again.
   web_contents()->GetController().GoBack();
   EXPECT_TRUE(WaitForLoadStop(web_contents()));
-  EXPECT_EQ(rfh_a, top_frame_host());
+  EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
   EXPECT_NE(rfh_a->GetLifecycleState(),
             content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
@@ -487,7 +487,7 @@
             kRequestAnimationFrameAfterBackForwardCacheRestore);
     web_contents()->GetController().GoBack();
     EXPECT_TRUE(WaitForLoadStop(web_contents()));
-    EXPECT_EQ(rfh_a, top_frame_host());
+    EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
     EXPECT_NE(rfh_a->GetLifecycleState(),
               content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
@@ -550,7 +550,7 @@
                                    TimingField::kLayoutShift);
     web_contents()->GetController().GoBack();
     EXPECT_TRUE(WaitForLoadStop(web_contents()));
-    EXPECT_EQ(rfh_a, top_frame_host());
+    EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
     EXPECT_NE(rfh_a->GetLifecycleState(),
               content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
@@ -592,7 +592,7 @@
   // Go back to A again.
   web_contents()->GetController().GoBack();
   EXPECT_TRUE(WaitForLoadStop(web_contents()));
-  EXPECT_EQ(rfh_a, top_frame_host());
+  EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
   EXPECT_NE(rfh_a->GetLifecycleState(),
             content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
@@ -702,7 +702,7 @@
 
     web_contents()->GetController().GoBack();
     EXPECT_TRUE(WaitForLoadStop(web_contents()));
-    EXPECT_EQ(rfh_a.get(), top_frame_host());
+    EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
     EXPECT_NE(rfh_a->GetLifecycleState(),
               content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
diff --git a/chrome/browser/page_load_metrics/observers/use_counter_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/use_counter_page_load_metrics_observer_browsertest.cc
index c217d82..d9a7c112 100644
--- a/chrome/browser/page_load_metrics/observers/use_counter_page_load_metrics_observer_browsertest.cc
+++ b/chrome/browser/page_load_metrics/observers/use_counter_page_load_metrics_observer_browsertest.cc
@@ -75,7 +75,7 @@
   // Go back to A.
   web_contents()->GetController().GoBack();
   EXPECT_TRUE(WaitForLoadStop(web_contents()));
-  EXPECT_EQ(rfh_a, top_frame_host());
+  EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
 
   EXPECT_NE(rfh_a->GetLifecycleState(),
             content::RenderFrameHost::LifecycleState::kInBackForwardCache);
@@ -94,7 +94,7 @@
   // Go back to A again.
   web_contents()->GetController().GoBack();
   EXPECT_TRUE(WaitForLoadStop(web_contents()));
-  EXPECT_EQ(rfh_a, top_frame_host());
+  EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
   EXPECT_NE(rfh_a->GetLifecycleState(),
             content::RenderFrameHost::LifecycleState::kInBackForwardCache);
 
diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/password_manager/android/BUILD.gn
index 5e3fd53..926d3a7 100644
--- a/chrome/browser/password_manager/android/BUILD.gn
+++ b/chrome/browser/password_manager/android/BUILD.gn
@@ -247,20 +247,9 @@
   ]
 }
 
-android_library("optional_utils_java") {
-  sources = [
-    "java/src/org/chromium/chrome/browser/password_manager/OptionalUtils.java",
-  ]
-  deps = [
-    "//base:base_java",
-    "//third_party/android_deps:guava_android_java",
-  ]
-}
-
 android_library("settings_interface_java") {
   deps = [
     ":backend_interface_java",
-    ":optional_utils_java",
     "//base:base_java",
     "//components/password_manager/core/browser:password_manager_java_enums",
     "//third_party/android_deps:guava_android_java",
@@ -294,7 +283,6 @@
 android_library("backend_interface_java") {
   deps = [
     ":android_backend_java_enums",
-    ":optional_utils_java",
     "//base:base_java",
     "//components/password_manager/core/browser:password_manager_java_enums",
     "//third_party/android_deps:guava_android_java",
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/OptionalUtils.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/OptionalUtils.java
deleted file mode 100644
index ac3edc0..0000000
--- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/OptionalUtils.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.password_manager;
-
-import org.chromium.base.Callback;
-
-import java.util.Optional;
-
-/** Adapter methods to migrate Guava's Optional to Java's. */
-public class OptionalUtils {
-    public static <T> com.google.common.base.Optional<T> toGuavaOptional(Optional<T> optional) {
-        return optional.isPresent() ? com.google.common.base.Optional.of(optional.get())
-                                    : com.google.common.base.Optional.absent();
-    }
-
-    public static <T> Callback<com.google.common.base.Optional<T>> toGuavaOptionalCallback(
-            Callback<Optional<T>> callback) {
-        return (com.google.common.base.Optional<T> optional) -> {
-            callback.onResult(
-                    optional.isPresent() ? Optional.of(optional.get()) : Optional.empty());
-        };
-    }
-}
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordCheckupClientHelper.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordCheckupClientHelper.java
index 16d7c46..687bc217 100644
--- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordCheckupClientHelper.java
+++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordCheckupClientHelper.java
@@ -36,18 +36,8 @@
      * @param successCallback callback called with the intent if the retrieving was successful
      * @param failureCallback callback called if the retrieving failed with the encountered error.
      */
-    default void getPasswordCheckupIntent(@PasswordCheckReferrer int referrer,
-            com.google.common.base.Optional<String> accountName,
-            Callback<PendingIntent> successCallback, Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void getPasswordCheckupIntent(@PasswordCheckReferrer int referrer,
-            Optional<String> accountName, Callback<PendingIntent> successCallback,
-            Callback<Exception> failureCallback) {
-        getPasswordCheckupIntent(referrer, OptionalUtils.toGuavaOptional(accountName),
-                successCallback, failureCallback);
-    }
+    void getPasswordCheckupIntent(@PasswordCheckReferrer int referrer, Optional<String> accountName,
+            Callback<PendingIntent> successCallback, Callback<Exception> failureCallback);
 
     /**
      * Asynchronously runs Password Checkup and stores the result in PasswordSpecifics then saves it
@@ -59,18 +49,9 @@
      * @param successCallback callback called with Password Check started successful
      * @param failureCallback callback called if encountered an error.
      */
-    default void runPasswordCheckupInBackground(@PasswordCheckReferrer int referrer,
-            com.google.common.base.Optional<String> accountName, Callback<Void> successCallback,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void runPasswordCheckupInBackground(@PasswordCheckReferrer int referrer,
+    void runPasswordCheckupInBackground(@PasswordCheckReferrer int referrer,
             Optional<String> accountName, Callback<Void> successCallback,
-            Callback<Exception> failureCallback) {
-        runPasswordCheckupInBackground(referrer, OptionalUtils.toGuavaOptional(accountName),
-                successCallback, failureCallback);
-    }
+            Callback<Exception> failureCallback);
 
     /**
      * Asynchronously returns the number of breached credentials for the provided account.
@@ -81,16 +62,7 @@
      * @param successCallback callback called with the number of breached passwords.
      * @param failureCallback callback called if encountered an error.
      */
-    default void getBreachedCredentialsCount(@PasswordCheckReferrer int referrer,
-            com.google.common.base.Optional<String> accountName, Callback<Integer> successCallback,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void getBreachedCredentialsCount(@PasswordCheckReferrer int referrer,
+    void getBreachedCredentialsCount(@PasswordCheckReferrer int referrer,
             Optional<String> accountName, Callback<Integer> successCallback,
-            Callback<Exception> failureCallback) {
-        getBreachedCredentialsCount(referrer, OptionalUtils.toGuavaOptional(accountName),
-                successCallback, failureCallback);
-    }
+            Callback<Exception> failureCallback);
 }
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordSettingsAccessor.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordSettingsAccessor.java
index 8d1e1fa..2e0676f9 100644
--- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordSettingsAccessor.java
+++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordSettingsAccessor.java
@@ -22,17 +22,8 @@
      *        or no value if none was set
      * @param failureCallback called with an error if the retrieval did not succeed
      */
-    default void getOfferToSavePasswords(com.google.common.base.Optional<Account> account,
-            Callback<com.google.common.base.Optional<Boolean>> successCallback,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void getOfferToSavePasswords(Optional<Account> account,
-            Callback<Optional<Boolean>> successCallback, Callback<Exception> failureCallback) {
-        getOfferToSavePasswords(OptionalUtils.toGuavaOptional(account),
-                OptionalUtils.toGuavaOptionalCallback(successCallback), failureCallback);
-    }
+    void getOfferToSavePasswords(Optional<Account> account,
+            Callback<Optional<Boolean>> successCallback, Callback<Exception> failureCallback);
 
     /**
      * Asynchronously sets the value of the "Offer to save passwords" setting.
@@ -43,18 +34,8 @@
      * @param successCallback called if the modification was successful
      * @param failureCallback called with an error if the modification did not succeed
      */
-    default void setOfferToSavePasswords(boolean offerToSavePasswordsEnabled,
-            com.google.common.base.Optional<Account> account, Callback<Void> successCallback,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void setOfferToSavePasswords(boolean offerToSavePasswordsEnabled,
-            Optional<Account> account, Callback<Void> successCallback,
-            Callback<Exception> failureCallback) {
-        setOfferToSavePasswords(offerToSavePasswordsEnabled, OptionalUtils.toGuavaOptional(account),
-                successCallback, failureCallback);
-    }
+    void setOfferToSavePasswords(boolean offerToSavePasswordsEnabled, Optional<Account> account,
+            Callback<Void> successCallback, Callback<Exception> failureCallback);
 
     /**
      * Asynchronously retrieves the value of the "Auto Sign In" setting.
@@ -65,17 +46,8 @@
      *        or no value if none was set
      * @param failureCallback called with an error if the retrieval did not succeed
      */
-    default void getAutoSignIn(com.google.common.base.Optional<Account> account,
-            Callback<com.google.common.base.Optional<Boolean>> successCallback,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void getAutoSignIn(Optional<Account> account,
-            Callback<Optional<Boolean>> successCallback, Callback<Exception> failureCallback) {
-        getAutoSignIn(OptionalUtils.toGuavaOptional(account),
-                OptionalUtils.toGuavaOptionalCallback(successCallback), failureCallback);
-    }
+    void getAutoSignIn(Optional<Account> account, Callback<Optional<Boolean>> successCallback,
+            Callback<Exception> failureCallback);
 
     /**
      * Asynchronously sets the value of the "Auto Sign In" setting.
@@ -86,15 +58,6 @@
      * @param successCallback called if the modification was successful
      * @param failureCallback called with an error if the modification did not succeed
      */
-    default void setAutoSignIn(boolean autoSignInEnabled,
-            com.google.common.base.Optional<Account> account, Callback<Void> successCallback,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void setAutoSignIn(boolean autoSignInEnabled, Optional<Account> account,
-            Callback<Void> successCallback, Callback<Exception> failureCallback) {
-        setAutoSignIn(autoSignInEnabled, OptionalUtils.toGuavaOptional(account), successCallback,
-                failureCallback);
-    }
+    void setAutoSignIn(boolean autoSignInEnabled, Optional<Account> account,
+            Callback<Void> successCallback, Callback<Exception> failureCallback);
 }
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackend.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackend.java
index fafe02a..fc9e42a 100644
--- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackend.java
+++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackend.java
@@ -56,15 +56,8 @@
      * data.
      * @param failureCallback A callback that is called on failure for any reason. May return sync.
      */
-    default void getAllLogins(com.google.common.base.Optional<Account> syncingAccount,
-            Callback<byte[]> loginsReply, Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void getAllLogins(Optional<Account> syncingAccount, Callback<byte[]> loginsReply,
-            Callback<Exception> failureCallback) {
-        getAllLogins(OptionalUtils.toGuavaOptional(syncingAccount), loginsReply, failureCallback);
-    }
+    void getAllLogins(Optional<Account> syncingAccount, Callback<byte[]> loginsReply,
+            Callback<Exception> failureCallback);
 
     /**
      * Triggers an async list call to retrieve all logins withing given time frame.
@@ -77,17 +70,9 @@
      *         org.chromium.components.sync.protocol.ListPasswordsResult} data.
      * @param failureCallback A callback that is called on failure for any reason. May return sync.
      */
-    default void getAllLoginsBetween(Date createdAfter, Date createdBefore,
-            com.google.common.base.Optional<Account> syncingAccount, Callback<byte[]> loginsReply,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void getAllLoginsBetween(Date createdAfter, Date createdBefore,
+    void getAllLoginsBetween(Date createdAfter, Date createdBefore,
             Optional<Account> syncingAccount, Callback<byte[]> loginsReply,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
+            Callback<Exception> failureCallback);
 
     /**
      * Triggers an async list call to retrieve autofillable logins.
@@ -99,16 +84,8 @@
      * data.
      * @param failureCallback A callback that is called on failure for any reason. May return sync.
      */
-    default void getAutofillableLogins(com.google.common.base.Optional<Account> syncingAccount,
-            Callback<byte[]> loginsReply, Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void getAutofillableLogins(Optional<Account> syncingAccount,
-            Callback<byte[]> loginsReply, Callback<Exception> failureCallback) {
-        getAutofillableLogins(
-                OptionalUtils.toGuavaOptional(syncingAccount), loginsReply, failureCallback);
-    }
+    void getAutofillableLogins(Optional<Account> syncingAccount, Callback<byte[]> loginsReply,
+            Callback<Exception> failureCallback);
 
     /**
      * Triggers an async list call to retrieve logins with matching signon realm.
@@ -122,17 +99,8 @@
      * data.
      * @param failureCallback A callback that is called on failure for any reason. May return sync.
      */
-    default void getLoginsForSignonRealm(String signonRealm,
-            com.google.common.base.Optional<Account> syncingAccount, Callback<byte[]> loginsReply,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void getLoginsForSignonRealm(String signonRealm, Optional<Account> syncingAccount,
-            Callback<byte[]> loginsReply, Callback<Exception> failureCallback) {
-        getLoginsForSignonRealm(signonRealm, OptionalUtils.toGuavaOptional(syncingAccount),
-                loginsReply, failureCallback);
-    }
+    void getLoginsForSignonRealm(String signonRealm, Optional<Account> syncingAccount,
+            Callback<byte[]> loginsReply, Callback<Exception> failureCallback);
 
     /**
      * Triggers an async call to add a login to the store.
@@ -143,17 +111,8 @@
      * @param successCallback Callback that is called on success.
      * @param failureCallback A callback that is called on failure for any reason. May return sync.
      */
-    default void addLogin(byte[] pwdWithLocalData,
-            com.google.common.base.Optional<Account> syncingAccount, Runnable successCallback,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void addLogin(byte[] pwdWithLocalData, Optional<Account> syncingAccount,
-            Runnable successCallback, Callback<Exception> failureCallback) {
-        addLogin(pwdWithLocalData, OptionalUtils.toGuavaOptional(syncingAccount), successCallback,
-                failureCallback);
-    }
+    void addLogin(byte[] pwdWithLocalData, Optional<Account> syncingAccount,
+            Runnable successCallback, Callback<Exception> failureCallback);
 
     /**
      * Triggers an async call to update a login in the store.
@@ -165,17 +124,8 @@
      * @param successCallback Callback that is called on success.
      * @param failureCallback A callback that is called on failure for any reason. May return sync.
      */
-    default void updateLogin(byte[] pwdWithLocalData,
-            com.google.common.base.Optional<Account> syncingAccount, Runnable successCallback,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void updateLogin(byte[] pwdWithLocalData, Optional<Account> syncingAccount,
-            Runnable successCallback, Callback<Exception> failureCallback) {
-        updateLogin(pwdWithLocalData, OptionalUtils.toGuavaOptional(syncingAccount),
-                successCallback, failureCallback);
-    }
+    void updateLogin(byte[] pwdWithLocalData, Optional<Account> syncingAccount,
+            Runnable successCallback, Callback<Exception> failureCallback);
 
     /**
      * Triggers an async call to remove a login from store.
@@ -186,15 +136,6 @@
      * @param successCallback Callback that is called on success.
      * @param failureCallback A callback that is called on failure for any reason. May return sync.
      */
-    default void removeLogin(byte[] pwdSpecificsData,
-            com.google.common.base.Optional<Account> syncingAccount, Runnable successCallback,
-            Callback<Exception> failureCallback) {
-        assert false;
-    }
-
-    default void removeLogin(byte[] pwdSpecificsData, Optional<Account> syncingAccount,
-            Runnable successCallback, Callback<Exception> failureCallback) {
-        removeLogin(pwdSpecificsData, OptionalUtils.toGuavaOptional(syncingAccount),
-                successCallback, failureCallback);
-    }
+    void removeLogin(byte[] pwdSpecificsData, Optional<Account> syncingAccount,
+            Runnable successCallback, Callback<Exception> failureCallback);
 }
diff --git a/chrome/browser/password_manager/android/test_support/java/src/org/chromium/chrome/browser/password_manager/FakePasswordStoreAndroidBackend.java b/chrome/browser/password_manager/android/test_support/java/src/org/chromium/chrome/browser/password_manager/FakePasswordStoreAndroidBackend.java
index 529bd32..8b9d4e4 100644
--- a/chrome/browser/password_manager/android/test_support/java/src/org/chromium/chrome/browser/password_manager/FakePasswordStoreAndroidBackend.java
+++ b/chrome/browser/password_manager/android/test_support/java/src/org/chromium/chrome/browser/password_manager/FakePasswordStoreAndroidBackend.java
@@ -10,7 +10,6 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.Callback;
-import org.chromium.base.Predicate;
 import org.chromium.base.task.PostTask;
 import org.chromium.base.task.SequencedTaskRunner;
 import org.chromium.components.password_manager.core.browser.proto.ListPasswordsResult;
@@ -25,6 +24,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.function.Predicate;
 
 /**
  * Fake {@link PasswordStoreAndroidBackend} to be used in integration tests.
diff --git a/chrome/browser/pdf/pdf_extension_interactive_uitest.cc b/chrome/browser/pdf/pdf_extension_interactive_uitest.cc
index 83d8c01..b118fc2 100644
--- a/chrome/browser/pdf/pdf_extension_interactive_uitest.cc
+++ b/chrome/browser/pdf/pdf_extension_interactive_uitest.cc
@@ -20,6 +20,7 @@
 #include "content/public/test/focus_changed_observer.h"
 #include "content/public/test/test_utils.h"
 #include "extensions/browser/api/extensions_api_client.h"
+#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
 #include "net/dns/mock_host_resolver.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -49,6 +50,7 @@
 
 using ::pdf_extension_test_util::ConvertPageCoordToScreenCoord;
 using ::pdf_extension_test_util::EnsurePDFHasLoaded;
+using ::pdf_extension_test_util::GetOnlyMimeHandlerView;
 using ::pdf_extension_test_util::SetInputFocusOnPlugin;
 
 class PDFExtensionInteractiveUITest : public extensions::ExtensionApiTest {
@@ -70,26 +72,30 @@
     extensions::ExtensionApiTest::TearDownOnMainThread();
   }
 
-  content::WebContents* LoadPdfGetGuestContents(const GURL& url) {
+  extensions::MimeHandlerViewGuest* LoadPdfGetMimeHandlerView(const GURL& url) {
     ui_test_utils::NavigateToURLWithDisposition(
         browser(), url, WindowOpenDisposition::NEW_FOREGROUND_TAB,
         ui_test_utils::BROWSER_TEST_WAIT_FOR_LOAD_STOP);
     if (!EnsurePDFHasLoaded(GetActiveWebContents()))
       return nullptr;
 
-    content::WebContents* contents = GetActiveWebContents();
-    content::BrowserPluginGuestManager* guest_manager =
-        contents->GetBrowserContext()->GetGuestManager();
-    return guest_manager->GetFullPageGuest(contents);
+    return GetOnlyMimeHandlerView(GetActiveWebContents());
+  }
+
+  // TODO(crbug.com/1261928): Prefer using `LoadPdfGetMimeHandlerView`.
+  content::WebContents* LoadPdfGetGuestContents(const GURL& url) {
+    extensions::MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(url);
+    return guest ? guest->web_contents() : nullptr;
   }
 
   content::WebContents* GetActiveWebContents() {
     return browser()->tab_strip_model()->GetActiveWebContents();
   }
 
-  content::FocusedNodeDetails TabAndWait(content::WebContents* guest_contents,
-                                         bool forward) {
-    content::FocusChangedObserver focus_observer(guest_contents);
+  content::FocusedNodeDetails TabAndWait(
+      extensions::MimeHandlerViewGuest* guest,
+      bool forward) {
+    content::FocusChangedObserver focus_observer(guest->web_contents());
     if (!ui_test_utils::SendKeyPressSync(browser(), ui::VKEY_TAB,
                                          /*control=*/false,
                                          /*shift=*/!forward,
@@ -100,6 +106,16 @@
     }
     return focus_observer.Wait();
   }
+
+  // TODO(crbug.com/1261928): Prefer the `MimeHandlerViewGuest` overload of this
+  // method in tests.
+  content::FocusedNodeDetails TabAndWait(content::WebContents* guest_contents,
+                                         bool forward) {
+    extensions::MimeHandlerViewGuest* guest =
+        extensions::MimeHandlerViewGuest::FromWebContents(guest_contents);
+    EXPECT_TRUE(guest);
+    return TabAndWait(guest, forward);
+  }
 };
 
 class TabChangedWaiter : public TabStripModelObserver {
@@ -131,14 +147,14 @@
 // For crbug.com/1038918
 IN_PROC_BROWSER_TEST_F(PDFExtensionInteractiveUITest,
                        CtrlPageUpDownSwitchesTabs) {
-  content::WebContents* guest_contents =
-      LoadPdfGetGuestContents(embedded_test_server()->GetURL("/pdf/test.pdf"));
+  extensions::MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(
+      embedded_test_server()->GetURL("/pdf/test.pdf"));
 
   auto* tab_strip_model = browser()->tab_strip_model();
   ASSERT_EQ(2, tab_strip_model->count());
   EXPECT_EQ(1, tab_strip_model->active_index());
 
-  SetInputFocusOnPlugin(guest_contents);
+  SetInputFocusOnPlugin(guest);
 
   {
     TabChangedWaiter tab_changed_waiter(browser());
@@ -166,16 +182,15 @@
 }
 
 IN_PROC_BROWSER_TEST_F(PDFExtensionInteractiveUITest, FocusForwardTraversal) {
-  content::WebContents* guest_contents = LoadPdfGetGuestContents(
+  extensions::MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(
       embedded_test_server()->GetURL("/pdf/test.pdf#toolbar=0"));
 
   // Tab in.
-  content::FocusedNodeDetails details =
-      TabAndWait(guest_contents, /*forward=*/true);
+  content::FocusedNodeDetails details = TabAndWait(guest, /*forward=*/true);
   EXPECT_EQ(blink::mojom::FocusType::kForward, details.focus_type);
 
   // Tab out.
-  details = TabAndWait(guest_contents, /*forward=*/true);
+  details = TabAndWait(guest, /*forward=*/true);
   EXPECT_EQ(blink::mojom::FocusType::kNone, details.focus_type);
 }
 
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc
index 195c9f41..6b3e12e7 100644
--- a/chrome/browser/pdf/pdf_extension_test.cc
+++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -175,6 +175,7 @@
 using ::guest_view::TestGuestViewManager;
 using ::guest_view::TestGuestViewManagerFactory;
 using ::pdf_extension_test_util::ConvertPageCoordToScreenCoord;
+using ::pdf_extension_test_util::GetOnlyMimeHandlerView;
 using ::pdf_extension_test_util::GetPdfPluginFrames;
 using ::pdf_extension_test_util::SetInputFocusOnPlugin;
 using ::testing::Contains;
@@ -279,30 +280,38 @@
     return pdf_extension_test_util::EnsurePDFHasLoaded(web_contents);
   }
 
-  // Same as LoadPdf(), but also returns a pointer to the guest WebContents for
-  // the loaded PDF. Returns nullptr if the load fails.
+  // Same as LoadPdf(), but also returns a pointer to the `MimeHandlerViewGuest`
+  // for the loaded PDF. Returns nullptr if the load fails.
+  MimeHandlerViewGuest* LoadPdfGetMimeHandlerView(const GURL& url) {
+    if (!LoadPdf(url))
+      return nullptr;
+    return GetOnlyMimeHandlerView(GetActiveWebContents());
+  }
+
+  // TODO(crbug.com/1261928): Prefer using `LoadPdfGetMimeHandlerView`.
   WebContents* LoadPdfGetGuestContents(const GURL& url) {
     if (!LoadPdf(url))
       return nullptr;
     return GetOnlyGuestContents(GetActiveWebContents());
   }
 
-  // Same as LoadPdf(), but also returns a pointer to the guest WebContents for
-  // the loaded PDF in a new tab. Returns nullptr if the load fails.
-  WebContents* LoadPdfInNewTabGetGuestContents(const GURL& url) {
+  // Same as LoadPdf(), but also returns a pointer to the `MimeHandlerViewGuest`
+  // for the loaded PDF in a new tab. Returns nullptr if the load fails.
+  MimeHandlerViewGuest* LoadPdfInNewTabGetMimeHandlerView(const GURL& url) {
     if (!LoadPdfInNewTab(url))
       return nullptr;
-    return GetOnlyGuestContents(GetActiveWebContents());
+    return GetOnlyMimeHandlerView(GetActiveWebContents());
   }
 
   void TestGetSelectedTextReply(const GURL& url, bool expect_success) {
-    WebContents* guest_contents = LoadPdfGetGuestContents(url);
-    ASSERT_TRUE(guest_contents);
+    MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(url);
+    ASSERT_TRUE(guest);
 
     // Reach into the guest and hook into it such that it posts back a 'flush'
     // message after every getSelectedTextReply message sent.
     ASSERT_TRUE(content::ExecuteScript(
-        guest_contents, "viewer.overrideSendScriptingMessageForTest();"));
+        guest->GetGuestMainFrame(),
+        "viewer.overrideSendScriptingMessageForTest();"));
 
     // Add an event listener for flush messages and request the selected text.
     // If we get a flush message without receiving getSelectedText we know that
@@ -344,23 +353,18 @@
     return manager;
   }
 
+  // TODO(crbug.com/1261928): Prefer using GetOnlyMimeHandlerView.
   WebContents* GetOnlyGuestContents(WebContents* embedder_contents) const {
-    content::BrowserPluginGuestManager* guest_manager =
-        embedder_contents->GetBrowserContext()->GetGuestManager();
-
-    WebContents* guest_contents = nullptr;
-    guest_manager->ForEachGuest(
-        embedder_contents,
-        base::BindLambdaForTesting([&guest_contents](WebContents* guest) {
-          // Assume exactly one guest contents.
-          EXPECT_FALSE(guest_contents);
-          guest_contents = guest;
-          return false;
-        }));
-
-    return guest_contents;
+    MimeHandlerViewGuest* guest = GetOnlyMimeHandlerView(embedder_contents);
+    return guest ? guest->web_contents() : nullptr;
   }
 
+  content::RenderFrameHost* GetPluginFrame(MimeHandlerViewGuest* guest) const {
+    return pdf_frame_util::FindPdfChildFrame(guest->GetGuestMainFrame());
+  }
+
+  // TODO(crbug.com/1261928): Prefer the MimeHandlerViewGuest overload of this
+  // method.
   content::RenderFrameHost* GetPluginFrame(WebContents* guest_contents) const {
     return pdf_frame_util::FindPdfChildFrame(
         guest_contents->GetPrimaryMainFrame());
@@ -1022,9 +1026,10 @@
     // being seen due to the BrowserPluginGuest not being available yet (see
     // crbug.com/498077). So instead use LoadPdf() which ensures that the PDF is
     // loaded before continuing.
-    WebContents* guest_contents = new_tab ? LoadPdfInNewTabGetGuestContents(url)
-                                          : LoadPdfGetGuestContents(url);
-    ASSERT_TRUE(guest_contents);
+    MimeHandlerViewGuest* guest = new_tab
+                                      ? LoadPdfInNewTabGetMimeHandlerView(url)
+                                      : LoadPdfGetMimeHandlerView(url);
+    ASSERT_TRUE(guest);
 
     constexpr char kModuleLoaderTemplate[] =
         R"(var s = document.createElement('script');
@@ -1036,7 +1041,7 @@
            document.body.appendChild(s);)";
 
     ASSERT_TRUE(content::ExecuteScript(
-        guest_contents,
+        guest->GetGuestMainFrame(),
         base::StringPrintf(kModuleLoaderTemplate,
                            chrome::kChromeUIWebUITestHost, filename.c_str())));
 
@@ -1641,10 +1646,10 @@
  protected:
   class ScrollEventWaiter {
    public:
-    explicit ScrollEventWaiter(WebContents* guest_contents)
-        : message_queue_(guest_contents) {
+    explicit ScrollEventWaiter(content::ToRenderFrameHost guest_main_frame)
+        : message_queue_(guest_main_frame.render_frame_host()) {
       content::ExecuteScriptAsync(
-          guest_contents,
+          guest_main_frame,
           R"(viewer.shadowRoot.querySelector('#scroller').onscroll = () => {
             if (viewer.viewport.scrollContent_.unackedScrollsToRemote_ === 0) {
               window.domAutomationController.send('dispatchedScrollEvent');
@@ -1679,28 +1684,30 @@
   // difference.
   static constexpr float kScrollPositionEpsilon = 2.0f;
 
-  static int GetViewportHeight(WebContents* guest_contents) {
+  static int GetViewportHeight(content::ToRenderFrameHost guest_main_frame) {
     int viewport_height = 0;
     EXPECT_TRUE(content::ExecuteScriptAndExtractInt(
-        guest_contents,
+        guest_main_frame,
         "window.domAutomationController.send(viewer.viewport.size.height);",
         &viewport_height));
     return viewport_height;
   }
 
-  static int GetViewportScrollPositionX(WebContents* guest_contents) {
+  static int GetViewportScrollPositionX(
+      content::ToRenderFrameHost guest_main_frame) {
     int position_x = 0;
     EXPECT_TRUE(content::ExecuteScriptAndExtractInt(
-        guest_contents,
+        guest_main_frame,
         "window.domAutomationController.send(viewer.viewport.position.x);",
         &position_x));
     return position_x;
   }
 
-  static int GetViewportScrollPositionY(WebContents* guest_contents) {
+  static int GetViewportScrollPositionY(
+      content::ToRenderFrameHost guest_main_frame) {
     int position_y = 0;
     EXPECT_TRUE(content::ExecuteScriptAndExtractInt(
-        guest_contents,
+        guest_main_frame,
         "window.domAutomationController.send(viewer.viewport.position.y);",
         &position_y));
     return position_y;
@@ -1918,9 +1925,9 @@
 
 class PrintObserver : public printing::PrintViewManagerBase::Observer {
  public:
-  PrintObserver(content::WebContents* contents,
-                const content::RenderFrameHost* rfh)
-      : print_view_manager_(PrintViewManagerImpl::FromWebContents(contents)),
+  explicit PrintObserver(content::RenderFrameHost* rfh)
+      : print_view_manager_(PrintViewManagerImpl::FromWebContents(
+            content::WebContents::FromRenderFrameHost(rfh))),
         rfh_(rfh) {
     print_view_manager_->AddObserver(*this);
   }
@@ -1983,19 +1990,19 @@
   content::RenderFrameHost* frame = GetPluginFrame(guest_contents);
   ASSERT_TRUE(frame);
 
-  PrintObserver print_observer(guest_contents, frame);
+  PrintObserver print_observer(frame);
   chrome::BasicPrint(browser());
   print_observer.WaitForPrintNow();
 }
 
 #if BUILDFLAG(ENABLE_PRINT_PREVIEW)
 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PrintCommand) {
-  content::WebContents* guest_contents =
-      LoadPdfGetGuestContents(embedded_test_server()->GetURL("/pdf/test.pdf"));
-  content::RenderFrameHost* frame = GetPluginFrame(guest_contents);
+  MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(
+      embedded_test_server()->GetURL("/pdf/test.pdf"));
+  content::RenderFrameHost* frame = GetPluginFrame(guest);
   ASSERT_TRUE(frame);
 
-  PrintObserver print_observer(guest_contents, frame);
+  PrintObserver print_observer(frame);
   chrome::Print(browser());
   print_observer.WaitForPrintPreview();
 }
@@ -2014,7 +2021,7 @@
   // Executes the print command as soon as the context menu is shown.
   ContextMenuNotificationObserver context_menu_observer(IDC_PRINT);
 
-  PrintObserver print_observer(guest_contents, plugin_frame);
+  PrintObserver print_observer(plugin_frame);
   guest_contents->GetPrimaryMainFrame()
       ->GetRenderWidgetHost()
       ->ShowContextMenuAtPoint({1, 1}, ui::MENU_SOURCE_MOUSE);
@@ -2038,7 +2045,7 @@
   // Executes the print command as soon as the context menu is shown.
   ContextMenuNotificationObserver context_menu_observer(IDC_PRINT);
 
-  PrintObserver print_observer(guest_contents, plugin_frame);
+  PrintObserver print_observer(plugin_frame);
   content::SimulateMouseClickAt(guest_contents,
                                 blink::WebInputEvent::kNoModifiers,
                                 blink::WebMouseEvent::Button::kLeft, {1, 1});
@@ -2061,7 +2068,7 @@
   // Executes the print command as soon as the context menu is shown.
   ContextMenuNotificationObserver context_menu_observer(IDC_PRINT);
 
-  PrintObserver print_observer(guest_contents, plugin_frame);
+  PrintObserver print_observer(plugin_frame);
   SetInputFocusOnPlugin(guest_contents);
   plugin_frame->GetRenderWidgetHost()->ShowContextMenuAtPoint(
       {1, 1}, ui::MENU_SOURCE_MOUSE);
@@ -2083,7 +2090,7 @@
   // Executes the print command as soon as the context menu is shown.
   ContextMenuNotificationObserver context_menu_observer(IDC_PRINT);
 
-  PrintObserver print_observer(guest_contents, plugin_frame);
+  PrintObserver print_observer(plugin_frame);
   SetInputFocusOnPlugin(guest_contents);
   plugin_frame->GetRenderWidgetHost()->ShowContextMenuAtPoint(
       {1, 1}, ui::MENU_SOURCE_MOUSE);
@@ -2097,7 +2104,7 @@
   content::RenderFrameHost* frame = GetPluginFrame(guest_contents);
   ASSERT_TRUE(frame);
 
-  PrintObserver print_observer(guest_contents, frame);
+  PrintObserver print_observer(frame);
   constexpr char kClickPrintButtonScript[] = R"(
     viewer.shadowRoot.querySelector('#toolbar')
         .shadowRoot.querySelector('#print')
@@ -2530,14 +2537,14 @@
 
   // Load a page with an embedded PDF and an HTML iframe, both of the same
   // origin.
-  WebContents* guest_contents = LoadPdfGetGuestContents(
+  MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(
       embedded_test_server()->GetURL("/pdf/embed_pdf_and_html.html"));
-  ASSERT_TRUE(guest_contents);
+  ASSERT_TRUE(guest);
 
   // The PDF plugin frame and the iframe should not share renderer processes
   // even though they share origins.
   std::vector<content::RenderFrameHost*> plugin_frames =
-      GetPdfPluginFrames(guest_contents);
+      GetPdfPluginFrames(GetActiveWebContents());
   ASSERT_EQ(plugin_frames.size(), 1u);
 
   content::RenderFrameHost* iframe = ChildFrameAt(GetActiveWebContents(), 0);
@@ -2552,17 +2559,17 @@
 }
 
 IN_PROC_BROWSER_TEST_P(PDFExtensionIsolatedContentTest, DataNavigation) {
-  WebContents* guest_contents = LoadPdfGetGuestContents(
+  MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(
       embedded_test_server()->GetURL("/pdf/data_url_rectangles.html"));
 
   // The PDF plugin frame and the extension main frame should not share renderer
   // processes even though the extension triggers a data: navigation when
   // loading its plugin.
   std::vector<content::RenderFrameHost*> plugin_frames =
-      GetPdfPluginFrames(guest_contents);
+      GetPdfPluginFrames(GetActiveWebContents());
   ASSERT_EQ(plugin_frames.size(), 1u);
   EXPECT_NE(plugin_frames[0]->GetProcess(),
-            guest_contents->GetPrimaryMainFrame()->GetProcess());
+            guest->GetGuestMainFrame()->GetProcess());
 }
 
 IN_PROC_BROWSER_TEST_P(PDFExtensionIsolatedContentTest, HistoryNavigation) {
@@ -2584,13 +2591,13 @@
 }
 
 IN_PROC_BROWSER_TEST_P(PDFExtensionIsolatedContentTest, Jitless) {
-  WebContents* guest_contents =
-      LoadPdfGetGuestContents(embedded_test_server()->GetURL("/pdf/test.pdf"));
-  ASSERT_TRUE(guest_contents);
+  MimeHandlerViewGuest* guest = LoadPdfGetMimeHandlerView(
+      embedded_test_server()->GetURL("/pdf/test.pdf"));
+  ASSERT_TRUE(guest);
 
   // PDF content should always be in JIT-less processes.
   std::vector<content::RenderFrameHost*> plugin_frames =
-      GetPdfPluginFrames(guest_contents);
+      GetPdfPluginFrames(GetActiveWebContents());
   ASSERT_EQ(plugin_frames.size(), 1u);
   EXPECT_TRUE(plugin_frames[0]->GetProcess()->IsJitDisabled());
 }
@@ -2626,6 +2633,9 @@
     guest_contents_ = guest_contents;
   }
 
+  // TODO(crbug.com/1261928): Tests should transform the point by the guest's
+  // RenderWidgetHostView's TransformPointToRootCoordSpace and send to the
+  // embedding WebContents.
   WebContents* GetWebContentsForInputRouting() { return guest_contents_; }
 
  private:
@@ -2856,6 +2866,9 @@
     return ConvertPageCoordToScreenCoord(guest_contents_, {100, 100});
   }
 
+  // TODO(crbug.com/1261928): Tests should transform the point by the guest's
+  // RenderWidgetHostView's TransformPointToRootCoordSpace and send to the
+  // embedding WebContents.
   WebContents* GetWebContentsForInputRouting() { return guest_contents_; }
 
  private:
diff --git a/chrome/browser/pdf/pdf_extension_test_util.cc b/chrome/browser/pdf/pdf_extension_test_util.cc
index 4043286..c1a697c 100644
--- a/chrome/browser/pdf/pdf_extension_test_util.cc
+++ b/chrome/browser/pdf/pdf_extension_test_util.cc
@@ -13,10 +13,12 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_process_host.h"
+#include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/focus_changed_observer.h"
 #include "content/public/test/hit_test_region_observer.h"
+#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace pdf_extension_test_util {
@@ -95,14 +97,15 @@
                       : (testing::AssertionFailure() << "Load failed.");
 }
 
-gfx::Point ConvertPageCoordToScreenCoord(content::WebContents* contents,
-                                         const gfx::Point& point) {
-  if (!contents) {
-    ADD_FAILURE() << "contents needs to be non-null";
+gfx::Point ConvertPageCoordToScreenCoord(
+    content::ToRenderFrameHost guest_main_frame,
+    const gfx::Point& point) {
+  if (!guest_main_frame.render_frame_host()) {
+    ADD_FAILURE() << "The guest main frame needs to be non-null";
     return point;
   }
   if (!content::ExecuteScript(
-          contents,
+          guest_main_frame,
           "var visiblePage = viewer.viewport.getMostVisiblePage();"
           "var visiblePageDimensions ="
           "    viewer.viewport.getPageScreenRect(visiblePage);"
@@ -130,16 +133,16 @@
 
   int x;
   if (!content::ExecuteScriptAndExtractInt(
-          contents, "window.domAutomationController.send(linkScreenPositionX);",
-          &x)) {
+          guest_main_frame,
+          "window.domAutomationController.send(linkScreenPositionX);", &x)) {
     ADD_FAILURE() << "error getting linkScreenPositionX";
     return point;
   }
 
   int y;
   if (!content::ExecuteScriptAndExtractInt(
-          contents, "window.domAutomationController.send(linkScreenPositionY);",
-          &y)) {
+          guest_main_frame,
+          "window.domAutomationController.send(linkScreenPositionY);", &y)) {
     ADD_FAILURE() << "error getting linkScreenPositionY";
     return point;
   }
@@ -147,6 +150,21 @@
   return {x, y};
 }
 
+void SetInputFocusOnPlugin(extensions::MimeHandlerViewGuest* guest) {
+  auto* guest_main_frame = guest->GetGuestMainFrame();
+  content::WaitForHitTestData(guest_main_frame);
+
+  const gfx::Point point_in_root_coords =
+      guest_main_frame->GetView()->TransformPointToRootCoordSpace(
+          ConvertPageCoordToScreenCoord(guest_main_frame, {1, 1}));
+
+  content::FocusChangedObserver focus_observer(guest->web_contents());
+  content::SimulateMouseClickAt(
+      guest->embedder_web_contents(), blink::WebInputEvent::kNoModifiers,
+      blink::WebMouseEvent::Button::kLeft, point_in_root_coords);
+  focus_observer.Wait();
+}
+
 void SetInputFocusOnPlugin(content::WebContents* guest_contents) {
   content::FocusChangedObserver focus_observer(guest_contents);
   content::SimulateMouseClickAt(
@@ -156,4 +174,19 @@
   focus_observer.Wait();
 }
 
+extensions::MimeHandlerViewGuest* GetOnlyMimeHandlerView(
+    content::WebContents* embedder_contents) {
+  extensions::MimeHandlerViewGuest* result = nullptr;
+  embedder_contents->ForEachRenderFrameHost([&result](
+                                                content::RenderFrameHost* rfh) {
+    auto* guest = extensions::MimeHandlerViewGuest::FromRenderFrameHost(rfh);
+    if (guest && guest->GetGuestMainFrame() == rfh) {
+      // Assume exactly one MimeHandlerView.
+      EXPECT_FALSE(result);
+      result = guest;
+    }
+  });
+  return result;
+}
+
 }  // namespace pdf_extension_test_util
diff --git a/chrome/browser/pdf/pdf_extension_test_util.h b/chrome/browser/pdf/pdf_extension_test_util.h
index 20977de3..93ab2b3 100644
--- a/chrome/browser/pdf/pdf_extension_test_util.h
+++ b/chrome/browser/pdf/pdf_extension_test_util.h
@@ -19,6 +19,10 @@
 class WebContents;
 }  // namespace content
 
+namespace extensions {
+class MimeHandlerViewGuest;
+}  // namespace extensions
+
 namespace gfx {
 class Point;
 }  // namespace gfx
@@ -46,13 +50,22 @@
     bool wait_for_hit_test_data = true,
     const std::string& pdf_element = "embed");
 
-gfx::Point ConvertPageCoordToScreenCoord(content::WebContents* contents,
-                                         const gfx::Point& point);
+gfx::Point ConvertPageCoordToScreenCoord(
+    content::ToRenderFrameHost guest_main_frame,
+    const gfx::Point& point);
 
 // Synchronously sets the input focus on the plugin frame by clicking on the
 // top-left corner of a PDF document.
+void SetInputFocusOnPlugin(extensions::MimeHandlerViewGuest* guest);
+// TODO(crbug.com/1261928): Prefer the MimeHandlerViewGuest overload of this
+// method.
 void SetInputFocusOnPlugin(content::WebContents* guest_contents);
 
+// Returns the `MimeHandlerViewGuest` embedded in `embedder_contents`. If more
+// than one `MimeHandlerViewGuest` is found, the test fails.
+extensions::MimeHandlerViewGuest* GetOnlyMimeHandlerView(
+    content::WebContents* embedder_contents);
+
 }  // namespace pdf_extension_test_util
 
 #endif  // CHROME_BROWSER_PDF_PDF_EXTENSION_TEST_UTIL_H_
diff --git a/chrome/browser/picture_in_picture/video_picture_in_picture_window_controller_browsertest.cc b/chrome/browser/picture_in_picture/video_picture_in_picture_window_controller_browsertest.cc
index 57ae205a..10a98ee4 100644
--- a/chrome/browser/picture_in_picture/video_picture_in_picture_window_controller_browsertest.cc
+++ b/chrome/browser/picture_in_picture/video_picture_in_picture_window_controller_browsertest.cc
@@ -2345,24 +2345,10 @@
   WaitForTitle(active_web_contents, u"pause");
 }
 
-class VideoConferencingVideoPictureInPictureWindowControllerBrowserTest
-    : public VideoPictureInPictureWindowControllerBrowserTest {
- public:
-  void SetUpCommandLine(base::CommandLine* command_line) override {
-    feature_list_.InitAndEnableFeature(media::kMediaSessionWebRTC);
-    VideoPictureInPictureWindowControllerBrowserTest::SetUpCommandLine(
-        command_line);
-  }
-
- private:
-  base::test::ScopedFeatureList feature_list_;
-};
-
 // Test that video conferencing action buttons function correctly.
 // TODO(crbug.com/1312401): Test is flaky.
-IN_PROC_BROWSER_TEST_F(
-    VideoConferencingVideoPictureInPictureWindowControllerBrowserTest,
-    DISABLED_VideoConferencingActions) {
+IN_PROC_BROWSER_TEST_F(VideoPictureInPictureWindowControllerBrowserTest,
+                       DISABLED_VideoConferencingActions) {
   // Enter PiP.
   LoadTabAndEnterPictureInPicture(
       browser(), base::FilePath(kPictureInPictureVideoConferencingPage));
diff --git a/chrome/browser/policy/extension_policy_browsertest.cc b/chrome/browser/policy/extension_policy_browsertest.cc
index 4d5d282..939a956 100644
--- a/chrome/browser/policy/extension_policy_browsertest.cc
+++ b/chrome/browser/policy/extension_policy_browsertest.cc
@@ -370,12 +370,12 @@
   ASSERT_TRUE(
       registry->enabled_extensions().GetByID(extensions::kWebStoreAppId));
 
-  base::ListValue blocklist;
+  base::Value::List blocklist;
   blocklist.Append(extensions::kWebStoreAppId);
   PolicyMap policies;
   policies.Set(key::kExtensionInstallBlocklist, POLICY_LEVEL_MANDATORY,
-               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, blocklist.Clone(),
-               nullptr);
+               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+               base::Value(std::move(blocklist)), nullptr);
   UpdateProviderPolicy(policies);
   ASSERT_TRUE(
       registry->enabled_extensions().GetByID(extensions::kWebStoreAppId));
@@ -390,12 +390,12 @@
       kGoodCrxId, extensions::ExtensionRegistry::EVERYTHING));
   ASSERT_FALSE(registry->GetExtensionById(
       kSimpleWithIconCrxId, extensions::ExtensionRegistry::EVERYTHING));
-  base::ListValue blocklist;
+  base::Value::List blocklist;
   blocklist.Append(kGoodCrxId);
   PolicyMap policies;
   policies.Set(key::kExtensionInstallBlocklist, POLICY_LEVEL_MANDATORY,
-               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, blocklist.Clone(),
-               nullptr);
+               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+               base::Value(std::move(blocklist)), nullptr);
   UpdateProviderPolicy(policies);
 
   // "good.crx" is blocklisted.
@@ -468,12 +468,12 @@
   ASSERT_FALSE(registry->GetExtensionById(
       kGoodCrxId, extensions::ExtensionRegistry::EVERYTHING));
   ASSERT_TRUE(registry->enabled_extensions().GetByID(kSimpleWithIconCrxId));
-  base::ListValue blocklist;
+  base::Value::List blocklist;
   blocklist.Append("*");
   PolicyMap policies;
   policies.Set(key::kExtensionInstallBlocklist, POLICY_LEVEL_MANDATORY,
-               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, blocklist.Clone(),
-               nullptr);
+               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+               base::Value(std::move(blocklist)), nullptr);
   UpdateProviderPolicy(policies);
 
   // "simple_with_icon" should be disabled.
@@ -532,13 +532,13 @@
 
   // Blocklist "*" but force-install the importer extension. The shared module
   // should be automatically installed too.
-  base::ListValue blocklist;
+  base::Value::List blocklist;
   blocklist.Append("*");
   PolicyMap policies;
   AddExtensionToForceList(&policies, kImporterId, update_xml_url);
   policies.Set(key::kExtensionInstallBlocklist, POLICY_LEVEL_MANDATORY,
-               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, blocklist.Clone(),
-               nullptr);
+               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+               base::Value(std::move(blocklist)), nullptr);
 
   extensions::TestExtensionRegistryObserver observe_importer(registry,
                                                              kImporterId);
@@ -579,17 +579,17 @@
       kGoodCrxId, extensions::ExtensionRegistry::EVERYTHING));
   ASSERT_FALSE(registry->GetExtensionById(
       kSimpleWithIconCrxId, extensions::ExtensionRegistry::EVERYTHING));
-  base::ListValue blocklist;
+  base::Value::List blocklist;
   blocklist.Append("*");
-  base::ListValue allowlist;
+  base::Value::List allowlist;
   allowlist.Append(kGoodCrxId);
   PolicyMap policies;
   policies.Set(key::kExtensionInstallBlocklist, POLICY_LEVEL_MANDATORY,
-               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, blocklist.Clone(),
-               nullptr);
+               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+               base::Value(std::move(blocklist)), nullptr);
   policies.Set(key::kExtensionInstallAllowlist, POLICY_LEVEL_MANDATORY,
-               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, allowlist.Clone(),
-               nullptr);
+               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+               base::Value(std::move(allowlist)), nullptr);
   UpdateProviderPolicy(policies);
   // "simple_with_icon.crx" is blocklisted.
   EXPECT_FALSE(InstallExtension(kSimpleWithIconCrxName));
@@ -1891,12 +1891,12 @@
   ASSERT_FALSE(registry->GetExtensionById(
       kHostedAppCrxId, extensions::ExtensionRegistry::EVERYTHING));
 
-  base::ListValue allowed_types;
+  base::Value::List allowed_types;
   allowed_types.Append("hosted_app");
   PolicyMap policies;
   policies.Set(key::kExtensionAllowedTypes, POLICY_LEVEL_MANDATORY,
-               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, allowed_types.Clone(),
-               nullptr);
+               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+               base::Value(std::move(allowed_types)), nullptr);
   UpdateProviderPolicy(policies);
 
   // "good.crx" is blocked.
@@ -1941,13 +1941,13 @@
   download_observer.WaitForFinished();
 
   // Install the policy and trigger another download.
-  base::ListValue install_sources;
+  base::Value::List install_sources;
   install_sources.Append(install_source_url.spec());
   install_sources.Append(referrer_url.spec());
   PolicyMap policies;
   policies.Set(key::kExtensionInstallSources, POLICY_LEVEL_MANDATORY,
-               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, install_sources.Clone(),
-               nullptr);
+               POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+               base::Value(std::move(install_sources)), nullptr);
   UpdateProviderPolicy(policies);
 
   extensions::TestExtensionRegistryObserver observer(extension_registry());
diff --git a/chrome/browser/printing/print_preview_dialog_controller.cc b/chrome/browser/printing/print_preview_dialog_controller.cc
index 37d7f35..b848ee0 100644
--- a/chrome/browser/printing/print_preview_dialog_controller.cc
+++ b/chrome/browser/printing/print_preview_dialog_controller.cc
@@ -28,8 +28,8 @@
 #include "components/guest_view/browser/guest_view_base.h"
 #include "components/web_modal/web_contents_modal_dialog_host.h"
 #include "content/public/browser/host_zoom_map.h"
-#include "content/public/browser/navigation_details.h"
 #include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_delegate.h"
@@ -47,6 +47,7 @@
 #endif
 
 using content::NavigationController;
+using content::NavigationHandle;
 using content::WebContents;
 using content::WebUIMessageHandler;
 
@@ -333,9 +334,14 @@
     RemoveInitiator(contents);
 }
 
-void PrintPreviewDialogController::NavigationEntryCommitted(
+void PrintPreviewDialogController::DidFinishNavigation(
     WebContents* contents,
-    const content::LoadCommittedDetails& details) {
+    NavigationHandle* navigation_handle) {
+  if (!navigation_handle->IsInPrimaryMainFrame() ||
+      !navigation_handle->HasCommitted()) {
+    return;
+  }
+
   WebContents* preview_dialog = GetPrintPreviewForContents(contents);
   if (!preview_dialog) {
     NOTREACHED();
@@ -343,20 +349,21 @@
   }
 
   if (contents != preview_dialog)
-    OnInitiatorNavigated(contents, details);
+    OnInitiatorNavigated(contents, navigation_handle);
   else
-    OnPreviewDialogNavigated(contents, details);
+    OnPreviewDialogNavigated(contents, navigation_handle);
 }
 
 void PrintPreviewDialogController::OnInitiatorNavigated(
     WebContents* initiator,
-    const content::LoadCommittedDetails& details) {
-  if (details.type == content::NAVIGATION_TYPE_MAIN_FRAME_EXISTING_ENTRY) {
+    NavigationHandle* navigation_handle) {
+  if (navigation_handle->IsSameDocument()) {
     static const ui::PageTransition kTransitions[] = {
         ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
                                   ui::PAGE_TRANSITION_FROM_ADDRESS_BAR),
         ui::PAGE_TRANSITION_LINK, ui::PAGE_TRANSITION_AUTO_BOOKMARK};
-    ui::PageTransition type = details.entry->GetTransitionType();
+    ui::PageTransition type =
+        initiator->GetController().GetLastCommittedEntry()->GetTransitionType();
     for (ui::PageTransition transition : kTransitions) {
       if (ui::PageTransitionTypeIncludingQualifiersIs(type, transition))
         return;
@@ -368,26 +375,25 @@
 
 void PrintPreviewDialogController::OnPreviewDialogNavigated(
     WebContents* preview_dialog,
-    const content::LoadCommittedDetails& details) {
-  ui::PageTransition type = details.entry->GetTransitionType();
+    NavigationHandle* navigation_handle) {
+  ui::PageTransition type = preview_dialog->GetController()
+                                .GetLastCommittedEntry()
+                                ->GetTransitionType();
 
   // New `preview_dialog` is created. Don't update/erase map entry.
-  if (details.previous_main_frame_url.is_empty() && details.entry &&
-      IsPrintPreviewURL(details.entry->GetURL()) &&
+  if (navigation_handle->GetPreviousPrimaryMainFrameURL().is_empty() &&
+      IsPrintPreviewURL(navigation_handle->GetURL()) &&
       ui::PageTransitionCoreTypeIs(type, ui::PAGE_TRANSITION_AUTO_TOPLEVEL) &&
-      details.type == content::NAVIGATION_TYPE_MAIN_FRAME_NEW_ENTRY) {
+      !navigation_handle->IsSameDocument()) {
     SaveInitiatorTitle(preview_dialog);
     return;
   }
 
-  // Cloud print sign-in causes a reload.
-  if (ui::PageTransitionCoreTypeIs(type, ui::PAGE_TRANSITION_RELOAD) &&
-      details.type == content::NAVIGATION_TYPE_MAIN_FRAME_EXISTING_ENTRY &&
-      IsPrintPreviewURL(details.previous_main_frame_url)) {
-    return;
-  }
-
-  NOTREACHED();
+  // Cloud print sign-in causes a reload, but other cases should not be reached
+  // here.
+  DCHECK(ui::PageTransitionCoreTypeIs(type, ui::PAGE_TRANSITION_RELOAD));
+  DCHECK(
+      IsPrintPreviewURL(navigation_handle->GetPreviousPrimaryMainFrameURL()));
 }
 
 WebContents* PrintPreviewDialogController::CreatePrintPreviewDialog(
diff --git a/chrome/browser/printing/print_preview_dialog_controller.h b/chrome/browser/printing/print_preview_dialog_controller.h
index 8e3db48..f7867d4 100644
--- a/chrome/browser/printing/print_preview_dialog_controller.h
+++ b/chrome/browser/printing/print_preview_dialog_controller.h
@@ -96,17 +96,17 @@
   // the initiator or preview WebContents is closed.
   void WebContentsDestroyed(content::WebContents* contents) override;
 
-  // Handles the commit of a navigation entry for `contents`. This is observed
-  // when the renderer for either WebContents is navigated to a different page.
-  void NavigationEntryCommitted(
+  // Handles the commit of a navigation for `contents`. This is observed when
+  // the renderer for either WebContents is navigated to a different page.
+  void DidFinishNavigation(
       content::WebContents* contents,
-      const content::LoadCommittedDetails& details) override;
+      content::NavigationHandle* navigation_handle) override;
 
-  // Helpers for NavigationEntryCommitted().
+  // Helpers for DidFinishNavigation().
   void OnInitiatorNavigated(content::WebContents* initiator,
-                            const content::LoadCommittedDetails& details);
+                            content::NavigationHandle* navigation_handle);
   void OnPreviewDialogNavigated(content::WebContents* preview_dialog,
-                                const content::LoadCommittedDetails& details);
+                                content::NavigationHandle* navigation_handle);
 
   // Creates a new print preview dialog.
   content::WebContents* CreatePrintPreviewDialog(
diff --git a/chrome/browser/profiles/profile_avatar_downloader.cc b/chrome/browser/profiles/profile_avatar_downloader.cc
index 620f1027..dde02cc 100644
--- a/chrome/browser/profiles/profile_avatar_downloader.cc
+++ b/chrome/browser/profiles/profile_avatar_downloader.cc
@@ -67,7 +67,7 @@
   if (loader_factory) {
     fetcher_->Init(
         net::ReferrerPolicy::REDUCE_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN,
-        network::mojom::CredentialsMode::kInclude);
+        network::mojom::CredentialsMode::kOmit);
     fetcher_->Start(loader_factory);
   }
 }
diff --git a/chrome/browser/push_messaging/push_messaging_browsertest.cc b/chrome/browser/push_messaging/push_messaging_browsertest.cc
index 7552293e..c9d306d6 100644
--- a/chrome/browser/push_messaging/push_messaging_browsertest.cc
+++ b/chrome/browser/push_messaging/push_messaging_browsertest.cc
@@ -2871,10 +2871,9 @@
   console_observer.SetPattern(kIncognitoWarningPattern);
 
   // Filter out the main frame host of the currently active page.
-  content::RenderFrameHost* rfh = web_contents()->GetPrimaryMainFrame();
   console_observer.SetFilter(base::BindLambdaForTesting(
       [&](const content::WebContentsConsoleObserver::Message& message) {
-        return message.source_frame == rfh;
+        return message.source_frame->IsInPrimaryMainFrame();
       }));
 
   std::string script_result;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
index c5a8520..d9f3891 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
@@ -146,6 +146,7 @@
   "common/tree_dumper.js",
   "common/tts_base.js",
   "common/tts_interface.js",
+  "common/tts_types.js",
   "learn_mode/learn_mode.js",
   "log_page/log.js",
   "options/bluetooth_braille_display_manager.js",
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler.js
index 957f6d7..76b041a 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler.js
@@ -10,7 +10,7 @@
 import {constants} from '../../common/constants.js';
 import {CursorUnit} from '../../common/cursors/cursor.js';
 import {CursorRange} from '../../common/cursors/range.js';
-import {TtsSpeechProperties} from '../common/tts_interface.js';
+import {TtsSpeechProperties} from '../common/tts_types.js';
 
 import {ChromeVoxState} from './chromevox_state.js';
 import {CommandHandlerInterface} from './command_handler_interface.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background.js
index 77f2d85..345722c 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background.js
@@ -14,7 +14,7 @@
 import {LocaleOutputHelper} from '../common/locale_output_helper.js';
 import {Msgs} from '../common/msgs.js';
 import {PanelCommand, PanelCommandType} from '../common/panel_command.js';
-import {QueueMode, TtsInterface, TtsSpeechProperties} from '../common/tts_interface.js';
+import {QueueMode, TtsSpeechProperties} from '../common/tts_types.js';
 import {JaPhoneticMap} from '../third_party/tamachiyomi/ja_phonetic_map.js';
 
 import {AutoScrollHandler} from './auto_scroll_handler.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
index 5085c39..a62e4387 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
@@ -55,7 +55,7 @@
         '/chromevox/common/custom_automation_event.js');
     await importModule(
         ['Spannable', 'MultiSpannable'], '/chromevox/common/spannable.js');
-    await importModule('QueueMode', '/chromevox/common/tts_interface.js');
+    await importModule('QueueMode', '/chromevox/common/tts_types.js');
     await importModule(
         'AutomationPredicate', '/common/automation_predicate.js');
     await importModule('AutomationUtil', '/common/automation_util.js');
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_captions_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_captions_background.js
index ffaa4bb..3db004c4 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_captions_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_captions_background.js
@@ -11,7 +11,7 @@
 import {NavBraille} from '../../common/braille/nav_braille.js';
 import {Msgs} from '../../common/msgs.js';
 import {PanelCommand, PanelCommandType} from '../../common/panel_command.js';
-import {QueueMode} from '../../common/tts_interface.js';
+import {QueueMode} from '../../common/tts_types.js';
 import {ChromeVox} from '../chromevox.js';
 import {ChromeVoxPrefs} from '../prefs.js';
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_command_handler.js
index 3f54580a..a2e22fdd 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_command_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_command_handler.js
@@ -17,7 +17,7 @@
 import {Command} from '../../common/command_store.js';
 import {EventSourceType} from '../../common/event_source_type.js';
 import {Spannable} from '../../common/spannable.js';
-import {QueueMode} from '../../common/tts_interface.js';
+import {QueueMode} from '../../common/tts_types.js';
 import {ChromeVox} from '../chromevox.js';
 import {ChromeVoxState} from '../chromevox_state.js';
 import {CommandHandlerInterface} from '../command_handler_interface.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_key_event_rewriter.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_key_event_rewriter.js
index 9267153..a086693 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_key_event_rewriter.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_key_event_rewriter.js
@@ -6,7 +6,7 @@
  * @fileoverview Rewrites a braille key event.
  */
 import {BrailleKeyCommand, BrailleKeyEvent} from '../../common/braille/braille_key_types.js';
-import {QueueMode} from '../../common/tts_interface.js';
+import {QueueMode} from '../../common/tts_types.js';
 import {Output} from '../output/output.js';
 
 /**
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox.js
index 2984461a..edbe8cd 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox.js
@@ -13,7 +13,6 @@
 
 export class ChromeVox {}
 
-// Constants
 /**
  * @type {TtsInterface}
  */
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_state.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_state.js
index 02e342d9..e6ea356 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_state.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/chromevox_state.js
@@ -13,7 +13,7 @@
 import {NavBraille} from '../common/braille/nav_braille.js';
 import {BridgeConstants} from '../common/bridge_constants.js';
 import {BridgeHelper} from '../common/bridge_helper.js';
-import {TtsSpeechProperties} from '../common/tts_interface.js';
+import {TtsSpeechProperties} from '../common/tts_types.js';
 
 import {UserActionMonitor} from './user_action_monitor.js';
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js
index 47fc708..8bed595 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js
@@ -6,7 +6,7 @@
  * @fileoverview Script that runs on the background page.
  */
 import {ExtensionBridge} from '../common/extension_bridge.js';
-import {QueueMode, TtsSpeechProperties} from '../common/tts_interface.js';
+import {QueueMode, TtsSpeechProperties} from '../common/tts_types.js';
 
 import {ChromeVox} from './chromevox.js';
 import {InjectedScriptLoader} from './injected_script_loader.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/clipboard_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/clipboard_handler.js
index 866e5cf3..e25b248 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/clipboard_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/clipboard_handler.js
@@ -6,7 +6,7 @@
  * @fileoverview Class to handle access to the clipboard data.
  */
 import {Msgs} from '../common/msgs.js';
-import {QueueMode} from '../common/tts_interface.js';
+import {QueueMode} from '../common/tts_types.js';
 
 import {ChromeVox} from './chromevox.js';
 import {ChromeVoxState} from './chromevox_state.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
index 39d334d..14c63229 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
@@ -27,7 +27,7 @@
 import {Msgs} from '../common/msgs.js';
 import {PanelCommand, PanelCommandType} from '../common/panel_command.js';
 import {TreeDumper} from '../common/tree_dumper.js';
-import {QueueMode, TtsSpeechProperties} from '../common/tts_interface.js';
+import {QueueMode, TtsSpeechProperties} from '../common/tts_types.js';
 
 import {AutoScrollHandler} from './auto_scroll_handler.js';
 import {BrailleBackground} from './braille/braille_background.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/console_tts.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/console_tts.js
index 17fb75b..42edb432 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/console_tts.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/console_tts.js
@@ -6,7 +6,8 @@
  * @fileoverview A TTS engine that writes to globalThis.console.
  */
 import {SpeechLog} from '../common/log_types.js';
-import {QueueMode, TtsCategory, TtsInterface} from '../common/tts_interface.js';
+import {TtsInterface} from '../common/tts_interface.js';
+import {QueueMode, TtsCategory} from '../common/tts_types.js';
 
 import {LogStore} from './logging/log_store.js';
 import {ChromeVoxPrefs} from './prefs.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js
index c8044aa..7195a43 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js
@@ -14,7 +14,7 @@
 import {ChromeVoxEvent, CustomAutomationEvent} from '../common/custom_automation_event.js';
 import {EventSourceType} from '../common/event_source_type.js';
 import {Msgs} from '../common/msgs.js';
-import {QueueMode, TtsCategory} from '../common/tts_interface.js';
+import {QueueMode, TtsCategory} from '../common/tts_types.js';
 
 import {AutoScrollHandler} from './auto_scroll_handler.js';
 import {AutomationObjectConstructorInstaller} from './automation_object_constructor_installer.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/download_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/download_handler.js
index 41a39e8..d4cac0b4 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/download_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/download_handler.js
@@ -7,7 +7,7 @@
  * notifications in ChromeVox.
  */
 import {Msgs} from '../common/msgs.js';
-import {QueueMode} from '../common/tts_interface.js';
+import {QueueMode} from '../common/tts_types.js';
 
 import {Output} from './output/output.js';
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editable_text_base.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editable_text_base.js
index 675a0fc..8d489e4 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editable_text_base.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editable_text_base.js
@@ -15,7 +15,8 @@
  */
 import {AbstractTts} from '../../common/abstract_tts.js';
 import {Msgs} from '../../common/msgs.js';
-import {QueueMode, TtsCategory, TtsInterface, TtsSpeechProperties} from '../../common/tts_interface.js';
+import {TtsInterface} from '../../common/tts_interface.js';
+import {QueueMode, TtsCategory, TtsSpeechProperties} from '../../common/tts_types.js';
 import {ChromeVoxState} from '../chromevox_state.js';
 
 /**
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js
index ddfdcf66..7967c70 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js
@@ -16,7 +16,7 @@
 import {ChromeVoxEvent} from '../../common/custom_automation_event.js';
 import {Msgs} from '../../common/msgs.js';
 import {MultiSpannable, Spannable} from '../../common/spannable.js';
-import {QueueMode} from '../../common/tts_interface.js';
+import {QueueMode} from '../../common/tts_types.js';
 import {BrailleBackground} from '../braille/braille_background.js';
 import {LibLouis} from '../braille/liblouis.js';
 import {BrailleTextStyleSpan, ValueSelectionSpan, ValueSpan} from '../braille/spans.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/focus_automation_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/focus_automation_handler.js
index 2c1c174..cd3c05d6 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/focus_automation_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/focus_automation_handler.js
@@ -9,7 +9,7 @@
 import {constants} from '../../common/constants.js';
 import {CursorRange} from '../../common/cursors/range.js';
 import {ChromeVoxEvent} from '../common/custom_automation_event.js';
-import {QueueMode, TtsSpeechProperties} from '../common/tts_interface.js';
+import {QueueMode, TtsSpeechProperties} from '../common/tts_types.js';
 
 import {BaseAutomationHandler} from './base_automation_handler.js';
 import {ChromeVoxState} from './chromevox_state.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js
index 259cb070..f622dc74 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/gesture_command_handler.js
@@ -11,7 +11,7 @@
 import {BridgeHelper} from '../common/bridge_helper.js';
 import {EventSourceType} from '../common/event_source_type.js';
 import {GestureCommandData, GestureGranularity} from '../common/gesture_command_data.js';
-import {QueueMode} from '../common/tts_interface.js';
+import {QueueMode} from '../common/tts_types.js';
 
 import {ChromeVoxState} from './chromevox_state.js';
 import {CommandHandlerInterface} from './command_handler_interface.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/keyboard_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/keyboard_handler.js
index 2ba1ddf..fc2b279e 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/keyboard_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/keyboard_handler.js
@@ -8,7 +8,7 @@
 import {KeyCode} from '../../common/key_code.js';
 import {EventSourceType} from '../common/event_source_type.js';
 import {ChromeVoxKbHandler} from '../common/keyboard_handler.js';
-import {QueueMode} from '../common/tts_interface.js';
+import {QueueMode} from '../common/tts_types.js';
 
 import {ChromeVox} from './chromevox.js';
 import {ChromeVoxState} from './chromevox_state.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions.js
index ff2a5892..a28ff96 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions.js
@@ -7,7 +7,7 @@
  */
 import {AutomationUtil} from '../../common/automation_util.js';
 import {CursorRange} from '../../common/cursors/range.js';
-import {QueueMode, TtsCategory} from '../common/tts_interface.js';
+import {QueueMode, TtsCategory} from '../common/tts_types.js';
 
 import {ChromeVoxState} from './chromevox_state.js';
 import {Output} from './output/output.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions_test.js
index 22281d74..84b3d41 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions_test.js
@@ -19,7 +19,7 @@
         'ChromeVoxState', '/chromevox/background/chromevox_state.js');
     await importModule('LiveRegions', '/chromevox/background/live_regions.js');
     await importModule('Output', '/chromevox/background/output/output.js');
-    await importModule('QueueMode', '/chromevox/common/tts_interface.js');
+    await importModule('QueueMode', '/chromevox/common/tts_types.js');
 
     window.TreeChangeType = chrome.automation.TreeChangeType;
   }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/math_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/math_handler.js
index 663174c..f1e97bf 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/math_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/math_handler.js
@@ -8,7 +8,7 @@
 import {AutomationPredicate} from '../../common/automation_predicate.js';
 import {CursorRange} from '../../common/cursors/range.js';
 import {Msgs} from '../common/msgs.js';
-import {QueueMode} from '../common/tts_interface.js';
+import {QueueMode} from '../common/tts_types.js';
 
 import {ChromeVox} from './chromevox.js';
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
index 81accf1..8e233a1a 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
@@ -18,7 +18,7 @@
 import {Msgs} from '../../common/msgs.js';
 import {CustomRole} from '../../common/role_type.js';
 import {Spannable} from '../../common/spannable.js';
-import {QueueMode, TtsCategory, TtsSpeechProperties} from '../../common/tts_interface.js';
+import {QueueMode, TtsCategory, TtsSpeechProperties} from '../../common/tts_types.js';
 import {ValueSelectionSpan, ValueSpan} from '../braille/spans.js';
 import {ChromeVox} from '../chromevox.js';
 import {EventSourceState} from '../event_source.js';
@@ -680,24 +680,6 @@
   }
 
   /** @override */
-  formatPressed_(data, token) {
-    const buff = data.outputBuffer;
-    const node = data.node;
-    const formatLog = data.outputFormatLogger;
-
-    const msg = outputTypes.OutputPropertyMap.PRESSED[node.checked];
-    if (msg) {
-      formatLog.writeToken(token);
-      this.format_({
-        node,
-        outputFormat: '@' + msg,
-        outputBuffer: buff,
-        outputFormatLogger: formatLog,
-      });
-    }
-  }
-
-  /** @override */
   formatState_(data, token) {
     const buff = data.outputBuffer;
     const node = data.node;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_formatter.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_formatter.js
index 60f78a72..ea32712 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_formatter.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_formatter.js
@@ -64,7 +64,7 @@
     } else if (token === 'checked') {
       this.formatChecked_(this.params_, token);
     } else if (token === 'pressed') {
-      this.output_.formatPressed_(this.params_, token);
+      this.formatPressed_(this.params_, token);
     } else if (token === 'state') {
       this.output_.formatState_(this.params_, token);
     } else if (token === 'find') {
@@ -337,6 +337,28 @@
    * @param {string} token
    * @private
    */
+  formatPressed_(data, token) {
+    const buff = data.outputBuffer;
+    const node = data.node;
+    const formatLog = data.outputFormatLogger;
+
+    const msg = outputTypes.OutputPropertyMap.PRESSED[node.checked];
+    if (msg) {
+      formatLog.writeToken(token);
+      this.output_.format_({
+        node,
+        outputFormat: '@' + msg,
+        outputBuffer: buff,
+        outputFormatLogger: formatLog,
+      });
+    }
+  }
+
+  /**
+   * @param {!outputTypes.OutputFormattingData} data
+   * @param {string} token
+   * @private
+   */
   formatRestriction_(data, token) {
     const buff = data.outputBuffer;
     const node = data.node;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_interface.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_interface.js
index d2a7f48..dcacdfb88 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_interface.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_interface.js
@@ -135,12 +135,6 @@
   /**
    * @param {!OutputFormattingData} data
    * @param {string} token
-   */
-  formatPressed_(data, token) {}
-
-  /**
-   * @param {!OutputFormattingData} data
-   * @param {string} token
    * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
    */
   formatRole_(data, token, options) {}
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js
index 0be42d7a..4e4a0f3 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js
@@ -114,7 +114,7 @@
     await importModule(
         'EventSourceType', '/chromevox/common/event_source_type.js');
     await importModule('Msgs', '/chromevox/common/msgs.js');
-    await importModule('TtsCategory', '/chromevox/common/tts_interface.js');
+    await importModule('TtsCategory', '/chromevox/common/tts_types.js');
     await importModule(
         'AutomationPredicate', '/common/automation_predicate.js');
     await importModule('AutomationUtil', '/common/automation_util.js');
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js
index 06f683b..19a29d9 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js
@@ -13,7 +13,7 @@
 import {BridgeHelper} from '../../common/bridge_helper.js';
 import {PanelBridge} from '../../common/panel_bridge.js';
 import {ALL_PANEL_MENU_NODE_DATA} from '../../common/panel_menu_data.js';
-import {QueueMode} from '../../common/tts_interface.js';
+import {QueueMode} from '../../common/tts_types.js';
 import {ChromeVox} from '../chromevox.js';
 import {ChromeVoxState, ChromeVoxStateObserver} from '../chromevox_state.js';
 import {Output} from '../output/output.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/pointer_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/pointer_handler.js
index e04414d..ce6c252e 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/pointer_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/pointer_handler.js
@@ -10,7 +10,7 @@
 import {EventGenerator} from '../../common/event_generator.js';
 import {Earcon} from '../common/abstract_earcons.js';
 import {CustomAutomationEvent} from '../common/custom_automation_event.js';
-import {QueueMode} from '../common/tts_interface.js';
+import {QueueMode} from '../common/tts_types.js';
 
 import {BaseAutomationHandler} from './base_automation_handler.js';
 import {ChromeVox} from './chromevox.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js
index b8f3f41..be62bc5 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js
@@ -56,6 +56,10 @@
         () => ChromeVoxPrefs.instance.getPrefs());
     BridgeHelper.registerHandler(
         BridgeConstants.ChromeVoxPrefs.TARGET,
+        BridgeConstants.ChromeVoxPrefs.Action.GET_STICKY_PREF,
+        () => ChromeVoxPrefs.isStickyPrefOn);
+    BridgeHelper.registerHandler(
+        BridgeConstants.ChromeVoxPrefs.TARGET,
         BridgeConstants.ChromeVoxPrefs.Action.SET_LOGGING_PREFS,
         (key, value) => ChromeVoxPrefs.instance.setLoggingPrefs(key, value));
     BridgeHelper.registerHandler(
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background.js
index 0d1f640..bd02ef4c 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background.js
@@ -15,7 +15,8 @@
 import {Msgs} from '../common/msgs.js';
 import {PanelCommand, PanelCommandType} from '../common/panel_command.js';
 import {ChromeTtsBase} from '../common/tts_base.js';
-import {QueueMode, TtsCapturingEventListener, TtsInterface, TtsSpeechProperties} from '../common/tts_interface.js';
+import {TtsCapturingEventListener, TtsInterface} from '../common/tts_interface.js';
+import {QueueMode, TtsSpeechProperties} from '../common/tts_types.js';
 
 import {ChromeVox} from './chromevox.js';
 import {ConsoleTts} from './console_tts.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background_test.js
index 0929153..195cb997 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background_test.js
@@ -19,8 +19,7 @@
         '/chromevox/background/command_handler_interface.js');
     await importModule('PrimaryTts', '/chromevox/background/tts_background.js');
     await importModule(
-        ['QueueMode', 'TtsSpeechProperties'],
-        '/chromevox/common/tts_interface.js');
+        ['QueueMode', 'TtsSpeechProperties'], '/chromevox/common/tts_types.js');
 
     window.tts = new PrimaryTts();
   }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor.js
index 34ca8e2..d00a8c4 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor.js
@@ -12,7 +12,7 @@
 import {KeySequence} from '../common/key_sequence.js';
 import {KeyUtil} from '../common/key_util.js';
 import {PanelCommand, PanelCommandType} from '../common/panel_command.js';
-import {QueueMode} from '../common/tts_interface.js';
+import {QueueMode} from '../common/tts_types.js';
 
 import {CommandHandlerInterface} from './command_handler_interface.js';
 import {Output} from './output/output.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/abstract_tts.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/abstract_tts.js
index f41030a2..0f534bc 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/abstract_tts.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/abstract_tts.js
@@ -8,7 +8,8 @@
  */
 
 import {Msgs} from './msgs.js';
-import {QueueMode, TtsInterface, TtsSpeechProperties} from './tts_interface.js';
+import {TtsInterface} from './tts_interface.js';
+import {QueueMode, TtsSpeechProperties} from './tts_types.js';
 
 /**
  * Creates a new instance.
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/background_bridge.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/background_bridge.js
index feb177e..7c9b5f2 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/background_bridge.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/background_bridge.js
@@ -14,7 +14,7 @@
 import {Command} from './command_store.js';
 import {BaseLog, SerializableLog} from './log_types.js';
 import {PanelTabMenuItemData} from './panel_menu_data.js';
-import {QueueMode, TtsSpeechProperties} from './tts_interface.js';
+import {QueueMode, TtsSpeechProperties} from './tts_types.js';
 
 export const BackgroundBridge = {};
 
@@ -66,6 +66,13 @@
         BridgeConstants.ChromeVoxPrefs.Action.GET_PREFS);
   },
 
+  /** @return {!Promise<boolean>} */
+  async getStickyPref() {
+    return BridgeHelper.sendMessage(
+        BridgeConstants.ChromeVoxPrefs.TARGET,
+        BridgeConstants.ChromeVoxPrefs.Action.GET_STICKY_PREF);
+  },
+
   /**
    * Set the value of a pref of logging options.
    * @param {string} key The pref key.
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_constants.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_constants.js
index c46c8dd..e16886bc 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_constants.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/bridge_constants.js
@@ -56,6 +56,7 @@
   TARGET: 'ChromeVoxPrefs',
   Action: {
     GET_PREFS: 'getPrefs',
+    GET_STICKY_PREF: 'getStickyPref',
     SET_LOGGING_PREFS: 'setLoggingPrefs',
     SET_PREF: 'setPref',
   },
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/composite_tts.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/composite_tts.js
index 2d5c61c0..f80ded83 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/composite_tts.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/composite_tts.js
@@ -7,8 +7,8 @@
  * the same time.
  *
  */
-
-import {QueueMode, TtsInterface, TtsSpeechProperties} from './tts_interface.js';
+import {TtsInterface} from './tts_interface.js';
+import {QueueMode, TtsSpeechProperties} from './tts_types.js';
 
 /**
  * A Composite Tts
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/extension_bridge.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/extension_bridge.js
index a616c6a..6652b5c 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/extension_bridge.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/extension_bridge.js
@@ -15,28 +15,14 @@
 export class ExtensionBridge {
   /** @private */
   constructor() {
-    /** @private {!Array<!function(Object, Port)>} */
-    this.messageListeners_ = [];
     /** @private {!Array<!function()>} */
     this.disconnectListeners_ = [];
-    /** @private {number} */
-    this.id_ = -1;
-
-    // Used in the background context.
-    /** @private {!Array<!Port>} */
-    this.portCache_ = [];
+    /** @private {!Array<!function(Object, Port)>} */
+    this.messageListeners_ = [];
     /** @private {number} */
     this.nextPongId_ = 1;
-
-    // Used in the content script context.
-    /** @private {boolean} */
-    this.connected_ = false;
-    /** @private {number} */
-    this.pingAttempts_ = 0;
-    /** @private {!Array<Object>} */
-    this.queuedMessages_ = [];
-    /** @private {?Port} */
-    this.backgroundPort_ = null;
+    /** @private {!Array<!Port>} */
+    this.portCache_ = [];
 
     this.init_();
   }
@@ -77,20 +63,11 @@
   }
 
   /**
-   * Returns a unique id for this instance of the script.
-   * @return {number}
-   */
-  static uniqueId() {
-    return ExtensionBridge.instance.id_;
-  }
-
-  /**
    * Initialize the extension bridge in a background page context by registering
    * a listener for connections from the content script.
    * @private
    */
   init_() {
-    this.id_ = 0;
     chrome.extension.onConnect.addListener(
         port => this.onConnectHandler_(port));
   }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/log_types.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/log_types.js
index b83972a..a51b759c 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/log_types.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/log_types.js
@@ -7,7 +7,7 @@
  */
 
 import {TreeDumper} from './tree_dumper.js';
-import {QueueMode} from './tts_interface.js';
+import {QueueMode} from './tts_types.js';
 
 /**
  * List of all types of logs supported.
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_interface.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_interface.js
index 197a8fb..351c34b 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_interface.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_interface.js
@@ -4,50 +4,9 @@
 
 /**
  * @fileoverview Defines a Tts interface.
- *
  * All TTS engines in ChromeVox conform to the this interface.
- *
  */
-
-/**
- * Categories for a speech utterance. This can be used with the
- * CATEGORY_FLUSH queue mode, which flushes all utterances from a given
- * category but not other utterances.
- *
- * NAV: speech related to explicit navigation, or focus changing.
- * LIVE: speech coming from changes to live regions.
- *
- * @enum {string}
- */
-export const TtsCategory = {
-  LIVE: 'live',
-  NAV: 'nav',
-};
-
-/**
- * Queue modes for calls to {@code TtsInterface.speak}. The modes are listed in
- * descending order of priority.
- * @enum
- */
-export const QueueMode = {
-  /**
-     Prepend the current utterance (if any) to the queue, stop speech, and
-     speak this utterance.
-   */
-  INTERJECT: 0,
-
-  /** Stop speech, clear everything, then speak this utterance. */
-  FLUSH: 1,
-
-  /**
-   * Clear any utterances of the same category (as set by
-   * properties['category']) from the queue, then enqueue this utterance.
-   */
-  CATEGORY_FLUSH: 2,
-
-  /** Append this utterance to the end of the queue. */
-  QUEUE: 3,
-};
+import {QueueMode, TtsSpeechProperties} from './tts_types.js';
 
 /**
  * An interface for clients who want to get notified when an utterance
@@ -55,106 +14,16 @@
  * @interface
  */
 export class TtsCapturingEventListener {
-  /**
-   * Called when any utterance starts.
-   */
+  /** Called when any utterance starts. */
   onTtsStart() {}
 
-  /**
-   * Called when any utterance ends.
-   */
+  /** Called when any utterance ends. */
   onTtsEnd() {}
 
-  /**
-   * Called when any utterance gets interrupted.
-   */
+  /** Called when any utterance gets interrupted. */
   onTtsInterrupted() {}
 }
 
-/** Structure to store properties around TTS speech production. */
-export class TtsSpeechProperties {
-  /** @param {Object=} opt_initialValues */
-  constructor(opt_initialValues) {
-    /** @public {TtsCategory|undefined} */
-    this.category;
-
-    /** @public {string|undefined} */
-    this.color;
-
-    /** @public {boolean|undefined} */
-    this.delay;
-
-    /** @public {boolean|undefined} */
-    this.doNotInterrupt;
-
-    /** @public {string|undefined} */
-    this.fontWeight;
-
-    /** @public {string|undefined} */
-    this.lang;
-
-    /** @public {boolean|undefined} */
-    this.math;
-
-    /** @public {boolean|undefined} */
-    this.pause;
-
-    /** @public {boolean|undefined} */
-    this.phoneticCharacters;
-
-    /** @public {string|undefined} */
-    this.punctuationEcho;
-
-    /** @public {boolean|undefined} */
-    this.token;
-
-    /** @public {string|undefined} */
-    this.voiceName;
-
-    /** @public {number|undefined} */
-    this.pitch;
-    /** @public {number|undefined} */
-    this.relativePitch;
-
-    /** @public {number|undefined} */
-    this.rate;
-    /** @public {number|undefined} */
-    this.relativeRate;
-
-    /** @public {number|undefined} */
-    this.volume;
-    /** @public {number|undefined} */
-    this.relativeVolume;
-
-    /** @public {function()|undefined} */
-    this.startCallback;
-    /** @public {function(boolean=)|undefined} */
-    this.endCallback;
-
-    /** @public {function(Object)|undefined} */
-    this.onEvent;
-
-    this.init_(opt_initialValues);
-  }
-
-
-  /** @return {!Object} */
-  toJSON() {
-    return Object.assign({}, this);
-  }
-
-  /**
-   * @param {Object=} opt_initialValues
-   * @private
-   */
-  init_(opt_initialValues) {
-    if (!opt_initialValues) {
-      return;
-    }
-    Object.assign(this, opt_initialValues);
-  }
-}
-
 /** @interface */
 export class TtsInterface {
   /**
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_types.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_types.js
new file mode 100644
index 0000000..19fc719
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/tts_types.js
@@ -0,0 +1,130 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview Contains types related to speech generation.
+ */
+
+/**
+ * Categories for a speech utterance. This can be used with the
+ * CATEGORY_FLUSH queue mode, which flushes all utterances from a given
+ * category but not other utterances.
+ *
+ * NAV: speech related to explicit navigation, or focus changing.
+ * LIVE: speech coming from changes to live regions.
+ *
+ * @enum {string}
+ */
+export const TtsCategory = {
+  LIVE: 'live',
+  NAV: 'nav',
+};
+
+/**
+ * Queue modes for calls to {@code TtsInterface.speak}. The modes are listed in
+ * descending order of priority.
+ * @enum
+ */
+export const QueueMode = {
+  /**
+     Prepend the current utterance (if any) to the queue, stop speech, and
+     speak this utterance.
+   */
+  INTERJECT: 0,
+
+  /** Stop speech, clear everything, then speak this utterance. */
+  FLUSH: 1,
+
+  /**
+   * Clear any utterances of the same category (as set by
+   * properties['category']) from the queue, then enqueue this utterance.
+   */
+  CATEGORY_FLUSH: 2,
+
+  /** Append this utterance to the end of the queue. */
+  QUEUE: 3,
+};
+
+/** Structure to store properties around TTS speech production. */
+export class TtsSpeechProperties {
+  /** @param {Object=} opt_initialValues */
+  constructor(opt_initialValues) {
+    /** @public {TtsCategory|undefined} */
+    this.category;
+
+    /** @public {string|undefined} */
+    this.color;
+
+    /** @public {boolean|undefined} */
+    this.delay;
+
+    /** @public {boolean|undefined} */
+    this.doNotInterrupt;
+
+    /** @public {string|undefined} */
+    this.fontWeight;
+
+    /** @public {string|undefined} */
+    this.lang;
+
+    /** @public {boolean|undefined} */
+    this.math;
+
+    /** @public {boolean|undefined} */
+    this.pause;
+
+    /** @public {boolean|undefined} */
+    this.phoneticCharacters;
+
+    /** @public {string|undefined} */
+    this.punctuationEcho;
+
+    /** @public {boolean|undefined} */
+    this.token;
+
+    /** @public {string|undefined} */
+    this.voiceName;
+
+    /** @public {number|undefined} */
+    this.pitch;
+    /** @public {number|undefined} */
+    this.relativePitch;
+
+    /** @public {number|undefined} */
+    this.rate;
+    /** @public {number|undefined} */
+    this.relativeRate;
+
+    /** @public {number|undefined} */
+    this.volume;
+    /** @public {number|undefined} */
+    this.relativeVolume;
+
+    /** @public {function()|undefined} */
+    this.startCallback;
+    /** @public {function(boolean=)|undefined} */
+    this.endCallback;
+
+    /** @public {function(Object)|undefined} */
+    this.onEvent;
+
+    this.init_(opt_initialValues);
+  }
+
+  /** @return {!Object} */
+  toJSON() {
+    return Object.assign({}, this);
+  }
+
+  /**
+   * @param {Object=} opt_initialValues
+   * @private
+   */
+  init_(opt_initialValues) {
+    if (!opt_initialValues) {
+      return;
+    }
+    Object.assign(this, opt_initialValues);
+  }
+}
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode.js b/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode.js
index f544440..7c658a0 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode.js
@@ -18,7 +18,7 @@
 import {ChromeVoxKbHandler} from '../common/keyboard_handler.js';
 import {Msgs} from '../common/msgs.js';
 import {Spannable} from '../common/spannable.js';
-import {QueueMode, TtsSpeechProperties} from '../common/tts_interface.js';
+import {QueueMode, TtsSpeechProperties} from '../common/tts_types.js';
 
 /**
  * Class to manage the keyboard explorer.
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode_test.js
index a3ad061..32f46f5 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode_test.js
@@ -30,7 +30,7 @@
     await importModule(
         ['BrailleKeyEvent', 'BrailleKeyCommand'],
         '/chromevox/common/braille/braille_key_types.js');
-    await importModule('QueueMode', '/chromevox/common/tts_interface.js');
+    await importModule('QueueMode', '/chromevox/common/tts_types.js');
     await importModule('KeyCode', '/common/key_code.js');
   }
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
index ffecc3e..40e09c86 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
@@ -21,7 +21,7 @@
 import {Msgs} from '../common/msgs.js';
 import {PanelCommand, PanelCommandType} from '../common/panel_command.js';
 import {ALL_PANEL_MENU_NODE_DATA, PanelNodeMenuData, PanelNodeMenuId, PanelNodeMenuItemData} from '../common/panel_menu_data.js';
-import {QueueMode} from '../common/tts_interface.js';
+import {QueueMode} from '../common/tts_types.js';
 
 import {ISearchUI} from './i_search_ui.js';
 import {PanelInterface} from './panel_interface.js';
@@ -1276,13 +1276,13 @@
   }
 }, false);
 
-window.addEventListener('hashchange', function() {
+window.addEventListener('hashchange', async function() {
   const bkgnd = chrome.extension.getBackgroundPage();
 
   // Save the sticky state when a user first focuses the panel.
-  if (bkgnd['ChromeVox'] &&
-      (location.hash === '#fullscreen' || location.hash === '#focus')) {
-    Panel.originalStickyState_ = bkgnd['ChromeVox']['isStickyPrefOn'];
+  if (location.hash === '#fullscreen' || location.hash === '#focus') {
+    Panel.originalStickyState_ =
+        await BackgroundBridge.ChromeVoxPrefs.getStickyPref();
   }
 
   // If the original sticky state was on when we first entered the panel, toggle
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_e2e_test_base.js b/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_e2e_test_base.js
index dd9d0fa2..70f348e 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_e2e_test_base.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_e2e_test_base.js
@@ -56,8 +56,8 @@
         'NavBraille', '/chromevox/common/braille/nav_braille.js');
     await importModule(
         ['AbstractEarcons', 'Earcon'], '/chromevox/common/abstract_earcons.js');
-    await importModule(
-        ['QueueMode', 'TtsInterface'], '/chromevox/common/tts_interface.js');
+    await importModule('TtsInterface', '/chromevox/common/tts_interface.js');
+    await importModule('QueueMode', '/chromevox/common/tts_types.js');
 
     await ChromeVoxState.ready();
   }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/testing/mock_feedback_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/testing/mock_feedback_test.js
index c8b56d0..752edd93 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/testing/mock_feedback_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/testing/mock_feedback_test.js
@@ -39,8 +39,7 @@
     await importModule(
         'NavBraille', '/chromevox/common/braille/nav_braille.js');
     await importModule('Spannable', '/chromevox/common/spannable.js');
-    await importModule(
-        ['QueueMode', 'TtsInterface'], '/chromevox/common/tts_interface.js');
+    await importModule('QueueMode', '/chromevox/common/tts_types.js');
   }
 
   /** @override */
diff --git a/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js b/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js
index 1ab4cd4..f08c742 100644
--- a/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js
+++ b/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js
@@ -10,7 +10,7 @@
 import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {EarconDescription} from '../../../chromevox/common/abstract_earcons.js';
-import {QueueMode} from '../../../chromevox/common/tts_interface.js';
+import {QueueMode} from '../../../chromevox/common/tts_types.js';
 
 import {Curriculum, InteractionMedium, LessonData, MainMenuButtonData, Screen} from './constants.js';
 import {LessonContainer} from './lesson_container.js';
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb
index 2aad828..9251b2ad 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">kieslysitemmerkblokkie</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dollar}other{# dollartekens}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">herhaal</translation>
 <translation id="366419593095697301">Wenk: Druk Escape as jy hierdie tutoriaal wil verlaat.</translation>
 <translation id="3676062394766691318">Nadat jy jou toestel opgestel het, kan jy hierheen terugkom en nog tutoriale kyk deur Search + O en dan T te druk.</translation>
 <translation id="3681531118904532409">Papajaklits</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb
index 56fb597..7fc31a7 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dolar}one{# znak za dolar}few{# znaka za dolar}other{# znakova za dolar}}</translation>
 <translation id="3659787053479271466">upoz</translation>
+<translation id="3661265561216135784">ponovi</translation>
 <translation id="366419593095697301">Savjet: pritisnite tipku Esc ako želite izaći iz ovog vodiča.</translation>
 <translation id="3676062394766691318">Nakon što postavite uređaj, možete se vratiti i pogledati još neke vodiče pritiskom na tipku za pretraživanje i tipku O, a zatim na tipku T.</translation>
 <translation id="3681531118904532409">Papaja</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb
index 691e744..6ce4f17 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb
@@ -424,6 +424,7 @@
 <translation id="3650317109285159359">πλαίσιο επιλογής στοιχείου μενού</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{σύμβολο δολαρίου}other{# σύμβολα δολαρίου}}</translation>
 <translation id="3659787053479271466">ειδοποίηση</translation>
+<translation id="3661265561216135784">επανάληψη</translation>
 <translation id="366419593095697301">Υπόδειξη: Πιέστε Escape, αν θέλετε να εξέλθετε από αυτόν τον οδηγό.</translation>
 <translation id="3676062394766691318">Αφού ρυθμίσετε τη συσκευή σας, μπορείτε να επιστρέψετε και να δείτε περισσότερους οδηγούς, πιέζοντας Αναζήτηση + O και έπειτα T.</translation>
 <translation id="3681531118904532409">Ανοιχτό παπάγιας</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb
index 877ed141..fc7a982 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{علامت دلار}one{# علامت دلار}other{# علامت دلار}}</translation>
 <translation id="3659787053479271466">هشدار</translation>
+<translation id="3661265561216135784">تکرار</translation>
 <translation id="366419593095697301">نکته: اگر مایلید از این آموزش گام‌به‌گام خارج شوید، کلید «گریز» را فشار دهید.</translation>
 <translation id="3676062394766691318">‏پس‌از راه‌اندازی دستگاه، می‌توانید با فشار دادن کلیدهای «جستجو» + O و سپس T، برگردید و آموزش‌های گام‌به‌گام بیشتری را مشاهده کنید.</translation>
 <translation id="3681531118904532409">هلویی روشن</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb
index 9b9632e..6523178 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dollar}one{# dollar sign}other{# na dollar sign}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">ulitin</translation>
 <translation id="366419593095697301">Hint: Pindutin ang Escape kung gusto mong lumabas sa tutorial na ito.</translation>
 <translation id="3676062394766691318">Pagkatapos mong i-set up ang iyong device, puwede kang bumalik at tumingin ng higit pang tutorial sa pamamagitan ng pagpindot sa Search + O, pagkatapos ay T.</translation>
 <translation id="3681531118904532409">Papaya Whip</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb
index e222365..a915713 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">case à cocher d'élément de menu</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{symbole de dollar}one{# symbole de dollar}other{# symboles de dollar}}</translation>
 <translation id="3659787053479271466">alerte</translation>
+<translation id="3661265561216135784">répéter</translation>
 <translation id="366419593095697301">Astuce : Appuyez sur Échap. lorsque vous souhaitez quitter ce tutoriel.</translation>
 <translation id="3676062394766691318">Après avoir configuré votre appareil, vous pourrez revenir pour consulter d'autres tutoriels en appuyant sur Recherche+O, puis sur T.</translation>
 <translation id="3681531118904532409">Chair clair</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb
index dec2f9de..6176f76 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">ptvrdstizb</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{znak dolara}one{# znak dolara}few{# znaka dolara}other{# znakova dolara}}</translation>
 <translation id="3659787053479271466">upoz</translation>
+<translation id="3661265561216135784">ponovi</translation>
 <translation id="366419593095697301">Savjet: pritisnite Escape ako želite napustiti ovaj vodič.</translation>
 <translation id="3676062394766691318">Nakon postavljanja uređaja možete se vratiti i pregledati više vodiča tako što ćete pritisnuti tipku za pretraživanje i O, a zatim T.</translation>
 <translation id="3681531118904532409">Papaja</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb
index 2dafb50..475dbb4 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dollarteken}other{# dollartekens}}</translation>
 <translation id="3659787053479271466">waarschuwing</translation>
+<translation id="3661265561216135784">herhalen</translation>
 <translation id="366419593095697301">Hint: Druk op Escape als je deze tutorial wilt afsluiten.</translation>
 <translation id="3676062394766691318">Na het instellen van je apparaat kun je terugkeren en meer tutorials bekijken door op Zoeken + O en daarna op T te drukken.</translation>
 <translation id="3681531118904532409">Papayacréme</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb
index 8f036d48..77b73bb3 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dollar}other{# dollartegn}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">gjenta</translation>
 <translation id="366419593095697301">Tips: Trykk på Escape hvis du vil avslutte denne veiledningen.</translation>
 <translation id="3676062394766691318">Når du har konfigurert enheten, kan du komme tilbake og se flere veiledninger ved å trykke på søketasten + O og deretter T.</translation>
 <translation id="3681531118904532409">Papayakrem</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb
index 5db8625..5edc205d 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{ଡଲାର୍}other{#ଟି ଡଲାର୍ ଚିହ୍ନ}}</translation>
 <translation id="3659787053479271466">ସତର୍କ</translation>
+<translation id="3661265561216135784">ରିପିଟ କରନ୍ତୁ</translation>
 <translation id="366419593095697301">ସୂଚନା: ଯଦି ଆପଣ ଏହି ଟ୍ୟୁଟୋରିଆଲରୁ ବାହାରି ଯିବାକୁ ଚାହାଁନ୍ତି ତେବେ Escape କୀ'କୁ ଦବାନ୍ତୁ।</translation>
 <translation id="3676062394766691318">ଆପଣ ଆପଣଙ୍କ ଡିଭାଇସ୍ ସେଟ୍ ଅପ୍ କରିବା ପରେ, ଆପଣ ଫେରି ଆସି Search + O, ତା'ପରେ T ଦବାଇ ଅଧିକ ଟ୍ୟୁଟୋରିଆଲ୍ ଦେଖିପାରିବେ।</translation>
 <translation id="3681531118904532409">ପପୟା ହ୍ୱିପ୍</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb
index 11b8426..7e71cd9 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{ਡਾਲਰ}one{# ਡਾਲਰ ਚਿੰਨ੍ਹ}other{# ਡਾਲਰ ਚਿੰਨ੍ਹ}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">ਦੁਹਰਾਓ</translation>
 <translation id="366419593095697301">ਸੰਕੇਤ: ਜੇ ਤੁਸੀਂ ਇਸ ਟਿਊਟੋਰੀਅਲ ਤੋਂ ਬਾਹਰ ਨਿਕਲਣਾ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ Escape ਦਬਾਓ।</translation>
 <translation id="3676062394766691318">ਆਪਣੇ ਡੀਵਾਈਸ ਦਾ ਸੈੱਟਅੱਪ ਕਰਨ ਤੋਂ ਬਾਅਦ, ਤੁਸੀਂ ਵਾਪਸ ਆ ਕੇ Search + O, ਅਤੇ ਫਿਰ T ਦਬਾ ਕੇ ਹੋਰ ਟਿਊਟੋਰੀਅਲ ਦੇਖ ਸਕਦੇ ਹੋ।</translation>
 <translation id="3681531118904532409">ਬਡਮੋਤੀਆ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ro.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ro.xtb
index 2146563f..61058e9 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ro.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ro.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">casetă de selectare element meniu</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dolar}few{# semne dolar}other{# de semne dolar}}</translation>
 <translation id="3659787053479271466">alertă</translation>
+<translation id="3661265561216135784">repetă</translation>
 <translation id="366419593095697301">Sfat: apasă Escape dacă vrei să închizi tutorialul.</translation>
 <translation id="3676062394766691318">După ce configurezi dispozitivul, poți să revii și să urmărești mai multe tutoriale dacă apeși tasta de căutare + O, apoi T.</translation>
 <translation id="3681531118904532409">Roz deschis</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb
index 2b639c4..e39c362 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dolár}few{# znaky dolára}many{# dollar signs}other{# znakov dolára}}</translation>
 <translation id="3659787053479271466">upozornenie</translation>
+<translation id="3661265561216135784">opakovať</translation>
 <translation id="366419593095697301">Tip: Tento návod ukončíte stlačením klávesa Escape.</translation>
 <translation id="3676062394766691318">Po nastavení zariadenia sa môžete vrátiť a pozrieť si ďalšie návody stlačním kombinácie klávesa vyhľadávania + O a potom klávesa T.</translation>
 <translation id="3681531118904532409">Papájová</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb
index 59c2979..8eb6331 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{เครื่องหมายดอลลาร์}other{# เครื่องหมายดอลลาร์}}</translation>
 <translation id="3659787053479271466">การแจ้งเตือน</translation>
+<translation id="3661265561216135784">ทำซ้ำ</translation>
 <translation id="366419593095697301">คำแนะนำ: กดแป้น Escape หากต้องการออกจากบทแนะนำนี้</translation>
 <translation id="3676062394766691318">หลังจากตั้งค่าอุปกรณ์แล้ว คุณกลับมาดูบทแนะนำเพิ่มเติมได้โดยกดแป้น Search + O แล้วกด T</translation>
 <translation id="3681531118904532409">สีชมพูพาพายาวิป</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb
index aa66191..9bd0fb90 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">прапорець пункту меню</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{долар}one{# символ долара}few{# символи долара}many{# символів долара}other{# dollar signs}}</translation>
 <translation id="3659787053479271466">сповіщення</translation>
+<translation id="3661265561216135784">повторити</translation>
 <translation id="366419593095697301">Підказка: натисніть клавішу Escape, щоб вийти з цього навчального посібника.</translation>
 <translation id="3676062394766691318">Коли ви налаштуєте пристрій, можете повернутися й переглянути інші навчальні посібники, натиснувши клавішу пошуку + O, а тоді – T.</translation>
 <translation id="3681531118904532409">Паросток папаї</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb
index 230bd1088..3263e2e 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{1 個貨幣符號}other{# 個貨幣符號}}</translation>
 <translation id="3659787053479271466">通知</translation>
+<translation id="3661265561216135784">重複執行</translation>
 <translation id="366419593095697301">提示:㩒 Escape 掣就可以結束呢個教學課程。</translation>
 <translation id="3676062394766691318">設定裝置後,您可回到這裡查看更多教學課程,只要按下搜尋鍵 + O 鍵,然後按下 T 鍵即可。</translation>
 <translation id="3681531118904532409">蕃木瓜色</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb
index 7b6c060..37fc96a8 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{美元}other{# 個美元符號}}</translation>
 <translation id="3659787053479271466">警示</translation>
+<translation id="3661265561216135784">重複執行</translation>
 <translation id="366419593095697301">提示:如要結束此教學課程,請按下 Esc 鍵。</translation>
 <translation id="3676062394766691318">設定好裝置後,可以回到這裡查看更多教學課程,只要按下搜尋鍵 + O 鍵,然後按下 T 鍵即可返回這裡。</translation>
 <translation id="3681531118904532409">番木瓜色</translation>
diff --git a/chrome/browser/resources/new_tab_page/lens_upload_dialog.html b/chrome/browser/resources/new_tab_page/lens_upload_dialog.html
index 0e2bfd7..e80f01c 100644
--- a/chrome/browser/resources/new_tab_page/lens_upload_dialog.html
+++ b/chrome/browser/resources/new_tab_page/lens_upload_dialog.html
@@ -22,26 +22,36 @@
     width: calc(100% + 8px);
   }
 
+  :host([is-dragging_]),
+  :host([is-loading_]) {
+    --upload-dialog-drag-drop-background: var(--google-blue-50);
+  }
+
   @media (prefers-color-scheme: dark) {
     :host {
+      --upload-dialog-background: var(--google-grey-850);
       --upload-dialog-divider-line-border-top: 1px solid var(--google-grey-800);
-      --upload-dialog-input-box-color: rgba(var(--google-grey-900-rgb), .68);
+      --upload-dialog-drag-drop-background: rgba(var(--google-grey-900-rgb), .68);
       --upload-dialog-drag-drop-border: 1px dashed var(--google-grey-800);
       --upload-dialog-drag-drop-error-background-color: var(--google-red-300);
       --upload-dialog-drag-drop-upload-text-color: var(--google-blue-300);
       --upload-dialog-error-message-color: var(--google-grey-900);
+      --upload-dialog-input-box-background: transparent;
       --upload-dialog-input-box-border-color: var(--google-grey-800);
-      --upload-dialog-input-box-color: rgba(var(--google-grey-900-rgb), .68);
-      --upload-dialog-input-box-placeholder-color: var(--google-grey-700);
+      --upload-dialog-input-box-color: var(--google-grey-100);
+      --upload-dialog-input-box-placeholder-color: var(--google-grey-300);
+      --upload-dialog-input-submit-background: transparent;
       --upload-dialog-input-submit-border-color: var(--google-grey-800);
       --upload-dialog-input-submit-color: var(--google-blue-300);
       --upload-dialog-title-color: var(--google-grey-100);
     }
-  }
 
-  :host([is-dragging_]),
-  :host([is-loading_]) {
-    --upload-dialog-drag-drop-background: var(--google-blue-50);
+    :host([is-dragging_]),
+    :host([is-loading_]) {
+      --upload-dialog-drag-drop-background: rgba(var(--google-blue-300), .24);
+      --upload-dialog-drag-drop-border: 1px dashed var(--google-blue-300);
+      --upload-dialog-drag-drop-title-color: var(--google-blue-300);
+    }
   }
 
   #dialog {
@@ -152,6 +162,12 @@
     text-decoration: underline;
   }
 
+  @media (forced-colors: active) {
+    #uploadText {
+      color: LinkText;
+    }
+  }
+
   #urlUploadContainer {
     box-sizing: border-box;
     display: flex;
@@ -214,6 +230,20 @@
     --upload-dialog-input-box-border-color: var(--google-blue-700);
   }
 
+  @media (prefers-color-scheme: dark) {
+    #inputBox:hover {
+      --upload-dialog-input-box-border-color: var(--google-grey-700);
+    }
+
+    #inputBox:focus {
+      --upload-dialog-input-box-border-color: var(--google-blue-300);
+    }
+
+    #inputBox:active {
+      --upload-dialog-input-box-border-color: var(--google-blue-300);
+    }
+  }
+
   #inputSubmit {
     align-items: center;
     background: var(--upload-dialog-input-submit-background);
@@ -249,6 +279,26 @@
     --upload-dialog-input-submit-color: var(--google-blue-600);
   }
 
+  @media (prefers-color-scheme: dark) {
+    #inputSubmit:hover {
+      --upload-dialog-input-submit-background: rgba(var(--google-blue-300), 0.04);
+      --upload-dialog-input-submit-border-color: var(--google-grey-800);
+      --upload-dialog-input-submit-color: var(--google-blue-100);
+    }
+
+    #inputSubmit:focus {
+      --upload-dialog-input-submit-background: rgba(var(--google-blue-300), 0.12);
+      --upload-dialog-input-submit-border-color: var(--google-blue-100);
+      --upload-dialog-input-submit-color: var(--google-blue-100);
+    }
+
+    #inputSubmit:active {
+      --upload-dialog-input-submit-background: rgba(var(--google-blue-300), 0.10);
+      --upload-dialog-input-submit-border-color: var(--google-grey-800);
+      --upload-dialog-input-submit-color: var(--google-blue-100);
+    }
+  }
+
   #loadingContainer,
   #offlineContainer {
     align-items: center;
diff --git a/chrome/browser/resources/new_tab_page/shared_vars.css b/chrome/browser/resources/new_tab_page/shared_vars.css
index bb585f35..cb1ee77e 100644
--- a/chrome/browser/resources/new_tab_page/shared_vars.css
+++ b/chrome/browser/resources/new_tab_page/shared_vars.css
@@ -8,6 +8,8 @@
  * 'ui/webui/resources/shared_vars_css.m.js'.
  */
 html {
+  --google-grey-850-rgb: 48, 49, 52;  /* #303134 */
+  --google-grey-850: rgb(var(--google-grey-850-rgb));
   --google-red-50-rgb: 252, 232, 230;  /* #fce8e6 */
   --google-red-50: rgb(var(--google-red-50-rgb));
   --google-red-800-rgb: 179, 20, 18;  /* #b31412 */
diff --git a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_combined_dialog_app.html b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_combined_dialog_app.html
index 4f5eb85..b51f5dbf 100644
--- a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_combined_dialog_app.html
+++ b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_combined_dialog_app.html
@@ -30,7 +30,7 @@
 
   <div id="[[stepEnum_.SAVING]]" class="saving-step" slot="view">
     <paper-spinner-lite active></paper-spinner-lite>
-    Saving...
+    $i18n{m1ConsentSavingLabel}
   </div>
 
   <privacy-sandbox-dialog-notice-step id="[[stepEnum_.NOTICE]]" slot="view"
diff --git a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_consent_step.html b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_consent_step.html
index 7f21f376..6b4a7c0 100644
--- a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_consent_step.html
+++ b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_consent_step.html
@@ -2,51 +2,36 @@
 
 <div class="content-area custom-scrollbar">
   <div class="header">
-    <h2>Lorem ipsum Consent</h2>
+    <h2>$i18n{m1ConsentTitle}</h2>
   </div>
   <div class="section cr-secondary-text">
-    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pretium
-    pulvinar metus non mollis. Quisque placerat eget nisl sit amet
-    facilisis.
+    $i18n{m1ConsentDescription1}
   </div>
   <div class="section cr-secondary-text">
-    Nulla in tortor a ligula scelerisque laoreet. Sed sem velit, varius non
-    purus vitae, imperdiet porttitor elit. Integer et libero id metus
-    egestas consequat non a ipsum.
+    $i18n{m1ConsentDescription2}
   </div>
   <div class="section cr-secondary-text">
-    Vestibulum pretium placerat justo vel suscipit. Quisque urna arcu,
-    elementum ut venenatis ornare, consequat ac turpis.
-  </div>
-  <div class="section cr-secondary-text">
-    Proin sed purus vestibulum velit convallis suscipit. Aenean aliquam ut
-    velit eget dapibus. Vestibulum orci risus, consectetur non odio
-    vulputate, mattis dignissim purus. Cras id tempor mi.
+    $i18n{m1ConsentDescription3}
   </div>
   <privacy-sandbox-dialog-learn-more expanded="{{expanded_}}"
-    title="Vestibulum orci risus, consectetur">
-    <div><b>Esed purus vestibulum velit convalli</b></div>
+    title="$i18n{m1ConsentLearnMoreExpandLabel}">
+    <div><b>$i18n{m1ConsentLearnMoreHeading}</b></div>
       <ul class="cr-secondary-text">
-        <li><b>Nulla in tortor:</b> a ligula scelerisque laoreet. Sed sem velit,
-          varius non purus vitae, imperdiet porttitor elit. </li>
-        <li><b>Consectetur adipiscing elit:</b> Duis pretium
-          pulvinar metus non mollis</li>
-        <li><b>Sed purus vestibulum:</b> velit convallis suscipit. Aenean
-          aliquam ut velit eget dapibus. Vestibulum orci risus, consectetur non
-          odio vulputate, mattis dignissim purus. Cras id tempor mi.</li>
+        <li>$i18n{m1ConsentLearnMoreBullet1}</li>
+        <li>$i18n{m1ConsentLearnMoreBullet2}</li>
+        <li>$i18n{m1ConsentLearnMoreBullet3}</li>
       </ul>
-      <div class="cr-secondary-text">Esed purus vestibulum velit convalli</div>
+      <div class="cr-secondary-text">$i18n{m1ConsentLearnMoreLink}</div>
   </privacy-sandbox-dialog-learn-more>
   <div class="section cr-secondary-text">
-    Vestibulum pretium placerat justo vel suscipit. Quisque urna arcu,
-    elementum ut venenatis ornare, consequat ac turpis.
+    $i18n{m1ConsentDescription4}
   </div>
 </div>
 <div class="buttons-container">
   <cr-button id="declineButton" on-click="onConsentDeclined_">
-    No
+    $i18n{m1ConsentDeclineButton}
   </cr-button>
   <cr-button id="confirmButton" on-click="onConsentAccepted_">
-    Yes
+    $i18n{m1ConsentAcceptButton}
   </cr-button>
 </div>
diff --git a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_notice_step.html b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_notice_step.html
index 24024c1..0e8ab3e 100644
--- a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_notice_step.html
+++ b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_notice_step.html
@@ -2,51 +2,37 @@
 
 <div class="content-area custom-scrollbar">
   <div class="header">
-    <h2>Lorem ipsum Notice</h2>
+    <h2>$i18n{m1NoticeEeaTitle}</h2>
   </div>
   <div class="section cr-secondary-text">
-    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pretium
-    pulvinar metus non mollis. Quisque placerat eget nisl sit amet
-    facilisis.
+    $i18n{m1NoticeEeaDescription1}
   </div>
-  <div class="section cr-secondary-text">
-    Nulla in tortor a ligula scelerisque laoreet. Sed sem velit, varius
-    non purus vitae, imperdiet porttitor elit. Integer et libero id metus
-    egestas consequat non a ipsum.
-  </div>
-  <div class="section cr-secondary-text">
-    Vestibulum pretium placerat justo vel suscipit. Quisque urna arcu,
-    elementum ut venenatis ornare, consequat ac turpis.
-  </div>
-  <div class="section cr-secondary-text">
-    Proin sed purus vestibulum velit convallis suscipit. Aenean aliquam
-    ut velit eget dapibus. Vestibulum orci risus, consectetur non odio
-    vulputate, mattis dignissim purus. Cras id tempor mi.
-  </div>
+  <ul class="cr-secondary-text">
+    <li>$i18n{m1NoticeEeaBullet1}</li>
+    <li>$i18n{m1NoticeEeaBullet2}</li>
+  </ul>
   <privacy-sandbox-dialog-learn-more expanded="{{expanded_}}"
-    title="Vestibulum orci risus, consectetur">
-    <div><b>Esed purus vestibulum velit convalli</b></div>
-      <ul class="cr-secondary-text">
-        <li><b>Nulla in tortor:</b> a ligula scelerisque laoreet. Sed sem velit,
-          varius non purus vitae, imperdiet porttitor elit. </li>
-        <li><b>Consectetur adipiscing elit:</b> Duis pretium
-          pulvinar metus non mollis</li>
-        <li><b>Sed purus vestibulum:</b> velit convallis suscipit. Aenean
-          aliquam ut velit eget dapibus. Vestibulum orci risus, consectetur non
-          odio vulputate, mattis dignissim purus. Cras id tempor mi.</li>
-      </ul>
-      <div class="cr-secondary-text">Esed purus vestibulum velit convalli</div>
+    title="$i18n{m1NoticeEeaLearnMoreExpandLabel}">
+    <div><b>$i18n{m1NoticeEeaLearnMoreHeading1}</b></div>
+    <div class="cr-secondary-text">
+      $i18n{m1NoticeEeaLearnMoreDescription}
+    </div>
+    <div><b>$i18n{m1NoticeEeaLearnMoreHeading2}</b></div>
+    <ul class="cr-secondary-text">
+      <li>$i18n{m1NoticeEeaLearnMoreBullet1}</li>
+      <li>$i18n{m1NoticeEeaLearnMoreBullet2}</li>
+      <li>$i18n{m1NoticeEeaLearnMoreBullet3}</li>
+    </ul>
   </privacy-sandbox-dialog-learn-more>
   <div class="section cr-secondary-text">
-    Vestibulum pretium placerat justo vel suscipit. Quisque urna arcu,
-    elementum ut venenatis ornare, consequat ac turpis.
+    $i18n{m1NoticeEeaDescription2}
   </div>
 </div>
 <div class="buttons-container">
   <cr-button id="settingsButton" on-click="onNoticeOpenSettings">
-    Settings
+    $i18n{m1NoticeEeaSettingsButton}
   </cr-button>
   <cr-button id="ackButton" on-click="onNoticeAcknowledge">
-    Ok
+    $i18n{m1NoticeEeaAckButton}
   </cr-button>
 </div>
diff --git a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_notice_dialog_app.html b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_notice_dialog_app.html
index 01d2d12..1071301 100644
--- a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_notice_dialog_app.html
+++ b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_notice_dialog_app.html
@@ -3,54 +3,55 @@
 <div fill-content>
   <div class="content-area custom-scrollbar">
     <div class="header">
-      <h2>Lorem ipsum Standalone Notice</h2>
+      <h2>$i18n{m1NoticeRowTitle}</h2>
     </div>
     <div class="section cr-secondary-text">
-      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pretium
-      pulvinar metus non mollis. Quisque placerat eget nisl sit amet
-      facilisis.
+      $i18n{m1NoticeRowDescription1}
     </div>
     <div class="section cr-secondary-text">
-      Nulla in tortor a ligula scelerisque laoreet. Sed sem velit, varius
-      non purus vitae, imperdiet porttitor elit. Integer et libero id metus
-      egestas consequat non a ipsum.
+      $i18n{m1NoticeRowDescription2}
     </div>
     <div class="section cr-secondary-text">
-      Vestibulum pretium placerat justo vel suscipit. Quisque urna arcu,
-      elementum ut venenatis ornare, consequat ac turpis.
-    </div>
-    <div class="section cr-secondary-text">
-      Proin sed purus vestibulum velit convallis suscipit. Aenean aliquam
-      ut velit eget dapibus. Vestibulum orci risus, consectetur non odio
-      vulputate, mattis dignissim purus. Cras id tempor mi.
+      $i18n{m1NoticeRowDescription3}
     </div>
     <privacy-sandbox-dialog-learn-more expanded="{{expanded_}}"
-      title="Vestibulum orci risus, consectetur">
-      <div><b>Esed purus vestibulum velit convalli</b></div>
-        <ul class="cr-secondary-text">
-          <li><b>Nulla in tortor:</b> a ligula scelerisque laoreet. Sed sem
-            velit, varius non purus vitae, imperdiet porttitor elit. </li>
-          <li><b>Consectetur adipiscing elit:</b> Duis pretium
-            pulvinar metus non mollis</li>
-          <li><b>Sed purus vestibulum:</b> velit convallis suscipit. Aenean
-            aliquam ut velit eget dapibus. Vestibulum orci risus, consectetur
-            non odio vulputate, mattis dignissim purus. Cras id tempor mi.</li>
-        </ul>
-        <div class="cr-secondary-text">
-          Esed purus vestibulum velit convalli
-        </div>
+      title="$i18n{m1NoticeRowLearnMoreExpandLabel}">
+      <div><b>$i18n{m1NoticeRowLearnMoreHeading1}</b></div>
+      <div class="cr-secondary-text">
+        $i18n{m1NoticeRowLearnMoreDescription1}
+      </div>
+      <div><b>$i18n{m1NoticeRowLearnMoreHeading2}</b></div>
+      <div class="cr-secondary-text">
+        $i18n{m1NoticeRowLearnMoreDescription2}
+      </div>
+      <ul class="cr-secondary-text">
+        <li>$i18n{m1NoticeRowLearnMoreBullet1}</li>
+        <li>$i18n{m1NoticeRowLearnMoreBullet2}</li>
+      </ul>
+      <div class="cr-secondary-text">
+        $i18n{m1NoticeRowLearnMoreDescription3}
+      </div>
+      <div class="cr-secondary-text">
+        $i18n{m1NoticeRowLearnMoreDescription4}
+      </div>
+      <div><b>$i18n{m1NoticeRowLearnMoreHeading3}</b></div>
+      <div class="cr-secondary-text">
+        $i18n{m1NoticeRowLearnMoreDescription5}
+      </div>
+      <div class="cr-secondary-text">
+        $i18n{m1NoticeRowLearnMoreDescription6}
+      </div>
     </privacy-sandbox-dialog-learn-more>
     <div class="section cr-secondary-text">
-      Vestibulum pretium placerat justo vel suscipit. Quisque urna arcu,
-      elementum ut venenatis ornare, consequat ac turpis.
+      $i18n{m1NoticeRowDescription4}
     </div>
   </div>
   <div class="buttons-container">
     <cr-button id="settingsButton" on-click="onNoticeOpenSettings">
-      Settings
+      $i18n{m1NoticeRowSettingsButton}
     </cr-button>
     <cr-button id="ackButton" on-click="onNoticeAcknowledge">
-      Ok
+      $i18n{m1NoticeRowAckButton}
     </cr-button>
   </div>
 </div>
diff --git a/chrome/browser/resources/side_panel/BUILD.gn b/chrome/browser/resources/side_panel/BUILD.gn
index 6258d59cb..b7412f4 100644
--- a/chrome/browser/resources/side_panel/BUILD.gn
+++ b/chrome/browser/resources/side_panel/BUILD.gn
@@ -113,6 +113,8 @@
 generate_grd("build_grd") {
   input_files = [
     "history_clusters/history_clusters.html",
+    "images/bookmarks_empty_dark.svg",
+    "images/bookmarks_empty.svg",
     "images/read_later_empty_dark.svg",
     "images/read_later_empty.svg",
     "reading_list/reading_list.html",
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.html b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.html
index d7767a0..bfa0d96c 100644
--- a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.html
+++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.html
@@ -2,6 +2,7 @@
   :host {
     --back-button-size: 14px;
     --border-color: var(--google-grey-300);
+    --empty-state-image: url(../images/bookmarks_empty.svg);
     --label-selected-color: var(--google-blue-50);
     --price-tracking-chip-background: var(--google-green-50);
     --price-tracking-discount-color: var(--google-green-800);
@@ -11,6 +12,7 @@
   @media (prefers-color-scheme: dark) {
     :host {
       --border-color: var(--google-grey-700);
+      --empty-state-image: url(../images/bookmarks_empty_dark.svg);
       --price-tracking-chip-background: var(--google-green-900);
       --price-tracking-discount-color: white;
       --price-tracking-original-color: var(--google-green-200);
@@ -65,6 +67,30 @@
     gap: 4px;
   }
 
+  .empty {
+    align-items: center;
+    display: flex;
+    flex-direction: column;
+    gap: 6px;
+    margin: 0 48px;
+    text-align: center;
+  }
+
+  .empty-body {
+    color: var(--cr-secondary-text-color);
+    font-size: 13px;
+  }
+
+  .empty-image {
+    content: var(--empty-state-image);
+    margin-bottom: 8px;
+  }
+
+  .empty-title {
+    color: var(--cr-primary-text-color);
+    font-size: 15px;
+  }
+
   .folder-sort-row {
     align-items: center;
     display: flex;
@@ -73,10 +99,18 @@
     margin: 14px;
   }
 
-  .footer {
+  .footer-or-empty-state {
     border-top: 1px solid var(--border-color);
   }
 
+  .footer-or-empty-state[empty] {
+    align-items: center;
+    border: none;
+    display: flex;
+    flex-direction: column;
+    gap: 13px;
+  }
+
   .footer-button {
     gap: 8px;
     margin: 8px;
@@ -163,7 +197,7 @@
         aria-label="$i18n{sortMenuA11yLabel}"
         on-click="onShowSortMenuClicked_"></cr-icon-button>
   </div>
-  <div class="bookmarks">
+  <div class="bookmarks" hidden="[[!shownBookmarks_.length]]">
     <template is="dom-repeat" items="[[shownBookmarks_]]">
       <power-bookmark-row id="bookmark-[[item.id]]" bookmark="[[item]]"
           description="[[getBookmarkDescription_(item, descriptions_.*)]]"
@@ -191,7 +225,12 @@
       </power-bookmark-row>
     </template>
   </div>
-  <div class="footer">
+  <div class="footer-or-empty-state" empty$="[[!shownBookmarks_.length]]">
+    <div class="empty" hidden="[[shownBookmarks_.length]]">
+      <div class="empty-image"></div>
+      <div class="empty-title">$i18n{emptyTitle}</div>
+      <div class="empty-body">$i18n{emptyBody}</div>
+    </div>
     <cr-button class="footer-button" on-click="onAddTabClicked_">
       <iron-icon icon="bookmarks:add-tab" class="label-icon"></iron-icon>
       $i18n{addCurrentTab}
diff --git a/chrome/browser/resources/side_panel/customize_chrome/customize_chrome.html b/chrome/browser/resources/side_panel/customize_chrome/customize_chrome.html
index dc1335e6..544615c4 100644
--- a/chrome/browser/resources/side_panel/customize_chrome/customize_chrome.html
+++ b/chrome/browser/resources/side_panel/customize_chrome/customize_chrome.html
@@ -3,10 +3,33 @@
 <html dir="$i18n{textdirection}" lang="$i18n{language}">
   <head>
     <meta charset="utf-8">
-    <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
+    <title>$i18n{title}</title>
+    <meta name="color-scheme" content="light dark">
+    <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
+    <style>
+      html,
+      body {
+        height: 100%;
+        margin: 0;
+        padding: 0;
+        width: 100%;
+      }
+  
+      body {
+        background: white;
+        overflow: auto;
+      }
+  
+      @media (prefers-color-scheme: dark) {
+        body {
+          background: var(--google-grey-900);
+        }
+      }
+    </style>
   </head>
   <body>
     <customize-chrome-app></customize-chrome-app>
+    <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
     <script type="module" src="app.js"></script>
   </body>
 </html>
diff --git a/chrome/browser/resources/side_panel/images/bookmarks_empty.svg b/chrome/browser/resources/side_panel/images/bookmarks_empty.svg
new file mode 100644
index 0000000..b68069fd
--- /dev/null
+++ b/chrome/browser/resources/side_panel/images/bookmarks_empty.svg
@@ -0,0 +1,8 @@
+<svg width="133" height="109" viewBox="0 0 133 109" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.2349 42.2184C16.108 40.4801 17.4841 39 19.227 39H36C37.6569 39 39 40.3431 39 42V44H87.2269C88.7925 44 90.0948 45.2038 90.2177 46.7645L94.7452 104.265C94.8826 106.009 93.5042 107.5 91.7545 107.5H23.789C22.2169 107.5 20.9114 106.286 20.797 104.718L16.2349 42.2184Z" fill="#DADCE0" stroke="#DADCE0" stroke-width="2"/>
+<path d="M102.93 17.6177C104.098 16.2444 106.344 16.9958 106.45 18.7955L107.353 34.0822L121.513 39.9123C123.18 40.5986 123.159 42.9668 121.481 43.624L107.221 49.2065L106.052 64.4752C105.915 66.2727 103.656 66.9849 102.512 65.5914L92.7964 53.7549L77.9138 57.3614C76.1618 57.786 74.7865 55.8579 75.7583 54.3395L84.0132 41.4416L75.9842 28.4019C75.039 26.8668 76.4477 24.963 78.1921 25.418L93.0096 29.2832L102.93 17.6177Z" fill="#FBBC04"/>
+<path d="M35.1349 13.0646C35.2195 11.2638 37.4561 10.4853 38.6405 11.8444L45.2022 19.3741L54.8352 16.7366C56.574 16.2605 58.0056 18.1471 57.079 19.6935L51.9455 28.2609L57.4307 36.6074C58.4208 38.1139 57.0689 40.0584 55.3119 39.6551L45.5775 37.4203L39.3345 45.2162C38.2077 46.6234 35.9406 45.9386 35.7812 44.1428L34.8985 34.1944L25.555 30.666C23.8684 30.0291 23.8192 27.6614 25.4778 26.9549L34.6666 23.0412L35.1349 13.0646Z" fill="#4285F4"/>
+<circle r="5" transform="matrix(-1 0 0 1 75 5)" fill="#E8EAED"/>
+<rect width="7" height="7" rx="2" transform="matrix(-0.852995 0.521919 0.521919 0.852995 5.97095 10)" fill="#34A853"/>
+<path d="M25.7839 46.7663C25.9059 45.2049 27.2085 44 28.7748 44H46C47.6569 44 49 45.3431 49 47V49H96.735C98.4918 49 99.8726 50.5028 99.7243 52.2533L95.2328 105.253C95.1012 106.806 93.8021 108 92.2435 108H24.2435C22.4946 108 21.1164 106.51 21.2526 104.766L25.7839 46.7663Z" fill="white" stroke="#E8EAED" stroke-width="2"/>
+</svg>
diff --git a/chrome/browser/resources/side_panel/images/bookmarks_empty_dark.svg b/chrome/browser/resources/side_panel/images/bookmarks_empty_dark.svg
new file mode 100644
index 0000000..eb4e662
--- /dev/null
+++ b/chrome/browser/resources/side_panel/images/bookmarks_empty_dark.svg
@@ -0,0 +1,8 @@
+<svg width="133" height="109" viewBox="0 0 133 109" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.2349 42.2184C16.108 40.4801 17.4841 39 19.2269 39H36C37.6568 39 39 40.3431 39 42V44H87.2269C88.7924 44 90.0948 45.2038 90.2177 46.7645L94.7452 104.265C94.8826 106.009 93.5042 107.5 91.7545 107.5H23.789C22.2169 107.5 20.9114 106.286 20.7969 104.718L16.2349 42.2184Z" fill="#80868B" stroke="#80868B" stroke-width="2"/>
+<path d="M102.93 17.6177C104.098 16.2444 106.344 16.9958 106.45 18.7955L107.353 34.0822L121.513 39.9123C123.18 40.5986 123.159 42.9668 121.481 43.624L107.221 49.2065L106.052 64.4752C105.915 66.2727 103.656 66.9849 102.512 65.5914L92.7964 53.7549L77.9138 57.3614C76.1618 57.786 74.7865 55.8579 75.7583 54.3395L84.0132 41.4416L75.9842 28.4019C75.039 26.8668 76.4477 24.963 78.1921 25.418L93.0096 29.2832L102.93 17.6177Z" fill="#FBBC04"/>
+<path d="M35.1349 13.0646C35.2195 11.2638 37.4561 10.4853 38.6405 11.8444L45.2022 19.3741L54.8352 16.7366C56.574 16.2605 58.0056 18.1471 57.079 19.6935L51.9455 28.2609L57.4307 36.6074C58.4208 38.1139 57.0689 40.0584 55.3118 39.6551L45.5775 37.4203L39.3345 45.2162C38.2076 46.6234 35.9405 45.9386 35.7812 44.1428L34.8985 34.1944L25.555 30.666C23.8684 30.0291 23.8192 27.6614 25.4778 26.9549L34.6666 23.0412L35.1349 13.0646Z" fill="#4285F4"/>
+<circle r="5" transform="matrix(-1 0 0 1 75 5)" fill="#5F6368"/>
+<rect width="7" height="7" rx="2" transform="matrix(-0.852995 0.521919 0.521919 0.852995 5.97096 10)" fill="#34A853"/>
+<path d="M25.7839 46.7663C25.9059 45.2049 27.2085 44 28.7748 44H46C47.6568 44 49 45.3431 49 47V49H96.735C98.4918 49 99.8726 50.5028 99.7243 52.2533L95.2328 105.253C95.1011 106.806 93.8021 108 92.2435 108H24.2435C22.4945 108 21.1164 106.51 21.2526 104.766L25.7839 46.7663Z" fill="#202124" stroke="#9AA0A6" stroke-width="2"/>
+</svg>
diff --git a/chrome/browser/safety_check/android/javatests/src/org/chromium/chrome/browser/safety_check/SafetyCheckMediatorTest.java b/chrome/browser/safety_check/android/javatests/src/org/chromium/chrome/browser/safety_check/SafetyCheckMediatorTest.java
index 626825a..c15c18d 100644
--- a/chrome/browser/safety_check/android/javatests/src/org/chromium/chrome/browser/safety_check/SafetyCheckMediatorTest.java
+++ b/chrome/browser/safety_check/android/javatests/src/org/chromium/chrome/browser/safety_check/SafetyCheckMediatorTest.java
@@ -212,8 +212,7 @@
                 return null;
             })
                     .when(mPasswordCheckupHelper)
-                    .getBreachedCredentialsCount(
-                            anyInt(), any(java.util.Optional.class), any(Callback.class), any());
+                    .getBreachedCredentialsCount(anyInt(), any(), any(Callback.class), any());
             when(mPasswordStoreBridge.getPasswordStoreCredentialsCount()).thenReturn(passwordCount);
         } else {
             doAnswer(invocation -> {
@@ -238,8 +237,8 @@
             return null;
         })
                 .when(mPasswordCheckupHelper)
-                .getBreachedCredentialsCount(anyInt(), any(java.util.Optional.class),
-                        any(Callback.class), any(Callback.class));
+                .getBreachedCredentialsCount(
+                        anyInt(), any(), any(Callback.class), any(Callback.class));
     }
 
     private void captureRunPasswordCheckCallback() {
@@ -250,8 +249,8 @@
             return null;
         })
                 .when(mPasswordCheckupHelper)
-                .runPasswordCheckupInBackground(anyInt(), any(java.util.Optional.class),
-                        any(Callback.class), any(Callback.class));
+                .runPasswordCheckupInBackground(
+                        anyInt(), any(), any(Callback.class), any(Callback.class));
     }
 
     private void configureMockSyncService() {
diff --git a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java b/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java
index d46000a9..919020f 100644
--- a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java
+++ b/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java
@@ -24,7 +24,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
-import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.Log;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.browser.profiles.Profile;
@@ -232,7 +231,7 @@
                 } else if (templateUrl2.equals(defaultSearchEngine)) {
                     return 1;
                 } else {
-                    return ApiCompatibilityUtils.compareLong(
+                    return Long.compare(
                             templateUrl2.getLastVisitedTime(), templateUrl1.getLastVisitedTime());
                 }
             }
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanMediator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanMediator.java
index 5395c8e4..f29dab7 100644
--- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanMediator.java
+++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanMediator.java
@@ -23,7 +23,6 @@
 
 import org.chromium.base.BuildInfo;
 import org.chromium.base.Callback;
-import org.chromium.base.Consumer;
 import org.chromium.base.IntentUtils;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.base.task.AsyncTask;
@@ -42,6 +41,7 @@
 
 import java.lang.ref.WeakReference;
 import java.nio.ByteBuffer;
+import java.util.function.Consumer;
 
 /**
  * QrCodeScanMediator is in charge of calculating and setting values for QrCodeScanViewProperties.
diff --git a/chrome/browser/signin/signin_features.cc b/chrome/browser/signin/signin_features.cc
index 1f85f411..ee459b43 100644
--- a/chrome/browser/signin/signin_features.cc
+++ b/chrome/browser/signin/signin_features.cc
@@ -5,13 +5,6 @@
 #include "chrome/browser/signin/signin_features.h"
 #include "base/feature_list.h"
 
-#if BUILDFLAG(IS_ANDROID)
-// Enables the FamilyLink feedback collection in Chrome Settings feedback tool.
-BASE_FEATURE(kEnableFamilyInfoFeedback,
-             "EnableFamilyInfoFeedback",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-#endif
-
 #if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID)
 // Enables the new style, "For You" First Run Experience
 BASE_FEATURE(kForYouFre, "ForYouFre", base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/chrome/browser/signin/signin_features.h b/chrome/browser/signin/signin_features.h
index d730306..cec68f6 100644
--- a/chrome/browser/signin/signin_features.h
+++ b/chrome/browser/signin/signin_features.h
@@ -7,10 +7,6 @@
 
 #include "base/feature_list.h"
 
-#if BUILDFLAG(IS_ANDROID)
-BASE_DECLARE_FEATURE(kEnableFamilyInfoFeedback);
-#endif
-
 #if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID)
 BASE_DECLARE_FEATURE(kForYouFre);
 #endif
diff --git a/chrome/browser/sync/test/integration/single_client_app_list_sync_test.cc b/chrome/browser/sync/test/integration/single_client_app_list_sync_test.cc
index 41b743e7..860d7f6 100644
--- a/chrome/browser/sync/test/integration/single_client_app_list_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_app_list_sync_test.cc
@@ -17,7 +17,6 @@
 #include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h"
 #include "chrome/browser/ui/app_list/chrome_app_list_item.h"
 #include "chrome/browser/ui/app_list/internal_app/internal_app_metadata.h"
-#include "chrome/browser/ui/app_list/page_break_constants.h"
 #include "components/sync/base/user_selectable_type.h"
 #include "components/sync/driver/sync_service.h"
 #include "components/sync/driver/sync_user_settings.h"
@@ -152,13 +151,10 @@
   app_list::AppListSyncableService* service =
       app_list::AppListSyncableServiceFactory::GetForProfile(verifier());
 
-  // Default apps: chrome + web store + internal apps + number of default page
-  // breaks.
+  // Default apps: chrome + web store + internal apps .
   const size_t kNumDefaultApps =
-      2u +
-      app_list::GetNumberOfInternalAppsShowInLauncherForTest(
-          /*apps_name=*/nullptr, GetProfile(0)) +
-      app_list::kDefaultPageBreakAppIdsLength;
+      2u + app_list::GetNumberOfInternalAppsShowInLauncherForTest(
+               /*apps_name=*/nullptr, GetProfile(0));
   ASSERT_EQ(kNumApps + kNumDefaultApps, service->GetNumSyncItemsForTest());
 
   ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait());
diff --git a/chrome/browser/sync/test/integration/sync_app_list_helper.cc b/chrome/browser/sync/test/integration/sync_app_list_helper.cc
index 8ec5b4dd..4ad030b 100644
--- a/chrome/browser/sync/test/integration/sync_app_list_helper.cc
+++ b/chrome/browser/sync/test/integration/sync_app_list_helper.cc
@@ -41,15 +41,6 @@
   for (Profile* profile : test_->GetAllProfiles()) {
     extensions::ExtensionSystem::Get(profile)->InitForRegularProfile(
         true /* extensions_enabled */);
-    if (test_->UseVerifier() && profile == test_->verifier()) {
-      // The default page break items are only installed for first-time users.
-      // The verifier() profile doesn't get initialized with remote sync data,
-      // and hence the default page breaks are not installed for it. We have to
-      // install them manually to avoid a mismatch when comparing the verifier()
-      // against other client profiles.
-      app_list::AppListSyncableServiceFactory::GetForProfile(profile)
-          ->InstallDefaultPageBreaksForTest();
-    }
   }
 
   setup_completed_ = true;
diff --git a/chrome/browser/tab_contents/web_contents_collection.cc b/chrome/browser/tab_contents/web_contents_collection.cc
index 1c15cf7..c9755ebf 100644
--- a/chrome/browser/tab_contents/web_contents_collection.cc
+++ b/chrome/browser/tab_contents/web_contents_collection.cc
@@ -30,9 +30,9 @@
     observer_->RenderProcessGone(web_contents(), status);
   }
 
-  void NavigationEntryCommitted(
-      const content::LoadCommittedDetails& load_details) override {
-    observer_->NavigationEntryCommitted(web_contents(), load_details);
+  void DidFinishNavigation(
+      content::NavigationHandle* navigation_handle) override {
+    observer_->DidFinishNavigation(web_contents(), navigation_handle);
   }
 
   // The observer that callbacks should forward to, annotating the
diff --git a/chrome/browser/tab_contents/web_contents_collection.h b/chrome/browser/tab_contents/web_contents_collection.h
index 60e50e2..eb4208f 100644
--- a/chrome/browser/tab_contents/web_contents_collection.h
+++ b/chrome/browser/tab_contents/web_contents_collection.h
@@ -28,9 +28,9 @@
     virtual void WebContentsDestroyed(content::WebContents* web_contents) {}
     virtual void RenderProcessGone(content::WebContents* web_contents,
                                    base::TerminationStatus status) {}
-    virtual void NavigationEntryCommitted(
+    virtual void DidFinishNavigation(
         content::WebContents* web_contents,
-        const content::LoadCommittedDetails& load_details) {}
+        content::NavigationHandle* navigation_handle) {}
 
    protected:
     virtual ~Observer() = default;
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 0af9078..b25ca2e 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -2047,8 +2047,6 @@
       "app_list/md_icon_normalizer.h",
       "app_list/page_break_app_item.cc",
       "app_list/page_break_app_item.h",
-      "app_list/page_break_constants.cc",
-      "app_list/page_break_constants.h",
       "app_list/reorder/app_list_reorder_core.cc",
       "app_list/reorder/app_list_reorder_core.h",
       "app_list/reorder/app_list_reorder_delegate.h",
@@ -4703,8 +4701,6 @@
       "views/omnibox/remove_suggestion_bubble.h",
       "views/omnibox/rounded_omnibox_results_frame.cc",
       "views/omnibox/rounded_omnibox_results_frame.h",
-      "views/overlay/back_to_tab_image_button.cc",
-      "views/overlay/back_to_tab_image_button.h",
       "views/overlay/back_to_tab_label_button.cc",
       "views/overlay/back_to_tab_label_button.h",
       "views/overlay/close_image_button.cc",
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
index f37b72e3..bffc530 100644
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
@@ -18,7 +18,6 @@
 import org.chromium.base.Callback;
 import org.chromium.base.CallbackController;
 import org.chromium.base.jank_tracker.JankTracker;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.OneshotSupplierImpl;
 import org.chromium.base.supplier.Supplier;
@@ -58,6 +57,7 @@
 import org.chromium.ui.modaldialog.ModalDialogManager;
 
 import java.util.List;
+import java.util.function.BooleanSupplier;
 
 /**
  * The public API of the location bar component. Location bar responsibilities are:
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
index f07053c..0c517ab 100644
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
@@ -28,7 +28,6 @@
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.base.metrics.TimingMetric;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.supplier.OneshotSupplier;
@@ -83,6 +82,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.BooleanSupplier;
 
 /**
  * Mediator for the LocationBar component. Intended location for LocationBar business logic;
diff --git a/chrome/browser/ui/android/searchactivityutils/java/src/org/chromium/chrome/browser/ui/searchactivityutils/SearchActivityPreferencesManager.java b/chrome/browser/ui/android/searchactivityutils/java/src/org/chromium/chrome/browser/ui/searchactivityutils/SearchActivityPreferencesManager.java
index a31dd90..9d0a966 100644
--- a/chrome/browser/ui/android/searchactivityutils/java/src/org/chromium/chrome/browser/ui/searchactivityutils/SearchActivityPreferencesManager.java
+++ b/chrome/browser/ui/android/searchactivityutils/java/src/org/chromium/chrome/browser/ui/searchactivityutils/SearchActivityPreferencesManager.java
@@ -17,7 +17,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.ObserverList;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.library_loader.LibraryLoader;
@@ -39,6 +38,7 @@
 import org.chromium.url.GURL;
 
 import java.util.Arrays;
+import java.util.function.Consumer;
 
 /**
  * Facilitates access to and updates of the cached SearchActivityPreferences.
diff --git a/chrome/browser/ui/android/searchactivityutils/java/src/org/chromium/chrome/browser/ui/searchactivityutils/SearchActivityPreferencesManagerTest.java b/chrome/browser/ui/android/searchactivityutils/java/src/org/chromium/chrome/browser/ui/searchactivityutils/SearchActivityPreferencesManagerTest.java
index 5ccccb33..087afc37 100644
--- a/chrome/browser/ui/android/searchactivityutils/java/src/org/chromium/chrome/browser/ui/searchactivityutils/SearchActivityPreferencesManagerTest.java
+++ b/chrome/browser/ui/android/searchactivityutils/java/src/org/chromium/chrome/browser/ui/searchactivityutils/SearchActivityPreferencesManagerTest.java
@@ -28,7 +28,6 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.base.test.BaseJUnit4ClassRunner;
 import org.chromium.base.test.UiThreadTest;
@@ -46,6 +45,7 @@
 
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
 
 /**
  * Tests for {@link SearchActivityPreferencesManager}.
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
index 4d8303e..60c525f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Hou jou veilig op Chrome en kan gebruik word om jou sekuriteit in ander Google-programme te verbeter wanneer jy aangemeld is</translation>
 <translation id="3429160811076349561">Proeflopiekenmerke is af</translation>
 <translation id="3435465986463792564">Het jy baie vensters? Jy kan hulle van hier af bestuur</translation>
+<translation id="3435738964857648380">Sekuriteit</translation>
 <translation id="3443221991560634068">Herlaai die huidige bladsy</translation>
 <translation id="3444179773590444986">Deel terugvoer oor donkertema vir werwe?</translation>
 <translation id="3452832259067974318">Om jou privaatheid te beskerm, sal Chrome nie outomaties jou wagwoord in hierdie veld invul nie.</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Wagwoorde word op hierdie toestel in Wagwoordbestuurder gestoor</translation>
 <translation id="4766678251456904326">Voeg rekening by toestel</translation>
+<translation id="4769095993849849966">Nuwe lêernaam</translation>
 <translation id="4787736314074622408">Wil jy <ph name="ITEM_TITLE" /> uitvee?</translation>
 <translation id="4791358705705538979">Help jou om oral op die web take te voltooi, soos by betaalpunte</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Kan nie QR-kode skep nie</translation>
 <translation id="5039804452771397117">Laat toe</translation>
+<translation id="5040262127954254034">Privaatheid</translation>
 <translation id="504456571576643789">Dinge om in ag te neem</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Ander soorte aktiwiteit<ph name="END_LINK1" /> sal dalk in jou Google-rekening gestoor word wanneer jy aangemeld is. Jy kan hulle enige tyd uitvee.</translation>
 <translation id="506254248375231072">Geen oortjies nie</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
index 9621a68..dd6c009 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">በChrome ላይ ደህንነትዎን ይጠብቃል፣ እና በመለያ በገቡባቸው ሌሎች የGoogle መተግበሪያዎች ላይ ደህንነትዎን ለማሻሻል ስራ ላይ ሊውል ይችላል።</translation>
 <translation id="3429160811076349561">የሙከራ ባህሪዎች ጠፍተዋል</translation>
 <translation id="3435465986463792564">ብዙ መስኮቶች አሉዎት? ከዚህ ሆነው እነሱን ማስተዳደር ይችላሉ።</translation>
+<translation id="3435738964857648380">የደህንነት ጥበቃ</translation>
 <translation id="3443221991560634068">የአሁኑን ገጽ ዳግም ጫን</translation>
 <translation id="3444179773590444986">ለጣቢያዎች ጠቆር ያለ ገጽታ ላይ ግብረመልስ ይጋራ?</translation>
 <translation id="3452832259067974318">የእርስዎን ግላዊነት ለመጠበቅ፣ Chrome በዚህ መስክ ላይ የእርስዎን የይለፍ ቃል በራስ-ሰር አይሞላም።</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">መከተል አልተቻለም የሆነ ችግር ተፈጥሯል።</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ሰዓ}one{# ሰዓቶች}other{# ሰዓቶች}}</translation>
 <translation id="4035877632587724847">አትፍቀድ</translation>
+<translation id="4036177530563778041">በቀላሉ ካቆሙበት ቦታ ይቀጥሉ</translation>
 <translation id="4045764304651014138">የአጠቃቀም ውሂብ</translation>
 <translation id="405399507749852140">በማንኛውም ጣቢያ ላይ ዋጋው ቢቀንስ ማንቂያዎችን ያግኙ</translation>
 <translation id="4056223980640387499">ቀይ ቡናማ</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">ሰሪፍ</translation>
 <translation id="5032430150487044192">የQR ኮድ መፍጠር አልተቻለም</translation>
 <translation id="5039804452771397117">ፍቀድ</translation>
+<translation id="5040262127954254034">ግላዊነት</translation>
 <translation id="504456571576643789">ከግምት ውስጥ መግባት ያለባቸው ነገሮች</translation>
 <translation id="5054455334322721892">በመለያ ሲገቡ <ph name="BEGIN_LINK1" />ሌሎች የእንቅስቃሴ ዓይነቶች<ph name="END_LINK1" /> በGoogle መለያዎ ውስጥ ሊቀመጡ ይችላሉ። በማንኛውም ጊዜ ሊሰርዟቸው ይችላሉ።</translation>
 <translation id="506254248375231072">ምንም ትሮች የሉም</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">የQR ኮድ ወይም የአሞሌ ኮድ በዚህ ክፈፍ ውስጥ ያምጡት</translation>
 <translation id="7029809446516969842">የይለፍ ቃላት</translation>
 <translation id="7030304022046916278">ዩአርኤሎችን ለመፈተሽ ወደ ደህንነቱ የተጠበቀ አሰሳ ይልካቸዋል</translation>
+<translation id="7030585293819777123">የመጨረሻ ተግባርዎ ከቆመበት ይቀጥል?</translation>
 <translation id="7037830628447527439">በእርስዎ Google መለያ ወደ Chrome ይግቡ</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">የምስል መግለጫዎችን ያግኙ?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
index 60e335d3..d15b3dc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
@@ -455,6 +455,7 @@
 <translation id="3428747202529429621">‏يوفّر لك هذا الوضع حماية في Chrome، ويمكن استخدامه لتحسين مستوى أمانك في تطبيقات Google الأخرى عندما تكون مسجلًا دخولك.</translation>
 <translation id="3429160811076349561">تم إيقاف ميزات الإصدار التجريبي.</translation>
 <translation id="3435465986463792564">هل لديك العديد من النوافذ؟ يمكنك إدارتها من هنا.</translation>
+<translation id="3435738964857648380">أمن المعلومات</translation>
 <translation id="3443221991560634068">إعادة تحميل الصفحة الحالية</translation>
 <translation id="3444179773590444986">هل تريد مشاركة ملاحظاتك وآرائك حول وضع "المظهر الداكن" للمواقع الإلكترونية؟</translation>
 <translation id="3452832259067974318">‏لحماية خصوصيتك، لن يملء متصفِّح Chrome تلقائيًا كلمة المرور في هذا الحقل.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">يتعذّر إنشاء رمز الاستجابة السريعة.</translation>
 <translation id="5039804452771397117">سماح</translation>
+<translation id="5040262127954254034">الخصوصية</translation>
 <translation id="504456571576643789">ملاحظات مهمّة</translation>
 <translation id="5054455334322721892">‏قد يتم حفظ <ph name="BEGIN_LINK1" />بيانات الأنشطة الأخرى<ph name="END_LINK1" /> في حسابك على Google عند تسجيل الدخول إليه. ويمكنك حذفها في أي وقت.</translation>
 <translation id="506254248375231072">ما مِن علامات تبويب</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
index 991d1e2..3519a61 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">আপোনাক Chromeত সুৰক্ষিত কৰি ৰাখে আৰু আপুনি ছাইন ইন হৈ থকা সময়ত অন্য Google এপ্‌সমূহত আপোনাৰ সুৰক্ষা উন্নত কৰিবলৈ ব্যৱহাৰ কৰিব পাৰে</translation>
 <translation id="3429160811076349561">ট্ৰায়েলৰ সুবিধা অফ আছে</translation>
 <translation id="3435465986463792564">বহুতো ৱিণ্ড’ পাইছেনে? আপুনি ইয়াৰ পৰা সেইবোৰ পৰিচালনা কৰিব পাৰে</translation>
+<translation id="3435738964857648380">সুৰক্ষা</translation>
 <translation id="3443221991560634068">বর্তমানৰ পৃষ্ঠাটো পুনৰ ল’ড কৰক</translation>
 <translation id="3444179773590444986">ছাইটৰ বাবে গাঢ় ৰঙৰ থীম সম্পৰ্কে মতামত শ্বেয়াৰ কৰিব নেকি?</translation>
 <translation id="3452832259067974318">আপোনাৰ গোপনীয়তা সুৰক্ষিত কৰিবলৈ, Chromeএ এই ক্ষেত্ৰখনত আপোনাৰ পাছৱৰ্ড স্বয়ংক্ৰিয়ভাৱে পূৰ নকৰে৷</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">ছেৰিফ</translation>
 <translation id="5032430150487044192">কিউআৰ ক’ড সৃষ্টি কৰিব নোৱাৰি</translation>
 <translation id="5039804452771397117">অনুমতি দিয়ক</translation>
+<translation id="5040262127954254034">গোপনীয়তা</translation>
 <translation id="504456571576643789">বিবেচনা কৰিব লগা বিষয়</translation>
 <translation id="5054455334322721892">আপুনি ছাইন ইন হৈ থকাৰ সময়ত আপোনাৰ Google একাউণ্টত <ph name="BEGIN_LINK1" />অন্য প্ৰকাৰৰ কাৰ্যকলাপ<ph name="END_LINK1" /> ছেভ কৰা হ’ব পাৰে। আপুনি যিকোনো সময়তে সেইবোৰ মচিব পাৰে।</translation>
 <translation id="506254248375231072">কোনো টেব নাই</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
index 1df1dc40..065780d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Daxil olduğunuzda Chrome'da sizi qoruyur və digər Google tətbiqlərində təhlükəsizliyinizi artırmaq üçün istifadə edilə bilər</translation>
 <translation id="3429160811076349561">Sınaq funksiyaları deaktivdir</translation>
 <translation id="3435465986463792564">Çox sayda pəncərə var? Onları buradan idarə edə bilərsiniz</translation>
+<translation id="3435738964857648380">Təhlükəsizlik</translation>
 <translation id="3443221991560634068">Cari səhifəni yenidən yükləyin</translation>
 <translation id="3444179773590444986">Saytlar üçün tünd tema barədə rəy paylaşılsın?</translation>
 <translation id="3452832259067974318">Chrome məxfiliyi qorumaq üçün parolu bu sahədə avtomatik doldurmayacaq.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR kod yaratmaq olmur</translation>
 <translation id="5039804452771397117">İcazə verin</translation>
+<translation id="5040262127954254034">Məxfilik</translation>
 <translation id="504456571576643789">Nəzərə alınmalı amillər</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Digər fəaliyyət formaları<ph name="END_LINK1" /> daxil olduğunuz zaman Google Hesabınızda saxlanıla bilər. İstənilən zaman onları silə bilərsiniz.</translation>
 <translation id="506254248375231072">Tab yoxdur</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
index 9f3e8e3..2d37c06 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Абараняе вас у браўзеры Chrome і можа выкарыстоўвацца для паляпшэння бяспекі ў іншых праграмах Google, калі вы ўвайшлі ва ўліковы запіс</translation>
 <translation id="3429160811076349561">Пробныя функцыі выключаны</translation>
 <translation id="3435465986463792564">Адкрылі шмат акон? Кіраваць імі можна тут</translation>
+<translation id="3435738964857648380">Бяспека</translation>
 <translation id="3443221991560634068">Перазагрузіць бягучую старонку</translation>
 <translation id="3444179773590444986">Пакінуць водгук на цёмную тэму для сайтаў?</translation>
 <translation id="3452832259067974318">У мэтах аховы вашай прыватнасці Chrome не будзе аўтаматычна запаўняць пароль у гэтым полі.</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">відэа</translation>
 <translation id="4766313118839197559">Паролі захоўваюцца ў Менеджары пароляў на гэтай прыладзе.</translation>
 <translation id="4766678251456904326">Дадаць уліковы запіс на прыладу</translation>
+<translation id="4769095993849849966">Новая назва файла</translation>
 <translation id="4787736314074622408">Выдаліць файл "<ph name="ITEM_TITLE" />"?</translation>
 <translation id="4791358705705538979">Дапамагае вам выконваць задачы ў інтэрнэце (напрыклад, афармляць заказы)</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">З засечкамі</translation>
 <translation id="5032430150487044192">Не ўдалося стварыць QR-код</translation>
 <translation id="5039804452771397117">Дазволіць</translation>
+<translation id="5040262127954254034">Прыватнасць</translation>
 <translation id="504456571576643789">Інфармацыя для разгляду</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Іншыя дзеянні<ph name="END_LINK1" /> могуць захоўвацца ва Уліковым запісе Google, у які вы ўвайшлі. Іх можна выдаліць у любы час.</translation>
 <translation id="506254248375231072">Няма ўкладак</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
index 09df5e6..3b686f7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Осигурява безопасността ви в Chrome и може да се използва с цел подобряване на сигурността ви в други приложения на Google, докато сте в профила си.</translation>
 <translation id="3429160811076349561">Функциите за изпробване са изключени</translation>
 <translation id="3435465986463792564">Отворили сте много прозорци? Можете да ги управлявате оттук</translation>
+<translation id="3435738964857648380">Сигурност</translation>
 <translation id="3443221991560634068">Презареждане на текущата страница</translation>
 <translation id="3444179773590444986">Искате ли да споделите отзиви за тъмната тема за сайтовете?</translation>
 <translation id="3452832259067974318">За да защити поверителността ви, Chrome няма да попълни автоматично паролата ви в това поле.</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Серифен</translation>
 <translation id="5032430150487044192">Не може да се създаде QR код</translation>
 <translation id="5039804452771397117">Разрешаване</translation>
+<translation id="5040262127954254034">Поверителност</translation>
 <translation id="504456571576643789">Имайте предвид следното</translation>
 <translation id="5054455334322721892">Възможно е <ph name="BEGIN_LINK1" />други видове активност<ph name="END_LINK1" /> да се запазват в профила ви в Google, когато сте влезли в него. Можете да изтриете съответните данни по всяко време.</translation>
 <translation id="506254248375231072">Няма раздели</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
index 8767f5d..4eb5949 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">সাইন-ইন করা অবস্থায় আপনাকে Chrome-এ নিরাপদ রাখতে এবং হয়ত অন্যান্য Google অ্যাপে নিরাপত্তা আরও ভাল করতে এই মোডটি ব্যবহার করা হয়</translation>
 <translation id="3429160811076349561">ট্রায়াল ফিচার বন্ধ করা আছে</translation>
 <translation id="3435465986463792564">অনেক উইন্ডো খোলা আছে? আপনি সেগুলি এখানে ম্যানেজ করতে পারেন</translation>
+<translation id="3435738964857648380">নিরাপত্তা</translation>
 <translation id="3443221991560634068">বর্তমান পৃষ্ঠাটি রিলোড করুন</translation>
 <translation id="3444179773590444986">সাইটের জন্য ডার্ক থিম সম্পর্কিত মতামত শেয়ার করতে চান?</translation>
 <translation id="3452832259067974318">আপনার গোপনীয়তা রক্ষার জন্য, Chrome এই ক্ষেত্রে আপনার পাসওয়ার্ডটি আপনা-আপনি পূরণ করবে না।</translation>
@@ -747,6 +748,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR কোড তৈরি করা যায়নি</translation>
 <translation id="5039804452771397117">অনুমতি দিন</translation>
+<translation id="5040262127954254034">গোপনীয়তা</translation>
 <translation id="504456571576643789">যা যা দেখে নেওয়া প্রয়োজন</translation>
 <translation id="5054455334322721892">আপনি সাইন-ইন করে থাকলে <ph name="BEGIN_LINK1" />অন্যান্য অ্যাক্টিভিটি<ph name="END_LINK1" /> আপনার Google অ্যাকাউন্টে সেভ হয়ে যেতে পারে। আপনি যেকোনও সময় সেগুলি মুছে দিতে পারেন।</translation>
 <translation id="506254248375231072">কোনও ট্যাব নেই</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
index 3f1fbf7..848ef4f6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Štiti vas na Chromeu i može se koristiti da poboljša vašu sigurnost u drugim Google aplikacijama kada ste prijavljeni</translation>
 <translation id="3429160811076349561">Funkcije probnog perioda su isključene</translation>
 <translation id="3435465986463792564">Imate mnogo prozora? Možete upravljati njima odavde</translation>
+<translation id="3435738964857648380">Sigurnost</translation>
 <translation id="3443221991560634068">Ponovo učitajte trenutnu stranicu</translation>
 <translation id="3444179773590444986">Dijeliti povratne informacije o tamnoj temi za web lokacije?</translation>
 <translation id="3452832259067974318">Radi zaštite vaše privatnosti, Chrome neće automatski popunjavati vašu lozinku u ovom polju.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Nije moguće kreirati QR kôd</translation>
 <translation id="5039804452771397117">Dozvoli</translation>
+<translation id="5040262127954254034">Privatnost</translation>
 <translation id="504456571576643789">Stvari za razmatranje</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Ostali oblici aktivnosti<ph name="END_LINK1" /> se mogu pohranjivati na vaš Google račun kada ste prijavljeni. Možete ih izbrisati bilo kada.</translation>
 <translation id="506254248375231072">Nema kartica</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
index c250678..7f1971d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Et protegeix a Chrome i és possible que s'utilitzi per millorar la teva seguretat en altres aplicacions de Google quan tinguis la sessió iniciada</translation>
 <translation id="3429160811076349561">Les funcions de prova estan desactivades</translation>
 <translation id="3435465986463792564">Tens moltes finestres obertes? Pots gestionar-les aquí.</translation>
+<translation id="3435738964857648380">Seguretat</translation>
 <translation id="3443221991560634068">Torna a carregar la pàgina actual</translation>
 <translation id="3444179773590444986">Vols compartir suggeriments sobre el tema fosc per als llocs web?</translation>
 <translation id="3452832259067974318">Amb la finalitat de protegir la teva privadesa, Chrome no emplenarà automàticament la contrasenya en aquest camp.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">No es pot crear el codi QR</translation>
 <translation id="5039804452771397117">Permet</translation>
+<translation id="5040262127954254034">Privadesa</translation>
 <translation id="504456571576643789">Aspectes que cal tenir en compte</translation>
 <translation id="5054455334322721892">És possible que es desin <ph name="BEGIN_LINK1" />altres tipus d'activitats<ph name="END_LINK1" /> al teu Compte de Google quan tinguis la sessió iniciada. Les pots suprimir en qualsevol moment.</translation>
 <translation id="506254248375231072">No hi ha cap pestanya</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
index 3457755..638864c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Zajišťuje vám bezpečí v Chromu a může zvýšit vaši bezpečnost v jiných aplikacích Google, když jste přihlášeni.</translation>
 <translation id="3429160811076349561">Zkušební funkce jsou vypnuté</translation>
 <translation id="3435465986463792564">Otevřeli jste si víc oken? Tady je můžete spravovat</translation>
+<translation id="3435738964857648380">Zabezpečení</translation>
 <translation id="3443221991560634068">Znovu načíst aktuální stránku</translation>
 <translation id="3444179773590444986">Poskytnout zpětnou vazbu k tmavému motivu pro weby?</translation>
 <translation id="3452832259067974318">Aby Chrome chránil vaše soukromí, nebude do tohoto pole automaticky vyplňovat heslo.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">Sledování nelze zapnout. Něco se pokazilo.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}few{# h}many{# h}other{# h}}</translation>
 <translation id="4035877632587724847">Nepovolovat</translation>
+<translation id="4036177530563778041">Jednoduše pokračujte tam, kde jste přestali</translation>
 <translation id="4045764304651014138">Údaje o využití</translation>
 <translation id="405399507749852140">Pokud cena na některém webu klesne, dostanete upozornění</translation>
 <translation id="4056223980640387499">Sépie</translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Patková</translation>
 <translation id="5032430150487044192">QR kód nelze vytvořit</translation>
 <translation id="5039804452771397117">Povolit</translation>
+<translation id="5040262127954254034">Ochrana soukromí</translation>
 <translation id="504456571576643789">Co je třeba zvážit</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Další typy aktivity<ph name="END_LINK1" /> se mohou ukládat do vašeho účtu Google, když jste přihlášeni. Můžete je kdykoli smazat.</translation>
 <translation id="506254248375231072">Žádné karty</translation>
@@ -1124,6 +1127,7 @@
 <translation id="7029390216614421513">Do tohoto rámce umístěte QR kód nebo čárový kód.</translation>
 <translation id="7029809446516969842">Hesla</translation>
 <translation id="7030304022046916278">Odesílá adresy URL ke kontrole ve funkci Bezpečné prohlížení</translation>
+<translation id="7030585293819777123">Pokračovat v posledním úkolu?</translation>
 <translation id="7037830628447527439">Přihlaste se do Chromu pomocí svého účtu Google</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Zobrazovat popisy obrázků?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb
index 46ef0be..b413917 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Yn eich cadw'n ddiogel ar Chrome a gellir ei ddefnyddio i wella'ch diogelwch mewn apiau Google eraill pan fyddwch wedi'ch mewngofnodi</translation>
 <translation id="3429160811076349561">Mae nodweddion prawf wedi'u diffodd</translation>
 <translation id="3435465986463792564">Oes gennych chi lawer o ffenestri? Gallwch eu rheoli o'r fan hon</translation>
+<translation id="3435738964857648380">Diogelwch</translation>
 <translation id="3443221991560634068">Ail-lwytho'r dudalen bresennol</translation>
 <translation id="3444179773590444986">Rhannu adborth am y thema dywyll ar gyfer gwefannau?</translation>
 <translation id="3452832259067974318">Er mwyn amddiffyn eich preifatrwydd, ni fydd Chrome yn awtolenwi eich cyfrinair yn y maes hwn.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Methu â chreu Cod QR</translation>
 <translation id="5039804452771397117">Caniatáu</translation>
+<translation id="5040262127954254034">Preifatrwydd</translation>
 <translation id="504456571576643789">Pethau i'w hystyried</translation>
 <translation id="5054455334322721892">Gall <ph name="BEGIN_LINK1" />mathau eraill o weithgarwch<ph name="END_LINK1" /> gael eu cadw i'ch Cyfrif Google pan fyddwch wedi mewngofnodi. Gallwch eu dileu ar unrhyw adeg.</translation>
 <translation id="506254248375231072">Dim tabiau</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
index 25372a1f..00beca12 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Beskytter dig i Chrome og kan bruges til at forbedre din sikkerhed i andre Google-apps, når du er logget ind</translation>
 <translation id="3429160811076349561">Prøvefunktioner er slået fra</translation>
 <translation id="3435465986463792564">Har du mange åbne vinduer? Du kan administrere dem herfra</translation>
+<translation id="3435738964857648380">Sikkerhed</translation>
 <translation id="3443221991560634068">Genindlæs den aktuelle side</translation>
 <translation id="3444179773590444986">Vil du dele feedback om Mørkt tema på websites?</translation>
 <translation id="3452832259067974318">Af hensyn til beskyttelsen af dine personlige oplysninger udfylder Chrome ikke din adgangskode automatisk i dette felt.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR-koden kan ikke oprettes</translation>
 <translation id="5039804452771397117">Tillad</translation>
+<translation id="5040262127954254034">Privatliv</translation>
 <translation id="504456571576643789">Vigtige oplysninger</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Andre former for aktivitet<ph name="END_LINK1" /> kan blive gemt på din Google-konto, når du er logget ind. Du kan til enhver tid slette dem.</translation>
 <translation id="506254248375231072">Der er ingen faner</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
index 80d3a8b..15ccb4e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Schützt dich in Chrome und erhöht möglicherweise die Sicherheit in anderen Google-Apps, wenn du angemeldet bist</translation>
 <translation id="3429160811076349561">Testfunktionen sind deaktiviert</translation>
 <translation id="3435465986463792564">Du verwendest viele Fenster? Du kannst sie hier verwalten.</translation>
+<translation id="3435738964857648380">Sicherheit</translation>
 <translation id="3443221991560634068">Aktuelle Seite neu laden</translation>
 <translation id="3444179773590444986">Feedback zu dunklem Design für Websites teilen?</translation>
 <translation id="3452832259067974318">Um deine Daten zu schützen, füllt Chrome dieses Feld nicht automatisch mit deinem Passwort aus.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serifenschrift</translation>
 <translation id="5032430150487044192">QR-Code konnte nicht erstellt werden</translation>
 <translation id="5039804452771397117">Zulassen</translation>
+<translation id="5040262127954254034">Datenschutz</translation>
 <translation id="504456571576643789">Wichtige Punkte</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Andere Arten von Aktivitäten<ph name="END_LINK1" /> können in deinem Google-Konto gespeichert werden, wenn du angemeldet bist. Du kannst sie jederzeit löschen.</translation>
 <translation id="506254248375231072">Keine Tabs</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
index d357b16c..94d0977b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Διατηρεί την ασφάλειά σας στο Chrome και μπορεί να χρησιμοποιηθεί για τη βελτίωση της ασφάλειάς σας σε άλλες εφαρμογές Google όταν είστε συνδεδεμένοι.</translation>
 <translation id="3429160811076349561">Οι δοκιμαστικές λειτουργίες είναι απενεργοποιημένες</translation>
 <translation id="3435465986463792564">Χρησιμοποιείτε πολλά παράθυρα; Μπορείτε να τα διαχειρίζεστε από εδώ.</translation>
+<translation id="3435738964857648380">Ασφάλεια</translation>
 <translation id="3443221991560634068">Επαναφόρτωση της τρέχουσας σελίδας</translation>
 <translation id="3444179773590444986">Θέλετε να υποβάλετε σχόλια σχετικά με το σκούρο θέμα για ιστοτόπους;</translation>
 <translation id="3452832259067974318">Προκειμένου να προστατεύσει το απόρρητό σας, το Chrome δεν θα συμπληρώνει αυτόματα τον κωδικό πρόσβασής σας σε αυτό το πεδίο.</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">βίντεο</translation>
 <translation id="4766313118839197559">Οι κωδικοί πρόσβασης αποθηκεύονται στον Διαχειριστή κωδικών πρόσβασης σε αυτήν τη συσκευή.</translation>
 <translation id="4766678251456904326">Προσθήκη λογαριασμού στη συσκευή</translation>
+<translation id="4769095993849849966">Νέο όνομα αρχείου</translation>
 <translation id="4787736314074622408">Μήπως θέλετε να διαγράψετε το <ph name="ITEM_TITLE" />;</translation>
 <translation id="4791358705705538979">Σας βοηθάει να ολοκληρώνετε εργασίες στον ιστό, όπως είναι η ολοκλήρωση αγορών</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Δεν είναι δυνατή η δημιουργία κωδικού QR</translation>
 <translation id="5039804452771397117">Επιτρέπεται</translation>
+<translation id="5040262127954254034">Απόρρητο</translation>
 <translation id="504456571576643789">Λάβετε υπόψη τα εξής</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Άλλες μορφές δραστηριότητας<ph name="END_LINK1" /> ενδέχεται να αποθηκεύονται στον Λογαριασμό σας Google όταν είστε συνδεδεμένοι. Μπορείτε να τις διαγράψετε ανά πάσα στιγμή.</translation>
 <translation id="506254248375231072">Δεν υπάρχουν καρτέλες</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
index 592981c..fec4971d 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
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Keeps you safe on Chrome and may be used to improve your security in other Google apps when you are signed in</translation>
 <translation id="3429160811076349561">Trial features are off</translation>
 <translation id="3435465986463792564">Got many windows? You can manage them from here</translation>
+<translation id="3435738964857648380">Security</translation>
 <translation id="3443221991560634068">Reload the current page</translation>
 <translation id="3444179773590444986">Share feedback on Dark theme for sites?</translation>
 <translation id="3452832259067974318">To protect your privacy, Chrome will not auto-fill your password in this field.</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Can't create QR code</translation>
 <translation id="5039804452771397117">Allow</translation>
+<translation id="5040262127954254034">Privacy</translation>
 <translation id="504456571576643789">Things to consider</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Other forms of activity<ph name="END_LINK1" /> may be saved in your Google Account when you’re signed in. You can delete them at any time.</translation>
 <translation id="506254248375231072">No tabs</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
index 9d9a30f2..34f396f5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Te protege en Chrome y puede usarse para mejorar tu seguridad en otras apps de Google cuando accedes a tu cuenta.</translation>
 <translation id="3429160811076349561">Las funciones de prueba están desactivadas</translation>
 <translation id="3435465986463792564">¿Tienes muchas ventanas? Puedes administrarlas desde aquí.</translation>
+<translation id="3435738964857648380">Seguridad</translation>
 <translation id="3443221991560634068">Volver a cargar la página actual</translation>
 <translation id="3444179773590444986">¿Deseas compartir comentarios sobre el Tema oscuro para los sitios?</translation>
 <translation id="3452832259067974318">Para proteger tu privacidad, Chrome no completará de forma automática tu contraseña en este campo.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">No se puede seguir. Se produjo un error.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation>
 <translation id="4035877632587724847">No permitir</translation>
+<translation id="4036177530563778041">Continúa fácilmente desde donde dejaste</translation>
 <translation id="4045764304651014138">Datos de uso</translation>
 <translation id="405399507749852140">Recibe alertas si baja el precio en algún sitio</translation>
 <translation id="4056223980640387499">Sepia</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">No se puede crear el código QR</translation>
 <translation id="5039804452771397117">Permitir</translation>
+<translation id="5040262127954254034">Privacidad</translation>
 <translation id="504456571576643789">Aspectos para tener en cuenta</translation>
 <translation id="5054455334322721892">Es posible que se guarden <ph name="BEGIN_LINK1" />otras formas de actividad<ph name="END_LINK1" /> en tu Cuenta de Google cuando accedes. Podrás borrarlas en cualquier momento.</translation>
 <translation id="506254248375231072">No hay pestañas</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">Coloca el código QR o de barras en este recuadro.</translation>
 <translation id="7029809446516969842">Contraseñas</translation>
 <translation id="7030304022046916278">Envía las URL a la Navegación segura para revisarlas.</translation>
+<translation id="7030585293819777123">¿Quieres reanudar tu última tarea?</translation>
 <translation id="7037830628447527439">Accede a Chrome con tu Cuenta de Google</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">¿Deseas obtener la descripción de las imágenes?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
index 78986cf..61d51a30b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Te protege en Chrome y puede usarse para mejorar tu seguridad en otras aplicaciones de Google cuando has iniciado sesión</translation>
 <translation id="3429160811076349561">Las funciones de prueba están desactivadas.</translation>
 <translation id="3435465986463792564">¿Tienes demasiadas ventanas? Puedes gestionarlas desde aquí.</translation>
+<translation id="3435738964857648380">Seguridad</translation>
 <translation id="3443221991560634068">Vuelve a cargar la página actual</translation>
 <translation id="3444179773590444986">¿Enviar comentarios sobre el tema oscuro para sitios?</translation>
 <translation id="3452832259067974318">Para proteger tu privacidad, Chrome no autocompletará tu contraseña en este campo.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">No se puede crear el código QR</translation>
 <translation id="5039804452771397117">Permitir</translation>
+<translation id="5040262127954254034">Privacidad</translation>
 <translation id="504456571576643789">Notas importantes</translation>
 <translation id="5054455334322721892">Es posible que <ph name="BEGIN_LINK1" />otras formas de actividad<ph name="END_LINK1" /> se guarden en tu cuenta de Google si has iniciado sesión. Puedes eliminarlas cuando quieras.</translation>
 <translation id="506254248375231072">No hay pestañas</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
index c9f9b3e4..09507e8f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Kaitseb teid Chrome'is ja seda võidakse kasutada teie turvalisuse suurendamiseks muudes Google'i rakendustes, kui olete sisse logitud</translation>
 <translation id="3429160811076349561">Prooviversiooni funktsioonid on välja lülitatud</translation>
 <translation id="3435465986463792564">Kas teil on palju aknaid? Saate neid kõiki siin hallata.</translation>
+<translation id="3435738964857648380">Turvalisus</translation>
 <translation id="3443221991560634068">Praeguse lehe uuesti laadimine</translation>
 <translation id="3444179773590444986">Kas soovite saitide tumeda teema kohta tagasisidet jagada?</translation>
 <translation id="3452832259067974318">Teie privaatsuse kaitsmiseks ei sisesta Chrome sellele väljale automaatselt parooli.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR-koodi ei saa luua</translation>
 <translation id="5039804452771397117">Luba</translation>
+<translation id="5040262127954254034">Privaatsus</translation>
 <translation id="504456571576643789">Olulised aspektid</translation>
 <translation id="5054455334322721892">Kui olete sisse logitud, võidakse teie <ph name="BEGIN_LINK1" />muud tegevused<ph name="END_LINK1" /> teie Google'i kontole salvestada. Saate need alati kustutada.</translation>
 <translation id="506254248375231072">Vahelehti pole</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
index 67066ab..ac4d78a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Babestuta mantentzen zaitu Chrome-n, eta segurtasuna hobetzeko erabil daiteke Google-ren beste aplikazio batzuetan saioa hasita daukazunean</translation>
 <translation id="3429160811076349561">Probako eginbideak desaktibatuta daude</translation>
 <translation id="3435465986463792564">Leiho gehiegi dituzu? Hemen kudea ditzakezu.</translation>
+<translation id="3435738964857648380">Segurtasuna</translation>
 <translation id="3443221991560634068">Kargatu berriro oraingo orria</translation>
 <translation id="3444179773590444986">Webguneetarako gai ilunari buruzko iritzia partekatu nahi duzu?</translation>
 <translation id="3452832259067974318">Zure pribatutasuna babesteko, Chrome-k ez du idatziko automatikoki pasahitza eremu honetan.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">Ezin zaio jarraitu. Arazo bat izan da.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ordu}other{# ordu}}</translation>
 <translation id="4035877632587724847">Ez eman baimenik</translation>
+<translation id="4036177530563778041">Jarraitu utzi zenuen tokitik erraz</translation>
 <translation id="4045764304651014138">Erabilera-datuak</translation>
 <translation id="405399507749852140">Jaso alertak webguneren batean prezioa jaisten bada</translation>
 <translation id="4056223980640387499">Sepia</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Ezin da sortu QR kodea</translation>
 <translation id="5039804452771397117">Baimendu</translation>
+<translation id="5040262127954254034">Pribatutasuna</translation>
 <translation id="504456571576643789">Kontuan hartu beharrekoak</translation>
 <translation id="5054455334322721892">Litekeena da <ph name="BEGIN_LINK1" />beste jarduera batzuk<ph name="END_LINK1" /> Google-ko kontuan gordetzea saioa hasita daukazun bitartean. Nahi duzunean ezaba ditzakezu.</translation>
 <translation id="506254248375231072">Fitxarik ez</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">Ezarri QR kodea edo barra-kodea marko honetan.</translation>
 <translation id="7029809446516969842">Pasahitzak</translation>
 <translation id="7030304022046916278">URLak Arakatze segurua eginbideari bidaltzen dizkio egiazta ditzan.</translation>
+<translation id="7030585293819777123">Azken zereginari berrekin nahi diozu?</translation>
 <translation id="7037830628447527439">Hasi saioa Chrome-n Google-ko kontuarekin</translation>
 <translation id="7038956721828960940">chrome-ko_irudia_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Irudi-deskribapenak lortu nahi dituzu?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
index 34544a4b..f5e2b988 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">‏وقتی به سیستم وارد شده باشید، امنیت شما را در Chrome حفظ می‌کند و ممکن است برای بهبود امنیت شما در برنامه‌های دیگر Google استفاده شود</translation>
 <translation id="3429160811076349561">ویژگی‌های آزمایشی خاموش است</translation>
 <translation id="3435465986463792564">پنجره‌های زیادی دارید؟ می‌توانید از اینجا مدیریتشان کنید</translation>
+<translation id="3435738964857648380">امنیت</translation>
 <translation id="3443221991560634068">بار کردن مجدد صفحه کنونی</translation>
 <translation id="3444179773590444986">مایلید بازخوردتان را درباره زمینه تیره برای سایت‌ها هم‌رسانی کنید؟</translation>
 <translation id="3452832259067974318">‏برای حفظ حریم‌خصوصی‌تان، Chrome گذرواژه‌تان را به‌طور خودکار در این فیلد وارد نخواهد کرد.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">رمزینه پاسخ‌سریع ایجاد نمی‌شود</translation>
 <translation id="5039804452771397117">اجازه دادن</translation>
+<translation id="5040262127954254034">حریم خصوصی</translation>
 <translation id="504456571576643789">مواردی که باید درنظر داشت</translation>
 <translation id="5054455334322721892">‏وقتی به سیستم وارد شده باشید، ممکن است <ph name="BEGIN_LINK1" />انواع دیگر فعالیت<ph name="END_LINK1" /> در «حساب Google» شما ذخیره شوند. هر زمان خواستید می‌توانید آن‌ها را حذف کنید.</translation>
 <translation id="506254248375231072">برگه‌ای باز نیست</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
index 1e59475c..ff9ae41 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Pitää sinut turvassa Chromessa ja voi parantaa suojaustasi muissa Google-sovelluksissa, kun olet sisäänkirjautuneena</translation>
 <translation id="3429160811076349561">Kokeiluominaisuudet ovat poissa käytöstä</translation>
 <translation id="3435465986463792564">Onko monta ikkunaa auki? Voit ylläpitää niitä täältä</translation>
+<translation id="3435738964857648380">Suojaus</translation>
 <translation id="3443221991560634068">Päivitä nykyinen sivu</translation>
 <translation id="3444179773590444986">Haluatko antaa palautetta sivustojen tummasta teemasta?</translation>
 <translation id="3452832259067974318">Yksityisyytesi suojaamiseksi Chrome ei täytä salasanaasi automaattisesti tähän kenttään.</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR-koodin luominen ei onnistu</translation>
 <translation id="5039804452771397117">Salli</translation>
+<translation id="5040262127954254034">Tietosuoja</translation>
 <translation id="504456571576643789">Huomioitavaa</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Muita toimintoja<ph name="END_LINK1" /> voidaan tallentaa Google-tilillesi, kun olet kirjautuneena sisään. Voit poistaa niitä koska vain.</translation>
 <translation id="506254248375231072">Ei välilehtiä</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
index 92899d7b..49bd2a6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Pinapanatili kang ligtas sa Chrome at puwedeng gamitin para paigtingin ang iyong seguridad sa iba pang Google app kapag naka-sign in ka</translation>
 <translation id="3429160811076349561">Naka-off ang mga feature ng trial</translation>
 <translation id="3435465986463792564">Maraming window? Puwede mong pamahalaan ang mga ito mula rito</translation>
+<translation id="3435738964857648380">Seguridad</translation>
 <translation id="3443221991560634068">I-reload ang kasalukuyang page</translation>
 <translation id="3444179773590444986">Magbahagi ng feedback sa madilim na tema para sa mga site?</translation>
 <translation id="3452832259067974318">Para protektahan ang iyong privacy, hindi io-autofill ng Chrome ang password mo sa field na ito.</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Hindi magawa ang QR Code</translation>
 <translation id="5039804452771397117">Payagan</translation>
+<translation id="5040262127954254034">Privacy</translation>
 <translation id="504456571576643789">Mga bagay na dapat isaalang-alang</translation>
 <translation id="5054455334322721892">Posibleng ma-save sa iyong Google Account ang <ph name="BEGIN_LINK1" />iba pang anyo ng aktibidad<ph name="END_LINK1" /> kapag naka-sign in ka. Puwede mong i-delete ang mga ito anumang oras.</translation>
 <translation id="506254248375231072">Walang tab</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
index 32b0a83..5a909ca 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Il vous protège dans Chrome et peut être utilisé pour améliorer votre sécurité dans d'autres applications Google lorsque vous êtes connecté à votre compte</translation>
 <translation id="3429160811076349561">Les fonctionnalités d'essai sont désactivées</translation>
 <translation id="3435465986463792564">Vous avez de nombreuses fenêtres ouvertes? Vous pouvez les gérer à partir d'ici</translation>
+<translation id="3435738964857648380">Sécurité</translation>
 <translation id="3443221991560634068">Actualiser la page actuelle</translation>
 <translation id="3444179773590444986">Faire part de vos commentaires sur le thème sombre pour les sites?</translation>
 <translation id="3452832259067974318">Afin de protéger votre confidentialité, Chrome ne remplira pas automatiquement ce champ avec votre mot de passe.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Avec empattement</translation>
 <translation id="5032430150487044192">Impossible de créer un code QR</translation>
 <translation id="5039804452771397117">Autoriser</translation>
+<translation id="5040262127954254034">Confidentialité</translation>
 <translation id="504456571576643789">Points à prendre en compte</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />D'autres formes d'activités<ph name="END_LINK1" /> peuvent être enregistrées dans votre compte Google lorsque vous êtes connecté. Vous pouvez les supprimer à tout moment.</translation>
 <translation id="506254248375231072">Aucun onglet</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
index b2cbfe2..2a96a7e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Ce mode assure votre sécurité dans Chrome et peut être utilisé pour améliorer votre sécurité dans d'autres applications Google lorsque vous êtes connecté</translation>
 <translation id="3429160811076349561">Les fonctionnalités à l'essai sont désactivées</translation>
 <translation id="3435465986463792564">Vous pouvez gérer toutes vos fenêtres depuis ce menu</translation>
+<translation id="3435738964857648380">Sécurité</translation>
 <translation id="3443221991560634068">Actualiser la page active</translation>
 <translation id="3444179773590444986">Envoyer des commentaires sur le thème sombre pour les sites ?</translation>
 <translation id="3452832259067974318">Pour protéger votre confidentialité, Chrome ne saisit pas automatiquement votre mot de passe dans ce champ.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">Impossible de vous abonner en raison d'une erreur.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}one{# h}other{# h}}</translation>
 <translation id="4035877632587724847">Ne pas autoriser</translation>
+<translation id="4036177530563778041">Reprenez facilement où vous en étiez</translation>
 <translation id="4045764304651014138">Données d'utilisation</translation>
 <translation id="405399507749852140">Recevez des alertes si le prix baisse sur un site</translation>
 <translation id="4056223980640387499">Sépia</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Impossible de créer le code QR</translation>
 <translation id="5039804452771397117">Autoriser</translation>
+<translation id="5040262127954254034">Confidentialité</translation>
 <translation id="504456571576643789">Éléments à prendre en compte</translation>
 <translation id="5054455334322721892">D'<ph name="BEGIN_LINK1" />autres formes d'activité<ph name="END_LINK1" /> peuvent être enregistrées dans votre compte Google lorsque vous êtes connecté. Vous pouvez les supprimer à tout moment.</translation>
 <translation id="506254248375231072">Aucun onglet</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">Positionnez le code-barres/code QR dans ce cadre.</translation>
 <translation id="7029809446516969842">Mots de passe</translation>
 <translation id="7030304022046916278">Les URL sont envoyées à la navigation sécurisée pour vérification</translation>
+<translation id="7030585293819777123">Reprendre votre dernière tâche ?</translation>
 <translation id="7037830628447527439">Se connecter à Chrome avec votre compte Google</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Obtenir les descriptions d'images ?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
index 90d72fa0..32adf6f36 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Protéxete en Chrome e pode utilizarse para mellorar a túa seguranza noutras aplicacións de Google cando teñas iniciada a sesión</translation>
 <translation id="3429160811076349561">As funcións de proba están desactivadas</translation>
 <translation id="3435465986463792564">Tes varias ventás? Podes xestionalas desde aquí</translation>
+<translation id="3435738964857648380">Seguranza</translation>
 <translation id="3443221991560634068">Volver cargar a páxina actual</translation>
 <translation id="3444179773590444986">Queres compartir comentarios sobre o tema escuro para os sitios?</translation>
 <translation id="3452832259067974318">Para protexer a túa privacidade, Chrome non autocompletará o teu contrasinal neste campo.</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">vídeo</translation>
 <translation id="4766313118839197559">Os contrasinais gárdanse no xestor de contrasinais neste dispositivo</translation>
 <translation id="4766678251456904326">Engadir conta ao dispositivo</translation>
+<translation id="4769095993849849966">Nome novo do ficheiro</translation>
 <translation id="4787736314074622408">Queres eliminar <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Axúdache a completar tarefas, como o procesamento de compras, na Web</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Non se puido crear o código QR</translation>
 <translation id="5039804452771397117">Permitir</translation>
+<translation id="5040262127954254034">Privacidade</translation>
 <translation id="504456571576643789">Cuestións que se deben ter en conta</translation>
 <translation id="5054455334322721892">Cando teñas a sesión iniciada, é posible que se garden na túa Conta de Google <ph name="BEGIN_LINK1" />outros datos da túa actividade<ph name="END_LINK1" />. Podes eliminalos en calquera momento.</translation>
 <translation id="506254248375231072">Ningunha pestana</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
index f2601297..e44d7c3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">તમને Chrome પર સલામત રાખે છે અને જ્યારે તમે સાઇન ઇન થયા હો, ત્યારે Googleની અન્ય ઍપમાં તમારી સુરક્ષા બહેતર બનાવવામાં ઉપયોગમાં લેવાઈ શકે છે</translation>
 <translation id="3429160811076349561">અજમાયશની સુવિધાઓ બંધ છે</translation>
 <translation id="3435465986463792564">શું ઘણી વિન્ડો ખોલી છે? તમે તેમને અહીંથી મેનેજ કરી શકો છો</translation>
+<translation id="3435738964857648380">સુરક્ષા</translation>
 <translation id="3443221991560634068">હાલનું પેજ ફરીથી લોડ કરો</translation>
 <translation id="3444179773590444986">શું સાઇટ માટે ઘેરી થીમ પર પ્રતિસાદ શેર કરીએ?</translation>
 <translation id="3452832259067974318">તમારી પ્રાઇવસીની સુરક્ષા કરવા માટે, Chrome આ ફીલ્ડમાં તમારો પાસવર્ડ ઑટોમૅટિક રીતે નહીં ભરે.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">ફૉલો કરી શકતા નથી. કંઈક ખોટું થયું.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# કલાક}one{# કલાક}other{# કલાક}}</translation>
 <translation id="4035877632587724847">મંજૂરી આપશો નહીં</translation>
+<translation id="4036177530563778041">તમે જ્યાંથી છોડ્યું હોય, ત્યાંથી સરળતાથી શરુ કરી શકો છો</translation>
 <translation id="4045764304651014138">વપરાશનો ડેટા</translation>
 <translation id="405399507749852140">જો કોઈપણ સાઇટ પર કિંમતમાં ઘટાડો થાય, તો અલર્ટ મેળવો</translation>
 <translation id="4056223980640387499">Sepia</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR કોડ બનાવી શકતા નથી</translation>
 <translation id="5039804452771397117">મંજૂરી આપો</translation>
+<translation id="5040262127954254034">પ્રાઇવસી</translation>
 <translation id="504456571576643789">ધ્યાનમાં લેવા જેવી બાબતો</translation>
 <translation id="5054455334322721892">જ્યારે તમે સાઇન ઇન કર્યુ હોય, ત્યારે તમારા Google એકાઉન્ટમાં <ph name="BEGIN_LINK1" />પ્રવૃત્તિના અન્ય પ્રકારો<ph name="END_LINK1" /> સાચવવામાં આવી શકે છે. તમે તેમને કોઈપણ સમયે ડિલીટ કરી શકો છો.</translation>
 <translation id="506254248375231072">કોઈ ટૅબ નથી</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">QR કોડ/બારકોડને આ ફ્રેમમાં મૂકો.</translation>
 <translation id="7029809446516969842">પાસવર્ડ</translation>
 <translation id="7030304022046916278">URLs ચેક કરવા માટે તેમને Safe Browsing પર મોકલે છે</translation>
+<translation id="7030585293819777123">શું તમારું છેલ્લું કાર્ય ફરી શરૂ કરીએ?</translation>
 <translation id="7037830628447527439">તમારા Google એકાઉન્ટ વડે Chromeમાં સાઇન ઇન કરો</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">છબીના વર્ણનો મેળવીએ?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
index 1f85bb66..e1266ea 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">अगर आप Chrome में साइन इन हैं, तो यह सुविधा आपको सुरक्षित रखती है. साथ ही, अन्य Google ऐप्लिकेशन में इसका इस्तेमाल सुरक्षा को बेहतर बनाने में भी हो सकता है</translation>
 <translation id="3429160811076349561">ट्रायल की सुविधाएं बंद हैं</translation>
 <translation id="3435465986463792564">कई विंडो खुली हैं? उन सभी को यहां से मैनेज किया जा सकता है</translation>
+<translation id="3435738964857648380">सुरक्षा</translation>
 <translation id="3443221991560634068">वर्तमान पेज फिर से लोड करें</translation>
 <translation id="3444179773590444986">क्या आप साइटों के लिए गहरे रंग वाली थीम से जुड़े सुझाव, शिकायत या राय शेयर करना चाहते हैं?</translation>
 <translation id="3452832259067974318">आपकी निजता की सुरक्षा के लिए, Chrome इस फ़ील्ड में आपके पासवर्ड को ऑटोमैटिक तरीके से नहीं भरेगा.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">फ़ॉलो नहीं कर सकते. कोई गड़बड़ी हुई.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# घंटा}one{# घंटे}other{# घंटे}}</translation>
 <translation id="4035877632587724847">अनुमति न दें</translation>
+<translation id="4036177530563778041">जहां आपने छोड़ा था वहीं से आसानी से जारी रखें</translation>
 <translation id="4045764304651014138">इस्तेमाल के बारे में डेटा</translation>
 <translation id="405399507749852140">किसी भी साइट पर कीमत में कमी होने पर सूचना पाएं</translation>
 <translation id="4056223980640387499">Sepia</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">क्यूआर कोड नहीं बनाया जा सकता</translation>
 <translation id="5039804452771397117">अनुमति दें</translation>
+<translation id="5040262127954254034">निजता</translation>
 <translation id="504456571576643789">इन बातों का ध्यान रखें</translation>
 <translation id="5054455334322721892">जब आप साइन इन रहते हैं, तब हो सकता है कि <ph name="BEGIN_LINK1" />अन्य तरह की गतिविधियां<ph name="END_LINK1" /> आपके Google खाते में सेव हो जाएं. आप किसी भी समय उन्हें मिटा सकते हैं.</translation>
 <translation id="506254248375231072">कोई टैब नहीं है</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">इस फ़्रेम में क्यूआर/बार कोड रखें.</translation>
 <translation id="7029809446516969842">पासवर्ड</translation>
 <translation id="7030304022046916278">सुरक्षित ब्राउज़िंग की सेवा को यूआरएल भेजे जाते हैं, ताकि उनकी जांच की जा सके</translation>
+<translation id="7030585293819777123">क्या आपको अपना पिछला टास्क फिर से शुरू करना है?</translation>
 <translation id="7037830628447527439">अपने Google खाते से Chrome में साइन इन करें</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">क्या आप इमेज की जानकारी पाना चाहते हैं?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
index f26c92d..bd78dd23 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Štiti vas na Chromeu i može se upotrebljavati za poboljšanje vaše sigurnosti u drugim Googleovim aplikacijama kada ste prijavljeni</translation>
 <translation id="3429160811076349561">Probne značajke su isključene</translation>
 <translation id="3435465986463792564">Imate mnogo prozora? Možete upravljati njima odavde</translation>
+<translation id="3435738964857648380">Sigurnost</translation>
 <translation id="3443221991560634068">Ponovno učitavanje trenutačne stranice</translation>
 <translation id="3444179773590444986">Želite li podijeliti povratne informacije o tamnoj temi za web-lokacije?</translation>
 <translation id="3452832259067974318">Da bi zaštitio vašu privatnost, Chrome neće automatski popuniti zaporku u ovom polju.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Izrada QR koda nije uspjela</translation>
 <translation id="5039804452771397117">Dopusti</translation>
+<translation id="5040262127954254034">Privatnost</translation>
 <translation id="504456571576643789">Važne napomene</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Ostali oblici aktivnosti<ph name="END_LINK1" /> mogu se spremati na vaš Google račun kad ste prijavljeni. Uvijek ih možete izbrisati.</translation>
 <translation id="506254248375231072">Nema kartica</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
index ff915a4..1217f18 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Gondoskodik a biztonságáról a Chrome-ban, és használható a biztonság növelésére más Google-alkalmazásokban olyankor, amikor Ön be van jelentkezve.</translation>
 <translation id="3429160811076349561">A próbafunkciók ki vannak kapcsolva</translation>
 <translation id="3435465986463792564">Több ablak is meg van nyitva Önnél? Itt kezelheti őket.</translation>
+<translation id="3435738964857648380">Biztonság</translation>
 <translation id="3443221991560634068">Az aktuális oldal újratöltése</translation>
 <translation id="3444179773590444986">Megosztja velünk véleményét a webhelyeknél használt sötét témával kapcsolatban?</translation>
 <translation id="3452832259067974318">Adatai védelme érdekében a Chrome nem tölti ki automatikusan a jelszót ebben a mezőben.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Nem lehet létrehozni a QR-kódot.</translation>
 <translation id="5039804452771397117">Engedélyezés</translation>
+<translation id="5040262127954254034">Adatvédelem</translation>
 <translation id="504456571576643789">Megfontolandó szempontok</translation>
 <translation id="5054455334322721892">Amikor be van jelentkezve, a <ph name="BEGIN_LINK1" />további tevékenységtípusokat<ph name="END_LINK1" /> a rendszer elmentheti a Google-fiókjába. Bármikor törölheti őket.</translation>
 <translation id="506254248375231072">Nincs lap</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
index a4b1a9e..3c282d9 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Ապահովում է ձեր անվտանգությունը Chrome-ում և Google հավելվածներում, երբ մտել եք ձեր հաշիվ</translation>
 <translation id="3429160811076349561">Փորձնական գործառույթներն անջատված են</translation>
 <translation id="3435465986463792564">Շատ պատուհաննե՞ր եք բացել։ Դրանք կարող եք կառավարել այստեղ</translation>
+<translation id="3435738964857648380">Անվտանգություն</translation>
 <translation id="3443221991560634068">Վերաբեռնել ընթացիկ էջը</translation>
 <translation id="3444179773590444986">Կարծիք հայտնե՞լ կայքերի մուգ թեմայի մասին</translation>
 <translation id="3452832259067974318">Ձեր գաղտնիությունը պաշտպանելու նպատակով Chrome-ն այս դաշտում չի ինքնալրացնի ձեր գաղտնաբառը։</translation>
@@ -681,6 +682,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Գաղտնաբառերը պահվում են այս սարքի Գաղտնաբառերի կառավարիչում</translation>
 <translation id="4766678251456904326">Սարքում հաշիվ ավելացնել</translation>
+<translation id="4769095993849849966">Ֆայլի նոր անվանումը</translation>
 <translation id="4787736314074622408">Ջնջե՞լ <ph name="ITEM_TITLE" /> տարրը</translation>
 <translation id="4791358705705538979">Օգնում է ձեզ համացանցում կատարել առաջադրանքներ, օրինակ՝ գնումներ ձևակերպել</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Չհաջողվեց ստեղծել QR կոդը</translation>
 <translation id="5039804452771397117">Թույլ տալ</translation>
+<translation id="5040262127954254034">Գաղտնիություն</translation>
 <translation id="504456571576643789">Կարևոր տեղեկություններ</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Այլ գործողություններ<ph name="END_LINK1" /> կարող են պահվել ձեր Google հաշվում, երբ դուք մուտք եք գործում։ Դրանք ցանկացած ժամանակ հնարավոր է ջնջել։</translation>
 <translation id="506254248375231072">Ներդիրներ չկան</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
index 81c82c4..6eef52a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Memastikan Anda tetap aman di Chrome dan dapat digunakan untuk menyempurnakan keamanan Anda di aplikasi Google lainnya saat login</translation>
 <translation id="3429160811076349561">Fitur uji coba nonaktif</translation>
 <translation id="3435465986463792564">Membuka banyak jendela Chrome? Anda dapat mengelolanya dari sini</translation>
+<translation id="3435738964857648380">Keamanan</translation>
 <translation id="3443221991560634068">Memuat ulang halaman saat ini</translation>
 <translation id="3444179773590444986">Bagikan masukan terkait tema gelap untuk situs?</translation>
 <translation id="3452832259067974318">Untuk melindungi privasi Anda, Chrome tidak akan mengisi otomatis sandi Anda di kolom ini.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Tidak dapat membuat Kode QR</translation>
 <translation id="5039804452771397117">Izinkan</translation>
+<translation id="5040262127954254034">Privasi</translation>
 <translation id="504456571576643789">Hal-hal yang perlu dipertimbangkan</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Bentuk aktivitas lainnya<ph name="END_LINK1" /> dapat disimpan di Akun Google Anda saat login. Anda dapat menghapusnya kapan saja.</translation>
 <translation id="506254248375231072">Tidak ada tab</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
index 345976f2..ac1897d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Tryggir öryggi þitt í Chrome og kann að vera notað til að auka öryggi þitt í öðrum Google forritum þegar þú ert skráð(ur) inn</translation>
 <translation id="3429160811076349561">Slökkt er á prufueiginleikum</translation>
 <translation id="3435465986463792564">Ertu með of marga glugga opna? Þú getur stjórnað gluggunum héðan</translation>
+<translation id="3435738964857648380">Öryggi</translation>
 <translation id="3443221991560634068">Endurhlaða þessa síðu</translation>
 <translation id="3444179773590444986">Deila ábendingu um dökkt þema fyrir vefsvæði?</translation>
 <translation id="3452832259067974318">Til að gæta persónuverndar þinnar fyllir Chrome ekki sjálfkrafa út aðgangsorðið þitt í þennan reit.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Ekki hægt að búa til QR-kóða</translation>
 <translation id="5039804452771397117">Leyfa</translation>
+<translation id="5040262127954254034">Persónuvernd</translation>
 <translation id="504456571576643789">Atriði til að hafa í huga</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Aðrar aðgerðir<ph name="END_LINK1" /> kunna að vera vistaðar á Google reikningnum þínum þegar þú ert innskráð(ur). Þú getur eytt þessu hvenær sem er.</translation>
 <translation id="506254248375231072">Engir flipar</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
index a014a7c..fb877cb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Ti protegge su Chrome e potrebbe essere utilizzata per migliorare la sicurezza su altre app Google se esegui l'accesso</translation>
 <translation id="3429160811076349561">Le funzionalità di prova non sono attive</translation>
 <translation id="3435465986463792564">Hai tante finestre? Puoi gestirle da qui</translation>
+<translation id="3435738964857648380">Sicurezza</translation>
 <translation id="3443221991560634068">Ricarica la pagina corrente</translation>
 <translation id="3444179773590444986">Vuoi condividere un feedback sul tema scuro per i siti?</translation>
 <translation id="3452832259067974318">Per proteggere la tua privacy, Chrome non compilerà automaticamente questo campo con la tua password.</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Impossibile creare codice QR</translation>
 <translation id="5039804452771397117">Consenti</translation>
+<translation id="5040262127954254034">Privacy</translation>
 <translation id="504456571576643789">Aspetti da considerare</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Altri tipi di attività<ph name="END_LINK1" /> potrebbero essere salvati nel tuo Account Google se hai eseguito l'accesso. Puoi eliminarli in qualsiasi momento.</translation>
 <translation id="506254248375231072">Nessuna scheda</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
index 18ff24e9..b80439b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">‏מגן עליך ב-Chrome וייתכן שייעשה בו שימוש לשיפור האבטחה באפליקציות אחרות של Google שבהן נכנסת לחשבון</translation>
 <translation id="3429160811076349561">התכונות הניסיוניות מושבתות</translation>
 <translation id="3435465986463792564">פתוחים אצלך הרבה חלונות? יש לך אפשרות לנהל את כולם מכאן.</translation>
+<translation id="3435738964857648380">אבטחה</translation>
 <translation id="3443221991560634068">טעינה מחדש של הדף הנוכחי</translation>
 <translation id="3444179773590444986">רוצה לשתף משוב לגבי עיצוב כהה של אתרים?</translation>
 <translation id="3452832259067974318">‏כדי להגן על הפרטיות שלך, לא מתבצע ב-Chrome מילוי אוטומטי של הסיסמה שלך בשדה הזה.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">לא ניתן לעקוב. משהו השתבש.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{שעה אחת}two{שעתיים}many{# שעות}other{# שעות}}</translation>
 <translation id="4035877632587724847">אין אישור</translation>
+<translation id="4036177530563778041">קל להמשיך מהמקום שבו הפסקת</translation>
 <translation id="4045764304651014138">נתוני שימוש במכשיר</translation>
 <translation id="405399507749852140">קבלת התראות על הנחות באתר כלשהו</translation>
 <translation id="4056223980640387499">חום-ספיה</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">‏לא ניתן ליצור קוד QR</translation>
 <translation id="5039804452771397117">זה בסדר</translation>
+<translation id="5040262127954254034">פרטיות</translation>
 <translation id="504456571576643789">מה כדאי לקחת בחשבון?</translation>
 <translation id="5054455334322721892">‏<ph name="BEGIN_LINK1" />סוגי פעילות אחרים<ph name="END_LINK1" /> יכולים להישמר בחשבון Google אחרי שנכנסים. אפשר למחוק אותם בכל שלב.</translation>
 <translation id="506254248375231072">אין כרטיסיות</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">‏ממקמים את קוד ה-QR או הברקוד במסגרת הזו.</translation>
 <translation id="7029809446516969842">סיסמאות</translation>
 <translation id="7030304022046916278">‏שליחת כתובות URL לבדיקה על ידי 'גלישה בטוחה'</translation>
+<translation id="7030585293819777123">להמשיך במשימה האחרונה?</translation>
 <translation id="7037830628447527439">‏אפשר להיכנס לחשבון Google ב-Chrome</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">רוצה לקבל תיאורי תמונות?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
index 4c8c5af..8277e3b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">ログイン時に、Chrome を安全に利用できるようにするほか、他の Google アプリのセキュリティ強化に使用されることがあります</translation>
 <translation id="3429160811076349561">試用版機能はオフになっています</translation>
 <translation id="3435465986463792564">ウィンドウの数が多くてお困りの場合も、ここで管理できます</translation>
+<translation id="3435738964857648380">セキュリティ</translation>
 <translation id="3443221991560634068">現在のページを再読み込みする</translation>
 <translation id="3444179773590444986">サイトのダークモードに関するフィードバックを共有しますか?</translation>
 <translation id="3452832259067974318">プライバシー保護のため、Chrome ではこの欄のパスワードの自動入力は行われません。</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR コードを作成できません</translation>
 <translation id="5039804452771397117">許可する</translation>
+<translation id="5040262127954254034">プライバシー</translation>
 <translation id="504456571576643789">留意事項</translation>
 <translation id="5054455334322721892">ログイン中は Google アカウントに<ph name="BEGIN_LINK1" />その他のアクティビティ<ph name="END_LINK1" />が保存される可能性があります。これらのデータはいつでも削除できます。</translation>
 <translation id="506254248375231072">タブはありません</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
index 9cdae73..9aefafa6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">უზრუნველყოფს თქვენს უსაფრთხოებას Chrome-ში და Google-ის სხვა აპებში, როცა სისტემაში შესული ხართ</translation>
 <translation id="3429160811076349561">საცდელი ფუნქციები გამორთულია</translation>
 <translation id="3435465986463792564">მრავალი ფანჯარა გაქვთ? მათი მართვა აქედან შეგიძლიათ</translation>
+<translation id="3435738964857648380">უსაფრთხოება</translation>
 <translation id="3443221991560634068">მიმდინარე გვერდის გადატვირთვა</translation>
 <translation id="3444179773590444986">გსურთ, გამოგვეხმაუროთ საიტებისთვის განკუთვნილი მუქი თემის შესახებ?</translation>
 <translation id="3452832259067974318">კონფიდენციალურობის დაცვის მიზნით, Chrome არ შეავსებს ავტომატურად თქვენს პაროლს ამ ველში.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR კოდის შექმნა ვერ მოხერხდა</translation>
 <translation id="5039804452771397117">დაშვება</translation>
+<translation id="5040262127954254034">კონფიდენციალურობა</translation>
 <translation id="504456571576643789">გასათვალისწინებელი საკითხები</translation>
 <translation id="5054455334322721892">თქვენს Google ანგარიშში შეიძლება ინახებოდეს <ph name="BEGIN_LINK1" />სხვა ტიპის აქტივობა<ph name="END_LINK1" />, როცა შესული ხართ სისტემაში. აღნიშნულის წაშლა ნებისმიერ დროს შეგიძლიათ.</translation>
 <translation id="506254248375231072">ჩანართები არ არის</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
index 355e3473..385ba09b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Аккаунтқа кірген болсаңыз, сізді Chrome браузерінде қорғайды және басқа Google қолданбаларында қауіпсіздігіңізді жақсартуға пайдаланылуы мүмкін.</translation>
 <translation id="3429160811076349561">Сынақ нұсқасының функциялары өшірулі</translation>
 <translation id="3435465986463792564">Ашық тұрған терезе көп пе? Оларды осы жерден реттеңіз.</translation>
+<translation id="3435738964857648380">Қауіпсіздік</translation>
 <translation id="3443221991560634068">Ағымдағы бетті жаңарту</translation>
 <translation id="3444179773590444986">Сайттарға арналған қараңғы режим туралы пікір бөлісесіз бе?</translation>
 <translation id="3452832259067974318">Құпиялылықты сақтау үшін Chrome браузері құпия сөзіңізді автоматты түрде толтырмайды.</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">бейне</translation>
 <translation id="4766313118839197559">Құпия сөздер осы құрылғыдағы Құпия сөз менеджеріне сақталады.</translation>
 <translation id="4766678251456904326">Құрылғыға аккаунт енгізу</translation>
+<translation id="4769095993849849966">Жаңа файл аты</translation>
 <translation id="4787736314074622408"><ph name="ITEM_TITLE" /> элементін жойғыңыз келе ме?</translation>
 <translation id="4791358705705538979">Интернет арқылы тапсырмаларды орындауға (мысалы, төлем жасау) көмектеседі.</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR кодын жасау мүмкін емес.</translation>
 <translation id="5039804452771397117">Рұқсат беру</translation>
+<translation id="5040262127954254034">Құпиялылық</translation>
 <translation id="504456571576643789">Ескеретін жайттар</translation>
 <translation id="5054455334322721892">Google аккаунтына кірген кезде, <ph name="BEGIN_LINK1" />басқа әрекет түрлері<ph name="END_LINK1" /> оған сақталуы мүмкін. Оларды кез келген уақытта жоя аласыз.</translation>
 <translation id="506254248375231072">Қойындылар жоқ.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
index b481fbb..3d9e9d1 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">រក្សា​សុវត្ថិភាព​របស់អ្នក​នៅលើ Chrome និង​អាចប្រើ​សម្រាប់​កែលម្អ​សុវត្ថិភាព​របស់អ្នក​នៅក្នុង​កម្មវិធី Google ផ្សេងទៀត នៅពេល​អ្នក​ចូលគណនី</translation>
 <translation id="3429160811076349561">មុខងារ​សាកល្បង​ត្រូវបានបិទ</translation>
 <translation id="3435465986463792564">មានវិនដូច្រើនមែនទេ? អ្នកអាច​គ្រប់គ្រងវិនដូ​ទាំងនោះបាន​ពីទីនេះ</translation>
+<translation id="3435738964857648380">សុវត្ថិភាព</translation>
 <translation id="3443221991560634068">ផ្ទុកទំព័របច្ចុប្បន្នឡើងវិញ</translation>
 <translation id="3444179773590444986">ចែក​រំលែក​មតិ​កែលម្អអំពី​រចនាប័ទ្ម​ងងឹតសម្រាប់គេហទំព័រឬ?</translation>
 <translation id="3452832259067974318">ដើម្បី​ការពារ​ឯកជនភាព​របស់អ្នក Chrome នឹងមិន​បំពេញពាក្យសម្ងាត់​របស់អ្នក​ដោយស្វ័យប្រវត្តិ​នៅក្នុងកន្លែង​បញ្ចូលនេះទេ។</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">មិនអាចបង្កើតកូដ QR បានទេ</translation>
 <translation id="5039804452771397117">អនុញ្ញាត</translation>
+<translation id="5040262127954254034">ឯកជនភាព</translation>
 <translation id="504456571576643789">ចំណុច​ដែលត្រូវ​ពិចារណា</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />ទម្រង់​ផ្សេងទៀត​នៃសកម្មភាព<ph name="END_LINK1" />អាចត្រូវបាន​រក្សាទុក​នៅក្នុង​គណនី Google របស់អ្នក នៅពេលអ្នក​ចូលគណនី។ អ្នកអាច​លុបវា​បានគ្រប់ពេល។</translation>
 <translation id="506254248375231072">គ្មានផ្ទាំងទេ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
index 2dcef09d..13a9a26 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, Chrome ನಲ್ಲಿ ನಿಮ್ಮನ್ನು ಸುರಕ್ಷಿತವಾಗಿರಿಸುತ್ತದೆ ಮತ್ತು ಇತರ Google ಆ್ಯಪ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಸುರಕ್ಷತೆಯನ್ನು ಸುಧಾರಿಸಲು ಬಳಸಬಹುದು</translation>
 <translation id="3429160811076349561">ಪ್ರಾಯೋಗಿಕ ವೈಶಿಷ್ಟ್ಯಗಳು ಆಫ್ ಆಗಿವೆ</translation>
 <translation id="3435465986463792564">ಹಲವು ವಿಂಡೋಗಳನ್ನು ತೆರೆದಿರುವಿರಾ? ನೀವು ಅವುಗಳನ್ನು ಇಲ್ಲಿಂದಲೇ ನಿರ್ವಹಿಸಬಹುದು</translation>
+<translation id="3435738964857648380">ಭದ್ರತೆ</translation>
 <translation id="3443221991560634068">ಪ್ರಸ್ತುತ ಪುಟ ಮರುಲೋಡ್ ಮಾಡಿ</translation>
 <translation id="3444179773590444986">ಸೈಟ್‌ಗಳಿಗಾಗಿ ಡಾರ್ಕ್ ಥೀಮ್‌ ಕುರಿತು ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಬಯಸುವಿರಾ?</translation>
 <translation id="3452832259067974318">ನಿಮ್ಮ ಗೌಪ್ಯತೆಯನ್ನು ರಕ್ಷಿಸಲು, Chrome ಈ ಫೀಲ್ಡ್‌ನಲ್ಲಿ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಆಟೋಫಿಲ್ ಮಾಡುವುದಿಲ್ಲ.</translation>
@@ -744,6 +745,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR ಕೋಡ್‌ ಅನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="5039804452771397117">ಅನುಮತಿಸಿ</translation>
+<translation id="5040262127954254034">ಗೌಪ್ಯತೆ</translation>
 <translation id="504456571576643789">ಪರಿಗಣಿಸಬೇಕಾದ ಸಂಗತಿಗಳು</translation>
 <translation id="5054455334322721892">ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿರುವಾಗ, ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ <ph name="BEGIN_LINK1" />ಚಟುವಟಿಕೆಯ ಇತರ ವಿಧಾನಗಳನ್ನು<ph name="END_LINK1" /> ಉಳಿಸಬಹುದು. ನೀವು ಅವುಗಳನ್ನು ಯಾವಾಗ ಬೇಕಾದರೂ ಅಳಿಸಬಹುದು.</translation>
 <translation id="506254248375231072">ಯಾವುದೇ ಟ್ಯಾಬ್‌ಗಳಿಲ್ಲ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
index deb4b7ae..bcc4ea3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">로그인 상태일 때 Chrome에서 사용자를 보호하고 기타 Google 앱에서 사용자의 보안을 개선하는 데 사용될 수 있습니다.</translation>
 <translation id="3429160811076349561">무료 체험 기능 사용 안함</translation>
 <translation id="3435465986463792564">창이 많이 열렸나요? 여기에서 관리할 수 있습니다.</translation>
+<translation id="3435738964857648380">보안</translation>
 <translation id="3443221991560634068">현재 페이지 새로고침</translation>
 <translation id="3444179773590444986">사이트의 어두운 테마에 관한 의견을 공유할까요?</translation>
 <translation id="3452832259067974318">Chrome에서는 개인 정보 보호를 위해 이 입력란의 비밀번호를 자동 완성하지 않습니다.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">팔로우할 수 없습니다. 문제가 발생했습니다.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{#시간}other{#시간}}</translation>
 <translation id="4035877632587724847">허용 안함</translation>
+<translation id="4036177530563778041">중단한 위치에서 계속하기</translation>
 <translation id="4045764304651014138">사용 데이터</translation>
 <translation id="405399507749852140">사이트에서 가격이 인하되면 알림이 전송됩니다</translation>
 <translation id="4056223980640387499">세피아</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR 코드를 만들 수 없음</translation>
 <translation id="5039804452771397117">허용</translation>
+<translation id="5040262127954254034">개인정보 보호</translation>
 <translation id="504456571576643789">고려사항</translation>
 <translation id="5054455334322721892">로그인할 경우 <ph name="BEGIN_LINK1" />다른 활동 형식<ph name="END_LINK1" />이 Google 계정에 저장될 수 있습니다. 이러한 데이터는 언제든지 삭제할 수 있습니다.</translation>
 <translation id="506254248375231072">탭 없음</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">프레임 안에 QR 코드나 바코드를 위치시키세요.</translation>
 <translation id="7029809446516969842">비밀번호</translation>
 <translation id="7030304022046916278">세이프 브라우징 서비스에 URL을 전송하여 확인하도록 합니다.</translation>
+<translation id="7030585293819777123">마지막 할 일을 다시 시작할까요?</translation>
 <translation id="7037830628447527439">Google 계정으로 Chrome에 로그인하기</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">이미지 설명을 표시하시겠습니까?</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 84e6ce3..9c2f85ec 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
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Аккаунтуңузга киргенде Chrome'до жана башка Google колдонмолорунда коопсуздугуңузду коргоп турат</translation>
 <translation id="3429160811076349561">Сыноонун функциялары өчүк</translation>
 <translation id="3435465986463792564">Көп терезе ачылып турабы? Аларды бул жерден башкарыңыз</translation>
+<translation id="3435738964857648380">Коопсуздук</translation>
 <translation id="3443221991560634068">Учурдагы баракты кайра жүктөө</translation>
 <translation id="3444179773590444986">Сайттарга колдонулган караңгы тема тууралуу пикир билдиресизби?</translation>
 <translation id="3452832259067974318">Купуялыгыңызды коргоо максатында, Chrome бул талаага сырсөзүңүздү автоматтык түрдө киргизбейт.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">Жазылган жок. Бир жерден ката кетти.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# саат}other{# саат}}</translation>
 <translation id="4035877632587724847">Тыюу салуу</translation>
+<translation id="4036177530563778041">Токтогон жериңизден оңой улантыңыз</translation>
 <translation id="4045764304651014138">Колдонуу статистикасы</translation>
 <translation id="405399507749852140">Кандайдыр бир сайтта баасы төмөндөсө, эскертүүлөрдү алыңыз</translation>
 <translation id="4056223980640387499">Sepia</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR коду түзүлгөн жок</translation>
 <translation id="5039804452771397117">Уруксат берүү</translation>
+<translation id="5040262127954254034">Купуялык</translation>
 <translation id="504456571576643789">Эске ала турган нерселер</translation>
 <translation id="5054455334322721892">Аккаунтуңузга кирип турсаңыз, <ph name="BEGIN_LINK1" />башка аракеттер<ph name="END_LINK1" /> Google аккаунтуңузга сакталышы мүмкүн. Аларды каалаган убакта жок кылсаңыз болот.</translation>
 <translation id="506254248375231072">Өтмөктөр жок</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">QR кодун же штрих кодду бул алкакка жайгаштырыңыз.</translation>
 <translation id="7029809446516969842">Сырсөздөр</translation>
 <translation id="7030304022046916278">URL даректерин текшерүү үчүн Коопсуз серептөөгө жөнөтөт</translation>
+<translation id="7030585293819777123">Акыркы жасалчу ишиңизди улантасызбы?</translation>
 <translation id="7037830628447527439">Chrome'го Google аккаунтуңуз менен кириңиз</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Сүрөттүн сүрөттөмөлөрүн аласызбы?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
index 4b44e24..b4a1aa89 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">ຮັກສາໃຫ້ທ່ານປອດໄພໃນ Chrome ແລະ ອາດຈະຖືກໃຊ້ເພື່ອປັບປຸງຄວາມປອດໄພໃນແອັບອື່ນຂອງ Google ເມື່ອທ່ານເຂົ້າສູ່ລະບົບ</translation>
 <translation id="3429160811076349561">ຄຸນສົມບັດການທົດລອງໃຊ້ປິດຢູ່</translation>
 <translation id="3435465986463792564">ມີຫຼາຍໜ້າຈໍບໍ? ທ່ານສາມາດຈັດການພວກມັນໄດ້ຈາກບ່ອນນີ້</translation>
+<translation id="3435738964857648380">ຄວາມ​ປອດ​ໄພ</translation>
 <translation id="3443221991560634068">ໂຫຼດໜ້າປັດຈຸບັນຄືນໃໝ່</translation>
 <translation id="3444179773590444986">ແບ່ງປັນຄຳຕິຊົມກ່ຽວກັບຮູບແບບສີສັນມືດສຳລັບເວັບໄຊບໍ?</translation>
 <translation id="3452832259067974318">ເພື່ອປົກປ້ອງຄວາມເປັນສ່ວນຕົວຂອງທ່ານ, Chrome ຈະບໍ່ຕື່ມຂໍ້ມູນລະຫັດຜ່ານຂອງທ່ານໃສ່ຊ່ອງຂໍ້ມູນນີ້ໂດຍອັດຕະໂນມັດ.</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">ບໍ່ສາມາດສ້າງລະຫັດ QR ໄດ້</translation>
 <translation id="5039804452771397117">ອະ​ນຸ​ຍາດ​</translation>
+<translation id="5040262127954254034">ຄວາມ​ເປັນ​ສ່ວນ​ຕົວ</translation>
 <translation id="504456571576643789">ສິ່ງທີ່ຕ້ອງພິຈາລະນາ</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />ການເຄື່ອນໄຫວຮູບແບບອື່ນ<ph name="END_LINK1" /> ອາດຖືກບັນທຶກໄວ້ໃນບັນຊີ Google ຂອງທ່ານເມື່ອທ່ານເຂົ້າສູ່ລະບົບ. ທ່ານສາມາດລຶບພວກມັນຕອນໃດກໍໄດ້.</translation>
 <translation id="506254248375231072">ບໍ່ມີແຖບ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
index 73baf6a..7588917 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Apsaugo jus naršyklėje „Chrome“ ir gali būti naudojama apsaugai kitose „Google“ programose pagerinti, kai esate prisijungę</translation>
 <translation id="3429160811076349561">Bandomosios funkcijos išjungtos</translation>
 <translation id="3435465986463792564">Atidaryta daug langų? Galite tvarkyti juos čia</translation>
+<translation id="3435738964857648380">Sauga</translation>
 <translation id="3443221991560634068">Iš naujo įkelti dabartinį puslapį</translation>
 <translation id="3444179773590444986">Bendrinti atsiliepimą apie tamsiąją temą, skirtą svetainėms?</translation>
 <translation id="3452832259067974318">Siekiant apsaugoti jūsų privatumą, „Chrome“ šio lauko automatiškai nepildys jūsų slaptažodžiu.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Su užraitais</translation>
 <translation id="5032430150487044192">Nepavyko sukurti QR kodo</translation>
 <translation id="5039804452771397117">Leisti</translation>
+<translation id="5040262127954254034">Privatumas</translation>
 <translation id="504456571576643789">Į ką reikėtų atsižvelgti</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Kitos veiklos formos<ph name="END_LINK1" /> gali būti išsaugotos jūsų „Google“ paskyroje, kai esate prisijungę. Galite bet kada jas ištrinti.</translation>
 <translation id="506254248375231072">Nėra skirtukų</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
index c9158aa..c50727c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Tiek nodrošināta jūsu aizsardzība pārlūkprogrammā Chrome. Šis režīms var tikt izmantots jūsu drošības uzlabošanai citās Google lietotnēs, kad esat pierakstījies.</translation>
 <translation id="3429160811076349561">Izmēģinājuma versijas funkcijas ir izslēgtas</translation>
 <translation id="3435465986463792564">Vai esat atvēris daudz logu? Šeit varat tos pārvaldīt.</translation>
+<translation id="3435738964857648380">Drošība</translation>
 <translation id="3443221991560634068">Atkārtoti ielādēt pašreizējo lapu</translation>
 <translation id="3444179773590444986">Vai kopīgot atsauksmi par tumšā motīva lietošanu vietnēs?</translation>
 <translation id="3452832259067974318">Lai aizsargātu jūsu konfidencialitāti, Chrome neveiks šī lauka automātisko aizpildi ar jūsu paroli.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">Nevar sekot. Radās kļūda.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}zero{# h}one{# h}other{# h}}</translation>
 <translation id="4035877632587724847">Neatļaut</translation>
+<translation id="4036177530563778041">Ērti turpiniet darbu no vietas, kur to pārtraucāt.</translation>
 <translation id="4045764304651014138">Lietojuma dati</translation>
 <translation id="405399507749852140">Saņemiet paziņojumus, ja kādā vietnē tiek konstatēts cenas kritums.</translation>
 <translation id="4056223980640387499">Sēpija</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Nevar izveidot kvadrātkodu</translation>
 <translation id="5039804452771397117">Atļaut</translation>
+<translation id="5040262127954254034">Konfidencialitāte</translation>
 <translation id="504456571576643789">Svarīgi apsvērumi</translation>
 <translation id="5054455334322721892">Kad esat pierakstījies, jūsu Google kontā var saglabāt <ph name="BEGIN_LINK1" />arī cita veida darbības<ph name="END_LINK1" />. Jebkurā laikā varat tās izdzēst.</translation>
 <translation id="506254248375231072">Nav ciļņu</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">Novietojiet kvadrātkodu vai svītrkodu šajā ietvarā.</translation>
 <translation id="7029809446516969842">Paroles</translation>
 <translation id="7030304022046916278">Vietrāži URL tiek sūtīti uz funkciju Droša pārlūkošana, lai tos pārbaudītu.</translation>
+<translation id="7030585293819777123">Vai atsākt pēdējo uzdevumu?</translation>
 <translation id="7037830628447527439">Pierakstieties pārlūkā Chrome, izmantojot savu Google kontu.</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Vai vēlaties iespējot attēlu aprakstus?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
index 1e98af8..8b9f4f0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Ја чува вашата безбедност на Chrome и може да се користи за да ја подобри безбедноста на други апликации на Google кога сте најавени</translation>
 <translation id="3429160811076349561">Пробните функции се исклучени</translation>
 <translation id="3435465986463792564">Имате многу прозорци? Може да управувате со нив оттука</translation>
+<translation id="3435738964857648380">Безбедност</translation>
 <translation id="3443221991560634068">Вчитајте ја тековната страница</translation>
 <translation id="3444179773590444986">Сакате да споделите повратни информации за темната тема за сајтови?</translation>
 <translation id="3452832259067974318">За да ја заштити вашата приватност, Chrome нема автоматски да ја пополнува вашата лозинка во ова поле.</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Не може да се создаде QR-код</translation>
 <translation id="5039804452771397117">Дозволи</translation>
+<translation id="5040262127954254034">Приватност</translation>
 <translation id="504456571576643789">Нешта што треба да се земат предвид</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Други форми на активност<ph name="END_LINK1" /> може да се зачувуваат во вашата сметка на Google кога сте најавени. Може да ги избришете во секое време.</translation>
 <translation id="506254248375231072">Нема картички</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
index 01e7516f..846778bc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">നിങ്ങൾ സൈൻ ഇൻ ആയിരിക്കുമ്പോൾ Chrome-ൽ നിങ്ങളെ സുരക്ഷിതരാക്കുകയും മറ്റ് Google ആപ്പുകളിൽ നിങ്ങളുടെ സുരക്ഷ മെച്ചപ്പെടുത്താനും ഉപയോഗിച്ചേക്കാം</translation>
 <translation id="3429160811076349561">ട്രയൽ ഫീച്ചറുകൾ ഓഫാണ്</translation>
 <translation id="3435465986463792564">നിരവധി വിൻഡോകളുണ്ടോ? അവ നിങ്ങൾക്ക് ഇവിടെ മാനേജ് ചെയ്യാം</translation>
+<translation id="3435738964857648380">സുരക്ഷ</translation>
 <translation id="3443221991560634068">നിലവിലെ പേജ് റീലോഡ് ചെയ്യുക</translation>
 <translation id="3444179773590444986">സൈറ്റുകൾക്കുള്ള ഡാർക്ക് തീമുകൾ സംബന്ധിച്ച് ഫീഡ്ബാക്ക് പങ്കിടണോ?</translation>
 <translation id="3452832259067974318">നിങ്ങളുടെ സ്വകാര്യത പരിരക്ഷിക്കാൻ, Chrome ഈ ഫീൽഡിൽ പാസ്‌വേഡ് സ്വയമേവ പൂരിപ്പിക്കില്ല.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">പിന്തുടരാനാകുന്നില്ല. എന്തോ കുഴപ്പമുണ്ടായി.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# മണിക്കൂർ}other{# മണിക്കൂർ}}</translation>
 <translation id="4035877632587724847">അനുവദിക്കരുത്</translation>
+<translation id="4036177530563778041">നിങ്ങൾ നിർത്തിയ ഇടത്തുനിന്നും എളുപ്പത്തിൽ തുടരുക</translation>
 <translation id="4045764304651014138">ഉപയോഗ ഡാറ്റ</translation>
 <translation id="405399507749852140">ഏതെങ്കിലും സൈറ്റിൽ വിലക്കുറവ് ഉണ്ടെങ്കിൽ അറിയിപ്പുകൾ നേടുക</translation>
 <translation id="4056223980640387499">സിപിയ</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR കോഡ് സൃഷ്‌ടിക്കാനാകില്ല</translation>
 <translation id="5039804452771397117">അനുവദിക്കൂ</translation>
+<translation id="5040262127954254034">സ്വകാര്യത</translation>
 <translation id="504456571576643789">പരിഗണിക്കേണ്ട കാര്യങ്ങൾ</translation>
 <translation id="5054455334322721892">നിങ്ങൾ സൈൻ ഇൻ ചെയ്‌തിരിക്കുമ്പോൾ <ph name="BEGIN_LINK1" />മറ്റ് തരത്തിലുള്ള ആക്റ്റിവിറ്റി<ph name="END_LINK1" /> Google അക്കൗണ്ടിൽ സംരക്ഷിച്ചേക്കാം. അവ ഏതുസമയത്തും നിങ്ങൾക്ക് ഇല്ലാതാക്കാം.</translation>
 <translation id="506254248375231072">ടാബുകളൊന്നും ഇല്ല</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">ഈ ഫ്രെയിമിൽ QR കോഡ്/ബാർ‌കോഡ് സ്ഥാപിക്കുക.</translation>
 <translation id="7029809446516969842">പാസ്‌വേഡുകള്‍</translation>
 <translation id="7030304022046916278">URL-കൾ പരിശോധിക്കുന്നതിന് അവ സുരക്ഷിത ബ്രൗസിംഗിലേക്ക് അയയ്‌ക്കുന്നു</translation>
+<translation id="7030585293819777123">നിങ്ങളുടെ അവസാനത്തെ ടാസ്‌ക് പുനരാരംഭിക്കണോ?</translation>
 <translation id="7037830628447527439">നിങ്ങളുടെ Google അക്കൗണ്ട് ഉപയോഗിച്ച് Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">ചിത്ര വിവരണങ്ങൾ നേടണോ?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
index c6bbf4c..bf2815a3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Таныг нэвтэрсэн үед Chrome дээр таны аюулгүй байдлыг хангадаг бөгөөд Google-н бусад апп дахь таны аюулгүй байдлыг сайжруулахын тулд ашиглагдах боломжтой</translation>
 <translation id="3429160811076349561">Туршилтын онцлог унтраалттай байна</translation>
 <translation id="3435465986463792564">Олон цонхтой юу? Та тэдгээрийг эндээс удирдах боломжтой</translation>
+<translation id="3435738964857648380">Нууцлал</translation>
 <translation id="3443221991560634068">Одоогийн хуудсыг дахин ачаалах</translation>
 <translation id="3444179773590444986">Сайтуудад зориулсан бараан загварын талаар cанал хүсэлт хуваалцах уу?</translation>
 <translation id="3452832259067974318">Таны нууцлалыг хамгаалахын тулд Chrome таныг нууц үгийг энэ талбарт автоматаар бөглөхгүй.</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">видео</translation>
 <translation id="4766313118839197559">Нууц үгнүүдийг энэ төхөөрөмж дээр Нууц үгний менежерт хадгалдаг.</translation>
 <translation id="4766678251456904326">Төхөөрөмжид бүртгэл нэмэх</translation>
+<translation id="4769095993849849966">Файлын шинэ нэр</translation>
 <translation id="4787736314074622408">Та <ph name="ITEM_TITLE" />-г устгахыг хүсэж байна уу?</translation>
 <translation id="4791358705705538979">Танд тооцоо хийх зэрэг веб дээр ажил гүйцэтгэхэд тусална</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Сериф</translation>
 <translation id="5032430150487044192">QR код үүсгэх боломжгүй байна</translation>
 <translation id="5039804452771397117">Зөвшөөрөх</translation>
+<translation id="5040262127954254034">Нууцлал</translation>
 <translation id="504456571576643789">Анхаарч үзэх зүйлс</translation>
 <translation id="5054455334322721892">Таныг нэвтэрсэн үед <ph name="BEGIN_LINK1" />бусад төрлийн үйл ажиллагааг<ph name="END_LINK1" /> Google Бүртгэлд тань хадгалж магадгүй. Та тэдгээрийг хүссэн үедээ устгах боломжтой.</translation>
 <translation id="506254248375231072">Таб байхгүй</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
index d49f8c6..7e6a8749 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">तुम्हाला Chrome वर सुरक्षित ठेवते आणि तुम्ही साइन इन केलेले असताना इतर Google अ‍ॅप्समध्ये तुमच्या सुरक्षिततेत सुधारणा करण्यासाठी वापरले जाऊ शकते</translation>
 <translation id="3429160811076349561">चाचणी वैशिष्ट्ये बंद आहेत</translation>
 <translation id="3435465986463792564">खूप विंडो उघडल्या आहेत का? तुम्ही त्या येथे व्यवस्थापित करू शकता</translation>
+<translation id="3435738964857648380">सुरक्षितता</translation>
 <translation id="3443221991560634068">वर्तमान पृष्‍ठ रीलोड करा</translation>
 <translation id="3444179773590444986">साइटसाठीच्या गडद थीमबाबत फीडबॅक शेअर करायचा आहे का?</translation>
 <translation id="3452832259067974318">तुमच्‍या गोपनीयतेचे संरक्षण करण्‍यासाठी, या फील्‍डमध्‍ये Chrome तुमचा पासवर्ड ऑटोफिल करणार नाही.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">फॉलो करू शकत नाही. काहीतरी चूक झाली.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# तास}other{# तास}}</translation>
 <translation id="4035877632587724847">अनुमती देऊ नका</translation>
+<translation id="4036177530563778041">तम्ही सोडले होते तेथून पुढे सहज सुरू करा</translation>
 <translation id="4045764304651014138">वापर डेटा</translation>
 <translation id="405399507749852140">कोणत्याही साइटवर किंमत कमी झाल्यास सूचना मिळवा</translation>
 <translation id="4056223980640387499">सेपिया</translation>
@@ -681,6 +683,7 @@
 <translation id="4763480195061959176">व्हिडिओ</translation>
 <translation id="4766313118839197559">पासवर्ड हे या डिव्हाइसवर पासवर्ड व्यवस्थापक यामध्ये सेव्ह केले जातात</translation>
 <translation id="4766678251456904326">डिव्हाइसवर खाते जोडा</translation>
+<translation id="4769095993849849966">नवीन फाइल नाव</translation>
 <translation id="4787736314074622408">तुम्हाला <ph name="ITEM_TITLE" /> का हटवायची आहे?</translation>
 <translation id="4791358705705538979">तुम्हाला संपूर्ण वेबवर चेकआउटसारखी कार्ये पूर्ण करण्यात मदत करते</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -744,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR कोड तयार करता आला नाही</translation>
 <translation id="5039804452771397117">परवानगी द्या</translation>
+<translation id="5040262127954254034">गोपनीयता</translation>
 <translation id="504456571576643789">विचारात घेण्याच्या गोष्टी</translation>
 <translation id="5054455334322721892">तुम्ही साइन इन केलेले असते तेव्हा, तुमच्या Google खाते मध्ये <ph name="BEGIN_LINK1" />इतर प्रकारची ॲक्टिव्हिटी<ph name="END_LINK1" /> सेव्ह केली जाऊ शकते. तुम्ही ती कधीही हटवू शकता.</translation>
 <translation id="506254248375231072">कोणतेही टॅब नाहीत</translation>
@@ -1123,6 +1127,7 @@
 <translation id="7029390216614421513">QR कोड/बारकोड या फ्रेममध्‍ये बसवा.</translation>
 <translation id="7029809446516969842">पासवर्ड</translation>
 <translation id="7030304022046916278">URLs तपासण्यासाठी त्या सुरक्षित ब्राउझिंग ला पाठवते</translation>
+<translation id="7030585293819777123">तुमची शेवटची टास्क पुन्हा सुरू करायची आहे का?</translation>
 <translation id="7037830628447527439">तुमचे Google खाते वापरून Chrome मध्ये साइन इन करा</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">इमेजची वर्णने मिळवायची का?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
index f1801cd..2468d29 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Memastikan anda selamat pada Chrome dan mungkin digunakan untuk meningkatkan keselamatan anda dalam apl Google yang lain apabila anda log masuk</translation>
 <translation id="3429160811076349561">Ciri percubaan dimatikan</translation>
 <translation id="3435465986463792564">Ada banyak tetingkap? Anda boleh mengurus tetingkap tersebut dari sini</translation>
+<translation id="3435738964857648380">Keselamatan</translation>
 <translation id="3443221991560634068">Muat semula halaman semasa</translation>
 <translation id="3444179773590444986">Kongsikan maklum balas tentang tema gelap untuk laman?</translation>
 <translation id="3452832259067974318">Untuk melindungi privasi anda, Chrome tidak akan mengisi kata laluan anda ke dalam medan ini secara automatik.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">Tidak dapat mengikuti. Kesilapan telah berlaku.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# jam}other{# jam}}</translation>
 <translation id="4035877632587724847">Jangan benarkan</translation>
+<translation id="4036177530563778041">Teruskan dari tempat anda berhenti dengan mudah</translation>
 <translation id="4045764304651014138">Data penggunaan</translation>
 <translation id="405399507749852140">Dapatkan makluman sekiranya harga jatuh pada mana-mana laman</translation>
 <translation id="4056223980640387499">Sepia</translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Tidak dapat membuat Kod QR</translation>
 <translation id="5039804452771397117">Benarkan</translation>
+<translation id="5040262127954254034">Privasi</translation>
 <translation id="504456571576643789">Perkara yang perlu dipertimbangkan</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Bentuk aktiviti lain<ph name="END_LINK1" /> mungkin disimpan dalam Akaun Google anda semasa anda dilog masuk. Anda boleh memadamkan data tersebut pada bila-bila masa.</translation>
 <translation id="506254248375231072">Tiada tab</translation>
@@ -1124,6 +1127,7 @@
 <translation id="7029390216614421513">Letakkan Kod QR/kod bar dalam bingkai ini.</translation>
 <translation id="7029809446516969842">Kata laluan</translation>
 <translation id="7030304022046916278">Menghantar URL kepada Penyemakan Imbas Selamat untuk semakan</translation>
+<translation id="7030585293819777123">Sambung semula tugas terakhir anda?</translation>
 <translation id="7037830628447527439">Log masuk ke Chrome menggunakan Google Account anda</translation>
 <translation id="7038956721828960940">imej_chrome_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Dapatkan perihalan imej?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
index 8bdda344..6004945 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Chrome တွင် ဘေးကင်းစေပြီး သင်လက်မှတ်ထိုးဝင်သည့်အခါ အခြား Google အက်ပ်များတွင် သင့်လုံခြုံရေး ပိုကောင်းမွန်စေရန် အသုံးပြုနိုင်သည်</translation>
 <translation id="3429160811076349561">အစမ်းသုံးလုပ်ဆောင်ချက်များကို ပိတ်ထားသည်</translation>
 <translation id="3435465986463792564">ဝင်းဒိုးများ ရပြီလား။ ၎င်းတို့ကို ဤနေရာမှ စီမံနိုင်ပါသည်</translation>
+<translation id="3435738964857648380">လုံခြုံရေး</translation>
 <translation id="3443221991560634068">လက်ရှိစာမျက်နှာကို ပြန်ဖွင့်ရန်</translation>
 <translation id="3444179773590444986">ဝဘ်ဆိုက်များအတွက် အမှောင်နောက်ခံအကြောင်း အကြံပြုချက်မျှဝေမလား။</translation>
 <translation id="3452832259067974318">သင်၏ကိုယ်ရေးအချက်အလက်လုံခြုံမှုကို ကာကွယ်ရန် Chrome သည် ဤအကွက်တွင် သင်၏ စကားဝှက်ကို အော်တိုဖြည့်မည် မဟုတ်ပါ။</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR ကုဒ် ပြုလုပ်၍မရပါ</translation>
 <translation id="5039804452771397117">ခွင့်ပြုရန်</translation>
+<translation id="5040262127954254034">ကိုယ်ရေး</translation>
 <translation id="504456571576643789">စဉ်းစားရန် အချက်များ</translation>
 <translation id="5054455334322721892">သင်လက်မှတ်ထိုးဝင်သောအခါ <ph name="BEGIN_LINK1" />အခြားသော လုပ်ဆောင်ချက်များ<ph name="END_LINK1" /> ကို သင်၏ Google Account တွင် သိမ်းထားနိုင်သည်။ ၎င်းတို့ကို အချိန်မရွေး ဖျက်နိုင်သည်။</translation>
 <translation id="506254248375231072">တဘ် မရှိပါ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
index ea6a0099..5e801ad 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">तपाईं साइन इन भएका बेला यस सुविधाले Chrome मा तपाईंलाई सुरक्षित राख्छ। त्यस्तै, यो सुविधा तपाईंलाई Google का अन्य एपहरूमा अझ् धेरै सुरक्षा प्रदान गर्न पनि प्रयोग गरिन सक्छ</translation>
 <translation id="3429160811076349561">ट्रायल सुविधाहरू अफ गरिएका छन्</translation>
 <translation id="3435465986463792564">थुप्रै विन्डो छन्? तपाईं यहाँबाट ती विन्डोहरू व्यवस्थापन गर्न सक्नुहुन्छ</translation>
+<translation id="3435738964857648380">सुरक्षा</translation>
 <translation id="3443221991560634068">हालको पृष्ठलाई पुनःलोड गर्नुहोस्</translation>
 <translation id="3444179773590444986">साइटहरूमा लागू हुने अँध्यारो थिमका बारेमा प्रतिक्रिया दिने हो?</translation>
 <translation id="3452832259067974318">तपाईंको गोपनीयताको सुरक्षार्थ Chrome ले यो फिल्डमा तपाईंको पासवर्ड अटोफिल गर्ने छैन।</translation>
@@ -744,6 +745,7 @@
 <translation id="5016205925109358554">सेरिफ</translation>
 <translation id="5032430150487044192">QR कोड सिर्जना गर्न सकिएन</translation>
 <translation id="5039804452771397117">अनुमति दिनुहोस्</translation>
+<translation id="5040262127954254034">गोपनीयता</translation>
 <translation id="504456571576643789">विचार गर्नु पर्ने कुराहरू</translation>
 <translation id="5054455334322721892">तपाईंले आफ्नो Google खातामा साइन इन गर्नुभएका बेला सो खातामा <ph name="BEGIN_LINK1" />अन्य किसिमका क्रियाकलाप<ph name="END_LINK1" /> सेभ गरिन सक्छ। तपाईं जुनसुकै बेला तिनलाई मेटाउन सक्नुहुन्छ।</translation>
 <translation id="506254248375231072">कुनै पनि ट्याब छैन</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
index 8206dc05..d71ee57 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Beschermt je op Chrome en kan worden gebruikt om de beveiliging in andere Google-apps te verbeteren als je bent ingelogd</translation>
 <translation id="3429160811076349561">Proeffuncties staan uit</translation>
 <translation id="3435465986463792564">Heb je veel vensters open? Beheer ze hier.</translation>
+<translation id="3435738964857648380">Beveiliging</translation>
 <translation id="3443221991560634068">De huidige pagina opnieuw laden</translation>
 <translation id="3444179773590444986">Feedback delen over donker thema voor sites?</translation>
 <translation id="3452832259067974318">Ter bescherming van je privacy vult Chrome je wachtwoord niet automatisch in dit veld in.</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Wachtwoorden worden opgeslagen in Wachtwoordmanager op dit apparaat</translation>
 <translation id="4766678251456904326">Account toevoegen aan apparaat</translation>
+<translation id="4769095993849849966">Nieuwe bestandsnaam</translation>
 <translation id="4787736314074622408">Wil je <ph name="ITEM_TITLE" /> verwijderen?</translation>
 <translation id="4791358705705538979">Hiermee kun je op internet taken afronden, zoals betalen.</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Kan geen QR-code maken</translation>
 <translation id="5039804452771397117">Toestaan</translation>
+<translation id="5040262127954254034">Privacy</translation>
 <translation id="504456571576643789">Overwegingen</translation>
 <translation id="5054455334322721892">Er kunnen <ph name="BEGIN_LINK1" />andere vormen van activiteit<ph name="END_LINK1" /> worden opgeslagen op je Google-account als je bent ingelogd. Je kunt ze wanneer je wilt verwijderen.</translation>
 <translation id="506254248375231072">Geen tabbladen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
index c5be9b5..8be5334 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Holder deg trygg i Chrome og kan brukes til å øke sikkerheten din i andre Google-apper når du er pålogget</translation>
 <translation id="3429160811076349561">Prøvefunksjoner er avslått</translation>
 <translation id="3435465986463792564">Har du mange vinduer? Du kan administrere dem her</translation>
+<translation id="3435738964857648380">Sikkerhet</translation>
 <translation id="3443221991560634068">Last inn den aktive siden på nytt</translation>
 <translation id="3444179773590444986">Vil du dele tilbakemeldinger om mørkt tema for nettsteder?</translation>
 <translation id="3452832259067974318">For å beskytte personvernet ditt autofyller ikke Chrome passordet ditt i dette feltet.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Kan ikke opprette QR-kode</translation>
 <translation id="5039804452771397117">Tillat</translation>
+<translation id="5040262127954254034">Personvern</translation>
 <translation id="504456571576643789">Ting å tenke på</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Andre typer aktiviteter<ph name="END_LINK1" /> kan bli lagret i Google-kontoen din når du er pålogget. Du kan slette dem når som helst.</translation>
 <translation id="506254248375231072">Ingen faner</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
index 4204879..15b793f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">ଯେତେବେଳେ ଆପଣ ସାଇନ୍ ଇନ୍ କରନ୍ତି ଏହା ଆପଣଙ୍କୁ Chromeରେ ସୁରକ୍ଷିତ ରଖେ ଏବଂ ଅନ୍ୟ Google ଆପଗୁଡ଼ିକରେ ଆପଣଙ୍କ ସୁରକ୍ଷାକୁ ଉନ୍ନତ କରିବା ପାଇଁ ବ୍ୟବହାର କରାଯାଇପାରେ</translation>
 <translation id="3429160811076349561">ଟ୍ରାଏଲ୍ ଫିଚରଗୁଡ଼ିକ ବନ୍ଦ ଅଛି</translation>
 <translation id="3435465986463792564">ଅନେକ ୱିଣ୍ଡୋ ଖୋଲା ଅଛି କି? ଆପଣ ସେଗୁଡ଼ିକୁ ଏଠାରୁ ପରିଚାଳନା କରିପାରିବେ</translation>
+<translation id="3435738964857648380">ସୁରକ୍ଷା</translation>
 <translation id="3443221991560634068">ବର୍ତ୍ତମାନର ପୃଷ୍ଠାକୁ ରିଲୋଡ୍ କରନ୍ତୁ</translation>
 <translation id="3444179773590444986">ସାଇଟଗୁଡ଼ିକ ପାଇଁ ଗାଢ଼ା ଥିମ ବିଷୟରେ ମତାମତ ସେୟାର କରିବେ?</translation>
 <translation id="3452832259067974318">ଆପଣଙ୍କ ଗୋପନୀୟତାକୁ ସୁରକ୍ଷିତ ରଖିବା ପାଇଁ, ଏହି ଫିଲ୍ଡରେ Chrome ଆପଣଙ୍କ ପାସୱାର୍ଡକୁ ଅଟୋଫିଲ କରିବ ନାହିଁ।</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">ଭିଡିଓ</translation>
 <translation id="4766313118839197559">ଏହି ଡିଭାଇସର Password Managerରେ ପାସୱାର୍ଡଗୁଡ଼ିକ ସେଭ କରାଯାଇଛି</translation>
 <translation id="4766678251456904326">ଡିଭାଇସରେ ଆକାଉଣ୍ଟ ଯୋଗ କରନ୍ତୁ</translation>
+<translation id="4769095993849849966">ନୂଆ ଫାଇଲର ନାମ</translation>
 <translation id="4787736314074622408">ଆପଣ <ph name="ITEM_TITLE" />କୁ ଡିଲିଟ କରିବା ପାଇଁ ଚାହୁଁଛନ୍ତି?</translation>
 <translation id="4791358705705538979">ସମଗ୍ର ୱେବରେ ଚେକଆଉଟ୍ ପରି ଟାସ୍କଗୁଡ଼ିକୁ ସମ୍ପୂର୍ଣ୍ଣ କରିବାରେ ଆପଣଙ୍କୁ ସାହାଯ୍ୟ କରେ</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">ସେରିଫ୍‌</translation>
 <translation id="5032430150487044192">QR କୋଡ୍ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ</translation>
 <translation id="5039804452771397117">ଅନୁମତି</translation>
+<translation id="5040262127954254034">ଗୋପନୀୟତା</translation>
 <translation id="504456571576643789">ବିଚାରଯୋଗ୍ୟ ବିଷୟଗୁଡ଼ିକ</translation>
 <translation id="5054455334322721892">ଆପଣ ସାଇନ୍ ଇନ୍ କରିଥିବା ବେଳେ <ph name="BEGIN_LINK1" />ଅନ୍ୟ ପ୍ରକାରର କାର୍ଯ୍ୟକଳାପ<ph name="END_LINK1" /> ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସେଭ୍ ହୋଇପାରେ। ଆପଣ ସେଗୁଡ଼ିକୁ ଯେ କୌଣସି ସମୟରେ ଡିଲିଟ୍ କରିପାରିବେ।</translation>
 <translation id="506254248375231072">କୌଣସି ଟାବ୍ ନାହିଁ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
index 99d1306..e2cdbbc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">ਤੁਹਾਡੇ ਸਾਈਨ-ਇਨ ਹੋਣ 'ਤੇ, ਤੁਹਾਨੂੰ Chrome ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਰੱਖਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਸ਼ਾਇਦ ਹੋਰ Google ਐਪਾਂ ਵਿੱਚ ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਨੂੰ ਸੁਧਾਰਨ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕੇ</translation>
 <translation id="3429160811076349561">ਪਰਖ ਸੰਬੰਧੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਬੰਦ ਹਨ</translation>
 <translation id="3435465986463792564">ਕੀ ਬਹੁਤ ਸਾਰੀਆਂ ਵਿੰਡੋ ਖੁੱਲ੍ਹੀਆਂ ਹੋਈਆਂ ਹਨ? ਤੁਸੀਂ ਇੱਥੇ ਉਨ੍ਹਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦੇ ਹੋ</translation>
+<translation id="3435738964857648380">ਸੁਰੱਖਿਆ</translation>
 <translation id="3443221991560634068">ਮੌਜੂਦਾ ਪੰਨੇ ਨੂੰ ਮੁੜ-ਲੋਡ ਕਰੋ</translation>
 <translation id="3444179773590444986">ਕੀ ਸਾਈਟਾਂ ਲਈ ਗੂੜ੍ਹੇ ਥੀਮ ਬਾਰੇ ਵਿਚਾਰ ਸਾਂਝਾ ਕਰਨਾ ਹੈ?</translation>
 <translation id="3452832259067974318">ਤੁਹਾਡੀ ਪਰਦੇਦਾਰੀ ਦੀ ਸੁਰੱਖਿਆ ਲਈ, Chrome ਇਸ ਖੇਤਰ ਵਿੱਚ ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਨੂੰ ਆਟੋਫਿਲ ਨਹੀਂ ਕਰੇਗਾ।</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR ਕੋਡ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ</translation>
 <translation id="5039804452771397117">ਆਗਿਆ ਦਿਓ</translation>
+<translation id="5040262127954254034">ਪਰਦੇਦਾਰੀ</translation>
 <translation id="504456571576643789">ਵਿਚਾਰਨ ਵਾਲੀਆਂ ਚੀਜ਼ਾਂ</translation>
 <translation id="5054455334322721892">ਤੁਹਾਡੇ ਸਾਈਨ-ਇਨ ਹੋਣ 'ਤੇ, ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ <ph name="BEGIN_LINK1" />ਸਰਗਰਮੀ ਦੀਆਂ ਹੋਰ ਕਿਸਮਾਂ<ph name="END_LINK1" /> ਨੂੰ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਉਨ੍ਹਾਂ ਨੂੰ ਕਿਸੇ ਵੀ ਸਮੇਂ ਮਿਟਾ ਸਕਦੇ ਹੋ।</translation>
 <translation id="506254248375231072">ਕੋਈ ਟੈਬ ਨਹੀਂ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
index 11c4f54b..b9f3b032 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Dba o Twoje bezpieczeństwo w Chrome i może poprawiać Twoje bezpieczeństwo w innych aplikacjach Google, gdy się w nich zalogujesz</translation>
 <translation id="3429160811076349561">Funkcje próbne są wyłączone</translation>
 <translation id="3435465986463792564">Masz sporo okien? Tutaj możesz nimi zarządzać</translation>
+<translation id="3435738964857648380">Bezpieczeństwo</translation>
 <translation id="3443221991560634068">Ponownie załaduj bieżącą stronę</translation>
 <translation id="3444179773590444986">Co sądzisz o ciemnym motywie witryn?</translation>
 <translation id="3452832259067974318">Aby chronić Twoją prywatność, Chrome nie będzie autouzupełniać hasła w tym polu.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Szeryfowa</translation>
 <translation id="5032430150487044192">Nie udało się utworzyć kodu QR</translation>
 <translation id="5039804452771397117">Zezwalaj</translation>
+<translation id="5040262127954254034">Prywatność</translation>
 <translation id="504456571576643789">Istotne kwestie</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Inne formy aktywności<ph name="END_LINK1" /> mogą być zapisywane na Twoim koncie Google, gdy się zalogujesz. W każdej chwili możesz je usunąć.</translation>
 <translation id="506254248375231072">Brak kart</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
index 7220297..6371c43 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Protege você no Chrome e pode ser usado para melhorar a segurança em outros apps do Google quando sua conta está conectada</translation>
 <translation id="3429160811076349561">Os recursos de teste estão desativados</translation>
 <translation id="3435465986463792564">Muitas janelas? Gerencie aqui.</translation>
+<translation id="3435738964857648380">Segurança</translation>
 <translation id="3443221991560634068">Atualizar a página atual</translation>
 <translation id="3444179773590444986">Enviar feedback sobre o tema escuro para sites?</translation>
 <translation id="3452832259067974318">Para proteger sua privacidade, o Chrome não vai preencher a senha automaticamente neste campo.</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Não é possível criar o código QR</translation>
 <translation id="5039804452771397117">Permitir</translation>
+<translation id="5040262127954254034">Privacidade</translation>
 <translation id="504456571576643789">Considerações</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Outras formas de atividade<ph name="END_LINK1" /> podem ser salvas na sua conta quando ela está conectada. É possível excluí-las a qualquer momento.</translation>
 <translation id="506254248375231072">Nenhuma guia</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
index d39a30f..50da321 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Mantém a sua segurança no Chrome e pode ser utilizado para melhorar a sua segurança noutras apps Google quando tem sessão iniciada.</translation>
 <translation id="3429160811076349561">As funcionalidades de avaliação estão desativadas</translation>
 <translation id="3435465986463792564">Tem muitas janelas? Pode geri-las aqui</translation>
+<translation id="3435738964857648380">Segurança</translation>
 <translation id="3443221991560634068">Atualizar a página atual</translation>
 <translation id="3444179773590444986">Pretende partilhar feedback sobre o tema escuro para os sites?</translation>
 <translation id="3452832259067974318">Para proteger a sua privacidade, o Chrome não irá preencher automaticamente a palavra-passe neste campo.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Não é possível criar o código QR</translation>
 <translation id="5039804452771397117">Permitir</translation>
+<translation id="5040262127954254034">Privacidade</translation>
 <translation id="504456571576643789">Aspetos a considerar</translation>
 <translation id="5054455334322721892">Podem ser guardadas <ph name="BEGIN_LINK1" />outras formas de atividade<ph name="END_LINK1" /> na sua Conta Google quando tem sessão iniciada. Pode eliminá-las em qualquer altura.</translation>
 <translation id="506254248375231072">Nenhum separador</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
index 9c08b8d..60ce676 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Te protejează în Chrome și poate fi folosită pentru a spori securitatea în alte aplicații Google dacă te-ai conectat</translation>
 <translation id="3429160811076349561">Funcțiile de încercare sunt dezactivate</translation>
 <translation id="3435465986463792564">Ai deschis multe ferestre? Gestionează-le de aici</translation>
+<translation id="3435738964857648380">Securitate</translation>
 <translation id="3443221991560634068">Reîncarcă pagina curentă</translation>
 <translation id="3444179773590444986">Trimiți feedback despre tema întunecată pentru site-uri?</translation>
 <translation id="3452832259067974318">Pentru a-ți proteja confidențialitatea, Chrome nu va completa automat parola în acest câmp.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Nu s-a putut crea codul QR</translation>
 <translation id="5039804452771397117">Permite</translation>
+<translation id="5040262127954254034">Confidențialitate</translation>
 <translation id="504456571576643789">De reținut</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Alte tipuri de activități<ph name="END_LINK1" /> pot fi salvate în Contul Google dacă te-ai conectat. Le poți șterge oricând.</translation>
 <translation id="506254248375231072">Nicio filă</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
index dd76e11..f0e5801 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Защищает вас в браузере Chrome и может использоваться для повышения безопасности в других приложениях Google при входе в аккаунт.</translation>
 <translation id="3429160811076349561">Функции отключены</translation>
 <translation id="3435465986463792564">Открыто много окон? Ими можно управлять здесь.</translation>
+<translation id="3435738964857648380">Безопасность</translation>
 <translation id="3443221991560634068">Обновить страницу</translation>
 <translation id="3444179773590444986">Отправить отзыв о тёмной теме для сайтов?</translation>
 <translation id="3452832259067974318">Чтобы обеспечить конфиденциальность ваших данных, мы просим ввести пароль вручную.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">Не удалось подписаться. Что-то пошло не так.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# час}one{# час}few{# часа}many{# часов}other{# часа}}</translation>
 <translation id="4035877632587724847">Запретить</translation>
+<translation id="4036177530563778041">Легко продолжайте с того места, где остановились.</translation>
 <translation id="4045764304651014138">Данные об использовании</translation>
 <translation id="405399507749852140">Если на одном из сайтов цена снизится, вы получите уведомление.</translation>
 <translation id="4056223980640387499">Сепия</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">С засечками</translation>
 <translation id="5032430150487044192">Не удалось создать QR-код.</translation>
 <translation id="5039804452771397117">Разрешить</translation>
+<translation id="5040262127954254034">Конфиденциальность</translation>
 <translation id="504456571576643789">Важная информация</translation>
 <translation id="5054455334322721892">Сведения о <ph name="BEGIN_LINK1" />других действиях<ph name="END_LINK1" /> могут сохраняться в аккаунте Google, если вы в него вошли. Их можно удалить в любое время.</translation>
 <translation id="506254248375231072">Нет вкладок</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">Поместите QR-код или штрихкод в эту рамку.</translation>
 <translation id="7029809446516969842">Пароли</translation>
 <translation id="7030304022046916278">Обеспечивает отправку URL на проверку по критериям Безопасного просмотра.</translation>
+<translation id="7030585293819777123">Восстановить последний сеанс?</translation>
 <translation id="7037830628447527439">Войдите в Chrome, используя аккаунт Google</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Генерировать описания изображений?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
index 853359de..d93130a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">ඔබ පුරනය වී සිටින විට Chrome මත ඔබව ආරක්‍ෂිතව තබා ගන්නා අතර සහ අනෙකුත් Google යෙදුම් තුළ ඔබේ ආරක්ෂාව වැඩිදියුණු කිරීමට භාවිත කළ හැක</translation>
 <translation id="3429160811076349561">අත්හදා බැලීමේ විශේෂාංග ක්‍රියාවිරහිතයි</translation>
 <translation id="3435465986463792564">බොහෝ කවුළු ලැබුණිද? ඔබට ඒවා මෙහි සිට කළමනාකරණය කළ හැකිය</translation>
+<translation id="3435738964857648380">ආරක්ෂක</translation>
 <translation id="3443221991560634068">වත්මන් පිටුව නැවත පූරණය කරන්න</translation>
 <translation id="3444179773590444986">අඩවි සඳහා අඳුරු තේමාව පිළිබඳ ප්‍රතිපෝෂණ බෙදා ගන්නද?</translation>
 <translation id="3452832259067974318">ඔබේ පෞද්ගලිකත්වය ආරක්ෂා කිරීම සඳහා, Chrome මෙම ක්ෂේත්‍රය තුළ ඔබේ මුරපදය ස්වයං පිරවුම නොකරනු ඇත.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">අනුගමනය කළ නොහැකිය. යම් දෙයක් වැරදිණි.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{පැය #}one{පැය #}other{පැය #}}</translation>
 <translation id="4035877632587724847">ඉඩ නොදෙන්න</translation>
+<translation id="4036177530563778041">ඔබ නතර කළ තැනින් පහසුවෙන් ඉදිරියට යන්න</translation>
 <translation id="4045764304651014138">භාවිත දත්ත</translation>
 <translation id="405399507749852140">කිනම් හෝ අඩවියක මිල අඩු වුවහොත් ඇඟවීම් ලබා ගන්න</translation>
 <translation id="4056223980640387499">Sepia</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR කේතය තැනිය නොහැකිය</translation>
 <translation id="5039804452771397117">ඉඩදෙන්න</translation>
+<translation id="5040262127954254034">රහස්‍යතාවය</translation>
 <translation id="504456571576643789">සලකා බැලිය යුතු කරුණු</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />ක්‍රියාකාරකම්වල වෙනත් ආකාර<ph name="END_LINK1" /> ඔබ පුරන විට ඔබගේ Google ගිණුමේ සුරැකිය හැකිය. ඔබට ඕනෑම වේලාවක ඒවා මැකිය හැකිය.</translation>
 <translation id="506254248375231072">ටැබ නැත</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">මෙම රාමුව තුළ QR කේතය/තීරු කේතය ස්ථානගත කරන්න.</translation>
 <translation id="7029809446516969842">මුරපද</translation>
 <translation id="7030304022046916278">URL පරීක්ෂා කිරීමට ඒවා ආරක්ෂිත බ්‍රවුස් කිරීම වෙත යවයි</translation>
+<translation id="7030585293819777123">ඔබේ අවසන් කාර්යය නැවත පටන් ගන්න ද?</translation>
 <translation id="7037830628447527439">ඔබගේ Google ගිණුම සමගින් Chrome වෙත පුරන්න</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">රූප විස්තර ලබා ගන්නද?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
index 27a7de5..52abb0b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Chráni vás v Chrome a môže zlepšiť zabezpečenie v ďalších aplikáciách Google, keď sa prihlásite</translation>
 <translation id="3429160811076349561">Skúšobné funkcie sú vypnuté</translation>
 <translation id="3435465986463792564">Máte veľa okien? Tu ich môžete spravovať.</translation>
+<translation id="3435738964857648380">Bezpečnosť</translation>
 <translation id="3443221991560634068">Opätovné načítanie aktuálnej stránky</translation>
 <translation id="3444179773590444986">Chcete zdieľať spätnú väzbu k tmavému motívu pre weby?</translation>
 <translation id="3452832259067974318">V záujme ochrany vášho súkromia nebude Chrome do tohto poľa automaticky dopĺňať heslá.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Pätkové</translation>
 <translation id="5032430150487044192">QR kód sa nedá vytvoriť</translation>
 <translation id="5039804452771397117">Povoliť</translation>
+<translation id="5040262127954254034">Ochrana súkromia</translation>
 <translation id="504456571576643789">Čo je potrebné zohľadniť</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Iné formy aktivity<ph name="END_LINK1" /> sa môžu ukladať do vášho účtu Google, keď sa doň prihlásite. Môžete ich kedykoľvek odstrániť.</translation>
 <translation id="506254248375231072">Žiadne karty</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
index e6ad94d9..3ed1a06f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Skrbi za vašo varnost v Chromu in ga je mogoče uporabiti za okrepitev varnosti v drugih Googlovih aplikacijah, ko ste prijavljeni.</translation>
 <translation id="3429160811076349561">Funkcije preizkusa so onemogočene</translation>
 <translation id="3435465986463792564">Imate odprtih veliko oken? Tukaj jih lahko upravljate.</translation>
+<translation id="3435738964857648380">Varnost</translation>
 <translation id="3443221991560634068">Vnovično nalaganje trenutne strani</translation>
 <translation id="3444179773590444986">Želite poslati povratne informacije o temni temi za spletna mesta?</translation>
 <translation id="3452832259067974318">Chrome zaradi varstva vaše zasebnosti ne bo samodejno izpolnil polja za vnos gesla.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Kode QR ni mogoče ustvariti.</translation>
 <translation id="5039804452771397117">Dovoli</translation>
+<translation id="5040262127954254034">Zasebnost</translation>
 <translation id="504456571576643789">Kaj morate upoštevati</translation>
 <translation id="5054455334322721892">Ko ste prijavljeni, se v računu Google morda shranjujejo <ph name="BEGIN_LINK1" />druge oblike dejavnosti<ph name="END_LINK1" />. Izbrišete jih lahko kadar koli.</translation>
 <translation id="506254248375231072">Ni zavihkov</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
index f6813a9..9e00b1c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Të mban të sigurt në Chrome dhe mund të përdoret për të përmirësuar sigurinë tënde në aplikacionet e tjera të Google kur je i identifikuar</translation>
 <translation id="3429160811076349561">Veçoritë e provës janë joaktive</translation>
 <translation id="3435465986463792564">Ke shumë dritare? Mund t'i menaxhosh ato nga këtu</translation>
+<translation id="3435738964857648380">Siguria</translation>
 <translation id="3443221991560634068">Ringarko faqen aktuale</translation>
 <translation id="3444179773590444986">Të ndahen komentet për temën e errët për sajtet?</translation>
 <translation id="3452832259067974318">Për të mbrojtur privatësinë tënde, Chrome nuk do ta plotësojë automatikisht fjalëkalimin tënd në këtë fushë.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">Nuk mund të ndiqet. Ndodhi një gabim.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# orë}other{# orë}}</translation>
 <translation id="4035877632587724847">Mos lejo</translation>
+<translation id="4036177530563778041">Vazhdo me lehtësi aty ku e ke lënë</translation>
 <translation id="4045764304651014138">Të dhënat e përdorimit</translation>
 <translation id="405399507749852140">Merr sinjalizime nëse ulet çmimi në ndonjë sajt</translation>
 <translation id="4056223980640387499">Sepia</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Kodi QR nuk mund të krijohet</translation>
 <translation id="5039804452771397117">Lejo</translation>
+<translation id="5040262127954254034">Privatësia</translation>
 <translation id="504456571576643789">Gjëra për të pasur parasysh</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Forma të tjera aktiviteti<ph name="END_LINK1" /> mund të ruhen në "Llogarinë tënde të Google" kur je i identifikuar. Mund t'i fshish ato në çdo kohë.</translation>
 <translation id="506254248375231072">Nuk ka skeda</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">Pozicionoje kodin QR ose barkodin në këtë kornizë.</translation>
 <translation id="7029809446516969842">Fjalëkalimet</translation>
 <translation id="7030304022046916278">I dërgon URL-të te "Shfletimi i sigurt" për t'i kontrolluar</translation>
+<translation id="7030585293819777123">Të vazhdohet detyra jote e fundit?</translation>
 <translation id="7037830628447527439">Identifikohu në Chrome me "Llogarinë tënde të Google"</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Të merren përshkrimet e imazheve?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
index feaef4e8..93d7436 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Štiti vas u Chrome-u i može da se koristi za poboljšanje bezbednosti u drugim Google aplikacijama kada ste prijavljeni</translation>
 <translation id="3429160811076349561">Probne funkcije su isključene</translation>
 <translation id="3435465986463792564">Imate mnogo prozora? Njima možete da upravljate odavde.</translation>
+<translation id="3435738964857648380">Bezbednost</translation>
 <translation id="3443221991560634068">Ponovno učitavanje aktuelne stranice</translation>
 <translation id="3444179773590444986">Želite da delite povratne informacije o tamnoj temi za sajtove?</translation>
 <translation id="3452832259067974318">Radi zaštite privatnosti Chrome neće automatski unositi vašu lozinku u ovo polje.</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Lozinke se čuvaju u Menadžeru lozinki na ovom uređaju</translation>
 <translation id="4766678251456904326">Dodaj nalog na uređaj</translation>
+<translation id="4769095993849849966">Naziv novog fajla</translation>
 <translation id="4787736314074622408">Želite da izbrišete <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Pomaže vam da dovršavate zadatke, poput plaćanja, širom veba</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Pravljenje QR koda nije uspelo</translation>
 <translation id="5039804452771397117">Dozvoli</translation>
+<translation id="5040262127954254034">Privatnost</translation>
 <translation id="504456571576643789">Šta treba imati u vidu</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Drugi oblici aktivnosti<ph name="END_LINK1" /> mogu da se sačuvaju na Google nalogu kada ste prijavljeni. Možete da ih izbrišete u bilo kom trenutku.</translation>
 <translation id="506254248375231072">Nema kartica</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
index d244f23d..52f1adb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Штити вас у Chrome-у и може да се користи за побољшање безбедности у другим Google апликацијама када сте пријављени</translation>
 <translation id="3429160811076349561">Пробне функције су искључене</translation>
 <translation id="3435465986463792564">Имате много прозора? Њима можете да управљате одавде.</translation>
+<translation id="3435738964857648380">Безбедност</translation>
 <translation id="3443221991560634068">Поновно учитавање актуелне странице</translation>
 <translation id="3444179773590444986">Желите да делите повратне информације о тамној теми за сајтове?</translation>
 <translation id="3452832259067974318">Ради заштите приватности Chrome неће аутоматски уносити вашу лозинку у ово поље.</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">видео</translation>
 <translation id="4766313118839197559">Лозинке се чувају у Менаџеру лозинки на овом уређају</translation>
 <translation id="4766678251456904326">Додај налог на уређај</translation>
+<translation id="4769095993849849966">Назив новог фајла</translation>
 <translation id="4787736314074622408">Желите да избришете <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Помаже вам да довршавате задатке, попут плаћања, широм веба</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Прављење QR кода није успело</translation>
 <translation id="5039804452771397117">Дозволи</translation>
+<translation id="5040262127954254034">Приватност</translation>
 <translation id="504456571576643789">Шта треба имати у виду</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Други облици активности<ph name="END_LINK1" /> могу да се сачувају на Google налогу када сте пријављени. Можете да их избришете у било ком тренутку.</translation>
 <translation id="506254248375231072">Нема картица</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
index d90186e..492c54f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Skyddar dig i Chrome och kan användas för förbättrad säkerhet i andra Google-appar där du är inloggad</translation>
 <translation id="3429160811076349561">Provfunktionerna är inaktiverade</translation>
 <translation id="3435465986463792564">Har du många fönster? Du kan hantera dem härifrån</translation>
+<translation id="3435738964857648380">Säkerhet</translation>
 <translation id="3443221991560634068">Läs in den aktuella sidan igen</translation>
 <translation id="3444179773590444986">Vill du dela feedback om mörkt tema för webbplatser?</translation>
 <translation id="3452832259067974318">Av integritetsskäl fylls ditt lösenord inte i automatiskt i det här fältet.</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Det gick inte att skapa QR-koden</translation>
 <translation id="5039804452771397117">Tillåt</translation>
+<translation id="5040262127954254034">Integritet</translation>
 <translation id="504456571576643789">Tänk på detta</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Annan aktivitet<ph name="END_LINK1" /> kan sparas i Google-kontot när du är inloggad. Du kan radera den när du vill.</translation>
 <translation id="506254248375231072">Inga flikar</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
index a2c6754..f01c5943 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Hulinda usalama wako kwenye Chrome na inaweza kutumiwa kuboresha usalama wako kwenye programu nyingine za Google ukiwa umeingia katika akaunti</translation>
 <translation id="3429160811076349561">Vipengele vya jaribio vimezimwa</translation>
 <translation id="3435465986463792564">Je, una madirisha mengi? Unaweza kuyadhibiti hapa</translation>
+<translation id="3435738964857648380">Usalama</translation>
 <translation id="3443221991560634068">Pakia upya ukurasa wa sasa</translation>
 <translation id="3444179773590444986">Ungependa kushiriki maoni kuhusu mandhari meusi ya tovuti?</translation>
 <translation id="3452832259067974318">Ili kulinda faragha yako, Chrome haitajaza kiotomatiki nenosiri lako katika sehemu hii.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">Imeshindwa kufuatilia. Hitilafu fulani imetokea.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{Saa #}other{Saa #}}</translation>
 <translation id="4035877632587724847">Usiruhusu</translation>
+<translation id="4036177530563778041">Endelea kwa urahisi pale ulipoachia</translation>
 <translation id="4045764304651014138">Data ya matumizi</translation>
 <translation id="405399507749852140">Pata arifa bei ikipunguzwa kwenye tovuti yoyote</translation>
 <translation id="4056223980640387499">Sepia</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Imeshindwa kutunga Msimbo wa QR</translation>
 <translation id="5039804452771397117">Ruhusu</translation>
+<translation id="5040262127954254034">Faragha</translation>
 <translation id="504456571576643789">Mambo ya kuzingatia</translation>
 <translation id="5054455334322721892">Huenda <ph name="BEGIN_LINK1" />aina nyingine za shughuli<ph name="END_LINK1" /> zikahifadhiwa kwenye Akaunti yako ya Google ukiwa umeingia katika akaunti. Unaweza kuzifuta wakati wowote.</translation>
 <translation id="506254248375231072">Hakuna vichupo</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">Weka Msimbo wa QR au msimbopau katika fremu hii.</translation>
 <translation id="7029809446516969842">Manenosiri</translation>
 <translation id="7030304022046916278">Hutuma URL kwenye kipengele cha Kuvinjari Salama ili zikaguliwe</translation>
+<translation id="7030585293819777123">Ungependa kuendelea na jukumu lako la mara ya mwisho?</translation>
 <translation id="7037830628447527439">Ingia kwenye Chrome ukitumia Akaunti yako ya Google</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Ungependa kupata maelezo ya picha?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
index 8232970..5023927 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Chromeமைப் பயன்படுத்தும்போது இது பாதுகாப்பை வழங்கும், அத்துடன் நீங்கள் பிற Google ஆப்ஸில் உள்நுழைந்திருக்கும்போது உங்கள் பாதுகாப்பை மேம்படுத்துவதற்காக இதைப் பயன்படுத்தலாம்</translation>
 <translation id="3429160811076349561">சோதனையிலுள்ள அம்சங்கள் முடக்கப்பட்டுள்ளன</translation>
 <translation id="3435465986463792564">பல சாளரங்கள் உள்ளனவா? இங்கிருந்தே அவற்றை நிர்வகிக்கலாம்</translation>
+<translation id="3435738964857648380">பாதுகாப்பு</translation>
 <translation id="3443221991560634068">தற்போதைய பக்கத்தை மீண்டும் ஏற்றும்</translation>
 <translation id="3444179773590444986">தளங்களுக்கான டார்க் தீம் குறித்த கருத்தைப் பகிர விரும்புகிறீர்களா?</translation>
 <translation id="3452832259067974318">உங்கள் தனியுரிமையைப் பாதுகாக்க Chrome இந்தப் புலத்தில் உங்கள் கடவுச்சொல்லைத் தானாக நிரப்பாது.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">பின்தொடர முடியவில்லை. ஏதோ தவறாகிவிட்டது.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# மணிநேரம்}other{# மணிநேரம்}}</translation>
 <translation id="4035877632587724847">வேண்டாம்</translation>
+<translation id="4036177530563778041">விட்ட இடத்திலிருந்து எளிதாகத் தொடரலாம்</translation>
 <translation id="4045764304651014138">உபயோகத் தரவு</translation>
 <translation id="405399507749852140">எந்தத் தளத்திலாவது விலை குறைந்தால் அதுகுறித்து அறிவிப்பைப் பெறுவீர்கள்</translation>
 <translation id="4056223980640387499">செபியா</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR குறியீட்டை உருவாக்க முடியவில்லை</translation>
 <translation id="5039804452771397117">அனுமதி</translation>
+<translation id="5040262127954254034">தனியுரிமை</translation>
 <translation id="504456571576643789">கருத்தில்கொள்ள வேண்டியவை</translation>
 <translation id="5054455334322721892">நீங்கள் உள்நுழைந்திருக்கும்போது <ph name="BEGIN_LINK1" />பிற வகையான செயல்பாடுகள்<ph name="END_LINK1" /> உங்கள் Google கணக்கில் சேமிக்கப்பட்டிருக்கலாம். அவற்றை எப்போது வேண்டுமானாலும் நீக்கலாம்.</translation>
 <translation id="506254248375231072">பக்கங்கள் எதுவுமில்லை</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">இந்த ஃபிரேமில் QR/பார் குறியீடு தெரியும்படி வைக்கவும்.</translation>
 <translation id="7029809446516969842">கடவுச்சொற்கள்</translation>
 <translation id="7030304022046916278">சரிபார்ப்புக்காக URLகளைப் பாதுகாப்பு உலாவலுக்கு அனுப்பும்</translation>
+<translation id="7030585293819777123">கடைசிப் பணியை மீண்டும் தொடங்கவா?</translation>
 <translation id="7037830628447527439">உங்கள் Google கணக்கைப் பயன்படுத்தி Chromeமில் உள்நுழையவும்</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">பட விளக்கங்களைப் பெற வேண்டுமா?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
index 550cb64..3345f57 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Chromeలో మిమ్మల్ని సురక్షితంగా ఉంచుతుంది, మీరు సైన్ ఇన్ చేసినప్పుడు ఇతర యాప్‌లలో మీ భద్రతను మెరుగుపరచడానికి ఉపయోగించబడవచ్చు</translation>
 <translation id="3429160811076349561">ట్రయల్ ఫీచర్‌లు ఆఫ్ చేయబడి ఉన్నాయి</translation>
 <translation id="3435465986463792564">చాలా విండోలు ఉన్నాయా? మీరు వాటిని ఇక్కడ నుండి మేనేజ్ చేయవచ్చు</translation>
+<translation id="3435738964857648380">భద్రత</translation>
 <translation id="3443221991560634068">ప్రస్తుత పేజీని మళ్లీ లోడ్ చేయండి</translation>
 <translation id="3444179773590444986">సైట్‌ల కోసం ముదురు రంగు రూపం గురించిన ఫీడ్‌బ్యాక్‌ను షేర్ చేయాలా?</translation>
 <translation id="3452832259067974318">మీ గోప్యతను సంరక్షించడానికి, Chrome ఈ ఫీల్డ్‌లో మీ పాస్‌వర్డ్‌ను ఆటోఫిల్ చేయదు.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR కోడ్‌ను క్రియేట్ చేయడం సాధ్యపడదు</translation>
 <translation id="5039804452771397117">అనుమతించండి</translation>
+<translation id="5040262127954254034">గోప్యత</translation>
 <translation id="504456571576643789">పరిగణించాల్సిన విషయాలు</translation>
 <translation id="5054455334322721892">మీరు సైన్ ఇన్ చేసినప్పుడు, <ph name="BEGIN_LINK1" />ఇతర రకాల యాక్టివిటీ<ph name="END_LINK1" /> మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. మీరు వాటిని ఎప్పుడైనా తొలగించవచ్చు.</translation>
 <translation id="506254248375231072">ట్యాబ్‌లు ఏవీ లేవు</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
index a5b2f67..24b49dd 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">รักษาความปลอดภัยของคุณใน Chrome และอาจใช้เพื่อปรับปรุงความปลอดภัยในแอปอื่นๆ ของ Google เมื่อลงชื่อเข้าใช้</translation>
 <translation id="3429160811076349561">ฟีเจอร์ช่วงทดลองใช้ปิดอยู่</translation>
 <translation id="3435465986463792564">หากมีหน้าต่างเปิดอยู่หลายหน้า คุณจัดการหน้าต่างเหล่านั้นได้จากที่นี่</translation>
+<translation id="3435738964857648380">ความปลอดภัย</translation>
 <translation id="3443221991560634068">โหลดหน้าปัจจุบันอีกครั้ง</translation>
 <translation id="3444179773590444986">ต้องการแชร์ความคิดเห็นเกี่ยวกับธีมมืดสำหรับเว็บไซต์ไหม</translation>
 <translation id="3452832259067974318">Chrome จะไม่ป้อนรหัสผ่านลงในช่องนี้โดยอัตโนมัติเพื่อปกป้องความเป็นส่วนตัวของคุณ</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">ติดตามไม่ได้ เกิดข้อผิดพลาด</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ชม.}other{# ชม.}}</translation>
 <translation id="4035877632587724847">ไม่อนุญาต</translation>
+<translation id="4036177530563778041">ดำเนินการต่อจากครั้งล่าสุดได้ง่ายๆ</translation>
 <translation id="4045764304651014138">ข้อมูลการใช้งาน</translation>
 <translation id="405399507749852140">รับการแจ้งเตือนหากราคาลดลงในเว็บไซต์ใดก็ตาม</translation>
 <translation id="4056223980640387499">ซีเปีย</translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">สร้างคิวอาร์โค้ดไม่ได้</translation>
 <translation id="5039804452771397117">อนุญาต</translation>
+<translation id="5040262127954254034">ความเป็นส่วนตัว</translation>
 <translation id="504456571576643789">สิ่งที่ควรพิจารณา</translation>
 <translation id="5054455334322721892">ระบบอาจบันทึก<ph name="BEGIN_LINK1" />กิจกรรมรูปแบบอื่น<ph name="END_LINK1" />ในบัญชี Google เมื่อคุณลงชื่อเข้าใช้ คุณลบข้อมูลนี้ได้ทุกเมื่อ</translation>
 <translation id="506254248375231072">ไม่มีแท็บ</translation>
@@ -1124,6 +1127,7 @@
 <translation id="7029390216614421513">จัดตำแหน่งคิวอาร์โค้ดหรือบาร์โค้ดให้อยู่ในกรอบนี้</translation>
 <translation id="7029809446516969842">รหัสผ่าน</translation>
 <translation id="7030304022046916278">ส่ง URL ให้ Google Safe Browsing ตรวจสอบ</translation>
+<translation id="7030585293819777123">ทำงานล่าสุดต่อไหม</translation>
 <translation id="7037830628447527439">ลงชื่อเข้าใช้ Chrome ด้วยบัญชี Google</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">รับคำอธิบายรูปภาพใช่ไหม</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
index 5e2c2a89..1b0b1bc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Chrome'da güvende kalmanızı sağlar ve oturum açtığınızda diğer Google uygulamalarındaki güvenliğinizi artırmak için kullanılabilir</translation>
 <translation id="3429160811076349561">Deneme özellikleri kapalı</translation>
 <translation id="3435465986463792564">Çok fazla pencere mi açık? Hepsini buradan yönetebilirsiniz</translation>
+<translation id="3435738964857648380">Güvenlik</translation>
 <translation id="3443221991560634068">Geçerli sayfayı yeniden yükler</translation>
 <translation id="3444179773590444986">Sitelerdeki koyu temayla ilgili geri bildirim paylaşmak ister misiniz?</translation>
 <translation id="3452832259067974318">Gizliliğinizi korumak için Chrome, bu alanda şifrenizi otomatik olarak doldurmayacaktır.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR Kodu oluşturulamıyor</translation>
 <translation id="5039804452771397117">İzin ver</translation>
+<translation id="5040262127954254034">Gizlilik</translation>
 <translation id="504456571576643789">Dikkate alınması gereken noktalar</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Diğer etkinlik biçimleri<ph name="END_LINK1" />, oturum açtığınızda Google Hesabınıza kaydedilebilir. Bunları istediğiniz zaman silebilirsiniz.</translation>
 <translation id="506254248375231072">Sekme yok</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
index 932933f..d1fc747 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Захищає вас у Chrome і може покращувати безпеку в інших додатках Google після входу в обліковий запис</translation>
 <translation id="3429160811076349561">Пробні функції вимкнено</translation>
 <translation id="3435465986463792564">Забагато вікон? Можете керувати ними тут</translation>
+<translation id="3435738964857648380">Безпека</translation>
 <translation id="3443221991560634068">Оновити поточну сторінку</translation>
 <translation id="3444179773590444986">Надіслати відгук про темну тему для сайтів?</translation>
 <translation id="3452832259067974318">З міркувань конфіденційності Chrome не буде автоматично заповнювати пароль у цьому полі.</translation>
@@ -552,6 +553,7 @@
 <translation id="4016425174436051808">Не вдалося підписатися. Сталася помилка.</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# год}one{# год}few{# год}many{# год}other{# год}}</translation>
 <translation id="4035877632587724847">Не дозволяти</translation>
+<translation id="4036177530563778041">Продовжуйте роботу з місця, де ви зупинилися</translation>
 <translation id="4045764304651014138">Дані про використання</translation>
 <translation id="405399507749852140">Отримувати сповіщення, коли на якомусь сайті знизиться ціна</translation>
 <translation id="4056223980640387499">Сепія</translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Не вдається створити QR-код</translation>
 <translation id="5039804452771397117">Дозволити</translation>
+<translation id="5040262127954254034">Конфіденційність</translation>
 <translation id="504456571576643789">Що варто врахувати</translation>
 <translation id="5054455334322721892">Коли ви входите в обліковий запис Google, у ньому можуть зберігатися <ph name="BEGIN_LINK1" />дані про інші дії<ph name="END_LINK1" />. Ви можете будь-коли видалити їх.</translation>
 <translation id="506254248375231072">Немає вкладок</translation>
@@ -1123,6 +1126,7 @@
 <translation id="7029390216614421513">Розмістіть QR-код або штрих-код у цій рамці</translation>
 <translation id="7029809446516969842">Паролі</translation>
 <translation id="7030304022046916278">Надсилає URL-адреси в Безпечний перегляд на перевірку</translation>
+<translation id="7030585293819777123">Відновити вкладку з останнім завданням?</translation>
 <translation id="7037830628447527439">Увійдіть у Chrome через обліковий запис Google</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Отримувати описи зображень?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
index fcb3e0b0..079dbe0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">‏آپ کے سائن ان ہونے پر آپ کو Chrome پر محفوظ رکھتا ہے اور دیگر Google ایپس میں آپ کی سیکیورٹی کو بہتر بنانے کے لیے استعمال کیا جا سکتا ہے</translation>
 <translation id="3429160811076349561">ٹرائل کی خصوصیات آف ہیں</translation>
 <translation id="3435465986463792564">کیا آپ کے پاس بہت ساری ونڈوز ہیں؟ آپ یہاں سے ان کا نظم کر سکتے ہیں</translation>
+<translation id="3435738964857648380">سیکیورٹی</translation>
 <translation id="3443221991560634068">موجودہ صفحہ دوبارہ لوڈ کریں</translation>
 <translation id="3444179773590444986">سائٹس کیلئے گہری تھیم پر تاثرات کا اشتراک کریں؟</translation>
 <translation id="3452832259067974318">‏آپ کی رازداری کے تحفظ کے لیے، Chrome اس فیلڈ میں آپ کا پاس ورڈ آٹو فل نہیں کرے گا۔</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">ویڈیو</translation>
 <translation id="4766313118839197559">پاس ورڈز اس آلہ پر پاس ورڈ مینیجر میں محفوظ کیے جاتے ہیں</translation>
 <translation id="4766678251456904326">اکاؤنٹ کو آلہ میں شامل کریں</translation>
+<translation id="4769095993849849966">فائل کا نیا نام</translation>
 <translation id="4787736314074622408">کیا آپ <ph name="ITEM_TITLE" /> کو حذف کرنا چاہتے ہیں؟</translation>
 <translation id="4791358705705538979">آپ کو پورے ویب پر چیک آؤٹ جیسی ٹاسکس کو مکمل کرنے میں مدد کرتا ہے</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">‏QR کوڈ تخلیق نہیں کیا جا سکتا</translation>
 <translation id="5039804452771397117">اجازت دیں</translation>
+<translation id="5040262127954254034">رازداری</translation>
 <translation id="504456571576643789">قابل غور چیزیں</translation>
 <translation id="5054455334322721892">‏سائن ان ہونے پر آپ کے Google اکاؤنٹ میں <ph name="BEGIN_LINK1" />سرگرمی کی دیگر اقسام<ph name="END_LINK1" /> محفوظ ہو سکتی ہیں۔ آپ انہیں کسی بھی وقت حذف کر سکتے ہیں۔</translation>
 <translation id="506254248375231072">کوئی ٹیب نہیں ہے</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
index 6ef4b83..01b43615 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Hisobingizga kirganingizda Chrome va boshqa Google ilovalaridan xavfsiz foydalanishingizni taʼminlaydi</translation>
 <translation id="3429160811076349561">Bepul sinov funksiyalari faolsizlantirilgan</translation>
 <translation id="3435465986463792564">Koʻp oynalar ochildimi? Ularni bu yerdan boshqarish mumkin</translation>
+<translation id="3435738964857648380">Xavfsizlik</translation>
 <translation id="3443221991560634068">Joriy sahifani qayta yuklash</translation>
 <translation id="3444179773590444986">Saytlar uchun tungi mavzuda oid fikr-mulohaza yuborilsinmi?</translation>
 <translation id="3452832259067974318">Maxfiyligingizni muhofaza qilish uchun Chrome parolingizni bu maydonga kiritmaydi.</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR kod yaratilmadi</translation>
 <translation id="5039804452771397117">Ruxsat berish</translation>
+<translation id="5040262127954254034">Shaxsiy ma’lumotlar</translation>
 <translation id="504456571576643789">Bularni hisobga olish kerak</translation>
 <translation id="5054455334322721892">Google hisobingizga kirganingizda <ph name="BEGIN_LINK1" />boshqa shakldagi harakatlaringiz<ph name="END_LINK1" /> hisobingizga saqlanishi mumkin. Ularni istalgan vaqt oʻchirish mumkin.</translation>
 <translation id="506254248375231072">Varaqlar ochilmagan</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
index aabe7c1..1a25b45f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Giúp bạn an toàn trên Chrome và có thể dùng để tăng cường bảo mật cho bạn trong các ứng dụng khác của Google sau khi đăng nhập</translation>
 <translation id="3429160811076349561">Các tính năng dùng thử đang tắt</translation>
 <translation id="3435465986463792564">Có nhiều cửa sổ? Bạn có thể quản lý các trang web đó tại đây</translation>
+<translation id="3435738964857648380">Bảo mật</translation>
 <translation id="3443221991560634068">Tải lại trang hiện tại</translation>
 <translation id="3444179773590444986">Bạn có muốn chia sẻ ý kiến phản hồi về giao diện tối cho các trang web?</translation>
 <translation id="3452832259067974318">Để bảo vệ quyền riêng tư của bạn, Chrome sẽ không tự động điền mật khẩu của bạn vào trường này.</translation>
@@ -682,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Lưu mật khẩu vào Trình quản lý mật khẩu trên thiết bị này</translation>
 <translation id="4766678251456904326">Thêm tài khoản vào thiết bị</translation>
+<translation id="4769095993849849966">Tên tệp mới</translation>
 <translation id="4787736314074622408">Bạn có muốn xoá <ph name="ITEM_TITLE" /> không?</translation>
 <translation id="4791358705705538979">Giúp bạn hoàn thành các công việc trên web, chẳng hạn như thanh toán</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -745,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">Không thể tạo mã QR</translation>
 <translation id="5039804452771397117">Cho phép</translation>
+<translation id="5040262127954254034">Quyền riêng tư</translation>
 <translation id="504456571576643789">Những yếu tố cần xem xét</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Các hình thức hoạt động khác<ph name="END_LINK1" /> có thể được lưu vào Tài khoản Google khi bạn đăng nhập. Bạn có thể xóa những dữ liệu này bất cứ lúc nào.</translation>
 <translation id="506254248375231072">Không có thẻ nào</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
index baf7a6d..a4b54861 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">保护您在 Chrome 中免受安全威胁,登录状态下还可让您更安全地使用其他 Google 应用</translation>
 <translation id="3429160811076349561">试用版功能已关闭</translation>
 <translation id="3435465986463792564">打开了许多窗口?您可在此处管理它们</translation>
+<translation id="3435738964857648380">安全</translation>
 <translation id="3443221991560634068">重新加载当前网页</translation>
 <translation id="3444179773590444986">针对为网站开启深色主题分享反馈?</translation>
 <translation id="3452832259067974318">为保护您的隐私,Chrome 不会在此字段中自动填充您的密码。</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">无法创建二维码</translation>
 <translation id="5039804452771397117">允许</translation>
+<translation id="5040262127954254034">隐私权</translation>
 <translation id="504456571576643789">注意事项</translation>
 <translation id="5054455334322721892">当您登录后,系统可能会将<ph name="BEGIN_LINK1" />其他形式的活动记录<ph name="END_LINK1" />保存在您的 Google 帐号中。您可以随时删除这些记录。</translation>
 <translation id="506254248375231072">没有任何标签页</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
index 8319ae3..2705ee3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">確保您登入使用 Chrome 的安全,並可提升您在其他 Google 應用程式的安全性</translation>
 <translation id="3429160811076349561">試用功能已關閉</translation>
 <translation id="3435465986463792564">開啟了很多視窗嗎?您可在此管理視窗</translation>
+<translation id="3435738964857648380">安全性</translation>
 <translation id="3443221991560634068">重新載入目前網頁</translation>
 <translation id="3444179773590444986">要就網站深色主題背景提供意見嗎?</translation>
 <translation id="3452832259067974318">為保障您的私隱,Chrome 不會在此欄位自動填入您的密碼。</translation>
@@ -746,6 +747,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">無法建立 QR 碼</translation>
 <translation id="5039804452771397117">允許</translation>
+<translation id="5040262127954254034">私隱權</translation>
 <translation id="504456571576643789">考慮因素</translation>
 <translation id="5054455334322721892">在您登入後,<ph name="BEGIN_LINK1" />其他形式的活動<ph name="END_LINK1" />可能會儲存至您的 Google 帳戶。您可以隨時刪除這些資料。</translation>
 <translation id="506254248375231072">沒有分頁</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
index 1d89ae8..a6b6ea0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -453,6 +453,7 @@
 <translation id="3428747202529429621">在已登入帳戶的狀態下,能確保你持續享有安全無虞的 Chrome 使用體驗,也有助於提升其他 Google 應用程式的安全機制</translation>
 <translation id="3429160811076349561">試用功能已關閉</translation>
 <translation id="3435465986463792564">開啟了多個視窗嗎?你可以在這裡進行管理</translation>
+<translation id="3435738964857648380">安全性</translation>
 <translation id="3443221991560634068">重新載入目前網頁</translation>
 <translation id="3444179773590444986">要針對網站的深色主題提供意見嗎?</translation>
 <translation id="3452832259067974318">為保護個人隱私,Chrome 不會在這個欄位中自動填入密碼。</translation>
@@ -681,6 +682,7 @@
 <translation id="4763480195061959176">影片</translation>
 <translation id="4766313118839197559">密碼會儲存至這部裝置上的密碼管理工具。</translation>
 <translation id="4766678251456904326">在裝置上新增帳戶</translation>
+<translation id="4769095993849849966">新檔名</translation>
 <translation id="4787736314074622408">要刪除 <ph name="ITEM_TITLE" /> 嗎?</translation>
 <translation id="4791358705705538979">協助你在網路上完成工作 (例如結帳)</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
@@ -744,6 +746,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">無法建立 QR 圖碼</translation>
 <translation id="5039804452771397117">允許</translation>
+<translation id="5040262127954254034">隱私權</translation>
 <translation id="504456571576643789">注意事項</translation>
 <translation id="5054455334322721892">在你登入後,<ph name="BEGIN_LINK1" />其他形式的活動<ph name="END_LINK1" />可能會儲存至你的 Google 帳戶。你隨時可以刪除這些內容。</translation>
 <translation id="506254248375231072">沒有任何分頁</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
index d92d6c2..f5042d63 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
@@ -454,6 +454,7 @@
 <translation id="3428747202529429621">Kukugcina uphephile ku-Chrome futhi kungase kusetshenziswe ukuthuthukisa ukuvikeleka kwakho kwezinye izinhlelo zokusebenza ze-Google lapho ungene ngemvume</translation>
 <translation id="3429160811076349561">Izici zokuhlola zivaliwe</translation>
 <translation id="3435465986463792564">Unamawindi amaningi? Ungawaphatha kusuka lapha</translation>
+<translation id="3435738964857648380">Ukuvikela</translation>
 <translation id="3443221991560634068">Phinda ulayishe ikhasi lamanje</translation>
 <translation id="3444179773590444986">Yabelana ngempendulo kutimu emnyama yamasayithi?</translation>
 <translation id="3452832259067974318">Ukuze uvikele ubumfihlo bakho, i-Chrome ngeke igcwalise ngokuzenzakalelayo iphasiwedi yakho kule nkambu.</translation>
@@ -745,6 +746,7 @@
 <translation id="5016205925109358554">I-Serif</translation>
 <translation id="5032430150487044192">Ayikwazi ukudala ikhodi ye-QR</translation>
 <translation id="5039804452771397117">Vumela</translation>
+<translation id="5040262127954254034">Ubumfihlo</translation>
 <translation id="504456571576643789">Izinto okufanele uzicabangele</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Ezinye izinhlobo zomsebenzi<ph name="END_LINK1" /> zingase zilondolozwe ku-akhawunti yakho ye-Google lapho ungene ngemvume. Ungakusula noma kunini</translation>
 <translation id="506254248375231072">Awekho amathebhu</translation>
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonCoordinator.java
index 1f4e927..7481889b 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonCoordinator.java
@@ -15,7 +15,6 @@
 
 import org.chromium.base.Callback;
 import org.chromium.base.FeatureList;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.chrome.browser.toolbar.ButtonData;
 import org.chromium.chrome.browser.toolbar.ButtonDataImpl;
 import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarFeatures;
@@ -32,6 +31,7 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.function.BooleanSupplier;
 
 /**
  * The coordinator for a button that may appear on the toolbar whose icon and click handler can be
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonCoordinatorTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonCoordinatorTest.java
index 73dc8d6..a6329af8 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonCoordinatorTest.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonCoordinatorTest.java
@@ -38,7 +38,6 @@
 import org.chromium.base.Callback;
 import org.chromium.base.FeatureList;
 import org.chromium.base.FeatureList.TestValues;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.toolbar.ButtonData;
@@ -50,6 +49,8 @@
 import org.chromium.chrome.browser.user_education.UserEducationHelper;
 import org.chromium.components.feature_engagement.FeatureConstants;
 import org.chromium.components.feature_engagement.Tracker;
+
+import java.util.function.BooleanSupplier;
 /**
  * Unit tests for OptionalButtonCoordinator.
  */
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonMediator.java
index af2f5ca..85ed65b 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonMediator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonMediator.java
@@ -8,10 +8,11 @@
 import android.view.ViewGroup;
 
 import org.chromium.base.Callback;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.chrome.browser.toolbar.ButtonData;
 import org.chromium.ui.modelutil.PropertyModel;
 
+import java.util.function.BooleanSupplier;
+
 class OptionalButtonMediator {
     private final PropertyModel mModel;
 
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonProperties.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonProperties.java
index 3df74dd..2d70a18 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonProperties.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonProperties.java
@@ -8,13 +8,14 @@
 import android.view.ViewGroup;
 
 import org.chromium.base.Callback;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.chrome.browser.toolbar.ButtonData;
 import org.chromium.ui.modelutil.PropertyKey;
 import org.chromium.ui.modelutil.PropertyModel.WritableBooleanPropertyKey;
 import org.chromium.ui.modelutil.PropertyModel.WritableIntPropertyKey;
 import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey;
 
+import java.util.function.BooleanSupplier;
+
 class OptionalButtonProperties {
     // We skip equality checks because some controllers update their button by changing the
     // ButtonSpec value on the same ButtonData instance. In addition we don't split this into
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java
index 4054255..9e8d7f17 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java
@@ -37,7 +37,6 @@
 import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.Callback;
 import org.chromium.base.ThreadUtils;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.chrome.browser.toolbar.ButtonData;
 import org.chromium.chrome.browser.toolbar.ButtonData.ButtonSpec;
 import org.chromium.chrome.browser.toolbar.R;
@@ -48,6 +47,7 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.function.BooleanSupplier;
 
 /**
  * Toolbar button that performs animated transitions between icons.
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java
index e997ff8..fedc82e 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java
@@ -56,7 +56,6 @@
 import org.chromium.base.Callback;
 import org.chromium.base.FeatureList;
 import org.chromium.base.FeatureList.TestValues;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
@@ -67,6 +66,8 @@
 import org.chromium.chrome.browser.toolbar.optional_button.OptionalButtonConstants.TransitionType;
 import org.chromium.chrome.browser.toolbar.optional_button.OptionalButtonViewTest.ShadowOneShotPreDrawListener;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * Unit tests for OptionalButtonView.
  */
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/HomeButtonCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/HomeButtonCoordinator.java
index aa8d676..7c425fd 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/HomeButtonCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/HomeButtonCoordinator.java
@@ -12,7 +12,6 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.TraceEvent;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.OneshotSupplier;
 import org.chromium.base.supplier.Supplier;
@@ -31,6 +30,8 @@
 import org.chromium.components.feature_engagement.FeatureConstants;
 import org.chromium.url.GURL;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * Root component for the home button on the toolbar. Intended to own the {@link HomeButton}, but
  * currently it only manages some signals around the home page button.
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarCoordinator.java
index a6946d0..a5ede195 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarCoordinator.java
@@ -15,7 +15,6 @@
 
 import org.chromium.base.Callback;
 import org.chromium.base.CallbackController;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.browser.device.DeviceClassManager;
 import org.chromium.chrome.browser.layouts.LayoutType;
@@ -37,6 +36,8 @@
 import org.chromium.ui.modelutil.PropertyModel;
 import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * The controller for the StartSurfaceToolbar. This class handles all interactions that the
  * StartSurfaceToolbar has with the outside world. Lazily creates the tab toolbar the first time
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java
index f8eea04..8c3ab12 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarMediator.java
@@ -34,7 +34,6 @@
 
 import org.chromium.base.Callback;
 import org.chromium.base.CallbackController;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.browser.layouts.LayoutType;
 import org.chromium.chrome.browser.logo.LogoCoordinator;
@@ -58,6 +57,8 @@
 import org.chromium.ui.modelutil.PropertyModel;
 import org.chromium.ui.modelutil.PropertyModelAnimatorFactory;
 
+import java.util.function.BooleanSupplier;
+
 /** The mediator implements interacts between the views and the caller. */
 class StartSurfaceToolbarMediator implements ButtonDataProvider.ButtonDataObserver {
     private final PropertyModel mPropertyModel;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTCoordinator.java
index dd3c6cf..341a0232 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTCoordinator.java
@@ -11,7 +11,6 @@
 import androidx.annotation.Nullable;
 
 import org.chromium.base.FeatureList;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.chrome.browser.device.DeviceClassManager;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.tabmodel.IncognitoStateProvider;
@@ -21,6 +20,8 @@
 import org.chromium.chrome.browser.toolbar.TabCountProvider;
 import org.chromium.chrome.browser.toolbar.menu_button.MenuButtonCoordinator;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * The coordinator for the tab switcher mode top toolbar, responsible for
  * communication with other UI components and lifecycle. Lazily creates the tab
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTopToolbar.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTopToolbar.java
index 23e4132..45d5117d 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTopToolbar.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTopToolbar.java
@@ -17,7 +17,6 @@
 
 import androidx.annotation.Nullable;
 
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.chrome.browser.device.DeviceClassManager;
 import org.chromium.chrome.browser.omnibox.styles.OmniboxResourceProvider;
 import org.chromium.chrome.browser.tabmodel.IncognitoStateProvider;
@@ -38,6 +37,8 @@
 import org.chromium.ui.base.DeviceFormFactor;
 import org.chromium.ui.widget.OptimizedFrameLayout;
 
+import java.util.function.BooleanSupplier;
+
 /** The tab switcher mode top toolbar */
 public class TabSwitcherModeTopToolbar extends OptimizedFrameLayout
         implements View.OnClickListener, IncognitoStateProvider.IncognitoStateObserver {
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToggleTabStackButtonCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToggleTabStackButtonCoordinator.java
index f35a17f..328c34e 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToggleTabStackButtonCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToggleTabStackButtonCoordinator.java
@@ -5,10 +5,11 @@
 package org.chromium.chrome.browser.toolbar.top;
 
 import android.content.Context;
+
 import androidx.annotation.VisibleForTesting;
+
 import org.chromium.base.Callback;
 import org.chromium.base.CallbackController;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.OneshotSupplier;
 import org.chromium.chrome.browser.flags.FeatureParamUtils;
@@ -26,6 +27,8 @@
 import org.chromium.components.feature_engagement.FeatureConstants;
 import org.chromium.url.GURL;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * Root component for the tab switcher button on the toolbar. Intended to own the
  * {@link ToggleTabStackButton}, but currently it only manages some signals around the tab switcher
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
index 995706e..6b12296 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
@@ -24,7 +24,6 @@
 import org.chromium.base.Callback;
 import org.chromium.base.TraceEvent;
 import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.browser.browser_controls.BrowserStateBrowserControlsVisibilityDelegate;
@@ -48,6 +47,8 @@
 import org.chromium.ui.util.TokenHolder;
 import org.chromium.ui.widget.OptimizedFrameLayout;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * Layout for the browser controls (omnibox, menu, tab strip, etc..).
  */
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainerTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainerTest.java
index 14551d32..f7ff538 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainerTest.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainerTest.java
@@ -22,7 +22,6 @@
 
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.metrics.UmaRecorderHolder;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.supplier.Supplier;
@@ -40,6 +39,7 @@
 import org.chromium.chrome.test.util.browser.Features.JUnitProcessor;
 
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.BooleanSupplier;
 
 /** Unit tests for ToolbarControlContainer. */
 @RunWith(BaseRobolectricTestRunner.class)
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
index 09235da..f5d22af 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
@@ -31,7 +31,6 @@
 import org.chromium.base.TraceEvent;
 import org.chromium.base.lifetime.DestroyChecker;
 import org.chromium.base.lifetime.Destroyable;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.chrome.browser.browser_controls.BrowserStateBrowserControlsVisibilityDelegate;
 import org.chromium.chrome.browser.omnibox.LocationBar;
@@ -65,6 +64,8 @@
 import org.chromium.ui.base.ViewUtils;
 import org.chromium.url.GURL;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * Layout class that contains the base shared logic for manipulating the toolbar component. For
  * interaction that are not from Views inside Toolbar hierarchy all interactions should be done
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
index e73f2e3..de21360 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
@@ -48,7 +48,6 @@
 import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.MathUtils;
 import org.chromium.base.TraceEvent;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.chrome.browser.browser_controls.BrowserStateBrowserControlsVisibilityDelegate;
 import org.chromium.chrome.browser.device.DeviceClassManager;
 import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
@@ -98,6 +97,7 @@
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.BooleanSupplier;
 
 /**
  * Phone specific toolbar implementation.
@@ -222,6 +222,7 @@
     protected final Point mNtpSearchBoxTranslation = new Point();
 
     protected final int mToolbarSidePadding;
+    private final int mBackgroundHeightIncreaseWhenFocus;
 
     private ValueAnimator mBrandColorTransitionAnimation;
     private boolean mBrandColorTransitionActive;
@@ -302,6 +303,13 @@
                 ? R.dimen.toolbar_edge_padding_modern
                 : R.dimen.toolbar_edge_padding;
         mToolbarSidePadding = getResources().getDimensionPixelOffset(edgePaddingRes);
+
+        mBackgroundHeightIncreaseWhenFocus = mShouldShowModernizeVisualUpdate
+                ? getResources().getDimensionPixelSize(
+                        OmniboxFeatures.shouldShowActiveColorOnOmnibox()
+                                ? R.dimen.toolbar_url_focus_height_increase_active_color
+                                : R.dimen.toolbar_url_focus_height_increase_no_active_color)
+                : 0;
     }
 
     @Override
@@ -874,6 +882,7 @@
         float expansion = getExpansionFractionForVisualState(visualState);
         int leftViewPosition = getLeftPositionOfLocationBarBackground(visualState);
         int rightViewPosition = getRightPositionOfLocationBarBackground(visualState);
+        int verticalInset = mLocationBarBackgroundVerticalInset - calculateOnFocusHeightIncrease();
 
         // The bounds are set by the following:
         // - The left most visible location bar child view.
@@ -881,11 +890,8 @@
         // - The right most visible location bar child view.
         // - The bottom of the viewport is aligned with the bottom of the location bar.
         // Additional padding can be applied for use during animations.
-        out.set(leftViewPosition,
-                mLocationBar.getPhoneCoordinator().getTop() + mLocationBarBackgroundVerticalInset,
-                rightViewPosition,
-                mLocationBar.getPhoneCoordinator().getBottom()
-                        - mLocationBarBackgroundVerticalInset);
+        out.set(leftViewPosition, mLocationBar.getPhoneCoordinator().getTop() + verticalInset,
+                rightViewPosition, mLocationBar.getPhoneCoordinator().getBottom() - verticalInset);
     }
 
     /**
@@ -991,7 +997,6 @@
             mHomeButton.setVisibility(toolbarButtonVisibility);
         }
 
-        updateToolbarLayoutForExpansionAnimation();
         updateLocationBarLayoutForExpansionAnimation();
     }
 
@@ -1107,6 +1112,7 @@
                         themedLocationBarColor, defaultLocationBarColor, mUrlFocusChangeFraction));
 
                 updateModernLocationBarCorners();
+                updateToolbarLayoutForUrlFocusChangeAnimation();
             }
         }
 
@@ -1118,32 +1124,22 @@
     }
 
     /**
-     * Updates the toolbar height and bottom padding, as the result of either a focus change or
-     * scrolling the New Tab Page.
+     * Updates the toolbar height and bottom padding during URL focus changing.
      */
-    private void updateToolbarLayoutForExpansionAnimation() {
+    private void updateToolbarLayoutForUrlFocusChangeAnimation() {
         if (!OmniboxFeatures.shouldShowModernizeVisualUpdate(getContext())) {
             return;
         }
 
-        int heightIncreaseFactor = getResources().getDimensionPixelSize(
-                OmniboxFeatures.shouldShowActiveColorOnOmnibox()
-                        ? R.dimen.toolbar_url_focus_height_increase_active_color
-                        : R.dimen.toolbar_url_focus_height_increase_no_active_color);
-        int heightIncrease = (int) (heightIncreaseFactor * mUrlExpansionFraction);
+        int heightIncrease = calculateOnFocusHeightIncrease();
 
         var layoutParams = getLayoutParams();
         layoutParams.height = getResources().getDimensionPixelSize(R.dimen.toolbar_height_no_shadow)
                 + heightIncrease;
         setLayoutParams(layoutParams);
 
-        // Apply extra bottom padding for no active-color treatments.
-        if (!OmniboxFeatures.shouldShowActiveColorOnOmnibox()) {
-            int bottomPadding = (int) (getResources().getDimensionPixelSize(
-                                               R.dimen.toolbar_url_focus_bottom_padding)
-                    * mUrlExpansionFraction);
-            setPaddingRelative(getPaddingStart(), getPaddingTop(), getPaddingEnd(), bottomPadding);
-        }
+        // Apply extra bottom padding.
+        setPaddingRelative(getPaddingStart(), getPaddingTop(), getPaddingEnd(), heightIncrease);
     }
 
     /**
@@ -1570,13 +1566,7 @@
     }
 
     private CaptureReadinessResult getReadinessStateWithSuppression() {
-        ToolbarSnapshotState newSnapshotState = generateToolbarSnapshotState();
-        @ToolbarSnapshotDifference
-        int snapshotDifference = newSnapshotState.getAnyDifference(mToolbarSnapshotState);
-
-        if (snapshotDifference == ToolbarSnapshotDifference.NONE) {
-            return CaptureReadinessResult.notReady(TopToolbarBlockCaptureReason.SNAPSHOT_SAME);
-        } else if (urlHasFocus()) {
+        if (urlHasFocus()) {
             return CaptureReadinessResult.notReady(TopToolbarBlockCaptureReason.URL_BAR_HAS_FOCUS);
         } else if (mUrlFocusChangeInProgress) {
             return CaptureReadinessResult.notReady(
@@ -1592,7 +1582,14 @@
         } else if (isInTabSwitcherMode() || mIsShowingStartSurfaceTabSwitcher) {
             return CaptureReadinessResult.notReady(TopToolbarBlockCaptureReason.TAB_SWITCHER_MODE);
         } else {
-            return CaptureReadinessResult.readyWithSnapshotDifference(snapshotDifference);
+            ToolbarSnapshotState newSnapshotState = generateToolbarSnapshotState();
+            @ToolbarSnapshotDifference
+            int snapshotDifference = newSnapshotState.getAnyDifference(mToolbarSnapshotState);
+            if (snapshotDifference == ToolbarSnapshotDifference.NONE) {
+                return CaptureReadinessResult.notReady(TopToolbarBlockCaptureReason.SNAPSHOT_SAME);
+            } else {
+                return CaptureReadinessResult.readyWithSnapshotDifference(snapshotDifference);
+            }
         }
     }
 
@@ -2738,4 +2735,8 @@
         updateModernLocationBarColor(
                 getLocationBarDefaultColorForToolbarColor(toolbarDefaultColor));
     }
+
+    private int calculateOnFocusHeightIncrease() {
+        return (int) (mBackgroundHeightIncreaseWhenFocus * mUrlFocusChangeFraction / 2);
+    }
 }
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java
index dcf9b9f..19b92b4 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java
@@ -30,7 +30,6 @@
 
 import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.metrics.RecordUserAction;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.omnibox.LocationBar;
@@ -62,6 +61,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.function.BooleanSupplier;
 
 /**
  * The Toolbar object for Tablet screens.
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java
index ed3b91dd..41e1558c 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java
@@ -15,7 +15,6 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.Callback;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.OneShotCallback;
 import org.chromium.base.supplier.OneshotSupplier;
@@ -52,6 +51,7 @@
 import org.chromium.ui.resources.ResourceManager;
 
 import java.util.List;
+import java.util.function.BooleanSupplier;
 
 /**
  * A coordinator for the top toolbar component.
diff --git a/chrome/browser/ui/app_list/app_list_syncable_service.cc b/chrome/browser/ui/app_list/app_list_syncable_service.cc
index 23ba6abe..cce9f48b 100644
--- a/chrome/browser/ui/app_list/app_list_syncable_service.cc
+++ b/chrome/browser/ui/app_list/app_list_syncable_service.cc
@@ -40,7 +40,6 @@
 #include "chrome/browser/ui/app_list/chrome_app_list_item.h"
 #include "chrome/browser/ui/app_list/chrome_app_list_model_updater.h"
 #include "chrome/browser/ui/app_list/page_break_app_item.h"
-#include "chrome/browser/ui/app_list/page_break_constants.h"
 #include "chrome/browser/ui/app_list/reorder/app_list_reorder_core.h"
 #include "chrome/browser/ui/app_list/reorder/app_list_reorder_util.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
@@ -223,11 +222,6 @@
   return sync_item.item_type == sync_pb::AppListSpecifics::TYPE_PAGE_BREAK;
 }
 
-// Returns true if the app is Settings app
-bool IsOsSettingsApp(const std::string& app_id) {
-  return app_id == web_app::kOsSettingsAppId;
-}
-
 bool IsSystemCreatedSyncFolder(
     const AppListSyncableService::SyncItem& folder_item) {
   if (folder_item.item_type != sync_pb::AppListSpecifics::TYPE_FOLDER)
@@ -529,20 +523,6 @@
 
   if (wait_until_ready_to_sync_cb_)
     std::move(wait_until_ready_to_sync_cb_).Run();
-
-  // Install default page brakes for tablet form factor devices here as
-  // these devices do not have app list sync turned on.
-  if (ash::switches::IsTabletFormFactor() && profile_->IsNewProfile()) {
-    DCHECK(
-        !SyncServiceFactory::GetForProfile(profile_)->GetActiveDataTypes().Has(
-            syncer::APP_LIST));
-    // Create call back to create the default page break items at later time so
-    // that default page break items are not removed by
-    // |PruneRedundantPageBreakItems|
-    install_default_page_breaks_ =
-        base::BindOnce(&AppListSyncableService::InstallDefaultPageBreaks,
-                       weak_ptr_factory_.GetWeakPtr());
-  }
 }
 
 void AppListSyncableService::AddObserverAndStart(Observer* observer) {
@@ -779,14 +759,7 @@
                                        is_item_new);
   }
 
-  // Calculate this early since |sync_item| could be deleted in
-  // PruneRedundantPageBreakItems.
-  bool run_install_default_page_breaks =
-      install_default_page_breaks_ && IsOsSettingsApp(sync_item->item_id);
   PruneRedundantPageBreakItems();
-
-  if (run_install_default_page_breaks)
-    std::move(install_default_page_breaks_).Run();
 }
 
 AppListSyncableService::SyncItem* AppListSyncableService::FindOrAddSyncItem(
@@ -1108,10 +1081,6 @@
   }
 }
 
-void AppListSyncableService::InstallDefaultPageBreaksForTest() {
-  InstallDefaultPageBreaks();
-}
-
 void AppListSyncableService::PopulateSyncItemsForTest(
     std::vector<std::unique_ptr<SyncItem>>&& items) {
   for (auto& sync_item : items) {
@@ -1154,16 +1123,6 @@
   DCHECK(sync_processor.get());
   DCHECK(error_handler.get());
 
-  const bool first_time_user = initial_sync_data.empty();
-  if (first_time_user) {
-    // Post a task to avoid adding the default page break items which can
-    // cause sync changes during sync startup.
-    base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
-        FROM_HERE,
-        base::BindOnce(&AppListSyncableService::InstallDefaultPageBreaks,
-                       weak_ptr_factory_.GetWeakPtr()));
-  }
-
   HandleUpdateStarted();
 
   // Reset local state and recreate from sync info.
@@ -1681,24 +1640,6 @@
   }
 }
 
-void AppListSyncableService::InstallDefaultPageBreaks() {
-  for (size_t i = 0; i < kDefaultPageBreakAppIdsLength; ++i) {
-    auto* const id = kDefaultPageBreakAppIds[i];
-    auto* sync_item = GetSyncItem(id);
-    if (sync_item) {
-      // The user may have cleared their sync from
-      // https://chrome.google.com/sync, so it may appear here that it's a new
-      // user, while in fact on this device, it's not. We don't want to
-      // recreate and re-add an already existing default page break item.
-      continue;
-    }
-
-    auto page_break_item = std::make_unique<PageBreakAppItem>(
-        profile(), model_updater_.get(), nullptr /* sync_item */, id);
-    AddItem(std::move(page_break_item));
-  }
-}
-
 void AppListSyncableService::UpdateSyncItemFromSync(
     const sync_pb::AppListSpecifics& specifics,
     AppListSyncableService::SyncItem* item) {
diff --git a/chrome/browser/ui/app_list/app_list_syncable_service.h b/chrome/browser/ui/app_list/app_list_syncable_service.h
index a30aca7..f553964 100644
--- a/chrome/browser/ui/app_list/app_list_syncable_service.h
+++ b/chrome/browser/ui/app_list/app_list_syncable_service.h
@@ -233,8 +233,6 @@
     return oem_folder_name_;
   }
 
-  void InstallDefaultPageBreaksForTest();
-
   void PopulateSyncItemsForTest(std::vector<std::unique_ptr<SyncItem>>&& items);
 
   SyncItem* GetMutableSyncItemForTest(const std::string& id);
@@ -387,10 +385,6 @@
   // level item list.
   void PruneRedundantPageBreakItems();
 
-  // Installs the default page break items. This is only called for first time
-  // users.
-  void InstallDefaultPageBreaks();
-
   // Applies sync changes to the local item.
   void UpdateSyncItemFromSync(const sync_pb::AppListSpecifics& specifics,
                               AppListSyncableService::SyncItem* item);
@@ -449,9 +443,6 @@
   // this variable is used to detect this state.
   bool oem_folder_using_provisional_default_position_ = false;
   std::string oem_folder_name_;
-  // Callback to install default page breaks.
-  // Only set for first time user for tablet form devices.
-  base::OnceClosure install_default_page_breaks_;
   base::OnceClosure wait_until_ready_to_sync_cb_;
 
   // List of observers.
diff --git a/chrome/browser/ui/app_list/app_list_syncable_service_unittest.cc b/chrome/browser/ui/app_list/app_list_syncable_service_unittest.cc
index 69fa713..fbe00bb1 100644
--- a/chrome/browser/ui/app_list/app_list_syncable_service_unittest.cc
+++ b/chrome/browser/ui/app_list/app_list_syncable_service_unittest.cc
@@ -27,7 +27,6 @@
 #include "chrome/browser/ui/app_list/app_list_test_util.h"
 #include "chrome/browser/ui/app_list/chrome_app_list_item.h"
 #include "chrome/browser/ui/app_list/chrome_app_list_model_updater.h"
-#include "chrome/browser/ui/app_list/page_break_constants.h"
 #include "chrome/browser/ui/app_list/reorder/app_list_reorder_core.h"
 #include "chrome/browser/ui/app_list/test/app_list_syncable_service_test_base.h"
 #include "chrome/browser/ui/app_list/test/fake_app_list_model_updater.h"
@@ -601,10 +600,6 @@
   EXPECT_EQ("ordinal", GetSyncItem(kItemId2)->item_ordinal.ToDebugString());
   EXPECT_EQ("pinordinal",
             GetSyncItem(kItemId2)->item_pin_ordinal.ToDebugString());
-
-  // Default page breaks are not installed for non-first time users that don't
-  // have them in their sync.
-  EXPECT_FALSE(GetSyncItem(kDefaultPageBreak1));
 }
 
 class AppListInternalAppSyncableServiceTest
@@ -623,63 +618,6 @@
   ~AppListInternalAppSyncableServiceTest() override = default;
 };
 
-TEST_F(AppListInternalAppSyncableServiceTest, ExistingDefaultPageBreak) {
-  // Non-first time users have items in their remote sync data.
-  syncer::SyncDataList sync_list;
-  sync_list.push_back(CreateAppRemoteData(
-      kDefaultPageBreak1, "page_break_1", "", "ordinal", "pinordinal",
-      sync_pb::AppListSpecifics_AppListItemType_TYPE_PAGE_BREAK));
-
-  app_list_syncable_service()->MergeDataAndStartSyncing(
-      syncer::APP_LIST, sync_list,
-      std::make_unique<syncer::FakeSyncChangeProcessor>(),
-      std::make_unique<syncer::SyncErrorFactoryMock>());
-  content::RunAllTasksUntilIdle();
-
-  // Existing page break item in remote sync will be added, and its data will be
-  // updated with the item's remote sync data.
-  auto* page_break_sync_item = GetSyncItem(kDefaultPageBreak1);
-  ASSERT_TRUE(page_break_sync_item);
-  EXPECT_EQ(page_break_sync_item->item_type,
-            sync_pb::AppListSpecifics::TYPE_PAGE_BREAK);
-  EXPECT_EQ("page_break_1", page_break_sync_item->item_name);
-  EXPECT_EQ("", page_break_sync_item->parent_id);
-  EXPECT_EQ("ordinal", page_break_sync_item->item_ordinal.ToDebugString());
-  EXPECT_EQ("pinordinal",
-            page_break_sync_item->item_pin_ordinal.ToDebugString());
-}
-
-TEST_F(AppListInternalAppSyncableServiceTest, DefaultPageBreakFirstTimeUser) {
-  // Empty sync list simulates a first time user.
-  syncer::SyncDataList sync_list;
-
-  app_list_syncable_service()->MergeDataAndStartSyncing(
-      syncer::APP_LIST, sync_list,
-      std::make_unique<syncer::FakeSyncChangeProcessor>(),
-      std::make_unique<syncer::SyncErrorFactoryMock>());
-  content::RunAllTasksUntilIdle();
-
-  auto* page_break_sync_item = GetSyncItem(kDefaultPageBreak1);
-  ASSERT_TRUE(page_break_sync_item);
-  EXPECT_EQ(page_break_sync_item->item_type,
-            sync_pb::AppListSpecifics::TYPE_PAGE_BREAK);
-
-  // Since internal apps are added by default, we'll use the settings apps to
-  // test the ordering.
-  auto* settings_app_sync_item = GetSyncItem(web_app::kOsSettingsAppId);
-  auto* hosted_app_sync_item = GetSyncItem(kHostedAppId);
-  ASSERT_TRUE(settings_app_sync_item);
-  ASSERT_TRUE(hosted_app_sync_item);
-
-  // The default page break should be between the hosted app, and the settings
-  // app; i.e. the hosted app is in the first page, and the settings app is in
-  // the second page.
-  EXPECT_TRUE(page_break_sync_item->item_ordinal.LessThan(
-      settings_app_sync_item->item_ordinal));
-  EXPECT_TRUE(page_break_sync_item->item_ordinal.GreaterThan(
-      hosted_app_sync_item->item_ordinal));
-}
-
 TEST_F(AppListSyncableServiceTest, InitialMerge_BadData) {
   const syncer::SyncDataList sync_list = CreateBadAppRemoteData(kDefault);
 
@@ -3539,16 +3477,18 @@
   const std::string kItemId2 = CreateNextAppId(kItemId1);
   sync_list.push_back(
       CreateAppRemoteData(kItemId2, "A", "", GetLastPositionString(), kUnset));
+  const std::string kPageBreak1 = CreateNextAppId(kItemId2);
   sync_list.push_back(CreateAppRemoteData(
-      kDefaultPageBreak1, "page_break_1", "", GetLastPositionString(), kUnset,
+      kPageBreak1, "page_break_1", "", GetLastPositionString(), kUnset,
       sync_pb::AppListSpecifics_AppListItemType_TYPE_PAGE_BREAK));
-  const std::string kItemId3 = CreateNextAppId(kItemId2);
+  const std::string kItemId3 = CreateNextAppId(kPageBreak1);
   sync_list.push_back(
       CreateAppRemoteData(kItemId3, "C", "", GetLastPositionString(), kUnset));
+  const std::string kPageBreak2 = CreateNextAppId(kItemId3);
   sync_list.push_back(CreateAppRemoteData(
-      kDefaultPageBreak1, "page_break_2", "", GetLastPositionString(), kUnset,
+      kPageBreak2, "page_break_2", "", GetLastPositionString(), kUnset,
       sync_pb::AppListSpecifics_AppListItemType_TYPE_PAGE_BREAK));
-  const std::string kItemId4 = CreateNextAppId(kItemId3);
+  const std::string kItemId4 = CreateNextAppId(kPageBreak2);
   sync_list.push_back(
       CreateAppRemoteData(kItemId4, "D", "", GetLastPositionString(), kUnset));
 
diff --git a/chrome/browser/ui/app_list/page_break_app_item.cc b/chrome/browser/ui/app_list/page_break_app_item.cc
index 0d7cf30..f2ade98 100644
--- a/chrome/browser/ui/app_list/page_break_app_item.cc
+++ b/chrome/browser/ui/app_list/page_break_app_item.cc
@@ -4,8 +4,6 @@
 
 #include "chrome/browser/ui/app_list/page_break_app_item.h"
 
-#include "chrome/browser/ui/app_list/page_break_constants.h"
-
 // static
 const char PageBreakAppItem::kItemType[] = "DefaultPageBreak";
 
@@ -16,8 +14,6 @@
     const std::string& app_id)
     : ChromeAppListItem(profile, app_id) {
   SetIsPageBreak(true);
-  if (app_list::IsDefaultPageBreakItem(app_id))
-    SetName("__default_page_break__");
 
   if (sync_item) {
     DCHECK_EQ(sync_item->item_type, sync_pb::AppListSpecifics::TYPE_PAGE_BREAK);
diff --git a/chrome/browser/ui/app_list/page_break_constants.cc b/chrome/browser/ui/app_list/page_break_constants.cc
deleted file mode 100644
index fcfcd20..0000000
--- a/chrome/browser/ui/app_list/page_break_constants.cc
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2018 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/app_list/page_break_constants.h"
-
-#include "base/containers/contains.h"
-
-namespace app_list {
-
-// Generated as:
-// crx_file::id_util::GenerateId("org.chromium.default_page_break_1").
-const char kDefaultPageBreak1[] = "fdipebbchlhkdibfjgbfalhceahammim";
-
-const char* const kDefaultPageBreakAppIds[] = {
-    kDefaultPageBreak1,
-};
-
-const size_t kDefaultPageBreakAppIdsLength = std::size(kDefaultPageBreakAppIds);
-
-// Returns true if |item_id| is of a default-installed page break item.
-bool IsDefaultPageBreakItem(const std::string& item_id) {
-  return base::Contains(kDefaultPageBreakAppIds, item_id);
-}
-
-}  // namespace app_list
diff --git a/chrome/browser/ui/app_list/page_break_constants.h b/chrome/browser/ui/app_list/page_break_constants.h
deleted file mode 100644
index 0df1416..0000000
--- a/chrome/browser/ui/app_list/page_break_constants.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2018 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_APP_LIST_PAGE_BREAK_CONSTANTS_H_
-#define CHROME_BROWSER_UI_APP_LIST_PAGE_BREAK_CONSTANTS_H_
-
-#include <string>
-
-namespace app_list {
-
-extern const char kDefaultPageBreak1[];
-
-// List of default page break app list items that are added by default for first
-// time users. These items are added in a particular order to in
-// default_app_order.cc.
-extern const char* const kDefaultPageBreakAppIds[];
-
-extern const size_t kDefaultPageBreakAppIdsLength;
-
-// Returns true if |item_id| is of a default-installed page break item.
-bool IsDefaultPageBreakItem(const std::string& item_id);
-
-}  // namespace app_list
-
-#endif  // CHROME_BROWSER_UI_APP_LIST_PAGE_BREAK_CONSTANTS_H_
diff --git a/chrome/browser/ui/app_list/search/ranking/answer_ranker_unittest.cc b/chrome/browser/ui/app_list/search/ranking/answer_ranker_unittest.cc
index 17282ff..2919d4c 100644
--- a/chrome/browser/ui/app_list/search/ranking/answer_ranker_unittest.cc
+++ b/chrome/browser/ui/app_list/search/ranking/answer_ranker_unittest.cc
@@ -8,6 +8,7 @@
 #include "chrome/browser/ui/app_list/search/common/icon_constants.h"
 #include "chrome/browser/ui/app_list/search/ranking/types.h"
 #include "chrome/browser/ui/app_list/search/test/ranking_test_util.h"
+#include "chrome/browser/ui/app_list/search/test/test_result.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/ui/app_list/search/ranking/best_match_ranker_unittest.cc b/chrome/browser/ui/app_list/search/ranking/best_match_ranker_unittest.cc
index 72564e1..adca8af1 100644
--- a/chrome/browser/ui/app_list/search/ranking/best_match_ranker_unittest.cc
+++ b/chrome/browser/ui/app_list/search/ranking/best_match_ranker_unittest.cc
@@ -7,6 +7,7 @@
 #include "chrome/browser/ui/app_list/search/chrome_search_result.h"
 #include "chrome/browser/ui/app_list/search/ranking/types.h"
 #include "chrome/browser/ui/app_list/search/test/ranking_test_util.h"
+#include "chrome/browser/ui/app_list/search/test/test_result.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/ui/app_list/search/ranking/filtering_ranker_unittest.cc b/chrome/browser/ui/app_list/search/ranking/filtering_ranker_unittest.cc
index fd11e18..2b1b773 100644
--- a/chrome/browser/ui/app_list/search/ranking/filtering_ranker_unittest.cc
+++ b/chrome/browser/ui/app_list/search/ranking/filtering_ranker_unittest.cc
@@ -8,6 +8,7 @@
 #include "chrome/browser/ui/app_list/search/ranking/types.h"
 #include "chrome/browser/ui/app_list/search/search_controller.h"
 #include "chrome/browser/ui/app_list/search/test/ranking_test_util.h"
+#include "chrome/browser/ui/app_list/search/test/test_result.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/ui/app_list/search/ranking/query_highlighter_unittest.cc b/chrome/browser/ui/app_list/search/ranking/query_highlighter_unittest.cc
index cab9e35..2eca246 100644
--- a/chrome/browser/ui/app_list/search/ranking/query_highlighter_unittest.cc
+++ b/chrome/browser/ui/app_list/search/ranking/query_highlighter_unittest.cc
@@ -8,6 +8,7 @@
 #include "chrome/browser/ui/app_list/search/ranking/ranker.h"
 #include "chrome/browser/ui/app_list/search/ranking/types.h"
 #include "chrome/browser/ui/app_list/search/test/ranking_test_util.h"
+#include "chrome/browser/ui/app_list/search/test/test_result.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/ui/app_list/search/ranking/removed_results_ranker_unittest.cc b/chrome/browser/ui/app_list/search/ranking/removed_results_ranker_unittest.cc
index 4e66ab44..0f3f1e4 100644
--- a/chrome/browser/ui/app_list/search/ranking/removed_results_ranker_unittest.cc
+++ b/chrome/browser/ui/app_list/search/ranking/removed_results_ranker_unittest.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/ui/app_list/search/ranking/types.h"
 #include "chrome/browser/ui/app_list/search/search_controller.h"
 #include "chrome/browser/ui/app_list/search/test/ranking_test_util.h"
+#include "chrome/browser/ui/app_list/search/test/test_result.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile_manager.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/chrome/browser/ui/app_list/search/ranking/score_normalizing_ranker_unittest.cc b/chrome/browser/ui/app_list/search/ranking/score_normalizing_ranker_unittest.cc
index ef81a8e0..bda5c6bc 100644
--- a/chrome/browser/ui/app_list/search/ranking/score_normalizing_ranker_unittest.cc
+++ b/chrome/browser/ui/app_list/search/ranking/score_normalizing_ranker_unittest.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/ui/app_list/search/ranking/types.h"
 #include "chrome/browser/ui/app_list/search/search_controller.h"
 #include "chrome/browser/ui/app_list/search/test/ranking_test_util.h"
+#include "chrome/browser/ui/app_list/search/test/test_result.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/ui/app_list/search/search_controller_impl_unittest.cc b/chrome/browser/ui/app_list/search/search_controller_impl_unittest.cc
index 87a20e0..536e261d 100644
--- a/chrome/browser/ui/app_list/search/search_controller_impl_unittest.cc
+++ b/chrome/browser/ui/app_list/search/search_controller_impl_unittest.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/ui/app_list/search/search_controller.h"
 #include "chrome/browser/ui/app_list/search/search_provider.h"
 #include "chrome/browser/ui/app_list/search/test/ranking_test_util.h"
+#include "chrome/browser/ui/app_list/search/test/test_result.h"
 #include "chrome/browser/ui/app_list/test/fake_app_list_model_updater.h"
 #include "chrome/test/base/chrome_ash_test_base.h"
 #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/ui/app_list/search/test/app_list_search_test_helper.cc b/chrome/browser/ui/app_list/search/test/app_list_search_test_helper.cc
index 556c6d3..5a711d9 100644
--- a/chrome/browser/ui/app_list/search/test/app_list_search_test_helper.cc
+++ b/chrome/browser/ui/app_list/search/test/app_list_search_test_helper.cc
@@ -11,36 +11,24 @@
 
 namespace app_list {
 
-namespace {
+ResultsWaiter::ResultsWaiter(const std::u16string& query) : query_(query) {
+  observer_.Observe(::test::GetAppListClient()->search_controller());
+}
 
-// Waiter to ensure results for a query have been published by the search
-// controller.
-class ResultsWaiter : public SearchController::Observer {
- public:
-  explicit ResultsWaiter(const std::u16string& query) : query_(query) {
-    observer_.Observe(::test::GetAppListClient()->search_controller());
-  }
-  ~ResultsWaiter() override = default;
+ResultsWaiter::~ResultsWaiter() = default;
 
-  void OnResultsAdded(
-      const std::u16string& query,
-      const std::vector<const ChromeSearchResult*>& results) override {
-    if (query != query_)
-      return;
-    observer_.Reset();
-    run_loop_.Quit();
-  }
+void ResultsWaiter::OnResultsAdded(
+    const std::u16string& query,
+    const std::vector<const ChromeSearchResult*>& results) {
+  if (query != query_)
+    return;
+  observer_.Reset();
+  run_loop_.Quit();
+}
 
-  void Wait() { run_loop_.Run(); }
-
- private:
-  const std::u16string query_;
-  base::RunLoop run_loop_;
-  base::ScopedObservation<SearchController, SearchController::Observer>
-      observer_{this};
-};
-
-}  // namespace
+void ResultsWaiter::Wait() {
+  run_loop_.Run();
+}
 
 AppListSearchBrowserTest::AppListSearchBrowserTest() {
   scoped_feature_list_.InitWithFeatures(
diff --git a/chrome/browser/ui/app_list/search/test/app_list_search_test_helper.h b/chrome/browser/ui/app_list/search/test/app_list_search_test_helper.h
index ce286fc3..ff7276df 100644
--- a/chrome/browser/ui/app_list/search/test/app_list_search_test_helper.h
+++ b/chrome/browser/ui/app_list/search/test/app_list_search_test_helper.h
@@ -41,6 +41,23 @@
 
 namespace app_list {
 
+class ResultsWaiter : public SearchController::Observer {
+ public:
+  explicit ResultsWaiter(const std::u16string& query);
+  ~ResultsWaiter() override;
+
+  void OnResultsAdded(
+      const std::u16string& query,
+      const std::vector<const ChromeSearchResult*>& results) override;
+  void Wait();
+
+ private:
+  const std::u16string query_;
+  base::RunLoop run_loop_;
+  base::ScopedObservation<SearchController, SearchController::Observer>
+      observer_{this};
+};
+
 // This contains almost end-to-end tests for the launcher search backend. It is
 // set up to simulate user input by calls to the AppListClient, and observe the
 // results that would be displayed via the AppListModelUpdater.
diff --git a/chrome/browser/ui/app_list/search/test/ranking_test_util.cc b/chrome/browser/ui/app_list/search/test/ranking_test_util.cc
index 2214b0c..a534aa0 100644
--- a/chrome/browser/ui/app_list/search/test/ranking_test_util.cc
+++ b/chrome/browser/ui/app_list/search/test/ranking_test_util.cc
@@ -5,56 +5,10 @@
 #include "chrome/browser/ui/app_list/search/test/ranking_test_util.h"
 
 #include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/ui/app_list/search/test/test_result.h"
 
 namespace app_list {
 
-// TestResult ------------------------------------------------------------------
-
-TestResult::TestResult(const std::string& id,
-                       ResultType result_type,
-                       Category category,
-                       double display_score,
-                       double normalized_relevance) {
-  set_id(id);
-  SetTitle(base::UTF8ToUTF16(id));
-  SetResultType(result_type);
-  SetCategory(category);
-  SetDisplayScore(display_score);
-  scoring().normalized_relevance = normalized_relevance;
-}
-
-TestResult::TestResult(const std::string& id,
-                       double relevance,
-                       double normalized_relevance,
-                       DisplayType display_type,
-                       bool best_match) {
-  set_id(id);
-  SetTitle(base::UTF8ToUTF16(id));
-  set_relevance(relevance);
-  scoring().normalized_relevance = normalized_relevance;
-  SetDisplayType(display_type);
-  SetBestMatch(best_match);
-}
-
-TestResult::TestResult(const std::string& id,
-                       DisplayType display_type,
-                       Category category,
-                       int best_match_rank,
-                       double relevance,
-                       double ftrl_result_score) {
-  set_id(id);
-  SetTitle(base::UTF8ToUTF16(id));
-  SetDisplayType(display_type);
-  SetCategory(category);
-  scoring().best_match_rank = best_match_rank;
-  set_relevance(relevance);
-  scoring().ftrl_result_score = ftrl_result_score;
-}
-
-TestResult::~TestResult() {}
-
-// RankerTestBase --------------------------------------------------------------
-
 void RankerTestBase::SetUp() {
   ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
 }
diff --git a/chrome/browser/ui/app_list/search/test/ranking_test_util.h b/chrome/browser/ui/app_list/search/test/ranking_test_util.h
index e294c5b6..64c5724 100644
--- a/chrome/browser/ui/app_list/search/test/ranking_test_util.h
+++ b/chrome/browser/ui/app_list/search/test/ranking_test_util.h
@@ -8,7 +8,6 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/test/task_environment.h"
-#include "chrome/browser/ui/app_list/search/chrome_search_result.h"
 #include "chrome/browser/ui/app_list/search/ranking/ranker.h"
 #include "chrome/browser/ui/app_list/search/ranking/types.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -16,40 +15,6 @@
 
 namespace app_list {
 
-class TestResult : public ChromeSearchResult {
- public:
-  // TestResult is used by many test suites. Each test suite operates on
-  // different members of ChromeSearchResult. This set of constructors aims to
-  //
-  // (a) generalize across the use cases (to minimize constructor number) and
-  // (b) retain flexibility (to keep points-of-use from becoming cumbersome).
-  TestResult() = default;
-
-  TestResult(const std::string& id,
-             ResultType result_type = ResultType::kUnknown,
-             Category category = Category::kUnknown,
-             double display_score = 0.0,
-             double normalized_relevance = 0.0);
-
-  TestResult(const std::string& id,
-             double relevance,
-             double normalized_relevance = 0.0,
-             DisplayType display_type = DisplayType::kNone,
-             bool best_match = false);
-
-  TestResult(const std::string& id,
-             DisplayType display_type,
-             Category category,
-             int best_match_rank,
-             double relevance,
-             double ftrl_result_score);
-
-  ~TestResult() override;
-
-  // ChromeSearchResult overrides:
-  void Open(int event_flags) override {}
-};
-
 class RankerTestBase : public testing::Test {
  public:
   void SetUp() override;
diff --git a/chrome/browser/ui/app_list/search/test/test_result.cc b/chrome/browser/ui/app_list/search/test/test_result.cc
new file mode 100644
index 0000000..90f15f0
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/test/test_result.cc
@@ -0,0 +1,52 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/app_list/search/test/test_result.h"
+
+namespace app_list {
+
+TestResult::TestResult(const std::string& id,
+                       ResultType result_type,
+                       Category category,
+                       double display_score,
+                       double normalized_relevance) {
+  set_id(id);
+  SetTitle(base::UTF8ToUTF16(id));
+  SetResultType(result_type);
+  SetCategory(category);
+  SetDisplayScore(display_score);
+  scoring().normalized_relevance = normalized_relevance;
+}
+
+TestResult::TestResult(const std::string& id,
+                       double relevance,
+                       double normalized_relevance,
+                       DisplayType display_type,
+                       bool best_match) {
+  set_id(id);
+  SetTitle(base::UTF8ToUTF16(id));
+  set_relevance(relevance);
+  scoring().normalized_relevance = normalized_relevance;
+  SetDisplayType(display_type);
+  SetBestMatch(best_match);
+}
+
+TestResult::TestResult(const std::string& id,
+                       DisplayType display_type,
+                       Category category,
+                       int best_match_rank,
+                       double relevance,
+                       double ftrl_result_score) {
+  set_id(id);
+  SetTitle(base::UTF8ToUTF16(id));
+  SetDisplayType(display_type);
+  SetCategory(category);
+  scoring().best_match_rank = best_match_rank;
+  set_relevance(relevance);
+  scoring().ftrl_result_score = ftrl_result_score;
+}
+
+TestResult::~TestResult() = default;
+
+}  // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/test/test_result.h b/chrome/browser/ui/app_list/search/test/test_result.h
new file mode 100644
index 0000000..1805046
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/test/test_result.h
@@ -0,0 +1,49 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_TEST_TEST_RESULT_H_
+#define CHROME_BROWSER_UI_APP_LIST_SEARCH_TEST_TEST_RESULT_H_
+
+#include "base/test/task_environment.h"
+#include "chrome/browser/ui/app_list/search/chrome_search_result.h"
+
+namespace app_list {
+
+class TestResult : public ChromeSearchResult {
+ public:
+  // TestResult is used by many test suites. Each test suite operates on
+  // different members of ChromeSearchResult. This set of constructors aims to
+  //
+  // (a) generalize across the use cases (to minimize constructor number) and
+  // (b) retain flexibility (to keep points-of-use from becoming cumbersome).
+  TestResult() = default;
+
+  explicit TestResult(const std::string& id,
+                      ResultType result_type = ResultType::kUnknown,
+                      Category category = Category::kUnknown,
+                      double display_score = 0.0,
+                      double normalized_relevance = 0.0);
+
+  TestResult(const std::string& id,
+             double relevance,
+             double normalized_relevance = 0.0,
+             DisplayType display_type = DisplayType::kNone,
+             bool best_match = false);
+
+  TestResult(const std::string& id,
+             DisplayType display_type,
+             Category category,
+             int best_match_rank,
+             double relevance,
+             double ftrl_result_score);
+
+  ~TestResult() override;
+
+  // ChromeSearchResult overrides:
+  void Open(int event_flags) override {}
+};
+
+}  // namespace app_list
+
+#endif  // CHROME_BROWSER_UI_APP_LIST_SEARCH_TEST_TEST_RESULT_H_
diff --git a/chrome/browser/ui/app_list/test/app_list_syncable_service_test_base.cc b/chrome/browser/ui/app_list/test/app_list_syncable_service_test_base.cc
index 78a6bcc..74e545d 100644
--- a/chrome/browser/ui/app_list/test/app_list_syncable_service_test_base.cc
+++ b/chrome/browser/ui/app_list/test/app_list_syncable_service_test_base.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/ui/app_list/app_list_model_updater.h"
 #include "chrome/browser/ui/app_list/chrome_app_list_item.h"
 #include "chrome/browser/ui/app_list/chrome_app_list_model_updater.h"
-#include "chrome/browser/ui/app_list/page_break_constants.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 
@@ -38,16 +37,10 @@
     existing_item_ids.emplace_back(pair.first);
   }
 
-  AppListModelUpdater* model_updater = GetModelUpdater();
   for (std::string& id : existing_item_ids) {
     app_list_syncable_service()->RemoveItem(id, /*is_uninstall=*/true);
   }
 
-  // Delete all default page breaks.
-  for (size_t i = 0; i < app_list::kDefaultPageBreakAppIdsLength; ++i)
-    model_updater->RemoveItem(app_list::kDefaultPageBreakAppIds[i],
-                              /*is_uninstall=*/true);
-
   content::RunAllTasksUntilIdle();
 }
 
diff --git a/chrome/browser/ui/keyboard_lock_interactive_browsertest.cc b/chrome/browser/ui/keyboard_lock_interactive_browsertest.cc
index 9dd1534a..ee088bf 100644
--- a/chrome/browser/ui/keyboard_lock_interactive_browsertest.cc
+++ b/chrome/browser/ui/keyboard_lock_interactive_browsertest.cc
@@ -244,8 +244,14 @@
   ASSERT_NO_FATAL_FAILURE(SendShortcutsAndExpectPrevented());
 }
 
+// https://crbug.com/1382699 Flaky on Linux
+#if BUILDFLAG(IS_LINUX)
+#define MAYBE_ActiveWithSomeKeysLocked DISABLED_ActiveWithSomeKeysLocked
+#else
+#define MAYBE_ActiveWithSomeKeysLocked ActiveWithSomeKeysLocked
+#endif
 IN_PROC_BROWSER_TEST_F(KeyboardLockInteractiveBrowserTest,
-                       ActiveWithSomeKeysLocked) {
+                       MAYBE_ActiveWithSomeKeysLocked) {
   ASSERT_NO_FATAL_FAILURE(StartFullscreenLockPage());
   ASSERT_TRUE(DisablePreventDefaultOnTestPage());
   ASSERT_TRUE(RequestKeyboardLock(/*lock_all_keys=*/false));
diff --git a/chrome/browser/ui/passwords/ui_utils.cc b/chrome/browser/ui/passwords/ui_utils.cc
index aaf3c4a8..540c7ad6 100644
--- a/chrome/browser/ui/passwords/ui_utils.cc
+++ b/chrome/browser/ui/passwords/ui_utils.cc
@@ -171,6 +171,13 @@
       form.federation_origin, url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC);
 }
 
+std::u16string GetDisplayPassword(const password_manager::PasswordForm& form) {
+  return form.federation_origin.opaque()
+             ? form.password_value
+             : l10n_util::GetStringFUTF16(IDS_PASSWORDS_VIA_FEDERATION,
+                                          GetDisplayFederation(form));
+}
+
 bool IsSyncingAutosignSetting(Profile* profile) {
   const syncer::SyncService* sync_service =
       SyncServiceFactory::GetForProfile(profile);
diff --git a/chrome/browser/ui/passwords/ui_utils.h b/chrome/browser/ui/passwords/ui_utils.h
index 2ab8a03..d8226e6b 100644
--- a/chrome/browser/ui/passwords/ui_utils.h
+++ b/chrome/browser/ui/passwords/ui_utils.h
@@ -88,6 +88,10 @@
 // Returns |federation_origin| in a human-readable format.
 std::u16string GetDisplayFederation(const password_manager::PasswordForm& form);
 
+// Returns the plain text representation of the password in the form that should
+// be shown in the bubble.
+std::u16string GetDisplayPassword(const password_manager::PasswordForm& form);
+
 // Check if |profile| syncing the Auto sign-in settings (by checking that user
 // syncs the PRIORITY_PREFERENCE). The view appearance might depend on it.
 bool IsSyncingAutosignSetting(Profile* profile);
diff --git a/chrome/browser/ui/views/overlay/back_to_tab_image_button.cc b/chrome/browser/ui/views/overlay/back_to_tab_image_button.cc
deleted file mode 100644
index b982cb9..0000000
--- a/chrome/browser/ui/views/overlay/back_to_tab_image_button.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2018 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/views/overlay/back_to_tab_image_button.h"
-
-#include "chrome/browser/ui/color/chrome_color_id.h"
-#include "chrome/grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/metadata/metadata_impl_macros.h"
-#include "ui/base/models/image_model.h"
-#include "ui/gfx/paint_vector_icon.h"
-#include "ui/views/vector_icons.h"
-
-namespace {
-
-const int kBackToTabImageSize = 14;
-
-}  // namespace
-
-BackToTabImageButton::BackToTabImageButton(PressedCallback callback)
-    : OverlayWindowImageButton(std::move(callback)) {
-  SetImageModel(
-      views::Button::STATE_NORMAL,
-      ui::ImageModel::FromVectorIcon(
-          views::kLaunchIcon, kColorPipWindowForeground, kBackToTabImageSize));
-
-  // Accessibility.
-  const std::u16string back_to_tab_button_label(l10n_util::GetStringUTF16(
-      IDS_PICTURE_IN_PICTURE_BACK_TO_TAB_CONTROL_TEXT));
-  SetAccessibleName(back_to_tab_button_label);
-  SetTooltipText(back_to_tab_button_label);
-}
-
-BEGIN_METADATA(BackToTabImageButton, OverlayWindowImageButton)
-END_METADATA
diff --git a/chrome/browser/ui/views/overlay/back_to_tab_image_button.h b/chrome/browser/ui/views/overlay/back_to_tab_image_button.h
deleted file mode 100644
index f94c776..0000000
--- a/chrome/browser/ui/views/overlay/back_to_tab_image_button.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2018 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_VIEWS_OVERLAY_BACK_TO_TAB_IMAGE_BUTTON_H_
-#define CHROME_BROWSER_UI_VIEWS_OVERLAY_BACK_TO_TAB_IMAGE_BUTTON_H_
-
-#include "chrome/browser/ui/views/overlay/overlay_window_image_button.h"
-#include "chrome/browser/ui/views/overlay/overlay_window_views.h"
-#include "ui/base/metadata/metadata_header_macros.h"
-
-// An image button representing a back-to-tab button.
-class BackToTabImageButton : public OverlayWindowImageButton {
- public:
-  METADATA_HEADER(BackToTabImageButton);
-
-  explicit BackToTabImageButton(PressedCallback callback);
-  BackToTabImageButton(const BackToTabImageButton&) = delete;
-  BackToTabImageButton& operator=(const BackToTabImageButton&) = delete;
-  ~BackToTabImageButton() override = default;
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_OVERLAY_BACK_TO_TAB_IMAGE_BUTTON_H_
diff --git a/chrome/browser/ui/views/overlay/video_overlay_window_views.cc b/chrome/browser/ui/views/overlay/video_overlay_window_views.cc
index 09819a58..3f73e73 100644
--- a/chrome/browser/ui/views/overlay/video_overlay_window_views.cc
+++ b/chrome/browser/ui/views/overlay/video_overlay_window_views.cc
@@ -19,7 +19,6 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/color/chrome_color_id.h"
-#include "chrome/browser/ui/views/overlay/back_to_tab_image_button.h"
 #include "chrome/browser/ui/views/overlay/back_to_tab_label_button.h"
 #include "chrome/browser/ui/views/overlay/close_image_button.h"
 #include "chrome/browser/ui/views/overlay/hang_up_button.h"
@@ -251,23 +250,13 @@
             overlay->RecordButtonPressed(OverlayWindowControl::kClose);
           },
           base::Unretained(this)));
-
-  std::unique_ptr<BackToTabImageButton> back_to_tab_image_button;
-  std::unique_ptr<BackToTabLabelButton> back_to_tab_label_button;
-  auto back_to_tab_callback = base::BindRepeating(
-      [](VideoOverlayWindowViews* overlay) {
-        overlay->controller_->CloseAndFocusInitiator();
-        overlay->RecordButtonPressed(OverlayWindowControl::kBackToTab);
-      },
-      base::Unretained(this));
-  if (base::FeatureList::IsEnabled(media::kMediaSessionWebRTC)) {
-    back_to_tab_label_button =
-        std::make_unique<BackToTabLabelButton>(std::move(back_to_tab_callback));
-  } else {
-    back_to_tab_image_button =
-        std::make_unique<BackToTabImageButton>(std::move(back_to_tab_callback));
-  }
-
+  auto back_to_tab_label_button =
+      std::make_unique<BackToTabLabelButton>(base::BindRepeating(
+          [](VideoOverlayWindowViews* overlay) {
+            overlay->controller_->CloseAndFocusInitiator();
+            overlay->RecordButtonPressed(OverlayWindowControl::kBackToTab);
+          },
+          base::Unretained(this)));
   auto previous_track_controls_view = std::make_unique<TrackImageButton>(
       base::BindRepeating(
           [](VideoOverlayWindowViews* overlay) {
@@ -353,16 +342,9 @@
   close_controls_view->layer()->SetName("CloseControlsView");
 
   // views::View that closes the window and focuses initiator tab. ------------
-  if (back_to_tab_image_button) {
-    back_to_tab_image_button->SetPaintToLayer(ui::LAYER_TEXTURED);
-    back_to_tab_image_button->layer()->SetFillsBoundsOpaquely(false);
-    back_to_tab_image_button->layer()->SetName("BackToTabControlsView");
-  } else {
-    DCHECK(back_to_tab_label_button);
-    back_to_tab_label_button->SetPaintToLayer(ui::LAYER_TEXTURED);
-    back_to_tab_label_button->layer()->SetFillsBoundsOpaquely(false);
-    back_to_tab_label_button->layer()->SetName("BackToTabControlsView");
-  }
+  back_to_tab_label_button->SetPaintToLayer(ui::LAYER_TEXTURED);
+  back_to_tab_label_button->layer()->SetFillsBoundsOpaquely(false);
+  back_to_tab_label_button->layer()->SetName("BackToTabControlsView");
 
   // views::View that holds the previous-track image button. ------------------
   previous_track_controls_view->SetPaintToLayer(ui::LAYER_TEXTURED);
@@ -414,15 +396,8 @@
       controls_container_view->AddChildView(std::move(controls_scrim_view));
   close_controls_view_ =
       controls_container_view->AddChildView(std::move(close_controls_view));
-
-  if (back_to_tab_image_button) {
-    back_to_tab_image_button_ = controls_container_view->AddChildView(
-        std::move(back_to_tab_image_button));
-  } else {
-    DCHECK(back_to_tab_label_button);
-    back_to_tab_label_button_ = controls_container_view->AddChildView(
-        std::move(back_to_tab_label_button));
-  }
+  back_to_tab_label_button_ = controls_container_view->AddChildView(
+      std::move(back_to_tab_label_button));
 
   previous_track_controls_view_ = controls_container_view->AddChildView(
       std::move(previous_track_controls_view));
@@ -538,16 +513,13 @@
   skip_ad_controls_view_->SetPosition(GetBounds().size());
 
   // Following controls order matters:
-  // #1 Back to tab
-  // #2 Previous track
-  // #3 Play/Pause
-  // #4 Next track
-  // #5 Toggle microphone
-  // #6 Toggle camera
-  // #7 Hang up
+  // #1 Previous track
+  // #2 Play/Pause
+  // #3 Next track
+  // #4 Toggle microphone
+  // #5 Toggle camera
+  // #6 Hang up
   std::vector<views::ImageButton*> visible_controls_views;
-  if (back_to_tab_image_button_)
-    visible_controls_views.push_back(back_to_tab_image_button_);
   if (show_previous_track_button_)
     visible_controls_views.push_back(previous_track_controls_view_);
   if (show_play_pause_button_)
@@ -905,10 +877,6 @@
 }
 
 gfx::Rect VideoOverlayWindowViews::GetBackToTabControlsBounds() {
-  if (back_to_tab_image_button_)
-    return back_to_tab_image_button_->GetMirroredBounds();
-
-  DCHECK(back_to_tab_label_button_);
   return back_to_tab_label_button_->GetMirroredBounds();
 }
 
diff --git a/chrome/browser/ui/views/overlay/video_overlay_window_views.h b/chrome/browser/ui/views/overlay/video_overlay_window_views.h
index bd2815b..c388b803 100644
--- a/chrome/browser/ui/views/overlay/video_overlay_window_views.h
+++ b/chrome/browser/ui/views/overlay/video_overlay_window_views.h
@@ -20,7 +20,6 @@
 class FrameSinkId;
 }  // namespace viz
 
-class BackToTabImageButton;
 class BackToTabLabelButton;
 class CloseImageButton;
 class HangUpButton;
@@ -160,7 +159,6 @@
   raw_ptr<views::View> controls_scrim_view_ = nullptr;
   raw_ptr<views::View> controls_container_view_ = nullptr;
   raw_ptr<CloseImageButton> close_controls_view_ = nullptr;
-  raw_ptr<BackToTabImageButton> back_to_tab_image_button_ = nullptr;
   raw_ptr<BackToTabLabelButton> back_to_tab_label_button_ = nullptr;
   raw_ptr<TrackImageButton> previous_track_controls_view_ = nullptr;
   raw_ptr<PlaybackImageButton> play_pause_controls_view_ = nullptr;
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_view.cc b/chrome/browser/ui/views/passwords/manage_passwords_view.cc
index d9f5c830..3b7a9dcc 100644
--- a/chrome/browser/ui/views/passwords/manage_passwords_view.cc
+++ b/chrome/browser/ui/views/passwords/manage_passwords_view.cc
@@ -4,14 +4,24 @@
 
 #include "chrome/browser/ui/views/passwords/manage_passwords_view.h"
 
+#include <memory>
+#include <optional>
+#include <utility>
+
 #include "chrome/browser/ui/passwords/passwords_model_delegate.h"
 #include "chrome/browser/ui/passwords/ui_utils.h"
+#include "chrome/browser/ui/views/chrome_layout_provider.h"
+#include "chrome/browser/ui/views/controls/page_switcher_view.h"
 #include "chrome/browser/ui/views/passwords/views_utils.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/password_manager/core/browser/password_manager_client.h"
 #include "components/password_manager/core/common/password_manager_features.h"
+#include "ui/views/controls/image_view.h"
 #include "ui/views/controls/styled_label.h"
+#include "ui/views/layout/box_layout_view.h"
+#include "ui/views/layout/layout_provider.h"
+#include "ui/views/view.h"
 
 ManagePasswordsView::ManagePasswordsView(content::WebContents* web_contents,
                                          views::View* anchor_view)
@@ -23,6 +33,12 @@
       password_manager::features::kRevampedPasswordManagementBubble));
   SetButtons(ui::DIALOG_BUTTON_NONE);
 
+  SetLayoutManager(std::make_unique<views::BoxLayout>(
+      views::BoxLayout::Orientation::kVertical));
+
+  page_container_ = AddChildView(
+      std::make_unique<PageSwitcherView>(CreatePasswordListView()));
+
   SetFootnoteView(CreateFooterView());
 }
 
@@ -41,6 +57,41 @@
                                         ui::kColorIcon);
 }
 
+void ManagePasswordsView::AddedToWidget() {
+  // Since PasswordBubbleViewBase creates the bubble using
+  // BubbleDialogDelegateView::CreateBubble() *after* the construction of the
+  // ManagePasswordsView, the title view cannot be set in the constructor.
+  GetBubbleFrameView()->SetTitleView(CreatePasswordListTitleView());
+}
+
+std::unique_ptr<views::View> ManagePasswordsView::CreatePasswordListTitleView()
+    const {
+  const ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get();
+  auto header = std::make_unique<views::BoxLayoutView>();
+  // Set the space between the icon and title similar to the default behavior in
+  // BubbleFrameView::Layout().
+  header->SetBetweenChildSpacing(
+      layout_provider->GetInsetsMetric(views::INSETS_DIALOG_TITLE).left());
+  header->AddChildView(
+      std::make_unique<views::ImageView>(ui::ImageModel::FromVectorIcon(
+          GooglePasswordManagerVectorIcon(), ui::kColorIcon,
+          layout_provider->GetDistanceMetric(
+              DISTANCE_BUBBLE_HEADER_VECTOR_ICON_SIZE))));
+  // TODO(crbug.com/1382017): refactor to use the title provided by the
+  // controller instead.
+  header->AddChildView(views::BubbleFrameView::CreateDefaultTitleLabel(
+      u"Saved passwords for this site"));
+  return header;
+}
+
+std::unique_ptr<views::View> ManagePasswordsView::CreatePasswordListView()
+    const {
+  auto container_view = std::make_unique<views::BoxLayoutView>();
+  container_view->SetOrientation(views::BoxLayout::Orientation::kVertical);
+  // TODO(crbug.com/1382017): List all saved passwords here.
+  return container_view;
+}
+
 std::unique_ptr<views::View> ManagePasswordsView::CreateFooterView() {
   base::RepeatingClosure open_password_manager_closure = base::BindRepeating(
       [](ManagePasswordsView* dialog) {
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_view.h b/chrome/browser/ui/views/passwords/manage_passwords_view.h
index 48bfa6e7..ae3abfef 100644
--- a/chrome/browser/ui/views/passwords/manage_passwords_view.h
+++ b/chrome/browser/ui/views/passwords/manage_passwords_view.h
@@ -8,6 +8,8 @@
 #include "chrome/browser/ui/passwords/bubble_controllers/items_bubble_controller.h"
 #include "chrome/browser/ui/views/passwords/password_bubble_view_base.h"
 
+class PageSwitcherView;
+
 // A dialog for managing stored password and federated login information for a
 // specific site. A user can see the details of the passwords, and edit the
 // stored password note.
@@ -26,10 +28,14 @@
   PasswordBubbleControllerBase* GetController() override;
   const PasswordBubbleControllerBase* GetController() const override;
   ui::ImageModel GetWindowIcon() override;
+  void AddedToWidget() override;
 
+  std::unique_ptr<views::View> CreatePasswordListTitleView() const;
   std::unique_ptr<views::View> CreateFooterView();
+  std::unique_ptr<views::View> CreatePasswordListView() const;
 
   ItemsBubbleController controller_;
+  raw_ptr<PageSwitcherView> page_container_ = nullptr;
 };
 
 #endif  // CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_VIEW_H_
diff --git a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
index ccceb091..94b2c86 100644
--- a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
+++ b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
@@ -189,18 +189,14 @@
 // static
 std::unique_ptr<views::Label> PasswordBubbleViewBase::CreatePasswordLabel(
     const password_manager::PasswordForm& form) {
-  std::unique_ptr<views::Label> label;
+  std::unique_ptr<views::Label> label = std::make_unique<views::Label>(
+      GetDisplayPassword(form), views::style::CONTEXT_DIALOG_BODY_TEXT);
   if (form.federation_origin.opaque()) {
-    label = std::make_unique<views::Label>(
-        form.password_value, views::style::CONTEXT_DIALOG_BODY_TEXT,
-        STYLE_SECONDARY_MONOSPACED);
+    label->SetTextStyle(STYLE_SECONDARY_MONOSPACED);
     label->SetObscured(true);
     label->SetElideBehavior(gfx::TRUNCATE);
   } else {
-    label = std::make_unique<views::Label>(
-        l10n_util::GetStringFUTF16(IDS_PASSWORDS_VIA_FEDERATION,
-                                   GetDisplayFederation(form)),
-        views::style::CONTEXT_DIALOG_BODY_TEXT, views::style::STYLE_SECONDARY);
+    label->SetTextStyle(views::style::STYLE_SECONDARY);
     label->SetElideBehavior(gfx::ELIDE_HEAD);
   }
   label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
diff --git a/chrome/browser/ui/webui/ash/in_session_password_change/password_change_handler.cc b/chrome/browser/ui/webui/ash/in_session_password_change/password_change_handler.cc
index ffd88e0e..316ec1a6 100644
--- a/chrome/browser/ui/webui/ash/in_session_password_change/password_change_handler.cc
+++ b/chrome/browser/ui/webui/ash/in_session_password_change/password_change_handler.cc
@@ -8,7 +8,6 @@
 
 #include "base/logging.h"
 #include "base/values.h"
-#include "chrome/browser/ash/login/auth/chrome_cryptohome_authenticator.h"
 #include "chrome/browser/ash/login/login_pref_names.h"
 #include "chrome/browser/ash/login/saml/in_session_password_change_manager.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
diff --git a/chrome/browser/ui/webui/ash/login/check_passwords_against_cryptohome_helper.cc b/chrome/browser/ui/webui/ash/login/check_passwords_against_cryptohome_helper.cc
index 40185b11..1e8072f 100644
--- a/chrome/browser/ui/webui/ash/login/check_passwords_against_cryptohome_helper.cc
+++ b/chrome/browser/ui/webui/ash/login/check_passwords_against_cryptohome_helper.cc
@@ -7,7 +7,6 @@
 #include "ash/constants/ash_features.h"
 #include "base/values.h"
 #include "chromeos/ash/components/login/auth/auth_status_consumer.h"
-#include "chromeos/ash/components/login/auth/cryptohome_authenticator.h"
 #include "chromeos/ash/components/login/auth/extended_authenticator.h"
 #include "chromeos/ash/components/login/auth/public/cryptohome_key_constants.h"
 #include "chromeos/ash/components/login/auth/public/user_context.h"
diff --git a/chrome/browser/ui/webui/ash/login/check_passwords_against_cryptohome_helper.h b/chrome/browser/ui/webui/ash/login/check_passwords_against_cryptohome_helper.h
index f79c1c0..ee1ff09 100644
--- a/chrome/browser/ui/webui/ash/login/check_passwords_against_cryptohome_helper.h
+++ b/chrome/browser/ui/webui/ash/login/check_passwords_against_cryptohome_helper.h
@@ -5,9 +5,9 @@
 #ifndef CHROME_BROWSER_UI_WEBUI_ASH_LOGIN_CHECK_PASSWORDS_AGAINST_CRYPTOHOME_HELPER_H_
 #define CHROME_BROWSER_UI_WEBUI_ASH_LOGIN_CHECK_PASSWORDS_AGAINST_CRYPTOHOME_HELPER_H_
 
+#include "base/callback.h"
 #include "base/values.h"
 #include "chromeos/ash/components/login/auth/auth_status_consumer.h"
-#include "chromeos/ash/components/login/auth/cryptohome_authenticator.h"
 #include "chromeos/ash/components/login/auth/public/user_context.h"
 #include "components/login/base_screen_handler_utils.h"
 
diff --git a/chrome/browser/ui/webui/ash/login/online_login_helper.h b/chrome/browser/ui/webui/ash/login/online_login_helper.h
index 7be8f44..3088748e 100644
--- a/chrome/browser/ui/webui/ash/login/online_login_helper.h
+++ b/chrome/browser/ui/webui/ash/login/online_login_helper.h
@@ -13,7 +13,6 @@
 #include "chrome/browser/ash/login/ui/login_display_host.h"
 #include "chrome/browser/ash/login/ui/signin_ui.h"
 #include "chrome/browser/extensions/api/cookies/cookies_api.h"
-#include "chromeos/ash/components/login/auth/cryptohome_authenticator.h"
 #include "components/login/base_screen_handler_utils.h"
 #include "components/user_manager/user_manager.h"
 #include "content/public/browser/storage_partition.h"
diff --git a/chrome/browser/ui/webui/extensions/extension_icon_source.cc b/chrome/browser/ui/webui/extensions/extension_icon_source.cc
index e1973055..90ff0e8 100644
--- a/chrome/browser/ui/webui/extensions/extension_icon_source.cc
+++ b/chrome/browser/ui/webui/extensions/extension_icon_source.cc
@@ -210,8 +210,8 @@
   ExtensionIconRequest* request = GetData(request_id);
   ImageLoader::Get(profile_)->LoadImageAsync(
       request->extension.get(), icon, gfx::Size(request->size, request->size),
-      base::BindOnce(&ExtensionIconSource::OnImageLoaded, AsWeakPtr(),
-                     request_id));
+      base::BindOnce(&ExtensionIconSource::OnImageLoaded,
+                     weak_ptr_factory_.GetWeakPtr(), request_id));
 }
 
 void ExtensionIconSource::LoadFaviconImage(int request_id) {
diff --git a/chrome/browser/ui/webui/extensions/extension_icon_source.h b/chrome/browser/ui/webui/extensions/extension_icon_source.h
index ac0eb4ce..0d389c32 100644
--- a/chrome/browser/ui/webui/extensions/extension_icon_source.h
+++ b/chrome/browser/ui/webui/extensions/extension_icon_source.h
@@ -49,8 +49,7 @@
 //  2) If a 16px icon was requested, the favicon for extension's launch URL.
 //  3) The default extension / application icon if there are still no matches.
 //
-class ExtensionIconSource : public content::URLDataSource,
-                            public base::SupportsWeakPtr<ExtensionIconSource> {
+class ExtensionIconSource : public content::URLDataSource {
  public:
   explicit ExtensionIconSource(Profile* profile);
 
@@ -161,6 +160,8 @@
   std::unique_ptr<SkBitmap> default_extension_data_;
 
   base::CancelableTaskTracker cancelable_task_tracker_;
+
+  base::WeakPtrFactory<ExtensionIconSource> weak_ptr_factory_{this};
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc b/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc
index ed936321..2255b93 100644
--- a/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc
@@ -208,7 +208,7 @@
   absl::optional<ProvisionalUsbPrinter> printer =
       ParseProvisionalUsbPrinterId(printer_id);
   if (!printer.has_value()) {
-    std::move(callback).Run(base::DictionaryValue());
+    std::move(callback).Run(base::Value::Dict());
     return;
   }
 
@@ -216,7 +216,7 @@
       UsbDeviceManager::Get(profile_)->GetDeviceInfo(
           printer.value().device_guid);
   if (!device) {
-    std::move(callback).Run(base::DictionaryValue());
+    std::move(callback).Run(base::Value::Dict());
     return;
   }
 
@@ -307,8 +307,8 @@
 
 void ExtensionPrinterHandler::WrapGetPrinterInfoCallback(
     GetPrinterInfoCallback callback,
-    const base::DictionaryValue& printer_info) {
-  std::move(callback).Run(printer_info);
+    base::Value::Dict printer_info) {
+  std::move(callback).Run(std::move(printer_info));
 }
 
 void ExtensionPrinterHandler::OnUsbDevicesEnumerated(
diff --git a/chrome/browser/ui/webui/print_preview/extension_printer_handler.h b/chrome/browser/ui/webui/print_preview/extension_printer_handler.h
index 60fabea..0138715 100644
--- a/chrome/browser/ui/webui/print_preview/extension_printer_handler.h
+++ b/chrome/browser/ui/webui/print_preview/extension_printer_handler.h
@@ -92,7 +92,7 @@
                                  base::Value::Dict capability);
   void WrapPrintCallback(PrintCallback callback, const base::Value& status);
   void WrapGetPrinterInfoCallback(GetPrinterInfoCallback callback,
-                                  const base::DictionaryValue& printer_info);
+                                  base::Value::Dict printer_info);
 
   void OnUsbDevicesEnumerated(
       AddedPrintersCallback callback,
diff --git a/chrome/browser/ui/webui/print_preview/extension_printer_handler_unittest.cc b/chrome/browser/ui/webui/print_preview/extension_printer_handler_unittest.cc
index 12f7fc2fa..1d1cbf0 100644
--- a/chrome/browser/ui/webui/print_preview/extension_printer_handler_unittest.cc
+++ b/chrome/browser/ui/webui/print_preview/extension_printer_handler_unittest.cc
@@ -282,11 +282,10 @@
 // Used as a callback to StartGrantPrinterAccess in tests.
 // Increases |*call_count| and records the value returned.
 void RecordPrinterInfo(size_t* call_count,
-                       std::unique_ptr<base::DictionaryValue>* printer_info_out,
-                       const base::DictionaryValue& printer_info) {
+                       base::Value::Dict* printer_info_out,
+                       const base::Value::Dict& printer_info) {
   ++(*call_count);
-  *printer_info_out = base::DictionaryValue::From(
-      base::Value::ToUniquePtrValue(printer_info.Clone()));
+  *printer_info_out = printer_info.Clone();
 }
 
 std::string RefCountedMemoryToString(
@@ -442,10 +441,9 @@
     return pending_usb_info_callbacks_.size();
   }
 
-  void TriggerNextUsbPrinterInfoCallback(
-      const base::DictionaryValue& printer_info) {
+  void TriggerNextUsbPrinterInfoCallback(base::Value::Dict printer_info) {
     ASSERT_GT(pending_usb_info_count(), 0u);
-    std::move(pending_usb_info_callbacks_.front()).Run(printer_info);
+    std::move(pending_usb_info_callbacks_.front()).Run(std::move(printer_info));
     pending_usb_info_callbacks_.pop();
   }
 
@@ -597,7 +595,7 @@
   EXPECT_EQ(1u, call_count);
   EXPECT_FALSE(is_done);
   EXPECT_EQ(2u, printers.size());
-  std::unique_ptr<base::DictionaryValue> extension_1_entry(
+  base::Value::Dict extension_1_entry =
       DictionaryBuilder()
           .Set("id", base::StringPrintf("provisional-usb:%s:%s",
                                         extension_1->id().c_str(),
@@ -606,8 +604,8 @@
           .Set("extensionName", "Provider 1")
           .Set("extensionId", extension_1->id())
           .Set("provisional", true)
-          .Build());
-  std::unique_ptr<base::DictionaryValue> extension_2_entry(
+          .BuildDict();
+  base::Value::Dict extension_2_entry =
       DictionaryBuilder()
           .Set("id", base::StringPrintf("provisional-usb:%s:%s",
                                         extension_2->id().c_str(),
@@ -616,9 +614,9 @@
           .Set("extensionName", "Provider 2")
           .Set("extensionId", extension_2->id())
           .Set("provisional", true)
-          .Build());
-  EXPECT_TRUE(base::Contains(printers, *extension_1_entry));
-  EXPECT_TRUE(base::Contains(printers, *extension_2_entry));
+          .BuildDict();
+  EXPECT_TRUE(base::Contains(printers, extension_1_entry));
+  EXPECT_TRUE(base::Contains(printers, extension_2_entry));
 
   fake_api->TriggerNextGetPrintersCallback(base::Value::List(), /*done=*/true);
 
@@ -979,7 +977,7 @@
   base::RunLoop().RunUntilIdle();
 
   size_t call_count = 0;
-  std::unique_ptr<base::DictionaryValue> printer_info;
+  base::Value::Dict printer_info;
 
   std::string printer_id = base::StringPrintf(
       "provisional-usb:fake extension id:%s", device->guid.c_str());
@@ -987,23 +985,22 @@
       printer_id,
       base::BindOnce(&RecordPrinterInfo, &call_count, &printer_info));
 
-  EXPECT_FALSE(printer_info.get());
+  EXPECT_TRUE(printer_info.empty());
   FakePrinterProviderAPI* fake_api = GetPrinterProviderAPI();
   ASSERT_TRUE(fake_api);
   ASSERT_EQ(1u, fake_api->pending_usb_info_count());
 
-  std::unique_ptr<base::DictionaryValue> original_printer_info(
-      DictionaryBuilder()
-          .Set("id", "printer1")
-          .Set("name", "Printer 1")
-          .Build());
+  base::Value::Dict original_printer_info = DictionaryBuilder()
+                                                .Set("id", "printer1")
+                                                .Set("name", "Printer 1")
+                                                .BuildDict();
 
-  fake_api->TriggerNextUsbPrinterInfoCallback(*original_printer_info);
+  fake_api->TriggerNextUsbPrinterInfoCallback(original_printer_info.Clone());
 
   EXPECT_EQ(1u, call_count);
-  ASSERT_TRUE(printer_info.get());
-  EXPECT_EQ(*printer_info, *original_printer_info)
-      << *printer_info << ", expected: " << *original_printer_info;
+  EXPECT_FALSE(printer_info.empty());
+  EXPECT_EQ(printer_info, original_printer_info)
+      << printer_info << ", expected: " << original_printer_info;
 }
 
 TEST_F(ExtensionPrinterHandlerTest, GrantUsbPrinterAccess_Reset) {
@@ -1012,30 +1009,29 @@
   base::RunLoop().RunUntilIdle();
 
   size_t call_count = 0;
-  std::unique_ptr<base::DictionaryValue> printer_info;
+  base::Value::Dict printer_info;
 
   extension_printer_handler_->StartGrantPrinterAccess(
       base::StringPrintf("provisional-usb:fake extension id:%s",
                          device->guid.c_str()),
       base::BindOnce(&RecordPrinterInfo, &call_count, &printer_info));
 
-  EXPECT_FALSE(printer_info.get());
+  EXPECT_TRUE(printer_info.empty());
   FakePrinterProviderAPI* fake_api = GetPrinterProviderAPI();
   ASSERT_TRUE(fake_api);
   ASSERT_EQ(1u, fake_api->pending_usb_info_count());
 
   extension_printer_handler_->Reset();
 
-  std::unique_ptr<base::DictionaryValue> original_printer_info(
-      DictionaryBuilder()
-          .Set("id", "printer1")
-          .Set("name", "Printer 1")
-          .Build());
+  base::Value::Dict original_printer_info = DictionaryBuilder()
+                                                .Set("id", "printer1")
+                                                .Set("name", "Printer 1")
+                                                .BuildDict();
 
-  fake_api->TriggerNextUsbPrinterInfoCallback(*original_printer_info);
+  fake_api->TriggerNextUsbPrinterInfoCallback(std::move(original_printer_info));
 
   EXPECT_EQ(0u, call_count);
-  EXPECT_FALSE(printer_info.get());
+  EXPECT_TRUE(printer_info.empty());
 }
 
 }  // namespace printing
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos.cc
index bdc8ba3..e221c86 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos.cc
@@ -239,12 +239,12 @@
 
 void PrintPreviewHandlerChromeOS::OnGotExtensionPrinterInfo(
     const std::string& callback_id,
-    const base::DictionaryValue& printer_info) {
-  if (printer_info.DictEmpty()) {
+    const base::Value::Dict& printer_info) {
+  if (printer_info.empty()) {
     RejectJavascriptCallback(base::Value(callback_id), base::Value());
-    return;
+  } else {
+    ResolveJavascriptCallback(base::Value(callback_id), printer_info);
   }
-  ResolveJavascriptCallback(base::Value(callback_id), printer_info);
 }
 
 void PrintPreviewHandlerChromeOS::HandleRequestPrinterStatusUpdate(
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos.h b/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos.h
index f839399..913e19d 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos.h
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler_chromeos.h
@@ -10,6 +10,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/values.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/ash/printing/print_servers_manager.h"
 #include "chrome/common/buildflags.h"
@@ -22,10 +23,6 @@
 #include "printing/buildflags/buildflags.h"
 #include "printing/print_job_constants.h"
 
-namespace base {
-class DictionaryValue;
-}
-
 namespace printing {
 
 namespace mojom {
@@ -88,7 +85,7 @@
   // |callback_id|: The javascript callback to resolve or reject.
   // |printer_info|: The data reported by the extension.
   void OnGotExtensionPrinterInfo(const std::string& callback_id,
-                                 const base::DictionaryValue& printer_info);
+                                 const base::Value::Dict& printer_info);
 
   // Called to initiate a status request for a printer.
   void HandleRequestPrinterStatusUpdate(const base::Value::List& args);
diff --git a/chrome/browser/ui/webui/print_preview/printer_handler.h b/chrome/browser/ui/webui/print_preview/printer_handler.h
index 5464909..a371801 100644
--- a/chrome/browser/ui/webui/print_preview/printer_handler.h
+++ b/chrome/browser/ui/webui/print_preview/printer_handler.h
@@ -48,7 +48,7 @@
       base::OnceCallback<void(base::Value::Dict capability)>;
   using PrintCallback = base::OnceCallback<void(const base::Value& error)>;
   using GetPrinterInfoCallback =
-      base::OnceCallback<void(const base::DictionaryValue& printer_info)>;
+      base::OnceCallback<void(const base::Value::Dict& printer_info)>;
 #if BUILDFLAG(IS_CHROMEOS)
   using GetEulaUrlCallback =
       base::OnceCallback<void(const std::string& license)>;
diff --git a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc
index 92d0848..c17b45f 100644
--- a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc
+++ b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc
@@ -83,6 +83,101 @@
        IDS_PRIVACY_SANDBOX_DIALOG_NOTICE_ACKNOWLEDGE_BUTTON},
       {"noticeOpenSettingsButton",
        IDS_PRIVACY_SANDBOX_DIALOG_NOTICE_OPEN_SETTINGS_BUTTON},
+
+      // Strings for the consent step of the combined dialog (kM1Consent).
+      {"m1ConsentTitle", IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_TITLE},
+      {"m1ConsentDescription1",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_DESCRIPTION_1},
+      {"m1ConsentDescription2",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_DESCRIPTION_2},
+      {"m1ConsentDescription3",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_DESCRIPTION_3},
+      {"m1ConsentLearnMoreExpandLabel",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_EXPAND_LABEL},
+      {"m1ConsentDescription4",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_DESCRIPTION_4},
+      {"m1ConsentSavingLabel",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_SAVING_LABEL},
+      {"m1ConsentAcceptButton",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_ACCEPT_BUTTON},
+      {"m1ConsentDeclineButton",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_DECLINE_BUTTON},
+      {"m1ConsentLearnMoreHeading",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_HEADING},
+      {"m1ConsentLearnMoreBullet1",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_BULLET_1},
+      {"m1ConsentLearnMoreBullet2",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_BULLET_2},
+      {"m1ConsentLearnMoreBullet3",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_BULLET_3},
+      {"m1ConsentLearnMoreLink",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_CONSENT_LEARN_MORE_LINK},
+
+      // Strings for the notice step of the combined dialog (kM1NoticeEEA).
+      {"m1NoticeEeaTitle", IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_TITLE},
+      {"m1NoticeEeaDescription1",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_DESCRIPTION_1},
+      {"m1NoticeEeaBullet1", IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_BULLET_1},
+      {"m1NoticeEeaBullet2", IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_BULLET_2},
+      {"m1NoticeEeaLearnMoreExpandLabel",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_EXPAND_LABEL},
+      {"m1NoticeEeaDescription2",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_DESCRIPTION_2},
+      {"m1NoticeEeaAckButton",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_ACK_BUTTON},
+      {"m1NoticeEeaSettingsButton",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_SETTINGS_BUTTON},
+      {"m1NoticeEeaLearnMoreHeading1",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_HEADING_1},
+      {"m1NoticeEeaLearnMoreDescription",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_DESCRIPTION},
+      {"m1NoticeEeaLearnMoreHeading2",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_HEADING_2},
+      {"m1NoticeEeaLearnMoreBullet1",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_BULLET_1},
+      {"m1NoticeEeaLearnMoreBullet2",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_BULLET_2},
+      {"m1NoticeEeaLearnMoreBullet3",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_EEA_LEARN_MORE_BULLET_3},
+
+      // Strings for the notice dialog (kM1NoticeROW).
+      {"m1NoticeRowTitle", IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_TITLE},
+      {"m1NoticeRowDescription1",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_DESCRIPTION_1},
+      {"m1NoticeRowDescription2",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_DESCRIPTION_2},
+      {"m1NoticeRowDescription3",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_DESCRIPTION_3},
+      {"m1NoticeRowDescription4",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_DESCRIPTION_4},
+      {"m1NoticeRowAckButton",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_ACK_BUTTON},
+      {"m1NoticeRowSettingsButton",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_SETTINGS_BUTTON},
+      {"m1NoticeRowLearnMoreExpandLabel",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_EXPAND_LABEL},
+      {"m1NoticeRowLearnMoreHeading1",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_HEADING_1},
+      {"m1NoticeRowLearnMoreDescription1",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_1},
+      {"m1NoticeRowLearnMoreHeading2",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_HEADING_2},
+      {"m1NoticeRowLearnMoreDescription2",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_2},
+      {"m1NoticeRowLearnMoreBullet1",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_BULLET_1},
+      {"m1NoticeRowLearnMoreBullet2",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_BULLET_2},
+      {"m1NoticeRowLearnMoreDescription3",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_3},
+      {"m1NoticeRowLearnMoreDescription4",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_4},
+      {"m1NoticeRowLearnMoreHeading3",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_HEADING_3},
+      {"m1NoticeRowLearnMoreDescription5",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_5},
+      {"m1NoticeRowLearnMoreDescription6",
+       IDS_PRIVACY_SANDBOX_DIALOG_M1_NOTICE_ROW_LEARN_MORE_DESCRIPTION_6},
   };
 
   source->AddLocalizedStrings(kStrings);
diff --git a/chrome/browser/ui/webui/side_panel/bookmarks/bookmarks_side_panel_ui.cc b/chrome/browser/ui/webui/side_panel/bookmarks/bookmarks_side_panel_ui.cc
index 0ca3d125..9ddbe82 100644
--- a/chrome/browser/ui/webui/side_panel/bookmarks/bookmarks_side_panel_ui.cc
+++ b/chrome/browser/ui/webui/side_panel/bookmarks/bookmarks_side_panel_ui.cc
@@ -65,6 +65,8 @@
       {"sortReverseAlphabetically", IDS_BOOKMARKS_SORT_REVERSE_ALPHABETICALLY},
       {"sortMenuA11yLabel", IDS_BOOKMARKS_SORT_MENU_A11Y_LABEL},
       {"addCurrentTab", IDS_READ_LATER_ADD_CURRENT_TAB},
+      {"emptyTitle", IDS_BOOKMARKS_EMPTY_STATE_TITLE},
+      {"emptyBody", IDS_BOOKMARKS_EMPTY_STATE_BODY},
   };
   for (const auto& str : kLocalizedStrings)
     webui::AddLocalizedString(source, str.name, str.id);
diff --git a/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc b/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc
index 7f0c21f..55c99f0 100644
--- a/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc
+++ b/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc
@@ -83,6 +83,8 @@
       {"sortAlphabetically", IDS_BOOKMARKS_SORT_ALPHABETICALLY},
       {"sortReverseAlphabetically", IDS_BOOKMARKS_SORT_REVERSE_ALPHABETICALLY},
       {"sortMenuA11yLabel", IDS_BOOKMARKS_SORT_MENU_A11Y_LABEL},
+      {"emptyTitle", IDS_BOOKMARKS_EMPTY_STATE_TITLE},
+      {"emptyBody", IDS_BOOKMARKS_EMPTY_STATE_BODY},
   };
   for (const auto& str : kLocalizedStrings)
     webui::AddLocalizedString(source, str.name, str.id);
diff --git a/chrome/browser/ui/webui/signin/ash/signin_helper.cc b/chrome/browser/ui/webui/signin/ash/signin_helper.cc
index f8e9f0d..382e735 100644
--- a/chrome/browser/ui/webui/signin/ash/signin_helper.cc
+++ b/chrome/browser/ui/webui/signin/ash/signin_helper.cc
@@ -25,11 +25,6 @@
 
 using SigninRestrictionPolicyFetcher = UserCloudSigninRestrictionPolicyFetcher;
 
-// static
-bool SigninHelper::IsSecondaryGoogleAccountUsageEnabled() {
-  return base::FeatureList::IsEnabled(features::kSecondaryGoogleAccountUsage);
-}
-
 SigninHelper::ArcHelper::ArcHelper(
     bool is_available_in_arc,
     bool is_account_addition,
@@ -75,7 +70,7 @@
 
   if (AccountAppsAvailability::IsArcAccountRestrictionsEnabled())
     DCHECK(arc_helper_);
-  if (!IsInitialPrimaryAccount() && IsSecondaryGoogleAccountUsageEnabled()) {
+  if (!IsInitialPrimaryAccount()) {
     DCHECK(show_signin_blocked_error_);
     restriction_fetcher_ =
         std::make_unique<UserCloudSigninRestrictionPolicyFetcher>(
@@ -90,7 +85,7 @@
 
 void SigninHelper::OnClientOAuthSuccess(const ClientOAuthResult& result) {
   refresh_token_ = result.refresh_token;
-  if (!IsInitialPrimaryAccount() && IsSecondaryGoogleAccountUsageEnabled()) {
+  if (!IsInitialPrimaryAccount()) {
     restriction_fetcher_->GetSecondaryGoogleAccountUsage(
         /*access_token_fetcher=*/GaiaAccessTokenFetcher::
             CreateExchangeRefreshTokenForAccessTokenInstance(
diff --git a/chrome/browser/ui/webui/signin/ash/signin_helper.h b/chrome/browser/ui/webui/signin/ash/signin_helper.h
index 814bf52..16e6daa 100644
--- a/chrome/browser/ui/webui/signin/ash/signin_helper.h
+++ b/chrome/browser/ui/webui/signin/ash/signin_helper.h
@@ -70,8 +70,6 @@
   SigninHelper& operator=(const SigninHelper&) = delete;
   ~SigninHelper() override;
 
-  static bool IsSecondaryGoogleAccountUsageEnabled();
-
  protected:
   // GaiaAuthConsumer overrides.
   void OnClientOAuthSuccess(const ClientOAuthResult& result) override;
diff --git a/chrome/browser/ui/webui/signin/ash/signin_helper_browsertest.cc b/chrome/browser/ui/webui/signin/ash/signin_helper_browsertest.cc
index 26d26ea..4e8c184 100644
--- a/chrome/browser/ui/webui/signin/ash/signin_helper_browsertest.cc
+++ b/chrome/browser/ui/webui/signin/ash/signin_helper_browsertest.cc
@@ -508,10 +508,7 @@
 class SigninHelperTestSecondaryGoogleAccountUsage : public SigninHelperTest {
  public:
   SigninHelperTestSecondaryGoogleAccountUsage() {
-    feature_list_.InitWithFeatures(
-        /*enabled_features=*/{chromeos::features::kSecondaryGoogleAccountUsage,
-                              chromeos::features::kLacrosSupport},
-        /*disabled_features=*/{chromeos::features::kLacrosSupport});
+    feature_list_.InitAndDisableFeature(chromeos::features::kLacrosSupport);
   }
 
   ~SigninHelperTestSecondaryGoogleAccountUsage() override = default;
diff --git a/chrome/browser/updater/BUILD.gn b/chrome/browser/updater/BUILD.gn
index 0f26340..ac4300a 100644
--- a/chrome/browser/updater/BUILD.gn
+++ b/chrome/browser/updater/BUILD.gn
@@ -38,7 +38,7 @@
       "browser_updater_helper_client_mac.mm",
     ]
 
-    if (enable_chromium_updater) {
+    if (enable_updater) {
       sources += [ "browser_updater_client_util_mac.mm" ]
     } else {
       sources += [ "browser_updater_client_util_no_updater.cc" ]
@@ -66,7 +66,7 @@
   deps = [ "//base" ]
 
   if (is_mac) {
-    if (enable_chromium_updater || is_chrome_branded) {
+    if (enable_updater || is_chrome_branded) {
       sources += [ "scheduler_mac.cc" ]
       deps += [
         ":browser_updater_client",
diff --git a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_exteral_install_options_unittest.cc b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_exteral_install_options_unittest.cc
index a5b9a1cc7..5e13616 100644
--- a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_exteral_install_options_unittest.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_exteral_install_options_unittest.cc
@@ -14,8 +14,8 @@
 base::Value CreatePolicyEntry(base::StringPiece web_bundle_id,
                               base::StringPiece update_manifest_url) {
   base::Value policy_entry(base::Value::Type::DICT);
-  policy_entry.SetStringKey(web_app::kWebBundleIdKey, web_bundle_id);
-  policy_entry.SetStringKey(web_app::kUpdateManifestUrlKey,
+  policy_entry.SetStringKey(web_app::kPolicyWebBundleIdKey, web_bundle_id);
+  policy_entry.SetStringKey(web_app::kPolicyUpdateManifestUrlKey,
                             update_manifest_url);
   return policy_entry;
 }
@@ -87,7 +87,7 @@
 TEST(IsolatedWebAppExternalInstallOptionsTest, FromPolicyValueNoField) {
   // Web Bundle ID is not present.
   base::Value policy_entry_no_id(base::Value::Type::DICT);
-  policy_entry_no_id.SetStringKey(web_app::kUpdateManifestUrlKey,
+  policy_entry_no_id.SetStringKey(web_app::kPolicyUpdateManifestUrlKey,
                                   kCorrectUpdateManifestUrl);
 
   const base::expected<IsolatedWebAppExternalInstallOptions, std::string>
@@ -97,7 +97,7 @@
 
   // Update manifest URL is not present.
   base::Value policy_entry_no_url(base::Value::Type::DICT);
-  policy_entry_no_url.SetStringKey(web_app::kWebBundleIdKey,
+  policy_entry_no_url.SetStringKey(web_app::kPolicyWebBundleIdKey,
                                    kEd25519SignedWebBundleId);
 
   const base::expected<IsolatedWebAppExternalInstallOptions, std::string>
@@ -111,8 +111,8 @@
 TEST(IsolatedWebAppExternalInstallOptionsTest, FromPolicyValueWrongType) {
   // Web Bundle ID is int.
   base::Value policy_entry_id_int(base::Value::Type::DICT);
-  policy_entry_id_int.SetIntKey(web_app::kWebBundleIdKey, 10);
-  policy_entry_id_int.SetStringKey(web_app::kUpdateManifestUrlKey,
+  policy_entry_id_int.SetIntKey(web_app::kPolicyWebBundleIdKey, 10);
+  policy_entry_id_int.SetStringKey(web_app::kPolicyUpdateManifestUrlKey,
                                    kCorrectUpdateManifestUrl);
 
   const base::expected<IsolatedWebAppExternalInstallOptions, std::string>
@@ -122,9 +122,9 @@
 
   // Update manifest URL is int.
   base::Value policy_entry_url_int(base::Value::Type::DICT);
-  policy_entry_url_int.SetStringKey(web_app::kWebBundleIdKey,
+  policy_entry_url_int.SetStringKey(web_app::kPolicyWebBundleIdKey,
                                     kEd25519SignedWebBundleId);
-  policy_entry_url_int.SetIntKey(web_app::kUpdateManifestUrlKey, 10);
+  policy_entry_url_int.SetIntKey(web_app::kPolicyUpdateManifestUrlKey, 10);
 
   const base::expected<IsolatedWebAppExternalInstallOptions, std::string>
       options_url = IsolatedWebAppExternalInstallOptions::FromPolicyPrefValue(
diff --git a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_external_install_options.cc b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_external_install_options.cc
index b27011c8..8b244272 100644
--- a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_external_install_options.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_external_install_options.cc
@@ -31,7 +31,7 @@
   }
 
   const std::string* const update_manifest_url_raw =
-      entry.FindStringKey(kUpdateManifestUrlKey);
+      entry.FindStringKey(kPolicyUpdateManifestUrlKey);
   if (!update_manifest_url_raw) {
     return base::unexpected(
         "Update manifest URL value is not found or has the wrong type");
@@ -43,7 +43,7 @@
   }
 
   const std::string* const web_bundle_id_raw =
-      entry.FindStringKey(kWebBundleIdKey);
+      entry.FindStringKey(kPolicyWebBundleIdKey);
   if (!web_bundle_id_raw) {
     return base::unexpected(
         "Web Bundle ID value is not found or has the wrong type");
diff --git a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_constants.cc b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_constants.cc
index 707e829..1ff82ca8 100644
--- a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_constants.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_constants.cc
@@ -6,7 +6,11 @@
 
 namespace web_app {
 
-const char kUpdateManifestUrlKey[] = "update_manifest_url";
-const char kWebBundleIdKey[] = "web_bundle_id";
+const char kPolicyUpdateManifestUrlKey[] = "update_manifest_url";
+const char kPolicyWebBundleIdKey[] = "web_bundle_id";
+
+const char kUpdateManifestAllVersionsKey[] = "versions";
+const char kUpdateManifestVersionKey[] = "version";
+const char kUpdateManifestSrcKey[] = "src";
 
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_constants.h b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_constants.h
index ad77390..dbfae3ef 100644
--- a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_constants.h
+++ b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_constants.h
@@ -8,8 +8,12 @@
 namespace web_app {
 
 // Keys for the IsolatedWebAppInstallForceList preference.
-extern const char kUpdateManifestUrlKey[];
-extern const char kWebBundleIdKey[];
+extern const char kPolicyUpdateManifestUrlKey[];
+extern const char kPolicyWebBundleIdKey[];
+
+extern const char kUpdateManifestAllVersionsKey[];
+extern const char kUpdateManifestVersionKey[];
+extern const char kUpdateManifestSrcKey[];
 
 }  // namespace web_app
 
diff --git a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.cc b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.cc
index d40e762..3a0b784 100644
--- a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.cc
@@ -14,11 +14,16 @@
 #include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "base/task/thread_pool.h"
+#include "base/values.h"
+#include "base/version.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profiles_state.h"
+#include "chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_constants.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/cpp/simple_url_loader.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "url/gurl.h"
 
 namespace {
 constexpr size_t kMaxUpdateManifestLength = 5 * 1024 * 1024;
@@ -204,10 +209,19 @@
     ContinueWithTheNextApp();
     return;
   }
-  LOG(ERROR) << "We have parsed update manifest of the app "
+  absl::optional<GURL> web_bundle_url = ExtractWebBundleURL(result.value());
+  if (!web_bundle_url.has_value()) {
+    SetResultForCurrentEphemeralApp(
+        EphemeralAppInstallResult::kErrorWebBundleUrlCantBeDetermined);
+    ContinueWithTheNextApp();
+    return;
+  }
+
+  LOG(ERROR) << "We have determined the URL of the Web Bundle for the app "
              << current_app_->web_bundle_id().id()
              << ". Further installation steps will be executed after "
                 "the feature is complete.";
+
   // Even though the app is not installed because the feature is not yet
   // implemented, let's set the result to kSuccess as nothing went wrong for
   // the current app.
@@ -229,4 +243,63 @@
   return json_parser_.get();
 }
 
+// static
+absl::optional<GURL> IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+    const base::Value& parsed_update_manifest) {
+  if (!parsed_update_manifest.is_dict()) {
+    return absl::nullopt;
+  }
+
+  const base::Value::List* versions =
+      parsed_update_manifest.GetDict().FindList(kUpdateManifestAllVersionsKey);
+  if (!versions) {
+    return absl::nullopt;
+  }
+
+  base::Version latest_version;
+  const std::string* latest_url_string = nullptr;
+  for (const auto& version_entry : *versions) {
+    if (!version_entry.is_dict()) {
+      return absl::nullopt;
+    }
+
+    const std::string* const version_string =
+        version_entry.FindStringKey(kUpdateManifestVersionKey);
+    const std::string* const url_string =
+        version_entry.FindStringKey(kUpdateManifestSrcKey);
+    if (!version_string || !url_string) {
+      // No version or Web Bundle URL. Let's return error as this update
+      // manifest looks strange.
+      return absl::nullopt;
+    }
+
+    base::Version version(*version_string);
+    if (!version.IsValid()) {
+      // We can't parse the version. It might be that exactly this version was
+      // meant to be the latest but there was a typo. It is better not to
+      // install any version of the app than install old and potentially
+      // compromised one.
+      return absl::nullopt;
+    }
+
+    if (!latest_version.IsValid() || version > latest_version) {
+      latest_version = version;
+      latest_url_string = url_string;
+    } else if (version == latest_version) {
+      // Several apps of the same version is definitely an error case
+      return absl::nullopt;
+    }
+  }
+
+  if (!latest_version.IsValid() || !latest_url_string) {
+    return absl::nullopt;
+  }
+
+  GURL url(*latest_url_string);
+  if (url.is_valid()) {
+    return url;
+  }
+  return absl::nullopt;
+}
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.h b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.h
index 1c26365..752d7cb6 100644
--- a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.h
+++ b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager.h
@@ -33,6 +33,7 @@
     kErrorCantCreateRootDirectory,
     kErrorUpdateManifestDownloadFailed,
     kErrorUpdateManifestParsingFailed,
+    kErrorWebBundleUrlCantBeDetermined,
     kUnknown,
   };
   static constexpr char kEphemeralIwaRootDirectory[] = "EphemeralIWA";
@@ -56,6 +57,11 @@
   IsolatedWebAppPolicyManager& operator=(const IsolatedWebAppPolicyManager&) =
       delete;
 
+  // Extracts the URL of the Web Bundle that corresponds to the latest version
+  // of the app in the Update Manifest.
+  static absl::optional<GURL> ExtractWebBundleURL(
+      const base::Value& parsed_update_manifest);
+
  private:
   // Creating root directory where the ephemeral apps will be placed.
   void CreateIwaEphemeralRootDirectory();
diff --git a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager_unittest.cc b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager_unittest.cc
index a73f991..3607688 100644
--- a/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager_unittest.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_policy_manager_unittest.cc
@@ -42,6 +42,8 @@
     "https://example.com/3/update-manifest-3.json";
 constexpr char kUpdateManifestUrl4[] =
     "https://example.com/4/update-manifest-4.json";
+constexpr char kUpdateManifestUrl5[] =
+    "https://example.com/5/update-manifest-5.json";
 
 constexpr char kUpdateManifestValue1[] = R"(
     {"versions":[
@@ -54,6 +56,9 @@
 constexpr char kUpdateManifestValue3[] =
     "This update manifest should return error 404";
 constexpr char kUpdateManifestValue4[] = R"(This is not JSON)";
+constexpr char kUpdateManifestValue5[] = R"(
+    {"versions":
+    [{"version": "1.0.0", "src": "Ooops! Wrong Web Bundle URL!"}]})";
 
 constexpr char kWebBundleId1[] =
     "aerugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic";
@@ -63,12 +68,14 @@
     "cerugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic";
 constexpr char kWebBundleId4[] =
     "derugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic";
+constexpr char kWebBundleId5[] =
+    "eerugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic";
 
 base::Value CreatePolicyEntry(base::StringPiece web_bundle_id,
                               base::StringPiece update_manifest_url) {
   base::Value policy_entry(base::Value::Type::DICT);
-  policy_entry.SetStringKey(web_app::kWebBundleIdKey, web_bundle_id);
-  policy_entry.SetStringKey(web_app::kUpdateManifestUrlKey,
+  policy_entry.SetStringKey(web_app::kPolicyWebBundleIdKey, web_bundle_id);
+  policy_entry.SetStringKey(web_app::kPolicyUpdateManifestUrlKey,
                             update_manifest_url);
   return policy_entry;
 }
@@ -94,12 +101,18 @@
   IsolatedWebAppExternalInstallOptions app_options_4 =
       IsolatedWebAppExternalInstallOptions::FromPolicyPrefValue(policy_value_4)
           .value();
+  const base::Value policy_value_5 =
+      CreatePolicyEntry(kWebBundleId5, kUpdateManifestUrl5);
+  IsolatedWebAppExternalInstallOptions app_options_5 =
+      IsolatedWebAppExternalInstallOptions::FromPolicyPrefValue(policy_value_5)
+          .value();
 
   std::vector<IsolatedWebAppExternalInstallOptions> options;
   options.push_back(std::move(app_options_1));
   options.push_back(std::move(app_options_2));
   options.push_back(std::move(app_options_3));
   options.push_back(std::move(app_options_4));
+  options.push_back(std::move(app_options_5));
   return options;
 }
 
@@ -147,6 +160,7 @@
     test_factory_.AddResponse(kUpdateManifestUrl3, kUpdateManifestValue3,
                               net::HttpStatusCode::HTTP_NOT_FOUND);
     AddJsonResponse(kUpdateManifestUrl4, kUpdateManifestValue4);
+    AddJsonResponse(kUpdateManifestUrl5, kUpdateManifestValue5);
     StartManagedGuestSession();
   }
 
@@ -189,6 +203,8 @@
       EphemeralAppInstallResult::kErrorUpdateManifestDownloadFailed;
   expected_results.at(3) = IsolatedWebAppPolicyManager::
       EphemeralAppInstallResult::kErrorUpdateManifestParsingFailed;
+  expected_results.at(4) = IsolatedWebAppPolicyManager::
+      EphemeralAppInstallResult::kErrorWebBundleUrlCantBeDetermined;
   base::test::TestFuture<
       std::vector<IsolatedWebAppPolicyManager::EphemeralAppInstallResult>>
       future;
@@ -261,4 +277,287 @@
   EXPECT_TRUE(future.Get().empty());
 }
 
+TEST(IsolatedWebAppPolicyManagerStaticFunctionsTest,
+     ExtractWebBundleURLErrorTest) {
+  {
+    // Providing a non-dictionary value should not be handled correctly.
+    const base::Value string_value("A string value");
+    EXPECT_FALSE(string_value.is_dict());
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(string_value)
+                     .has_value());
+  }
+
+  {
+    // Empty dictionary should be handled correctly as well.
+    base::Value::Dict empty_dict;
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(empty_dict)))
+                     .has_value());
+  }
+
+  {
+    // Dictionary contains string instead of list.
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey,
+             "Instead of this string we expect a base::Value::List here");
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(dict)))
+                     .has_value());
+  }
+
+  {
+    // Dictionary with empty version records.
+    base::Value::List apps;
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(dict)))
+                     .has_value());
+  }
+
+  {
+    // Dictionary with empty random strings instead of the version/URL
+    // dictionary.
+    base::Value::List apps;
+    apps.Append("aaa");
+    apps.Append("bbb");
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(dict)))
+                     .has_value());
+  }
+
+  {
+    // There is no version.
+    base::Value::List apps;
+
+    base::Value::Dict no_version_record;
+    no_version_record.Set(kUpdateManifestSrcKey,
+                          "https://example.com/a/b.json");
+    apps.Append(std::move(no_version_record));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(dict)))
+                     .has_value());
+  }
+
+  {
+    // There is no Web bundle URL.
+    base::Value::List apps;
+
+    base::Value::Dict no_web_bundle_url;
+    no_web_bundle_url.Set(kUpdateManifestVersionKey, "1.0.0");
+    apps.Append(std::move(no_web_bundle_url));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(dict)))
+                     .has_value());
+  }
+
+  {
+    // Version is not parseble.
+    base::Value::List apps;
+
+    base::Value::Dict invalid_version_record;
+    invalid_version_record.Set(kUpdateManifestVersionKey,
+                               "It is not a correct version");
+    invalid_version_record.Set(kUpdateManifestSrcKey,
+                               "https://example.com/a/b.json");
+    apps.Append(std::move(invalid_version_record));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(dict)))
+                     .has_value());
+  }
+
+  {
+    // Web bundle URL is not parsable.
+    base::Value::List apps;
+
+    base::Value::Dict invalid_web_bundle_url;
+    invalid_web_bundle_url.Set(kUpdateManifestVersionKey, "1.0.0");
+    invalid_web_bundle_url.Set(kUpdateManifestSrcKey, "It is not a valid URL");
+    apps.Append(std::move(invalid_web_bundle_url));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(dict)))
+                     .has_value());
+  }
+
+  {
+    // If at least one version is not parsable return nullptr.
+    base::Value::List apps;
+
+    base::Value::Dict ok_app;
+    ok_app.Set(kUpdateManifestVersionKey, "1.0.0");
+    ok_app.Set(kUpdateManifestSrcKey, "http://example.com/a/b.json");
+    apps.Append(std::move(ok_app));
+
+    base::Value::Dict ok_app_1;
+    ok_app_1.Set(kUpdateManifestVersionKey, "2.0.0");
+    ok_app_1.Set(kUpdateManifestSrcKey, "http://example.com/a/b.json");
+    apps.Append(std::move(ok_app_1));
+
+    base::Value::Dict invalid_version_record;
+    invalid_version_record.Set(kUpdateManifestVersionKey,
+                               "It is not a correct version");
+    invalid_version_record.Set(kUpdateManifestSrcKey,
+                               "https://example.com/a/b.json");
+    apps.Append(std::move(invalid_version_record));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(dict)))
+                     .has_value());
+  }
+
+  {
+    // Unparsable URL of the latest app version leads to return of nullptr.
+    base::Value::List apps;
+
+    base::Value::Dict ok_app;
+    ok_app.Set(kUpdateManifestVersionKey, "1.0.0");
+    ok_app.Set(kUpdateManifestSrcKey, "http://example.com/a/b.json");
+    apps.Append(std::move(ok_app));
+
+    base::Value::Dict invalid_web_bundle_url;
+    invalid_web_bundle_url.Set(kUpdateManifestVersionKey, "2.0.0");
+    invalid_web_bundle_url.Set(kUpdateManifestSrcKey, "It is not a valid URL");
+    apps.Append(std::move(invalid_web_bundle_url));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(dict)))
+                     .has_value());
+  }
+
+  {
+    // Two equal versions in the one update manifest are not acceptable.
+    base::Value::List apps;
+
+    base::Value::Dict ok_app;
+    ok_app.Set(kUpdateManifestVersionKey, "1.0.0");
+    ok_app.Set(kUpdateManifestSrcKey, "http://example.com/v100.json");
+    apps.Append(std::move(ok_app));
+
+    base::Value::Dict ok_app_1;
+    ok_app_1.Set(kUpdateManifestVersionKey, "1.0.0");
+    ok_app_1.Set(kUpdateManifestSrcKey, "http://example.com/xyz.json");
+    apps.Append(std::move(ok_app_1));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+
+    EXPECT_FALSE(IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+                     base::Value(std::move(dict)))
+                     .has_value());
+  }
+}
+
+TEST(IsolatedWebAppPolicyManagerStaticFunctionsTest,
+     ExtractWebBundleURLSuccessTest) {
+  {
+    // One app case.
+    base::Value::List apps;
+
+    base::Value::Dict ok_app;
+    ok_app.Set(kUpdateManifestVersionKey, "1.0.1");
+    ok_app.Set(kUpdateManifestSrcKey, "http://example.com/v101.json");
+    apps.Append(std::move(ok_app));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+
+    auto result = IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+        base::Value(std::move(dict)));
+    ASSERT_TRUE(result.has_value());
+    EXPECT_EQ(result.value(), "http://example.com/v101.json");
+  }
+
+  {
+    // Several apps use case.
+    base::Value::List apps;
+
+    base::Value::Dict ok_app;
+    ok_app.Set(kUpdateManifestVersionKey, "1.0.0");
+    ok_app.Set(kUpdateManifestSrcKey, "http://example.com/v100.json");
+    apps.Append(std::move(ok_app));
+
+    base::Value::Dict ok_app_1;
+    ok_app_1.Set(kUpdateManifestVersionKey, "2.0.0");
+    ok_app_1.Set(kUpdateManifestSrcKey, "http://example.com/v200.json");
+    apps.Append(std::move(ok_app_1));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+
+    auto result = IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+        base::Value(std::move(dict)));
+    ASSERT_TRUE(result.has_value());
+    EXPECT_EQ(result.value(), "http://example.com/v200.json");
+  }
+
+  {
+    // The invalid URL of the stale app version doesn't affect result.
+    base::Value::List apps;
+
+    base::Value::Dict ok_app;
+    ok_app.Set(kUpdateManifestVersionKey, "1.0.0");
+    ok_app.Set(kUpdateManifestSrcKey, "http://example.com/v100.json");
+    apps.Append(std::move(ok_app));
+
+    base::Value::Dict ok_app_1;
+    ok_app_1.Set(kUpdateManifestVersionKey, "2.0.0");
+    ok_app_1.Set(kUpdateManifestSrcKey, "http://example.com/v200.json");
+    apps.Append(std::move(ok_app_1));
+
+    base::Value::Dict invalid_web_bundle_url;
+    invalid_web_bundle_url.Set(kUpdateManifestVersionKey, "1.4.0");
+    invalid_web_bundle_url.Set(kUpdateManifestSrcKey, "It is not a valid URL");
+    apps.Append(std::move(invalid_web_bundle_url));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+
+    auto result = IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+        base::Value(std::move(dict)));
+    ASSERT_TRUE(result.has_value());
+    EXPECT_EQ(result.value(), "http://example.com/v200.json");
+  }
+
+  {
+    // We don't mind the update manifest has other fields.
+    base::Value::List apps;
+
+    base::Value::Dict ok_app;
+    ok_app.Set(kUpdateManifestVersionKey, "1.0.1");
+    ok_app.Set(kUpdateManifestSrcKey, "http://example.com/v101.json");
+    ok_app.Set("comment", "This is app v1.0.1");
+    apps.Append(std::move(ok_app));
+
+    base::Value::Dict dict;
+    dict.Set(kUpdateManifestAllVersionsKey, std::move(apps));
+
+    auto result = IsolatedWebAppPolicyManager::ExtractWebBundleURL(
+        base::Value(std::move(dict)));
+    ASSERT_TRUE(result.has_value());
+    EXPECT_EQ(result.value(), "http://example.com/v101.json");
+  }
+}
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.cc b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.cc
index e399b484..553411a 100644
--- a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.cc
@@ -12,12 +12,14 @@
 #include "base/check_is_test.h"
 #include "base/check_op.h"
 #include "base/memory/ptr_util.h"
+#include "base/metrics/histogram_functions.h"
 #include "base/notreached.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
+#include "base/time/time.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom.h"
 #include "components/web_package/signed_web_bundles/signed_web_bundle_integrity_block.h"
 #include "mojo/public/cpp/system/data_pipe_producer.h"
@@ -198,16 +200,22 @@
   signature_verifier_->VerifySignatures(
       file_, std::move(integrity_block),
       base::BindOnce(&SignedWebBundleReader::OnSignaturesVerified,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
+                     weak_ptr_factory_.GetWeakPtr(), base::TimeTicks::Now(),
+                     std::move(callback)));
 }
 
 void SignedWebBundleReader::OnSignaturesVerified(
+    const base::TimeTicks& verification_start_time,
     ReadErrorCallback callback,
     absl::optional<web_package::SignedWebBundleSignatureVerifier::Error>
         verification_error) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   CHECK_EQ(state_, State::kInitializing);
 
+  base::UmaHistogramMediumTimes(
+      "WebApp.Isolated.SignatureVerificationDuration",
+      base::TimeTicks::Now() - verification_start_time);
+
   if (verification_error.has_value()) {
     FulfillWithError(std::move(callback), *verification_error);
     return;
diff --git a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h
index 68dd21b7..a611cd7 100644
--- a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h
+++ b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h
@@ -252,6 +252,7 @@
       ReadErrorCallback callback);
 
   void OnSignaturesVerified(
+      const base::TimeTicks& verification_start_time,
       ReadErrorCallback callback,
       absl::optional<web_package::SignedWebBundleSignatureVerifier::Error>
           verification_error);
diff --git a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader_unittest.cc b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader_unittest.cc
index 1af2db2..3f3c80fd 100644
--- a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader_unittest.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/bind.h"
+#include "base/test/metrics/histogram_tester.h"
 #include "base/test/test_future.h"
 #include "chrome/browser/web_applications/test/signed_web_bundle_utils.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom.h"
@@ -191,6 +192,7 @@
   base::test::TestFuture<
       absl::optional<SignedWebBundleReader::ReadIntegrityBlockAndMetadataError>>
       parse_error_future;
+  base::HistogramTester histogram_tester;
   auto reader = CreateReaderAndInitialize(parse_error_future.GetCallback());
 
   parser_factory_->RunIntegrityBlockCallback(integrity_block_->Clone());
@@ -204,6 +206,9 @@
   EXPECT_EQ(reader->GetPrimaryURL(), metadata_->primary_url);
   EXPECT_EQ(reader->GetEntries().size(), 1ul);
   EXPECT_EQ(reader->GetEntries()[0], metadata_->primary_url);
+
+  histogram_tester.ExpectTotalCount(
+      "WebApp.Isolated.SignatureVerificationDuration", 1);
 }
 
 TEST_F(SignedWebBundleReaderTest, ReadIntegrityBlockError) {
diff --git a/chrome/browser/web_applications/web_app_url_loader.cc b/chrome/browser/web_applications/web_app_url_loader.cc
index a0c8b9e..02c7781 100644
--- a/chrome/browser/web_applications/web_app_url_loader.cc
+++ b/chrome/browser/web_applications/web_app_url_loader.cc
@@ -115,7 +115,7 @@
   }
 
   bool IsSubframeLoad(content::RenderFrameHost* render_frame_host) const {
-    return web_contents()->GetPrimaryMainFrame() != render_frame_host;
+    return !render_frame_host->IsInPrimaryMainFrame();
   }
 
   void DidFailLoad(content::RenderFrameHost* render_frame_host,
diff --git a/chrome/browser/webid/federated_identity_api_permission_context.cc b/chrome/browser/webid/federated_identity_api_permission_context.cc
index 43fd087e..09cd610 100644
--- a/chrome/browser/webid/federated_identity_api_permission_context.cc
+++ b/chrome/browser/webid/federated_identity_api_permission_context.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/webid/federated_identity_api_permission_context.h"
 
+#include "chrome/browser/browser_features.h"
 #include "chrome/browser/content_settings/cookie_settings_factory.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/permissions/permission_decision_auto_blocker_factory.h"
@@ -37,9 +38,11 @@
     return PermissionStatus::BLOCKED_VARIATIONS;
 
   // TODO(npm): FedCM is currently restricted to contexts where third party
-  // cookies are not blocked.  Once the privacy improvements for the API are
-  // implemented, remove this restriction. See https://crbug.com/13043
-  if (cookie_settings_->ShouldBlockThirdPartyCookies())
+  // cookies are not blocked unless the FedCmWithoutThirdPartyCookies flag is
+  // enabled.  Once the privacy improvements for the API are implemented, remove
+  // this restriction. See https://crbug.com/13043
+  if (cookie_settings_->ShouldBlockThirdPartyCookies() &&
+      !base::FeatureList::IsEnabled(features::kFedCmWithoutThirdPartyCookies))
     return PermissionStatus::BLOCKED_THIRD_PARTY_COOKIES_BLOCKED;
 
   const GURL rp_embedder_url = relying_party_embedder.GetURL();
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 0c853f8..947ac8d 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1668491533-300188c6774037e014d002ffbb41b5f902bd654e.profdata
+chrome-linux-main-1668513567-1c16039fa079b360fb6caf1a4126f5bbeff41fda.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index fa70e5e..e31c824 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1668491533-32b5d858684ad0648ba320cd677305b991c3e19f.profdata
+chrome-mac-arm-main-1668513567-e8b632c66128ba4eb8b632266c9ef90bfe07a5cd.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 67282ca..523c2b4a 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1668491533-eb5214bd32d6470425b95e81d2e0c64e37e88a31.profdata
+chrome-mac-main-1668513567-315ac03d915355ff556f624ee8c89c737a09f470.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 13e1a2f..9b0765f 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1668491533-f66df972596e3ea26ae93de29ec474a5cff10b88.profdata
+chrome-win32-main-1668513567-51c4263e2db9fdeb3c5c1e23efc638cdd1fcead0.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 3ad7e21..5a10111 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1668491533-1ef19c54ad2fd864330462e681d04d5515b583e6.profdata
+chrome-win64-main-1668524267-a9168568dbbecca1a6da96404935a7d5d70a0129.profdata
diff --git a/chrome/chrome_elf/crash/crash_helper.h b/chrome/chrome_elf/crash/crash_helper.h
index 9ff578a..d9f47121 100644
--- a/chrome/chrome_elf/crash/crash_helper.h
+++ b/chrome/chrome_elf/crash/crash_helper.h
@@ -24,7 +24,7 @@
 
 // Exception handler for exceptions in chrome_elf which need to be passed on to
 // the next handler in the chain. Examples include exceptions in DllMain,
-// blacklist interception code, etc.
+// blocklist interception code, etc.
 // Note: the handler takes a minidump.
 int GenerateCrashDump(EXCEPTION_POINTERS* exception_pointers);
 
diff --git a/chrome/chrome_elf/third_party_dlls/beacon.h b/chrome/chrome_elf/third_party_dlls/beacon.h
index 9f8c344..b54721b 100644
--- a/chrome/chrome_elf/third_party_dlls/beacon.h
+++ b/chrome/chrome_elf/third_party_dlls/beacon.h
@@ -17,7 +17,7 @@
 
 // Looks for the setup running beacon that LeaveSetupBeacon() creates and resets
 // it to to show the setup was successful.
-// Returns true if the beacon was successfully set to BLACKLIST_ENABLED.
+// Returns true if the beacon was successfully set to BLOCKLIST_ENABLED.
 bool ResetBeacon();
 
 }  // namespace third_party_dlls
diff --git a/chrome/chrome_elf/third_party_dlls/hook.cc b/chrome/chrome_elf/third_party_dlls/hook.cc
index cb15597..6501e3b8 100644
--- a/chrome/chrome_elf/third_party_dlls/hook.cc
+++ b/chrome/chrome_elf/third_party_dlls/hook.cc
@@ -249,7 +249,7 @@
 // 2) Return if OS failure or not interested in section.
 // 3) Mine the data needed out of the PE headers.
 // 4) Lookup module in local cache (blocking).
-// 5) Temporarily check old (deprecated) blacklist.
+// 5) Temporarily check old (deprecated) blocklist.
 // 6) Unmap view if blocking required.
 // 7) Log the result either way.
 //------------------------------------------------------------------------------
@@ -315,25 +315,25 @@
   elf_sha1::Digest fingerprint_hash = elf_sha1::SHA1HashString(
       GetFingerprintString(time_date_stamp, image_size));
 
-  // Check sources for blacklist decision.
+  // Check sources for blocklist decision.
   bool block = false;
 
   if (!image_name.empty() &&
       IsModuleListed(image_name_hash, fingerprint_hash)) {
-    // 1) Third-party DLL blacklist, check for image name from PE header.
+    // 1) Third-party DLL blocklist, check for image name from PE header.
     block = true;
   } else if (!section_basename.empty() &&
              section_basename_hash != image_name_hash &&
              IsModuleListed(section_basename_hash, fingerprint_hash)) {
-    // 2) Third-party DLL blacklist, check for image name from the section.
+    // 2) Third-party DLL blocklist, check for image name from the section.
     block = true;
   } else if (!image_name.empty() && DllMatch(image_name)) {
-    // 3) Hard-coded blacklist with name from PE header (deprecated).
+    // 3) Hard-coded blocklist with name from PE header (deprecated).
     block = true;
   } else if (!section_basename.empty() &&
              section_basename.compare(image_name) != 0 &&
              DllMatch(section_basename)) {
-    // 4) Hard-coded blacklist with name from the section (deprecated).
+    // 4) Hard-coded blocklist with name from the section (deprecated).
     block = true;
   }
   // Else, no block.
diff --git a/chrome/chrome_elf/third_party_dlls/main.cc b/chrome/chrome_elf/third_party_dlls/main.cc
index 50e0e004..2662c12 100644
--- a/chrome/chrome_elf/third_party_dlls/main.cc
+++ b/chrome/chrome_elf/third_party_dlls/main.cc
@@ -107,7 +107,7 @@
   if (!ResetStatusCodes())
     AddStatusCode(ThirdPartyStatus::kStatusCodeResetFailure);
 
-  // 1) Initialize the blacklist from file
+  // 1) Initialize the blocklist from file
   ThirdPartyStatus status = InitFromFile();
   if (status != ThirdPartyStatus::kSuccess) {
     AddStatusCode(status);
diff --git a/chrome/chrome_elf/third_party_dlls/main_unittest.cc b/chrome/chrome_elf/third_party_dlls/main_unittest.cc
index dad43ec..6c799e00 100644
--- a/chrome/chrome_elf/third_party_dlls/main_unittest.cc
+++ b/chrome/chrome_elf/third_party_dlls/main_unittest.cc
@@ -39,7 +39,7 @@
 constexpr wchar_t kTestDllName2[] = L"main_unittest_dll_2.dll";
 constexpr wchar_t kChineseUnicode[] = {0x68D5, 0x8272, 0x72D0, 0x72F8, 0x002E,
                                        0x0064, 0x006C, 0x006C, 0x0000};
-constexpr wchar_t kOldBlacklistDllName[] = L"libapi2hook.dll";
+constexpr wchar_t kOldBlocklistDllName[] = L"libapi2hook.dll";
 
 struct TestModuleData {
   std::string image_name;
@@ -193,7 +193,7 @@
     ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &exe));
     exe_dir_ = std::move(exe.value());
 
-    // Create the blacklist file empty.
+    // Create the blocklist file empty.
     base::File file(base::FilePath(bl_test_file_path_),
                     base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
                         base::File::FLAG_WIN_SHARE_DELETE |
@@ -206,8 +206,8 @@
 
   void TearDown() override {}
 
-  // Overwrite the content of the blacklist file.
-  bool WriteModulesToBlacklist(const std::vector<PackedListModule>& list) {
+  // Overwrite the content of the blocklist file.
+  bool WriteModulesToBlocklist(const std::vector<PackedListModule>& list) {
     bl_file_.SetLength(0);
 
     // Write content {metadata}{array_of_modules}.
@@ -256,7 +256,7 @@
 #endif
 // Note: The test module used in this unittest has no export table.
 TEST_F(ThirdPartyTest, MAYBE_Base) {
-  // 1. Spawn the test process with NO blacklist.  Expect successful
+  // 1. Spawn the test process with NO blocklist.  Expect successful
   // initialization.
   base::CommandLine cmd_line1 = base::CommandLine::FromString(kTestExeFilename);
   cmd_line1.AppendArgNative(GetBlTestFilePath());
@@ -267,7 +267,7 @@
   ASSERT_EQ(kDllLoadSuccess, exit_code);
 
   //----------------------------------------------------------------------------
-  // 2. Spawn the test process with NO blacklist.  Expect successful DLL load.
+  // 2. Spawn the test process with NO blocklist.  Expect successful DLL load.
   base::CommandLine cmd_line2 = base::CommandLine::FromString(kTestExeFilename);
   cmd_line2.AppendArgNative(GetBlTestFilePath());
   cmd_line2.AppendArgNative(base::NumberToWString(kTestSingleDllLoad));
@@ -277,7 +277,7 @@
   ASSERT_EQ(kDllLoadSuccess, exit_code);
 
   //----------------------------------------------------------------------------
-  // 3. Spawn the test process with blacklist.  Expect failed DLL load.
+  // 3. Spawn the test process with blocklist.  Expect failed DLL load.
   TestModuleData module_data = {};
   ASSERT_TRUE(GetTestModuleData(kTestDllName1, GetExeDir(), &module_data));
 
@@ -289,7 +289,7 @@
   vector.emplace_back(GeneratePackedListModule(module_data.section_basename,
                                                module_data.timedatestamp,
                                                module_data.imagesize));
-  ASSERT_TRUE(WriteModulesToBlacklist(vector));
+  ASSERT_TRUE(WriteModulesToBlocklist(vector));
 
   base::CommandLine cmd_line3 = base::CommandLine::FromString(kTestExeFilename);
   cmd_line3.AppendArgNative(GetBlTestFilePath());
@@ -300,13 +300,13 @@
   ASSERT_EQ(kDllLoadFailed, exit_code);
 
   //----------------------------------------------------------------------------
-  // 4. Spawn the test process with blacklist.  Expect failed DLL load.
+  // 4. Spawn the test process with blocklist.  Expect failed DLL load.
   //    ** Rename the module with some upper-case characters to test that
   //       the hook matching handles case properly.
   ASSERT_TRUE(MakeFileCopy(GetExeDir(), kTestDllName1, GetScopedTempDirValue(),
                            kTestDllName1MixedCase));
 
-  // Note: the blacklist is already set from the previous test.
+  // Note: the blocklist is already set from the previous test.
   // Note: using the module with no export table for this test, to ensure that
   //       the section name (the rename) is used in the comparison.
 
@@ -327,7 +327,7 @@
   ASSERT_TRUE(MakeFileCopy(GetExeDir(), kTestDllName1, GetScopedTempDirValue(),
                            kChineseUnicode));
 
-  // 1) Test a successful DLL load with no blacklist.
+  // 1) Test a successful DLL load with no blocklist.
   base::CommandLine cmd_line1 = base::CommandLine::FromString(kTestExeFilename);
   cmd_line1.AppendArgNative(GetBlTestFilePath());
   cmd_line1.AppendArgNative(base::NumberToWString(kTestSingleDllLoad));
@@ -338,7 +338,7 @@
   ASSERT_EQ(kDllLoadSuccess, exit_code);
 
   //----------------------------------------------------------------------------
-  // 2) Test a failed DLL load with blacklist.
+  // 2) Test a failed DLL load with blocklist.
   TestModuleData module_data = {};
   ASSERT_TRUE(GetTestModuleData(kChineseUnicode, GetScopedTempDirValue(),
                                 &module_data));
@@ -351,7 +351,7 @@
   vector.emplace_back(GeneratePackedListModule(module_data.section_basename,
                                                module_data.timedatestamp,
                                                module_data.imagesize));
-  ASSERT_TRUE(WriteModulesToBlacklist(vector));
+  ASSERT_TRUE(WriteModulesToBlocklist(vector));
 
   base::CommandLine cmd_line2 = base::CommandLine::FromString(kTestExeFilename);
   cmd_line2.AppendArgNative(GetBlTestFilePath());
@@ -369,7 +369,7 @@
   ASSERT_TRUE(MakeFileCopy(GetExeDir(), kTestDllName2, GetScopedTempDirValue(),
                            kChineseUnicode));
 
-  // 1) Test a successful DLL load with no blacklist.
+  // 1) Test a successful DLL load with no blocklist.
   base::CommandLine cmd_line1 = base::CommandLine::FromString(kTestExeFilename);
   cmd_line1.AppendArgNative(GetBlTestFilePath());
   cmd_line1.AppendArgNative(base::NumberToWString(kTestSingleDllLoad));
@@ -380,7 +380,7 @@
   ASSERT_EQ(kDllLoadSuccess, exit_code);
 
   //----------------------------------------------------------------------------
-  // 2) Test a failed DLL load with blacklist.
+  // 2) Test a failed DLL load with blocklist.
   TestModuleData module_data = {};
   ASSERT_TRUE(GetTestModuleData(kChineseUnicode, GetScopedTempDirValue(),
                                 &module_data));
@@ -389,16 +389,16 @@
 
   // NOTE: a file rename does not affect the module name mined from the export
   //       table in the PE.  So image_name and section_basename will be
-  //       different. Ensure blacklisting both section name and image name
+  //       different. Ensure blocklisting both section name and image name
   //       works!
 
-  // 2a) Only blacklist the original DLL name, which should be mined out of the
+  // 2a) Only blocklist the original DLL name, which should be mined out of the
   //     export table by the hook, and the load should be blocked.
   std::vector<PackedListModule> vector;
   vector.emplace_back(GeneratePackedListModule(base::WideToASCII(kTestDllName2),
                                                module_data.timedatestamp,
                                                module_data.imagesize));
-  ASSERT_TRUE(WriteModulesToBlacklist(vector));
+  ASSERT_TRUE(WriteModulesToBlocklist(vector));
 
   base::CommandLine cmd_line2 = base::CommandLine::FromString(kTestExeFilename);
   cmd_line2.AppendArgNative(GetBlTestFilePath());
@@ -408,13 +408,13 @@
   LaunchChildAndWait(cmd_line2, &exit_code);
   ASSERT_EQ(kDllLoadFailed, exit_code);
 
-  // 2b) Only blacklist the new DLL file name, which should be mined out of the
+  // 2b) Only blocklist the new DLL file name, which should be mined out of the
   //     section by the hook, and the load should be blocked.
   vector.clear();
   vector.emplace_back(GeneratePackedListModule(
       base::WideToUTF8(kChineseUnicode), module_data.timedatestamp,
       module_data.imagesize));
-  ASSERT_TRUE(WriteModulesToBlacklist(vector));
+  ASSERT_TRUE(WriteModulesToBlocklist(vector));
 
   base::CommandLine cmd_line3 = base::CommandLine::FromString(kTestExeFilename);
   cmd_line3.AppendArgNative(GetBlTestFilePath());
@@ -426,18 +426,18 @@
 }
 
 // Note: The test module used in this unittest has no export table.
-TEST_F(ThirdPartyTest, DeprecatedBlacklistSanityCheck) {
-  // Rename module to something on the old, deprecated, hard-coded blacklist.
+TEST_F(ThirdPartyTest, DeprecatedBlocklistSanityCheck) {
+  // Rename module to something on the old, deprecated, hard-coded blocklist.
   ASSERT_TRUE(MakeFileCopy(GetExeDir(), kTestDllName1, GetScopedTempDirValue(),
-                           kOldBlacklistDllName));
+                           kOldBlocklistDllName));
 
-  // 1) Test a failed DLL load with no blacklist (the old, hard-coded blacklist
+  // 1) Test a failed DLL load with no blocklist (the old, hard-coded blocklist
   //    should trigger a block).
   base::CommandLine cmd_line1 = base::CommandLine::FromString(kTestExeFilename);
   cmd_line1.AppendArgNative(GetBlTestFilePath());
   cmd_line1.AppendArgNative(base::NumberToWString(kTestSingleDllLoad));
   cmd_line1.AppendArgNative(
-      MakePath(GetScopedTempDirValue(), kOldBlacklistDllName));
+      MakePath(GetScopedTempDirValue(), kOldBlocklistDllName));
 
   int exit_code = 0;
   LaunchChildAndWait(cmd_line1, &exit_code);
@@ -509,7 +509,7 @@
                 MakePath(GetScopedTempDirValue(), kTestDllName1MixedCase)),
             0);
 
-  // 2) Now check an actual log.  Successful DLL load with no blacklist is fine
+  // 2) Now check an actual log.  Successful DLL load with no blocklist is fine
   //    for this test.
   base::CommandLine cmd_line1 = base::CommandLine::FromString(kTestExeFilename);
   cmd_line1.AppendArgNative(GetBlTestFilePath());
diff --git a/chrome/chrome_elf/third_party_dlls/main_unittest_exe.cc b/chrome/chrome_elf/third_party_dlls/main_unittest_exe.cc
index a592ed3c..d837491 100644
--- a/chrome/chrome_elf/third_party_dlls/main_unittest_exe.cc
+++ b/chrome/chrome_elf/third_party_dlls/main_unittest_exe.cc
@@ -70,7 +70,7 @@
 // - Attempt to load a specific DLL.
 //
 // Arguments:
-// #1: path to test blacklist file (mandatory).
+// #1: path to test blocklist file (mandatory).
 // #2: test identifier (mandatory).
 // #3: path to dll (test-identifier dependent).
 //
@@ -92,21 +92,21 @@
   install_static::InitializeProductDetailsForPrimaryModule();
   install_static::InitializeProcessType();
 
-  // Get the required arguments, path to blacklist file and test id to run.
+  // Get the required arguments, path to blocklist file and test id to run.
   if (argument_count < 3)
     return third_party_dlls::kMissingArgument;
 
-  const wchar_t* blacklist_path = argv[1];
-  if (!blacklist_path || ::wcslen(blacklist_path) == 0)
-    return third_party_dlls::kBadBlacklistPath;
+  const wchar_t* blocklist_path = argv[1];
+  if (!blocklist_path || ::wcslen(blocklist_path) == 0)
+    return third_party_dlls::kBadBlocklistPath;
 
   const wchar_t* arg2 = argv[2];
   int test_id = ::_wtoi(arg2);
   if (!test_id)
     return third_party_dlls::kUnsupportedTestId;
 
-  // Override blacklist path before initializing.
-  third_party_dlls::OverrideFilePathForTesting(blacklist_path);
+  // Override blocklist path before initializing.
+  third_party_dlls::OverrideFilePathForTesting(blocklist_path);
 
   // Enable a registry test net before initializing.
   registry_util::RegistryOverrideManager rom;
diff --git a/chrome/chrome_elf/third_party_dlls/main_unittest_exe.h b/chrome/chrome_elf/third_party_dlls/main_unittest_exe.h
index 142f68d8..4ccba46c 100644
--- a/chrome/chrome_elf/third_party_dlls/main_unittest_exe.h
+++ b/chrome/chrome_elf/third_party_dlls/main_unittest_exe.h
@@ -16,7 +16,7 @@
   kThirdPartyAlreadyInitialized = -2,
   kThirdPartyInitFailure = -3,
   kMissingArgument = -4,
-  kBadBlacklistPath = -5,
+  kBadBlocklistPath = -5,
   kBadArgument = -6,
   kUnsupportedTestId = -7,
   kEmptyLog = -8,
diff --git a/chrome/chrome_elf/third_party_dlls/packed_list_file.cc b/chrome/chrome_elf/third_party_dlls/packed_list_file.cc
index 6dd89f6..b4a43895 100644
--- a/chrome/chrome_elf/third_party_dlls/packed_list_file.cc
+++ b/chrome/chrome_elf/third_party_dlls/packed_list_file.cc
@@ -22,7 +22,7 @@
 // No concern about concurrency control in chrome_elf.
 bool g_initialized = false;
 
-// This will hold a packed blacklist module array, read directly from a
+// This will hold a packed blocklist module array, read directly from a
 // data file during InitFromFile().
 PackedListModule* g_bl_module_array = nullptr;
 size_t g_bl_module_array_size = 0;
@@ -103,7 +103,7 @@
   return ThirdPartyStatus::kSuccess;
 }
 
-// Reads the path to the blacklist file from the registry into |file_path|.
+// Reads the path to the blocklist file from the registry into |file_path|.
 //
 // - Returns false if the value is not found, is not a REG_SZ, or is empty.
 bool GetFilePathFromRegistry(std::wstring* file_path) {
@@ -153,7 +153,7 @@
   return ThirdPartyStatus::kSuccess;
 }
 
-// Find the packed blacklist file and read in the array.
+// Find the packed blocklist file and read in the array.
 ThirdPartyStatus InitInternal() {
   HANDLE handle = INVALID_HANDLE_VALUE;
   ThirdPartyStatus status = OpenDataFile(&handle);
diff --git a/chrome/chrome_elf/third_party_dlls/packed_list_file.h b/chrome/chrome_elf/third_party_dlls/packed_list_file.h
index b2b889b..b719008 100644
--- a/chrome/chrome_elf/third_party_dlls/packed_list_file.h
+++ b/chrome/chrome_elf/third_party_dlls/packed_list_file.h
@@ -17,7 +17,7 @@
 bool IsModuleListed(const elf_sha1::Digest& basename_hash,
                     const elf_sha1::Digest& fingerprint_hash);
 
-// Get the full path of the blacklist file used.
+// Get the full path of the blocklist file used.
 std::wstring GetBlFilePathUsed();
 
 // Initialize internal module list from file.
@@ -31,7 +31,7 @@
 // Removes initialization for use by tests, or cleanup on failure.
 void DeinitFromFile();
 
-// Overrides the blacklist path for use by tests.
+// Overrides the blocklist path for use by tests.
 void OverrideFilePathForTesting(const std::wstring& new_bl_path);
 
 }  // namespace third_party_dlls
diff --git a/chrome/chrome_elf/third_party_dlls/packed_list_file_unittest.cc b/chrome/chrome_elf/third_party_dlls/packed_list_file_unittest.cc
index 93757187..82307d0 100644
--- a/chrome/chrome_elf/third_party_dlls/packed_list_file_unittest.cc
+++ b/chrome/chrome_elf/third_party_dlls/packed_list_file_unittest.cc
@@ -187,7 +187,7 @@
 
 // Test successful initialization and module lookup.
 TEST_F(ThirdPartyFileTest, Success) {
-  // Create blacklist data file.
+  // Create blocklist data file.
   ASSERT_NO_FATAL_FAILURE(CreateTestFile());
 
   // Init.
@@ -256,7 +256,7 @@
   //    chrome.dll.
   ASSERT_TRUE(CreateRegistryKeyValue(GetBlTestFilePath()));
 
-  // 3. Drop a blacklist to the expected path.
+  // 3. Drop a blocklist to the expected path.
   ASSERT_NO_FATAL_FAILURE(CreateTestFile());
 
   // Clear override file path so that initialization goes to registry.
diff --git a/chrome/chrome_elf/third_party_dlls/public_api.h b/chrome/chrome_elf/third_party_dlls/public_api.h
index 4e413c1..ec68e2e 100644
--- a/chrome/chrome_elf/third_party_dlls/public_api.h
+++ b/chrome/chrome_elf/third_party_dlls/public_api.h
@@ -30,7 +30,7 @@
 // Define a flat log entry for any attempted module load.
 // The total size in bytes of a log entry is returned by GetLogEntrySize().
 // - Note: If this is a |blocked| entry, |path_len| will be 0.
-//   (Full path not required for a blacklisted load attempt log.)
+//   (Full path not required for a blocklisted load attempt log.)
 struct LogEntry {
   LogType type;
   uint32_t module_size;
diff --git a/chrome/common/chromeos/extensions/api/telemetry.idl b/chrome/common/chromeos/extensions/api/telemetry.idl
index ce42bd224..bf531ab0 100644
--- a/chrome/common/chromeos/extensions/api/telemetry.idl
+++ b/chrome/common/chromeos/extensions/api/telemetry.idl
@@ -117,6 +117,7 @@
   dictionary NetworkInfo {
     NetworkType? type;
     NetworkState? state;
+    DOMString? macAddress;
     DOMString? ipv4Address;
     DOMString[] ipv6Addresses;
     double? signalStrength;
diff --git a/chrome/common/extensions/api/autotest_private.idl b/chrome/common/extensions/api/autotest_private.idl
index 5a084af..c8518fff 100644
--- a/chrome/common/extensions/api/autotest_private.idl
+++ b/chrome/common/extensions/api/autotest_private.idl
@@ -615,12 +615,20 @@
     DOMString[] deskContainers;
   };
 
+  // Information about launcher's search box.
+  dictionary LauncherSearchBoxState {
+    DOMString ghostText;
+  };
+
   callback GetShelfItemsCallback = void (ShelfItem[] items);
 
   callback GetDefaultPinnedAppIdsCallback = void (DOMString[] items);
 
   callback GetShelfAutoHideBehaviorCallback = void (DOMString behavior);
 
+  callback GetLauncherSearchBoxStateCallback = void (
+      LauncherSearchBoxState state);
+
   callback GetShelfAlignmentCallback = void (ShelfAlignmentType alignment);
 
   callback WindowStateCallback = void (WindowStateType currentType);
@@ -1140,6 +1148,10 @@
     [supportsPromises] static void getShelfItems(
         GetShelfItemsCallback callback);
 
+    // Get the launcher search box search state.
+    [supportsPromises] static void getLauncherSearchBoxState(
+        GetLauncherSearchBoxStateCallback callback);
+
     // Get the shelf auto hide behavior.
     // |displayId|: display that contains the shelf.
     // |callback| is invoked with the shelf auto hide behavior. Possible
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 2bea3e39..ffc4fb2 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -17,6 +17,7 @@
 #include "base/metrics/user_metrics_action.h"
 #include "base/no_destructor.h"
 #include "base/notreached.h"
+#include "base/process/current_process.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -405,8 +406,8 @@
   if (is_extension) {
     // The process name was set to "Renderer" in RendererMain(). Update it to
     // "Extension Renderer" to highlight that it's hosting an extension.
-    base::trace_event::TraceLog::GetInstance()->set_process_name(
-        "Extension Renderer");
+    base::CurrentProcess::GetInstance().SetProcessType(
+        base::CurrentProcessType::PROCESS_RENDERER_EXTENSION);
   }
 
 #if BUILDFLAG(IS_WIN)
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index b26e89e..eb0597b 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -554,6 +554,8 @@
       "../browser/nearby_sharing/fake_nearby_connection.h",
       "../browser/nearby_sharing/fake_nearby_connections_manager.cc",
       "../browser/nearby_sharing/fake_nearby_connections_manager.h",
+      "../browser/ui/app_list/search/test/test_result.cc",
+      "../browser/ui/app_list/search/test/test_result.h",
       "../browser/ui/ash/accessibility/fake_accessibility_controller.cc",
       "../browser/ui/ash/accessibility/fake_accessibility_controller.h",
       "../browser/ui/ash/clipboard_history_test_util.cc",
diff --git a/chrome/test/data/extensions/api_test/autotest_private/test.js b/chrome/test/data/extensions/api_test/autotest_private/test.js
index efc221d..00c309a 100644
--- a/chrome/test/data/extensions/api_test/autotest_private/test.js
+++ b/chrome/test/data/extensions/api_test/autotest_private/test.js
@@ -1465,6 +1465,13 @@
       }));
 }];
 
+var launcherSearchBoxStateTests = [ function verifyGhostText(){
+  chrome.autotestPrivate.getLauncherSearchBoxState(
+      chrome.test.callbackPass(info => {
+        chrome.test.assertEq('youtube - Websites', info.ghostText);
+      }));
+}];
+
 var holdingSpaceTests = [
   function resetHoldingSpace(options) {
     // State after this call is checked in C++ test code.
@@ -1553,6 +1560,7 @@
       'holdingSpace': holdingSpaceTests,
       'systemWebApps': systemWebAppsTests,
       'lacrosEnabled': lacrosEnabledTests,
+      'launcherSearchBoxState' : launcherSearchBoxStateTests,
     };
 
 chrome.test.getConfig(function(config) {
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index 2ce16a5..e2cc5fe0 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -15,6 +15,7 @@
 import("//printing/buildflags/buildflags.gni")
 import("//third_party/closure_compiler/compile_js.gni")
 import("//tools/grit/grit_rule.gni")
+import("//tools/grit/preprocess_if_expr.gni")
 import("//tools/typescript/ts_definitions.gni")
 import("//tools/typescript/ts_library.gni")
 import("//ui/webui/resources/tools/generate_grd.gni")
@@ -378,13 +379,11 @@
 
 # Copies checked-in .d.ts files to the preprocess folder so that they are
 # discovered by TSC the same way generated .d.ts files are.
-copy("copy_checked_in_dts_files") {
-  visibility = [
-    ":build_ts",
-    ":generate_definitions",
-  ]
-  sources = checked_in_dts_files
-  outputs = [ "$target_gen_dir/tsc/{{source_target_relative}}" ]
+preprocess_if_expr("copy_checked_in_dts_files") {
+  in_folder = "./"
+  in_files = checked_in_dts_files
+  out_folder = "$target_gen_dir/tsc"
+  visibility = [ ":build_ts" ]
 }
 
 generate_definitions_js_files = [ "mojo_webui_test_support.js" ]
@@ -397,10 +396,7 @@
   out_dir = "$target_gen_dir/tsc"
   js_files = generate_definitions_js_files
   visibility = [ ":build_ts" ]
-  extra_deps = [
-    ":copy_checked_in_dts_files",
-    "//ui/webui/resources:generate_definitions",
-  ]
+  extra_deps = [ "//ui/webui/resources:generate_definitions" ]
 
   if (is_chromeos_ash) {
     extra_deps += [ "//ash/webui/common/resources:generate_definitions" ]
@@ -482,6 +478,7 @@
   if (is_chromeos_ash) {
     input_files += [
       "chromeos/mock_controller.js",
+      "chromeos/test_store.js",
       "chromeos/arc_account_picker/test_util.js",
       "chromeos/ash_common/i18n_behavior_test.js",
       "chromeos/fake_network_config_mojom.js",
@@ -611,7 +608,6 @@
   }
 
   if (is_chromeos_ash) {
-    input_files += [ "chromeos/test_store.js" ]
     deps += [
       "chromeos/ash_common:build_grdp",
       "chromeos/cloud_upload:build_grdp",
diff --git a/chrome/updater/BUILD.gn b/chrome/updater/BUILD.gn
index 7798378..55579400 100644
--- a/chrome/updater/BUILD.gn
+++ b/chrome/updater/BUILD.gn
@@ -189,7 +189,6 @@
         "mac/install_from_archive.mm",
         "mac/setup/keystone.h",
         "mac/setup/keystone.mm",
-        "mac/setup/setup.h",
         "mac/setup/setup.mm",
         "mac/update_service_internal_proxy.h",
         "mac/update_service_internal_proxy.mm",
@@ -328,7 +327,7 @@
         "device_management/dm_storage_linux.cc",
         "linux/ipc_support.cc",
         "linux/ipc_support.h",
-        "linux/setup/setup.h",
+        "linux/setup/setup.cc",
         "linux/update_service_internal_proxy.cc",
         "linux/update_service_internal_proxy.h",
         "net/network_fetcher_linux.cc",
@@ -572,6 +571,14 @@
 
       deps += [ "//chrome/common/mac:launchd" ]
     }
+
+    if (is_posix) {
+      sources += [
+        "posix/setup.h",
+        "util/posix_util.cc",
+        "util/posix_util.h",
+      ]
+    }
   }
 
   if (is_mac || is_win) {
diff --git a/chrome/updater/app/app_server_unittest.cc b/chrome/updater/app/app_server_unittest.cc
index 5860818..2bfd86f 100644
--- a/chrome/updater/app/app_server_unittest.cc
+++ b/chrome/updater/app/app_server_unittest.cc
@@ -100,8 +100,6 @@
   EXPECT_TRUE(CreateLocalPrefs(GetUpdaterScope())->GetQualified());
 }
 
-// TODO(crbug.com/1367437): Enable tests once updater is implemented for Linux
-#if !BUILDFLAG(IS_LINUX)
 TEST_F(AppServerTestCase, SelfPromote) {
   {
     scoped_refptr<LocalPrefs> local_prefs = CreateLocalPrefs(GetUpdaterScope());
@@ -143,7 +141,6 @@
   EXPECT_FALSE(global_prefs->GetSwapping());
   EXPECT_EQ(global_prefs->GetActiveVersion(), kUpdaterVersion);
 }
-#endif  // !BUILDFLAG(IS_LINUX)
 
 TEST_F(AppServerTestCase, SelfPromoteFails) {
   {
@@ -167,8 +164,6 @@
   EXPECT_EQ(global_prefs->GetActiveVersion(), "0");
 }
 
-// TODO(crbug.com/1367437): Enable tests once updater is implemented for Linux
-#if !BUILDFLAG(IS_LINUX)
 TEST_F(AppServerTestCase, ActiveDutyAlready) {
   {
     scoped_refptr<GlobalPrefs> global_prefs =
@@ -222,7 +217,6 @@
   EXPECT_FALSE(global_prefs->GetSwapping());
   EXPECT_EQ(global_prefs->GetActiveVersion(), kUpdaterVersion);
 }
-#endif  // !BUILDFLAG(IS_LINUX)
 
 TEST_F(AppServerTestCase, StateDirtySwapFails) {
   {
diff --git a/chrome/updater/app/app_uninstall.cc b/chrome/updater/app/app_uninstall.cc
index a13399c..9f748c9 100644
--- a/chrome/updater/app/app_uninstall.cc
+++ b/chrome/updater/app/app_uninstall.cc
@@ -30,10 +30,8 @@
 
 #if BUILDFLAG(IS_WIN)
 #include "chrome/updater/win/setup/uninstall.h"
-#elif BUILDFLAG(IS_MAC)
-#include "chrome/updater/mac/setup/setup.h"
-#elif BUILDFLAG(IS_LINUX)
-#include "chrome/updater/linux/setup/setup.h"
+#elif BUILDFLAG(IS_POSIX)
+#include "chrome/updater/posix/setup.h"
 #endif
 
 namespace updater {
diff --git a/chrome/updater/app/server/linux/server.cc b/chrome/updater/app/server/linux/server.cc
index 58d2b6a..705bb570 100644
--- a/chrome/updater/app/server/linux/server.cc
+++ b/chrome/updater/app/server/linux/server.cc
@@ -12,12 +12,9 @@
 #include "chrome/updater/app/app.h"
 #include "chrome/updater/app/server/linux/update_service_stub.h"
 #include "chrome/updater/linux/ipc_constants.h"
+#include "chrome/updater/posix/setup.h"
 #include "chrome/updater/update_service.h"
 #include "chrome/updater/update_service_internal.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/platform/named_platform_channel.h"
-#include "mojo/public/cpp/system/invitation.h"
-#include "mojo/public/cpp/system/message_pipe.h"
 
 namespace updater {
 
@@ -36,19 +33,19 @@
 }
 
 bool AppServerLinux::SwapInNewVersion() {
-  NOTIMPLEMENTED();
-  return false;
+  // TODO(crbug.com/1276117): Install systemd units.
+  return true;
 }
 
 bool AppServerLinux::MigrateLegacyUpdaters(
     base::RepeatingCallback<void(const RegistrationRequest&)>
         register_callback) {
-  NOTIMPLEMENTED();
-  return false;
+  // There is not a legacy update client for Linux.
+  return true;
 }
 
 void AppServerLinux::UninstallSelf() {
-  NOTIMPLEMENTED();
+  UninstallCandidate(updater_scope());
 }
 
 scoped_refptr<App> MakeAppServer() {
diff --git a/chrome/updater/app/server/mac/server.mm b/chrome/updater/app/server/mac/server.mm
index 9464ebfb..87fff150 100644
--- a/chrome/updater/app/server/mac/server.mm
+++ b/chrome/updater/app/server/mac/server.mm
@@ -23,8 +23,8 @@
 #include "chrome/updater/configurator.h"
 #include "chrome/updater/constants.h"
 #include "chrome/updater/mac/setup/keystone.h"
-#include "chrome/updater/mac/setup/setup.h"
 #import "chrome/updater/mac/xpc_service_names.h"
+#include "chrome/updater/posix/setup.h"
 #include "chrome/updater/prefs.h"
 #include "chrome/updater/update_service.h"
 #include "chrome/updater/update_service_internal.h"
diff --git a/chrome/updater/app/server/mac/service_delegate.mm b/chrome/updater/app/server/mac/service_delegate.mm
index 5c89004..b9e10ca 100644
--- a/chrome/updater/app/server/mac/service_delegate.mm
+++ b/chrome/updater/app/server/mac/service_delegate.mm
@@ -27,8 +27,8 @@
 #import "chrome/updater/app/server/mac/service_protocol.h"
 #import "chrome/updater/app/server/mac/update_service_wrappers.h"
 #include "chrome/updater/constants.h"
-#include "chrome/updater/mac/setup/setup.h"
 #import "chrome/updater/mac/xpc_service_names.h"
+#include "chrome/updater/posix/setup.h"
 #include "chrome/updater/update_service.h"
 #include "chrome/updater/update_service_internal.h"
 
diff --git a/chrome/updater/constants.h b/chrome/updater/constants.h
index 3172935..beaa77b8 100644
--- a/chrome/updater/constants.h
+++ b/chrome/updater/constants.h
@@ -354,6 +354,12 @@
 // A Mojo remote was unexpectedly disconnected.
 inline constexpr int kErrorMojoDisconnect = 35;
 
+// Failed to copy the updater binary.
+inline constexpr int kErrorFailedToCopyBinary = 36;
+
+// Failed to delete a socket file
+inline constexpr int kErrorFailedToDeleteSocket = 37;
+
 inline constexpr int kErrorTagParsing = 50;
 
 // Metainstaller errors.
diff --git a/chrome/updater/linux/setup/setup.cc b/chrome/updater/linux/setup/setup.cc
new file mode 100644
index 0000000..1aa47cb
--- /dev/null
+++ b/chrome/updater/linux/setup/setup.cc
@@ -0,0 +1,88 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/updater/posix/setup.h"
+
+#include "base/base_paths.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/version.h"
+#include "chrome/updater/constants.h"
+#include "chrome/updater/linux/ipc_constants.h"
+#include "chrome/updater/updater_version.h"
+#include "chrome/updater/util/posix_util.h"
+#include "chrome/updater/util/util.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+// TODO(1382547): There is a overlap between the Mac and Linux setup functions.
+// We should find a way to merge these.
+namespace updater {
+
+int Setup(UpdaterScope scope) {
+  VLOG(1) << base::CommandLine::ForCurrentProcess()->GetCommandLineString()
+          << " : " << __func__;
+  absl::optional<base::FilePath> dest_path =
+      GetVersionedInstallDirectory(scope);
+
+  if (!dest_path)
+    return kErrorFailedToGetVersionedInstallDirectory;
+  dest_path = dest_path->AppendASCII(kExecutableName);
+
+  base::FilePath exe_path;
+  if (!base::PathService::Get(base::FILE_EXE, &exe_path))
+    return kErrorPathServiceFailed;
+
+  if (!base::CopyFile(exe_path, dest_path.value()))
+    return kErrorFailedToCopyBinary;
+
+  // rwx------ for user installs, rwxr-xr-x for system installs.
+  int permissions_mask = base::FILE_PERMISSION_USER_MASK;
+  if (scope == UpdaterScope::kSystem) {
+    permissions_mask |= base::FILE_PERMISSION_READ_BY_GROUP |
+                        base::FILE_PERMISSION_EXECUTE_BY_GROUP |
+                        base::FILE_PERMISSION_READ_BY_OTHERS |
+                        base::FILE_PERMISSION_EXECUTE_BY_OTHERS;
+  }
+  if (!base::SetPosixFilePermissions(dest_path.value(), permissions_mask))
+    return kErrorFailedToCopyBinary;
+
+  // TODO(1276117): Install systemd units.
+  return kErrorOk;
+}
+
+int UninstallCandidate(UpdaterScope scope) {
+  VLOG(1) << base::CommandLine::ForCurrentProcess()->GetCommandLineString()
+          << " : " << __func__;
+  int error = kErrorOk;
+
+  if (DeleteCandidateInstallFolder(scope) ||
+      DeleteFolder(GetVersionedDataDirectory(scope)))
+    error = kErrorFailedToDeleteFolder;
+
+  absl::optional<base::FilePath> versioned_socket =
+      GetActiveDutyInternalSocketPath(scope, base::Version(kUpdaterVersion));
+  if (!versioned_socket || !base::DeleteFile(versioned_socket.value()))
+    error = kErrorFailedToDeleteSocket;
+
+  // TODO(1276117): Remove systemd units.
+
+  return error;
+}
+
+int Uninstall(UpdaterScope scope) {
+  VLOG(1) << base::CommandLine::ForCurrentProcess()->GetCommandLineString()
+          << " : " << __func__;
+  int error = kErrorOk;
+
+  if (!DeleteFolder(GetBaseInstallDirectory(scope)) ||
+      !DeleteFolder(GetBaseDataDirectory(scope)))
+    error = kErrorFailedToDeleteFolder;
+
+  // TODO(1276117): Remove systemd units.
+
+  return error;
+}
+}  // namespace updater
diff --git a/chrome/updater/linux/setup/setup.h b/chrome/updater/linux/setup/setup.h
deleted file mode 100644
index 503f2d4..0000000
--- a/chrome/updater/linux/setup/setup.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_UPDATER_LINUX_SETUP_SETUP_H_
-#define CHROME_UPDATER_LINUX_SETUP_SETUP_H_
-
-#include "base/notreached.h"
-#include "chrome/updater/updater_scope.h"
-
-namespace updater {
-
-int Uninstall(UpdaterScope scope) {
-  NOTIMPLEMENTED();
-  return -1;
-}
-
-// Uninstalls this version of the updater.
-int UninstallCandidate(UpdaterScope scope) {
-  NOTIMPLEMENTED();
-  return -1;
-}
-
-}  // namespace updater
-
-#endif  // CHROME_UPDATER_LINUX_SETUP_SETUP_H_
diff --git a/chrome/updater/mac/setup/.install.sh b/chrome/updater/mac/setup/.install.sh
index 3b876d88..7c980f34 100755
--- a/chrome/updater/mac/setup/.install.sh
+++ b/chrome/updater/mac/setup/.install.sh
@@ -10,5 +10,5 @@
 
 env
 
-"${UNPACK_DIR}/${PRODUCT_NAME}.app/Contents/MacOS/${PRODUCT_NAME}" \
+"$1/${PRODUCT_NAME}.app/Contents/MacOS/${PRODUCT_NAME}" \
     ${SERVER_ARGS} ${KS_kServerActionArguments}
diff --git a/chrome/updater/mac/setup/setup.mm b/chrome/updater/mac/setup/setup.mm
index 6c282d1a..e5ab90e6 100644
--- a/chrome/updater/mac/setup/setup.mm
+++ b/chrome/updater/mac/setup/setup.mm
@@ -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/updater/mac/setup/setup.h"
+#include "chrome/updater/posix/setup.h"
 
 #import <ServiceManagement/ServiceManagement.h>
 
@@ -36,6 +36,7 @@
 #include "chrome/updater/updater_branding.h"
 #include "chrome/updater/updater_scope.h"
 #import "chrome/updater/util/mac_util.h"
+#import "chrome/updater/util/posix_util.h"
 #include "chrome/updater/util/util.h"
 #include "components/crash/core/common/crash_key.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -306,24 +307,10 @@
       scope, CopyUpdateServiceInternalLaunchdName(scope));
 }
 
-bool DeleteFolder(const absl::optional<base::FilePath>& installed_path) {
-  if (!installed_path)
-    return false;
-  if (!base::DeletePathRecursively(*installed_path)) {
-    PLOG(ERROR) << "Deleting " << installed_path << " failed";
-    return false;
-  }
-  return true;
-}
-
 bool DeleteInstallFolder(UpdaterScope scope) {
   return DeleteFolder(GetBaseInstallDirectory(scope));
 }
 
-bool DeleteCandidateInstallFolder(UpdaterScope scope) {
-  return DeleteFolder(GetVersionedInstallDirectory(scope));
-}
-
 bool DeleteDataFolder(UpdaterScope scope) {
   return DeleteFolder(GetBaseDataDirectory(scope));
 }
diff --git a/chrome/updater/mac/setup/setup.h b/chrome/updater/posix/setup.h
similarity index 85%
rename from chrome/updater/mac/setup/setup.h
rename to chrome/updater/posix/setup.h
index 06c6aed..aa4842e 100644
--- a/chrome/updater/mac/setup/setup.h
+++ b/chrome/updater/posix/setup.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_UPDATER_MAC_SETUP_SETUP_H_
-#define CHROME_UPDATER_MAC_SETUP_SETUP_H_
+#ifndef CHROME_UPDATER_POSIX_SETUP_H_
+#define CHROME_UPDATER_POSIX_SETUP_H_
 
 #include "chrome/updater/updater_scope.h"
 
@@ -26,4 +26,4 @@
 
 }  // namespace updater
 
-#endif  // CHROME_UPDATER_MAC_SETUP_SETUP_H_
+#endif  // CHROME_UPDATER_POSIX_SETUP_H_
diff --git a/chrome/updater/setup_linux.cc b/chrome/updater/setup_linux.cc
index c680b98..6f1370d 100644
--- a/chrome/updater/setup_linux.cc
+++ b/chrome/updater/setup_linux.cc
@@ -2,18 +2,22 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/logging.h"
 #include "chrome/updater/setup.h"
 
 #include "base/callback.h"
 #include "base/notreached.h"
+#include "base/task/thread_pool.h"
+#include "chrome/updater/posix/setup.h"
 #include "chrome/updater/updater_scope.h"
 
 namespace updater {
 
-void InstallCandidate(UpdaterScope /*scope*/,
-                      base::OnceCallback<void(int)> /*callback*/) {
-  // TODO(crbug.com/1276176) - implement.
-  NOTIMPLEMENTED();
+void InstallCandidate(UpdaterScope scope,
+                      base::OnceCallback<void(int)> callback) {
+  base::ThreadPool::PostTaskAndReplyWithResult(FROM_HERE, {base::MayBlock()},
+                                               base::BindOnce(&Setup, scope),
+                                               std::move(callback));
 }
 
 }  // namespace updater
diff --git a/chrome/updater/setup_mac.mm b/chrome/updater/setup_mac.mm
index 1042b0f..be90fb28 100644
--- a/chrome/updater/setup_mac.mm
+++ b/chrome/updater/setup_mac.mm
@@ -11,8 +11,8 @@
 #include "base/time/time.h"
 #include "chrome/updater/constants.h"
 #include "chrome/updater/launchd_util.h"
-#include "chrome/updater/mac/setup/setup.h"
 #include "chrome/updater/mac/xpc_service_names.h"
+#include "chrome/updater/posix/setup.h"
 #include "chrome/updater/updater_scope.h"
 
 namespace updater {
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc
index d5b3c10..46550ac 100644
--- a/chrome/updater/test/integration_tests.cc
+++ b/chrome/updater/test/integration_tests.cc
@@ -51,7 +51,7 @@
 #include "chrome/updater/win/win_constants.h"
 #endif  // BUILDFLAG(IS_WIN)
 
-// TODO(noahrose): Enable tests once updater is implemented for Linux
+// TODO(1367437): Enable tests once updater is implemented for Linux
 #if !BUILDFLAG(IS_LINUX)
 
 namespace updater::test {
diff --git a/chrome/updater/util/linux_util.cc b/chrome/updater/util/linux_util.cc
index 4a0087d..641443b 100644
--- a/chrome/updater/util/linux_util.cc
+++ b/chrome/updater/util/linux_util.cc
@@ -6,9 +6,12 @@
 
 #include "base/base_paths.h"
 #include "base/files/file_path.h"
+#include "base/files/file_util.h"
 #include "base/path_service.h"
 #include "chrome/updater/constants.h"
+#include "chrome/updater/updater_branding.h"
 #include "chrome/updater/updater_scope.h"
+#include "chrome/updater/util/util.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace updater {
@@ -34,10 +37,6 @@
   return absl::nullopt;
 }
 
-absl::optional<base::FilePath> GetBaseInstallDirectory(UpdaterScope scope) {
-  return GetApplicationDataDirectory(scope);
-}
-
 base::FilePath GetExecutableRelativePath() {
   return base::FilePath(kExecutableName);
 }
diff --git a/chrome/updater/util/mac_util.mm b/chrome/updater/util/mac_util.mm
index 5bb0072..db73dff 100644
--- a/chrome/updater/util/mac_util.mm
+++ b/chrome/updater/util/mac_util.mm
@@ -22,6 +22,7 @@
 #include "chrome/updater/updater_branding.h"
 #include "chrome/updater/updater_scope.h"
 #include "chrome/updater/updater_version.h"
+#include "chrome/updater/util/posix_util.h"
 #include "chrome/updater/util/util.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -33,11 +34,6 @@
 constexpr base::FilePath::CharType kZipExePath[] =
     FILE_PATH_LITERAL("/usr/bin/unzip");
 
-base::FilePath GetUpdaterFolderName() {
-  return base::FilePath(COMPANY_SHORTNAME_STRING)
-      .AppendASCII(PRODUCT_FULLNAME_STRING);
-}
-
 base::FilePath ExecutableFolderPath() {
   return base::FilePath(
              base::StrCat({PRODUCT_FULLNAME_STRING, kExecutableSuffix, ".app"}))
@@ -146,13 +142,6 @@
   return exit_code <= 1;
 }
 
-absl::optional<base::FilePath> GetBaseInstallDirectory(UpdaterScope scope) {
-  absl::optional<base::FilePath> path = GetLibraryFolderPath(scope);
-  if (!path)
-    return absl::nullopt;
-  return path->Append(GetUpdaterFolderName());
-}
-
 absl::optional<base::FilePath> GetExecutableFolderPathForVersion(
     UpdaterScope scope,
     const base::Version& version) {
diff --git a/chrome/updater/util/posix_util.cc b/chrome/updater/util/posix_util.cc
new file mode 100644
index 0000000..a909a31f
--- /dev/null
+++ b/chrome/updater/util/posix_util.cc
@@ -0,0 +1,57 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/updater/util/posix_util.h"
+
+#include "base/files/file.h"
+#include "base/files/file_util.h"
+#include "base/logging.h"
+#include "chrome/updater/updater_branding.h"
+#include "chrome/updater/util/util.h"
+
+#if BUILDFLAG(IS_LINUX)
+#include "chrome/updater/util/linux_util.h"
+#endif
+
+#if BUILDFLAG(IS_MAC)
+#include "chrome/updater/util/mac_util.h"
+#endif
+
+namespace updater {
+
+// Recursively delete a folder and its contents, returning `true` on success.
+bool DeleteFolder(const absl::optional<base::FilePath>& installed_path) {
+  if (!installed_path)
+    return false;
+  if (!base::DeletePathRecursively(*installed_path)) {
+    PLOG(ERROR) << "Deleting " << *installed_path << " failed";
+    return false;
+  }
+  return true;
+}
+
+bool DeleteCandidateInstallFolder(UpdaterScope scope) {
+  return DeleteFolder(GetVersionedInstallDirectory(scope));
+}
+
+base::FilePath GetUpdaterFolderName() {
+  return base::FilePath(COMPANY_SHORTNAME_STRING)
+      .AppendASCII(PRODUCT_FULLNAME_STRING);
+}
+
+absl::optional<base::FilePath> GetBaseInstallDirectory(UpdaterScope scope) {
+  absl::optional<base::FilePath> path;
+#if BUILDFLAG(IS_LINUX)
+  path = GetApplicationDataDirectory(scope);
+#elif BUILDFLAG(IS_MAC)
+  path = GetLibraryFolderPath(scope);
+#endif
+  if (!path)
+    return absl::nullopt;
+  path = path->Append(GetUpdaterFolderName());
+
+  return path;
+}
+
+}  // namespace updater
diff --git a/chrome/updater/util/posix_util.h b/chrome/updater/util/posix_util.h
new file mode 100644
index 0000000..a442750
--- /dev/null
+++ b/chrome/updater/util/posix_util.h
@@ -0,0 +1,29 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_UPDATER_UTIL_POSIX_UTIL_H_
+#define CHROME_UPDATER_UTIL_POSIX_UTIL_H_
+
+#include <third_party/abseil-cpp/absl/types/optional.h>
+
+namespace base {
+class FilePath;
+}
+
+namespace updater {
+enum class UpdaterScope;
+
+// Recursively delete a folder and its contents, returning `true` on success.
+bool DeleteFolder(const absl::optional<base::FilePath>& installed_path);
+
+// Delete this updater's versioned install folder.
+bool DeleteCandidateInstallFolder(UpdaterScope scope);
+
+base::FilePath GetUpdaterFolderName();
+
+absl::optional<base::FilePath> GetBaseInstallDirectory(UpdaterScope scope);
+
+}  // namespace updater
+
+#endif  // CHROME_UPDATER_UTIL_POSIX_UTIL_H_
diff --git a/chromecast/base/BUILD.gn b/chromecast/base/BUILD.gn
index d3ce841..e0d286a 100644
--- a/chromecast/base/BUILD.gn
+++ b/chromecast/base/BUILD.gn
@@ -319,6 +319,7 @@
       "$java_src_dir/org/chromium/chromecast/base/Both.java",
       "$java_src_dir/org/chromium/chromecast/base/Box.java",
       "$java_src_dir/org/chromium/chromecast/base/Cell.java",
+      "$java_src_dir/org/chromium/chromecast/base/Consumer.java",
       "$java_src_dir/org/chromium/chromecast/base/Controller.java",
       "$java_src_dir/org/chromium/chromecast/base/Itertools.java",
       "$java_src_dir/org/chromium/chromecast/base/Observable.java",
diff --git a/chromecast/base/java/src/org/chromium/chromecast/base/Both.java b/chromecast/base/java/src/org/chromium/chromecast/base/Both.java
index b7804536..0d29a40 100644
--- a/chromecast/base/java/src/org/chromium/chromecast/base/Both.java
+++ b/chromecast/base/java/src/org/chromium/chromecast/base/Both.java
@@ -4,7 +4,6 @@
 
 package org.chromium.chromecast.base;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.Function;
 
 import java.util.Objects;
diff --git a/base/android/java/src/org/chromium/base/Consumer.java b/chromecast/base/java/src/org/chromium/chromecast/base/Consumer.java
similarity index 93%
rename from base/android/java/src/org/chromium/base/Consumer.java
rename to chromecast/base/java/src/org/chromium/chromecast/base/Consumer.java
index 10c4082..01e19652 100644
--- a/base/android/java/src/org/chromium/base/Consumer.java
+++ b/chromecast/base/java/src/org/chromium/chromecast/base/Consumer.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.base;
+package org.chromium.chromecast.base;
 
 /**
  * Based on Java 8's {@code java.util.function.Consumer}.
diff --git a/chromecast/base/java/src/org/chromium/chromecast/base/Observable.java b/chromecast/base/java/src/org/chromium/chromecast/base/Observable.java
index 387fb6c..ef8b8f8 100644
--- a/chromecast/base/java/src/org/chromium/chromecast/base/Observable.java
+++ b/chromecast/base/java/src/org/chromium/chromecast/base/Observable.java
@@ -4,7 +4,6 @@
 
 package org.chromium.chromecast.base;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.Function;
 
 /**
diff --git a/chromecast/base/java/src/org/chromium/chromecast/base/Observers.java b/chromecast/base/java/src/org/chromium/chromecast/base/Observers.java
index 6a7d22e7..2172023 100644
--- a/chromecast/base/java/src/org/chromium/chromecast/base/Observers.java
+++ b/chromecast/base/java/src/org/chromium/chromecast/base/Observers.java
@@ -4,8 +4,6 @@
 
 package org.chromium.chromecast.base;
 
-import org.chromium.base.Consumer;
-
 /**
  * Helper functions for creating Observers, used by Observable.subscribe() to handle state changes.
  */
diff --git a/chromecast/base/java/test/org/chromium/chromecast/base/BothTest.java b/chromecast/base/java/test/org/chromium/chromecast/base/BothTest.java
index f0308b2..f2b0b53 100644
--- a/chromecast/base/java/test/org/chromium/chromecast/base/BothTest.java
+++ b/chromecast/base/java/test/org/chromium/chromecast/base/BothTest.java
@@ -14,7 +14,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.BlockJUnit4ClassRunner;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.Function;
 import org.chromium.chromecast.base.Inheritance.Base;
 import org.chromium.chromecast.base.Inheritance.Derived;
diff --git a/chromecast/base/java/test/org/chromium/chromecast/base/ObserversTest.java b/chromecast/base/java/test/org/chromium/chromecast/base/ObserversTest.java
index 25df3c43..9758b39d 100644
--- a/chromecast/base/java/test/org/chromium/chromecast/base/ObserversTest.java
+++ b/chromecast/base/java/test/org/chromium/chromecast/base/ObserversTest.java
@@ -12,7 +12,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.BlockJUnit4ClassRunner;
 
-import org.chromium.base.Consumer;
 import org.chromium.chromecast.base.Inheritance.Base;
 import org.chromium.chromecast.base.Inheritance.Derived;
 
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/AsyncTaskRunner.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/AsyncTaskRunner.java
index fd1e6900..cda3238e 100644
--- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/AsyncTaskRunner.java
+++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/AsyncTaskRunner.java
@@ -4,9 +4,9 @@
 
 package org.chromium.chromecast.shell;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.base.task.AsyncTask;
+import org.chromium.chromecast.base.Consumer;
 import org.chromium.chromecast.base.Scope;
 
 import java.util.concurrent.Executor;
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsSurfaceHelper.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsSurfaceHelper.java
index 5d0743e..4da45d8 100644
--- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsSurfaceHelper.java
+++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsSurfaceHelper.java
@@ -10,9 +10,9 @@
 import android.os.Bundle;
 import android.os.Handler;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.Log;
 import org.chromium.chromecast.base.Both;
+import org.chromium.chromecast.base.Consumer;
 import org.chromium.chromecast.base.Controller;
 import org.chromium.chromecast.base.Observable;
 import org.chromium.chromecast.base.Observer;
diff --git a/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastWebContentsSurfaceHelperTest.java b/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastWebContentsSurfaceHelperTest.java
index 93c951e..19f6edc 100644
--- a/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastWebContentsSurfaceHelperTest.java
+++ b/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastWebContentsSurfaceHelperTest.java
@@ -26,8 +26,8 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowLooper;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.chromecast.base.Consumer;
 import org.chromium.chromecast.base.Observer;
 import org.chromium.chromecast.base.Scope;
 import org.chromium.chromecast.shell.CastWebContentsSurfaceHelper.MediaSessionGetter;
diff --git a/chromecast/cast_core/runtime/browser/runtime_service_impl.cc b/chromecast/cast_core/runtime/browser/runtime_service_impl.cc
index a51fedc..1fa68f7 100644
--- a/chromecast/cast_core/runtime/browser/runtime_service_impl.cc
+++ b/chromecast/cast_core/runtime/browser/runtime_service_impl.cc
@@ -106,6 +106,9 @@
 
   if (heartbeat_reactor_) {
     heartbeat_timer_.Stop();
+    // Reset the writes callback as we're not expecting any more responses from
+    // gRPC framework.
+    heartbeat_reactor_->SetWritesAvailableCallback(base::DoNothing());
     heartbeat_reactor_->Write(grpc::Status::OK);
     heartbeat_reactor_ = nullptr;
   }
@@ -246,6 +249,7 @@
 
   if (!request.has_heartbeat_period() ||
       request.heartbeat_period().seconds() <= 0) {
+    LOG(ERROR) << "Failed to create a heartbeat as period is not valid";
     reactor->Write(grpc::Status(grpc::StatusCode::INVALID_ARGUMENT,
                                 "Incorrect heartbeat period"));
     return;
@@ -253,6 +257,7 @@
 
   heartbeat_period_ = base::Seconds(request.heartbeat_period().seconds());
   heartbeat_reactor_ = reactor;
+  // Set the write callback once for all future calls from gRPC framework.
   heartbeat_reactor_->SetWritesAvailableCallback(base::BindPostTask(
       task_runner_, base::BindRepeating(&RuntimeServiceImpl::OnHeartbeatSent,
                                         weak_factory_.GetWeakPtr())));
@@ -370,7 +375,11 @@
 
 void RuntimeServiceImpl::SendHeartbeat() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK(heartbeat_reactor_);
+  if (!heartbeat_reactor_) {
+    LOG(WARNING) << "Heartbeat reactor has been destroyed";
+    return;
+  }
+
   DVLOG(2) << "Sending heartbeat";
   heartbeat_reactor_->Write(cast::runtime::HeartbeatResponse());
 }
@@ -379,13 +388,16 @@
     cast::utils::GrpcStatusOr<
         cast::runtime::RuntimeServiceHandler::Heartbeat::Reactor*> reactor_or) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  CHECK(heartbeat_reactor_);
   if (!reactor_or.ok()) {
+    heartbeat_timer_.Stop();
     heartbeat_reactor_ = nullptr;
     LOG(ERROR) << "Failed to send heartbeats: " << reactor_or.ToString();
     return;
   }
 
-  heartbeat_reactor_ = std::move(reactor_or).value();
+  // Server streaming reactor never changes.
+  CHECK(heartbeat_reactor_ == *reactor_or);
   heartbeat_timer_.Start(
       FROM_HERE, heartbeat_period_,
       base::BindPostTask(task_runner_,
diff --git a/chromeos/ash/components/login/auth/BUILD.gn b/chromeos/ash/components/login/auth/BUILD.gn
index 06e08419..a74f411 100644
--- a/chromeos/ash/components/login/auth/BUILD.gn
+++ b/chromeos/ash/components/login/auth/BUILD.gn
@@ -64,8 +64,6 @@
     "challenge_response/key_label_utils.h",
     "challenge_response/known_user_pref_utils.cc",
     "challenge_response/known_user_pref_utils.h",
-    "cryptohome_authenticator.cc",
-    "cryptohome_authenticator.h",
     "cryptohome_parameter_utils.cc",
     "cryptohome_parameter_utils.h",
     "extended_authenticator.cc",
diff --git a/chromeos/ash/components/login/auth/cryptohome_authenticator.cc b/chromeos/ash/components/login/auth/cryptohome_authenticator.cc
deleted file mode 100644
index c1a9c86..0000000
--- a/chromeos/ash/components/login/auth/cryptohome_authenticator.cc
+++ /dev/null
@@ -1,1035 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chromeos/ash/components/login/auth/cryptohome_authenticator.h"
-
-#include <stdint.h>
-
-#include <memory>
-#include <vector>
-
-#include "ash/constants/ash_switches.h"
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/memory/weak_ptr.h"
-#include "base/metrics/histogram_macros.h"
-#include "chromeos/ash/components/cryptohome/common_types.h"
-#include "chromeos/ash/components/cryptohome/cryptohome_parameters.h"
-#include "chromeos/ash/components/cryptohome/cryptohome_util.h"
-#include "chromeos/ash/components/cryptohome/system_salt_getter.h"
-#include "chromeos/ash/components/cryptohome/userdataauth_util.h"
-#include "chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client.h"
-#include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h"
-#include "chromeos/ash/components/login/auth/auth_status_consumer.h"
-#include "chromeos/ash/components/login/auth/cryptohome_parameter_utils.h"
-#include "chromeos/ash/components/login/auth/public/auth_failure.h"
-#include "chromeos/ash/components/login/auth/public/cryptohome_key_constants.h"
-#include "chromeos/ash/components/login/auth/public/key.h"
-#include "chromeos/ash/components/login/auth/public/user_context.h"
-#include "chromeos/login/login_state/login_state.h"
-#include "chromeos/metrics/login_event_recorder.h"
-#include "components/account_id/account_id.h"
-#include "components/device_event_log/device_event_log.h"
-#include "components/prefs/pref_service.h"
-#include "components/user_manager/known_user.h"
-#include "components/user_manager/user.h"
-#include "components/user_manager/user_names.h"
-#include "components/user_manager/user_type.h"
-#include "third_party/cros_system_api/dbus/service_constants.h"
-
-using cryptohome::KeyLabel;
-
-namespace ash {
-
-namespace {
-
-bool ShouldUseOldEncryptionForTesting() {
-  return base::CommandLine::ForCurrentProcess()->HasSwitch(
-      ash::switches::kCryptohomeUseOldEncryptionForTesting);
-}
-
-// The name under which the type of key generated from the user's GAIA
-// credentials is stored.
-const char kKeyProviderDataTypeName[] = "type";
-
-// The name under which the salt used to generate a key from the user's GAIA
-// credentials is stored.
-const char kKeyProviderDataSaltName[] = "salt";
-
-// Returns a human-readable string describing |state|.
-const char* AuthStateToString(CryptohomeAuthenticator::AuthState state) {
-  switch (state) {
-    case CryptohomeAuthenticator::CONTINUE:
-      return "CONTINUE";
-    case CryptohomeAuthenticator::NO_MOUNT:
-      return "NO_MOUNT";
-    case CryptohomeAuthenticator::FAILED_MOUNT:
-      return "FAILED_MOUNT";
-    case CryptohomeAuthenticator::FAILED_REMOVE:
-      return "FAILED_REMOVE";
-    case CryptohomeAuthenticator::FAILED_TMPFS:
-      return "FAILED_TMPFS";
-    case CryptohomeAuthenticator::FAILED_TPM:
-      return "FAILED_TPM";
-    case CryptohomeAuthenticator::CREATE_NEW:
-      return "CREATE_NEW";
-    case CryptohomeAuthenticator::RECOVER_MOUNT:
-      return "RECOVER_MOUNT";
-    case CryptohomeAuthenticator::POSSIBLE_PW_CHANGE:
-      return "POSSIBLE_PW_CHANGE";
-    case CryptohomeAuthenticator::NEED_NEW_PW:
-      return "NEED_NEW_PW";
-    case CryptohomeAuthenticator::NEED_OLD_PW:
-      return "NEED_OLD_PW";
-    case CryptohomeAuthenticator::HAVE_NEW_PW:
-      return "HAVE_NEW_PW";
-    case CryptohomeAuthenticator::OFFLINE_LOGIN:
-      return "OFFLINE_LOGIN";
-    case CryptohomeAuthenticator::ONLINE_LOGIN:
-      return "ONLINE_LOGIN";
-    case CryptohomeAuthenticator::UNLOCK:
-      return "UNLOCK";
-    case CryptohomeAuthenticator::ONLINE_FAILED:
-      return "ONLINE_FAILED";
-    case CryptohomeAuthenticator::GUEST_LOGIN:
-      return "GUEST_LOGIN";
-    case CryptohomeAuthenticator::PUBLIC_ACCOUNT_LOGIN:
-      return "PUBLIC_ACCOUNT_LOGIN";
-    case CryptohomeAuthenticator::LOGIN_FAILED:
-      return "LOGIN_FAILED";
-    case CryptohomeAuthenticator::OWNER_REQUIRED:
-      return "OWNER_REQUIRED";
-    case CryptohomeAuthenticator::FAILED_USERNAME_HASH:
-      return "FAILED_USERNAME_HASH";
-    case CryptohomeAuthenticator::KIOSK_ACCOUNT_LOGIN:
-      return "KIOSK_ACCOUNT_LOGIN";
-    case CryptohomeAuthenticator::REMOVED_DATA_AFTER_FAILURE:
-      return "REMOVED_DATA_AFTER_FAILURE";
-    case CryptohomeAuthenticator::FAILED_OLD_ENCRYPTION:
-      return "FAILED_OLD_ENCRYPTION";
-    case CryptohomeAuthenticator::FAILED_PREVIOUS_MIGRATION_INCOMPLETE:
-      return "FAILED_PREVIOUS_MIGRATION_INCOMPLETE";
-    case CryptohomeAuthenticator::OFFLINE_NO_MOUNT:
-      return "OFFLINE_NO_MOUNT";
-    case CryptohomeAuthenticator::TPM_UPDATE_REQUIRED:
-      return "TPM_UPDATE_REQUIRED";
-    case CryptohomeAuthenticator::OFFLINE_MOUNT_UNRECOVERABLE:
-      return "OFFLINE_MOUNT_UNRECOVERABLE";
-  }
-  return "UNKNOWN";
-}
-
-// Hashes |key| with |system_salt| if it its type is KEY_TYPE_PASSWORD_PLAIN.
-// Returns the keys unmodified otherwise.
-std::unique_ptr<Key> TransformKeyIfNeeded(const Key& key,
-                                          const std::string& system_salt) {
-  std::unique_ptr<Key> result(new Key(key));
-  if (result->GetKeyType() == Key::KEY_TYPE_PASSWORD_PLAIN)
-    result->Transform(Key::KEY_TYPE_SALTED_SHA256_TOP_HALF, system_salt);
-
-  return result;
-}
-
-// Records get hash status and calls resolver->Resolve().
-void TriggerResolveHash(const base::WeakPtr<AuthAttemptState>& attempt,
-                        scoped_refptr<CryptohomeAuthenticator> resolver,
-                        bool success,
-                        const std::string& username_hash) {
-  if (success)
-    attempt->RecordUsernameHash(username_hash);
-  else
-    attempt->RecordUsernameHashFailed();
-  resolver->Resolve();
-}
-
-// Records an error in accessing the user's cryptohome with the given key and
-// calls resolver->Resolve() after adding a login time marker.
-void RecordKeyErrorAndResolve(const base::WeakPtr<AuthAttemptState>& attempt,
-                              scoped_refptr<CryptohomeAuthenticator> resolver) {
-  chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker("CryptohomeMount-End",
-                                                          false);
-  attempt->RecordCryptohomeStatus(cryptohome::MOUNT_ERROR_KEY_FAILURE);
-  resolver->Resolve();
-}
-
-// Callback invoked when cryptohome's GetSanitizedUsername() method has
-// finished.
-void OnGetSanitizedUsername(
-    base::OnceCallback<void(bool, const std::string&)> callback,
-    absl::optional<user_data_auth::GetSanitizedUsernameReply> reply) {
-  std::string res;
-  if (reply.has_value())
-    res = reply->sanitized_username();
-  std::move(callback).Run(!res.empty(), res);
-}
-
-// Callback invoked when a cryptohome *Ex method, which only returns a
-// base::Reply, finishes.
-template <typename ReplyType>
-void OnReplyMethod(const base::WeakPtr<AuthAttemptState>& attempt,
-                   scoped_refptr<CryptohomeAuthenticator> resolver,
-                   const char* time_marker,
-                   absl::optional<ReplyType> reply) {
-  chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker(time_marker, false);
-  attempt->RecordCryptohomeStatus(user_data_auth::ReplyToMountError(reply));
-  resolver->Resolve();
-}
-
-// Callback invoked when cryptohome's MountEx() method has finished.
-void OnMount(const base::WeakPtr<AuthAttemptState>& attempt,
-             scoped_refptr<CryptohomeAuthenticator> resolver,
-             absl::optional<user_data_auth::MountReply> reply) {
-  const bool public_mount =
-      user_manager::User::TypeIsKiosk(attempt->user_context->GetUserType());
-
-  chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker(
-      public_mount ? "CryptohomeMountPublic-End" : "CryptohomeMount-End",
-      false);
-  attempt->RecordCryptohomeStatus(user_data_auth::ReplyToMountError(reply));
-  if (attempt->cryptohome_code() == cryptohome::MOUNT_ERROR_NONE) {
-    attempt->RecordUsernameHash(reply->sanitized_username());
-  } else {
-    LOGIN_LOG(ERROR) << "MountEx failed. Error: " << attempt->cryptohome_code();
-    attempt->RecordUsernameHashFailed();
-  }
-  resolver->Resolve();
-}
-
-// Calls cryptohome's MountEx() method. The key in |attempt->user_context| must
-// not be a plain text password. If the user provided a plain text password,
-// that password must be transformed to another key type (by salted hashing)
-// before calling this method.
-void DoMount(const base::WeakPtr<AuthAttemptState>& attempt,
-             scoped_refptr<CryptohomeAuthenticator> resolver,
-             bool ephemeral,
-             bool create_if_nonexistent) {
-  const Key* key = attempt->user_context->GetKey();
-  // If the |key| is a plain text password, crash rather than attempting to
-  // mount the cryptohome with a plain text password.
-  CHECK_NE(Key::KEY_TYPE_PASSWORD_PLAIN, key->GetKeyType());
-
-  // Set state that username_hash is requested here so that test implementation
-  // that returns directly would not generate 2 OnLoginSuccess() calls.
-  attempt->UsernameHashRequested();
-
-  const cryptohome::AuthorizationRequest auth =
-      CreateAuthorizationRequestFromKeyDef(
-          cryptohome_parameter_utils::CreateAuthorizationKeyDefFromUserContext(
-              *attempt->user_context));
-
-  user_data_auth::MountRequest mount;
-  if (ephemeral)
-    mount.set_require_ephemeral(true);
-  if (create_if_nonexistent) {
-    cryptohome::KeyDefinitionToKey(
-        cryptohome_parameter_utils::CreateKeyDefFromUserContext(
-            *attempt->user_context),
-        mount.mutable_create()->add_keys());
-    if (ShouldUseOldEncryptionForTesting()) {
-      mount.mutable_create()->set_force_ecryptfs(true);
-    }
-  }
-  if (attempt->user_context->IsForcingDircrypto() &&
-      !ShouldUseOldEncryptionForTesting()) {
-    mount.set_force_dircrypto_if_available(true);
-  }
-  *mount.mutable_account() = cryptohome::CreateAccountIdentifierFromAccountId(
-      attempt->user_context->GetAccountId());
-  *mount.mutable_authorization() = auth;
-  UserDataAuthClient::Get()->Mount(mount,
-                                   base::BindOnce(&OnMount, attempt, resolver));
-}
-
-// Callback invoked when the system salt has been retrieved. Transforms the key
-// in |attempt->user_context| using Chrome's default hashing algorithm and the
-// system salt, then calls MountEx().
-void OnGetSystemSalt(const base::WeakPtr<AuthAttemptState>& attempt,
-                     scoped_refptr<CryptohomeAuthenticator> resolver,
-                     bool ephemeral,
-                     bool create_if_nonexistent,
-                     const std::string& system_salt) {
-  DCHECK_EQ(Key::KEY_TYPE_PASSWORD_PLAIN,
-            attempt->user_context->GetKey()->GetKeyType());
-
-  attempt->user_context->GetKey()->Transform(
-      Key::KEY_TYPE_SALTED_SHA256_TOP_HALF, system_salt);
-
-  DoMount(attempt, resolver, ephemeral, create_if_nonexistent);
-}
-
-// Callback invoked when cryptohome's GetKeyData() method has finished.
-// * If GetKeyData() returned metadata indicating the hashing algorithm and
-//   salt that were used to generate the key for this user's cryptohome,
-//   transforms the key in |attempt->user_context| with the same parameters.
-// * Otherwise, starts the retrieval of the system salt so that the key in
-//   |attempt->user_context| can be transformed with Chrome's default hashing
-//   algorithm and the system salt.
-// The resulting key is then passed to cryptohome's MountEx().
-void OnGetKeyData(const base::WeakPtr<AuthAttemptState>& attempt,
-                  scoped_refptr<CryptohomeAuthenticator> resolver,
-                  bool ephemeral,
-                  bool create_if_nonexistent,
-                  absl::optional<user_data_auth::GetKeyDataReply> reply) {
-  if (user_data_auth::ReplyToMountError(reply) ==
-      cryptohome::MOUNT_ERROR_NONE) {
-    std::vector<cryptohome::KeyDefinition> key_definitions =
-        user_data_auth::GetKeyDataReplyToKeyDefinitions(reply);
-    if (key_definitions.size() == 1) {
-      const cryptohome::KeyDefinition& key_definition = key_definitions.front();
-      DCHECK_EQ(kCryptohomeGaiaKeyLabel, key_definition.label.value());
-
-      // Extract the key type and salt from |key_definition|, if present.
-      std::unique_ptr<int64_t> type;
-      std::unique_ptr<std::string> salt;
-      for (std::vector<cryptohome::KeyDefinition::ProviderData>::const_iterator
-               it = key_definition.provider_data.begin();
-           it != key_definition.provider_data.end(); ++it) {
-        if (it->name == kKeyProviderDataTypeName) {
-          if (it->number)
-            type = std::make_unique<int64_t>(*it->number);
-          else
-            NOTREACHED();
-        } else if (it->name == kKeyProviderDataSaltName) {
-          if (it->bytes)
-            salt = std::make_unique<std::string>(*it->bytes);
-          else
-            NOTREACHED();
-        }
-      }
-
-      if (type) {
-        if (*type < 0 || *type >= Key::KEY_TYPE_COUNT) {
-          LOGIN_LOG(ERROR) << "Invalid key type: " << *type;
-          RecordKeyErrorAndResolve(attempt, resolver);
-          return;
-        }
-
-        if (!salt) {
-          LOGIN_LOG(ERROR) << "Missing salt.";
-          RecordKeyErrorAndResolve(attempt, resolver);
-          return;
-        }
-
-        attempt->user_context->GetKey()->Transform(
-            static_cast<Key::KeyType>(*type), *salt);
-        DoMount(attempt, resolver, ephemeral, create_if_nonexistent);
-        return;
-      }
-    } else {
-      LOGIN_LOG(EVENT) << "GetKeyDataEx() returned " << key_definitions.size()
-                       << " entries.";
-    }
-  }
-
-  SystemSaltGetter::Get()->GetSystemSalt(base::BindOnce(
-      &OnGetSystemSalt, attempt, resolver, ephemeral, create_if_nonexistent));
-}
-
-// Starts the process that will mount a user's cryptohome.
-// * If the key in |attempt->user_context| is not a plain text password,
-//   cryptohome's MountEx() method is called directly with the key.
-// * Otherwise, the key must be transformed (by salted hashing) before being
-//   passed to MountEx(). In that case, cryptohome's GetKeyDataEx() method is
-//   called to retrieve metadata indicating the hashing algorithm and salt that
-//   were used to generate the key for this user's cryptohome and the key is
-//   transformed accordingly before calling MountEx().
-void StartMount(const base::WeakPtr<AuthAttemptState>& attempt,
-                scoped_refptr<CryptohomeAuthenticator> resolver,
-                bool ephemeral,
-                bool create_if_nonexistent) {
-  chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker(
-      "CryptohomeMount-Start", false);
-
-  if (attempt->user_context->GetKey()->GetKeyType() !=
-      Key::KEY_TYPE_PASSWORD_PLAIN) {
-    DoMount(attempt, resolver, ephemeral, create_if_nonexistent);
-    return;
-  }
-
-  user_data_auth::GetKeyDataRequest request;
-  *request.mutable_account_id() =
-      cryptohome::CreateAccountIdentifierFromAccountId(
-          attempt->user_context->GetAccountId());
-  // Calling mutable_authorization_request() to ensure
-  // has_authorization_request() would return true.
-  request.mutable_authorization_request();
-  request.mutable_key()->mutable_data()->set_label(kCryptohomeGaiaKeyLabel);
-  UserDataAuthClient::Get()->GetKeyData(
-      request, base::BindOnce(&OnGetKeyData, attempt, resolver, ephemeral,
-                              create_if_nonexistent));
-}
-
-// Calls cryptohome's mount method for guest and also get the user hash from
-// cryptohome.
-void MountGuestAndGetHash(const base::WeakPtr<AuthAttemptState>& attempt,
-                          scoped_refptr<CryptohomeAuthenticator> resolver) {
-  chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker(
-      "CryptohomeMountGuest-Start", false);
-  attempt->UsernameHashRequested();
-
-  user_data_auth::MountRequest guest_mount_request;
-  guest_mount_request.set_guest_mount(true);
-  UserDataAuthClient::Get()->Mount(
-      guest_mount_request,
-      base::BindOnce(&OnReplyMethod<user_data_auth::MountReply>, attempt,
-                     resolver, "CryptohomeMountGuest-End"));
-
-  user_data_auth::GetSanitizedUsernameRequest sanitized_username_request;
-  sanitized_username_request.set_username(
-      cryptohome::CreateAccountIdentifierFromAccountId(
-          attempt->user_context->GetAccountId())
-          .account_id());
-  CryptohomeMiscClient::Get()->GetSanitizedUsername(
-      sanitized_username_request,
-      base::BindOnce(&OnGetSanitizedUsername,
-                     base::BindOnce(&TriggerResolveHash, attempt, resolver)));
-}
-
-// Calls cryptohome's MountEx method with the public_mount option.
-void MountPublic(const base::WeakPtr<AuthAttemptState>& attempt,
-                 scoped_refptr<CryptohomeAuthenticator> resolver,
-                 bool force_dircrypto_if_available) {
-  user_data_auth::MountRequest mount;
-  if (force_dircrypto_if_available)
-    mount.set_force_dircrypto_if_available(true);
-  mount.set_public_mount(true);
-  // Set the request to create a new homedir when missing.
-  cryptohome::KeyDefinitionToKey(
-      cryptohome::KeyDefinition::CreateForPassword(
-          std::string(), KeyLabel(kCryptohomePublicMountLabel),
-          cryptohome::PRIV_DEFAULT),
-      mount.mutable_create()->add_keys());
-
-  // For public mounts, authorization secret is filled by cryptohomed, hence it
-  // is left empty. Authentication's key label is also set to an empty string,
-  // which is a wildcard allowing any key to match to allow cryptohomes created
-  // in a legacy way. (See comments in DoMount.)
-  *mount.mutable_account() = cryptohome::CreateAccountIdentifierFromAccountId(
-      attempt->user_context->GetAccountId());
-  // Calling mutable_authorization() to ensure has_authorization() would return
-  // true.
-  mount.mutable_authorization();
-  UserDataAuthClient::Get()->Mount(mount,
-                                   base::BindOnce(&OnMount, attempt, resolver));
-}
-
-// Calls cryptohome's key migration method.
-void Migrate(const base::WeakPtr<AuthAttemptState>& attempt,
-             scoped_refptr<CryptohomeAuthenticator> resolver,
-             bool passing_old_hash,
-             const std::string& old_password,
-             const std::string& system_salt) {
-  chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker(
-      "CryptohomeMigrate-Start", false);
-
-  cryptohome::AccountIdentifier account_id =
-      cryptohome::CreateAccountIdentifierFromAccountId(
-          attempt->user_context->GetAccountId());
-
-  cryptohome::AuthorizationRequest auth_request;
-  user_data_auth::MigrateKeyRequest migrate_request;
-  // TODO(bartfab): Retrieve the hashing algorithm and salt to use for |old_key|
-  // from cryptohomed.
-  std::unique_ptr<Key> old_key =
-      TransformKeyIfNeeded(Key(old_password), system_salt);
-  std::unique_ptr<Key> new_key =
-      TransformKeyIfNeeded(*attempt->user_context->GetKey(), system_salt);
-  if (passing_old_hash) {
-    auth_request.mutable_key()->set_secret(old_key->GetSecret());
-    migrate_request.set_secret(new_key->GetSecret());
-  } else {
-    auth_request.mutable_key()->set_secret(new_key->GetSecret());
-    migrate_request.set_secret(old_key->GetSecret());
-  }
-
-  *migrate_request.mutable_account_id() = account_id;
-  *migrate_request.mutable_authorization_request() = auth_request;
-  UserDataAuthClient::Get()->MigrateKey(
-      migrate_request,
-      base::BindOnce(&OnReplyMethod<user_data_auth::MigrateKeyReply>, attempt,
-                     resolver, "CryptohomeMigrate-End"));
-}
-
-// Calls cryptohome's remove method.
-void Remove(const base::WeakPtr<AuthAttemptState>& attempt,
-            scoped_refptr<CryptohomeAuthenticator> resolver) {
-  chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker(
-      "CryptohomeRemove-Start", false);
-
-  cryptohome::AccountIdentifier account_id;
-  account_id.set_account_id(
-      cryptohome::Identification(attempt->user_context->GetAccountId()).id());
-
-  user_data_auth::RemoveRequest req;
-  *req.mutable_identifier() = account_id;
-  UserDataAuthClient::Get()->Remove(
-      req, base::BindOnce(&OnReplyMethod<user_data_auth::RemoveReply>, attempt,
-                          resolver, "CryptohomeRemove-End"));
-}
-
-}  // namespace
-
-CryptohomeAuthenticator::CryptohomeAuthenticator(
-    scoped_refptr<base::SequencedTaskRunner> task_runner,
-    PrefService* local_state,
-    std::unique_ptr<SafeModeDelegate> safe_mode_delegate,
-    AuthStatusConsumer* consumer)
-    : Authenticator(consumer),
-      task_runner_(std::move(task_runner)),
-      local_state_(local_state),
-      safe_mode_delegate_(std::move(safe_mode_delegate)),
-      delayed_login_failure_(AuthFailure::NONE) {}
-
-void CryptohomeAuthenticator::AuthenticateToLogin(
-    std::unique_ptr<UserContext> user_context) {
-  DCHECK(user_context);
-  DCHECK(user_context->GetUserType() == user_manager::USER_TYPE_REGULAR ||
-         user_context->GetUserType() == user_manager::USER_TYPE_CHILD ||
-         user_context->GetUserType() ==
-             user_manager::USER_TYPE_ACTIVE_DIRECTORY);
-  current_state_ = std::make_unique<AuthAttemptState>(std::move(user_context));
-  // Reset the verified flag.
-  owner_is_verified_ = false;
-
-  StartMount(current_state_->AsWeakPtr(),
-             scoped_refptr<CryptohomeAuthenticator>(this),
-             false /* ephemeral */, false /* create_if_nonexistent */);
-}
-
-void CryptohomeAuthenticator::AuthenticateToUnlock(
-    std::unique_ptr<UserContext> user_context) {
-  NOTREACHED() << "Only available in AuthSessionAuthenticator.";
-}
-
-void CryptohomeAuthenticator::CompleteLogin(
-    std::unique_ptr<UserContext> user_context) {
-  DCHECK(user_context);
-  DCHECK(user_context->GetUserType() == user_manager::USER_TYPE_REGULAR ||
-         user_context->GetUserType() == user_manager::USER_TYPE_CHILD ||
-         user_context->GetUserType() ==
-             user_manager::USER_TYPE_ACTIVE_DIRECTORY);
-  current_state_ = std::make_unique<AuthAttemptState>(std::move(user_context));
-
-  // Reset the verified flag.
-  owner_is_verified_ = false;
-  if (local_state_.get()) {
-    user_manager::KnownUser known_user(local_state_);
-    if (!known_user.UserExists(current_state_->user_context->GetAccountId())) {
-      // Save logged in user into local state as early as possible.
-      known_user.SaveKnownUser(current_state_->user_context->GetAccountId());
-    }
-  }
-
-  StartMount(current_state_->AsWeakPtr(),
-             scoped_refptr<CryptohomeAuthenticator>(this),
-             false /* ephemeral */, false /* create_if_nonexistent */);
-
-  // For login completion from extension, we just need to resolve the current
-  // auth attempt state, the rest of OAuth related tasks will be done in
-  // parallel.
-  task_runner_->PostTask(
-      FROM_HERE,
-      base::BindOnce(&CryptohomeAuthenticator::ResolveLoginCompletionStatus,
-                     this));
-}
-
-void CryptohomeAuthenticator::LoginOffTheRecord() {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  current_state_ =
-      std::make_unique<AuthAttemptState>(std::make_unique<UserContext>(
-          user_manager::USER_TYPE_GUEST, user_manager::GuestAccountId()));
-  remove_user_data_on_failure_ = false;
-  ephemeral_mount_attempted_ = true;
-  MountGuestAndGetHash(current_state_->AsWeakPtr(),
-                       scoped_refptr<CryptohomeAuthenticator>(this));
-}
-
-void CryptohomeAuthenticator::LoginAsPublicSession(
-    const UserContext& user_context) {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  DCHECK_EQ(user_manager::USER_TYPE_PUBLIC_ACCOUNT, user_context.GetUserType());
-
-  // Set the cryptohome key label, as cryptohome requires a non-empty label to
-  // be specified for the new mount creation requests, regardless of whether the
-  // request is for a Public Session (which uses an ephemeral mount with an
-  // empty password) or for a normal user.
-  // TODO(crbug.com/826417): Introduce a separate constant for the Public
-  // Session key label.
-  auto new_user_context = std::make_unique<UserContext>(user_context);
-  DCHECK(user_context.GetKey()->GetLabel().empty());
-  new_user_context->GetKey()->SetLabel(kCryptohomeGaiaKeyLabel);
-
-  current_state_ =
-      std::make_unique<AuthAttemptState>(std::move(new_user_context));
-  remove_user_data_on_failure_ = false;
-  ephemeral_mount_attempted_ = true;
-  StartMount(current_state_->AsWeakPtr(),
-             scoped_refptr<CryptohomeAuthenticator>(this), true /* ephemeral */,
-             true /* create_if_nonexistent */);
-}
-
-void CryptohomeAuthenticator::LoginAsKioskAccount(
-    const AccountId& app_account_id) {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  current_state_ =
-      std::make_unique<AuthAttemptState>(std::make_unique<UserContext>(
-          user_manager::USER_TYPE_KIOSK_APP, app_account_id));
-
-  remove_user_data_on_failure_ = true;
-  MountPublic(current_state_->AsWeakPtr(),
-              scoped_refptr<CryptohomeAuthenticator>(this),
-              false);  // force_dircrypto_if_available
-}
-
-void CryptohomeAuthenticator::LoginAsArcKioskAccount(
-    const AccountId& app_account_id) {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-
-  current_state_ =
-      std::make_unique<AuthAttemptState>(std::make_unique<UserContext>(
-          user_manager::USER_TYPE_ARC_KIOSK_APP, app_account_id));
-
-  remove_user_data_on_failure_ = true;
-  MountPublic(current_state_->AsWeakPtr(),
-              scoped_refptr<CryptohomeAuthenticator>(this),
-              true);  // force_dircrypto_if_available
-}
-
-void CryptohomeAuthenticator::LoginAsWebKioskAccount(
-    const AccountId& app_account_id) {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-
-  current_state_ =
-      std::make_unique<AuthAttemptState>(std::make_unique<UserContext>(
-          user_manager::USER_TYPE_WEB_KIOSK_APP, app_account_id));
-
-  remove_user_data_on_failure_ = true;
-  MountPublic(current_state_->AsWeakPtr(),
-              scoped_refptr<CryptohomeAuthenticator>(this),
-              false);  // force_dircrypto_if_available
-}
-
-void CryptohomeAuthenticator::OnAuthSuccess() {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  VLOG(1) << "Login success";
-  // Send notification of success
-  chromeos::LoginEventRecorder::Get()->RecordAuthenticationSuccess();
-  {
-    base::AutoLock for_this_block(success_lock_);
-    already_reported_success_ = true;
-  }
-  if (consumer_)
-    consumer_->OnAuthSuccess(*current_state_->user_context);
-}
-
-void CryptohomeAuthenticator::OnOffTheRecordAuthSuccess() {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  chromeos::LoginEventRecorder::Get()->RecordAuthenticationSuccess();
-  if (consumer_)
-    consumer_->OnOffTheRecordAuthSuccess();
-}
-
-void CryptohomeAuthenticator::OnPasswordChangeDetected() {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  if (consumer_)
-    consumer_->OnPasswordChangeDetected(*current_state_->user_context);
-}
-
-void CryptohomeAuthenticator::OnOldEncryptionDetected(
-    bool has_incomplete_migration) {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  if (consumer_) {
-    consumer_->OnOldEncryptionDetected(*current_state_->user_context,
-                                       has_incomplete_migration);
-  }
-}
-
-// Callback invoked when UnmountEx returns.
-void CryptohomeAuthenticator::OnUnmountEx(
-    absl::optional<user_data_auth::UnmountReply> reply) {
-  if (ReplyToMountError(reply) != cryptohome::MOUNT_ERROR_NONE)
-    LOGIN_LOG(ERROR) << "Couldn't unmount user's homedir";
-  OnAuthFailure(AuthFailure(AuthFailure::OWNER_REQUIRED));
-}
-
-void CryptohomeAuthenticator::OnAuthFailure(const AuthFailure& error) {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-
-  // OnAuthFailure will be called again with the same |error|
-  // after the cryptohome has been removed.
-  if (remove_user_data_on_failure_) {
-    delayed_login_failure_ = error;
-    RemoveEncryptedData();
-    return;
-  }
-  chromeos::LoginEventRecorder::Get()->RecordAuthenticationFailure();
-  LOGIN_LOG(ERROR) << "Login failed: " << error.GetErrorString();
-  if (consumer_)
-    consumer_->OnAuthFailure(error);
-}
-
-void CryptohomeAuthenticator::RecoverEncryptedData(
-    std::unique_ptr<UserContext> user_context,
-    const std::string& old_password) {
-  migrate_attempted_ = true;
-  current_state_->ResetCryptohomeStatus();
-  SystemSaltGetter::Get()->GetSystemSalt(base::BindOnce(
-      &Migrate, current_state_->AsWeakPtr(),
-      scoped_refptr<CryptohomeAuthenticator>(this), true, old_password));
-}
-
-void CryptohomeAuthenticator::RemoveEncryptedData() {
-  remove_attempted_ = true;
-  current_state_->ResetCryptohomeStatus();
-  task_runner_->PostTask(
-      FROM_HERE, base::BindOnce(&Remove, current_state_->AsWeakPtr(),
-                                scoped_refptr<CryptohomeAuthenticator>(this)));
-}
-
-void CryptohomeAuthenticator::ResyncEncryptedData(
-    std::unique_ptr<UserContext> user_context) {
-  resync_attempted_ = true;
-  current_state_->ResetCryptohomeStatus();
-  task_runner_->PostTask(
-      FROM_HERE, base::BindOnce(&Remove, current_state_->AsWeakPtr(),
-                                scoped_refptr<CryptohomeAuthenticator>(this)));
-}
-
-bool CryptohomeAuthenticator::VerifyOwner() {
-  if (owner_is_verified_)
-    return true;
-  // Check if policy data is fine and continue in safe mode if needed.
-  if (!safe_mode_delegate_->IsSafeMode()) {
-    // Now we can continue with the login and report mount success.
-    user_can_login_ = true;
-    owner_is_verified_ = true;
-    return true;
-  }
-
-  safe_mode_delegate_->CheckSafeModeOwnership(
-      current_state_->user_context->GetUserIDHash(),
-      base::BindOnce(&CryptohomeAuthenticator::OnOwnershipChecked, this));
-  return false;
-}
-
-void CryptohomeAuthenticator::OnOwnershipChecked(bool is_owner) {
-  // Now we can check if this user is the owner.
-  user_can_login_ = is_owner;
-  owner_is_verified_ = true;
-  Resolve();
-}
-
-void CryptohomeAuthenticator::Resolve() {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  bool create_if_nonexistent = false;
-  CryptohomeAuthenticator::AuthState state = ResolveState();
-  VLOG(1) << "Resolved state to " << state << " (" << AuthStateToString(state)
-          << ")";
-  switch (state) {
-    case CONTINUE:
-    case POSSIBLE_PW_CHANGE:
-    case NO_MOUNT:
-      // These are intermediate states; we need more info from a request that
-      // is still pending.
-      break;
-    case FAILED_MOUNT:
-      // In this case, whether login succeeded or not, we can't log
-      // the user in because their data is horked.  So, override with
-      // the appropriate failure.
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnAuthFailure, this,
-                         AuthFailure(AuthFailure::COULD_NOT_MOUNT_CRYPTOHOME)));
-      break;
-    case FAILED_REMOVE:
-      // In this case, we tried to remove the user's old cryptohome at their
-      // request, and the remove failed.
-      remove_user_data_on_failure_ = false;
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnAuthFailure, this,
-                         AuthFailure(AuthFailure::DATA_REMOVAL_FAILED)));
-      break;
-    case FAILED_TMPFS:
-      // In this case, we tried to mount a tmpfs for guest and failed.
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnAuthFailure, this,
-                         AuthFailure(AuthFailure::COULD_NOT_MOUNT_TMPFS)));
-      break;
-    case FAILED_TPM:
-      // In this case, we tried to create/mount cryptohome and failed
-      // because of the critical TPM error.
-      // Chrome will notify user and request reboot.
-      task_runner_->PostTask(
-          FROM_HERE, base::BindOnce(&CryptohomeAuthenticator::OnAuthFailure,
-                                    this, AuthFailure(AuthFailure::TPM_ERROR)));
-      break;
-    case FAILED_USERNAME_HASH:
-      // In this case, we failed the GetSanitizedUsername request to
-      // cryptohomed. This can happen for any login attempt.
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnAuthFailure, this,
-                         AuthFailure(AuthFailure::USERNAME_HASH_FAILED)));
-      break;
-    case REMOVED_DATA_AFTER_FAILURE:
-      remove_user_data_on_failure_ = false;
-      task_runner_->PostTask(
-          FROM_HERE, base::BindOnce(&CryptohomeAuthenticator::OnAuthFailure,
-                                    this, delayed_login_failure_));
-      break;
-    case CREATE_NEW:
-      create_if_nonexistent = true;
-      [[fallthrough]];
-    case RECOVER_MOUNT:
-      current_state_->ResetCryptohomeStatus();
-      StartMount(current_state_->AsWeakPtr(),
-                 scoped_refptr<CryptohomeAuthenticator>(this),
-                 false /*ephemeral*/, create_if_nonexistent);
-      break;
-    case NEED_OLD_PW:
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnPasswordChangeDetected,
-                         this));
-      break;
-    case ONLINE_FAILED:
-    case NEED_NEW_PW:
-    case HAVE_NEW_PW:
-    case UNLOCK:
-    case LOGIN_FAILED:
-      NOTREACHED() << "Using obsolete ClientLogin code path.";
-      break;
-    case OFFLINE_LOGIN:
-      VLOG(2) << "Offline login";
-      [[fallthrough]];
-    case ONLINE_LOGIN:
-      VLOG(2) << "Online login";
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnAuthSuccess, this));
-      break;
-    case GUEST_LOGIN:
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnOffTheRecordAuthSuccess,
-                         this));
-      break;
-    case KIOSK_ACCOUNT_LOGIN:
-    case PUBLIC_ACCOUNT_LOGIN:
-      current_state_->user_context->SetIsUsingOAuth(false);
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnAuthSuccess, this));
-      break;
-    case OWNER_REQUIRED: {
-      current_state_->ResetCryptohomeStatus();
-      UserDataAuthClient::Get()->Unmount(
-          user_data_auth::UnmountRequest(),
-          base::BindOnce(&CryptohomeAuthenticator::OnUnmountEx, this));
-      break;
-    }
-    case FAILED_OLD_ENCRYPTION:
-    case FAILED_PREVIOUS_MIGRATION_INCOMPLETE:
-      // In this case, we tried to create/mount cryptohome and failed
-      // because the file system is encrypted in old format.
-      // Chrome will show a screen which asks user to migrate the encryption.
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnOldEncryptionDetected,
-                         this, state == FAILED_PREVIOUS_MIGRATION_INCOMPLETE));
-      break;
-    case OFFLINE_NO_MOUNT:
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnAuthFailure, this,
-                         AuthFailure(AuthFailure::MISSING_CRYPTOHOME)));
-      break;
-    case TPM_UPDATE_REQUIRED:
-      current_state_->ResetCryptohomeStatus();
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnAuthFailure, this,
-                         AuthFailure(AuthFailure::TPM_UPDATE_REQUIRED)));
-      break;
-    case OFFLINE_MOUNT_UNRECOVERABLE:
-      task_runner_->PostTask(
-          FROM_HERE,
-          base::BindOnce(&CryptohomeAuthenticator::OnAuthFailure, this,
-                         AuthFailure(AuthFailure::UNRECOVERABLE_CRYPTOHOME)));
-      break;
-    default:
-      NOTREACHED();
-      break;
-  }
-}
-
-CryptohomeAuthenticator::~CryptohomeAuthenticator() = default;
-
-CryptohomeAuthenticator::AuthState CryptohomeAuthenticator::ResolveState() {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  // If we haven't mounted the user's home dir yet or
-  // haven't got sanitized username value, we can't be done.
-  // We never get past here if any of these two cryptohome ops is still pending.
-  // This is an important invariant.
-  if (!current_state_->cryptohome_complete() ||
-      !current_state_->username_hash_obtained()) {
-    return CONTINUE;
-  }
-
-  AuthState state = CONTINUE;
-
-  if (current_state_->cryptohome_code() == cryptohome::MOUNT_ERROR_NONE &&
-      current_state_->username_hash_valid()) {
-    state = ResolveCryptohomeSuccessState();
-  } else {
-    state = ResolveCryptohomeFailureState();
-    LOGIN_LOG(ERROR) << "Cryptohome failure: "
-                     << "state(AuthState)=" << state
-                     << ", code(cryptohome::MountError)="
-                     << current_state_->cryptohome_code();
-  }
-
-  DCHECK(current_state_->cryptohome_complete());  // Ensure invariant holds.
-  migrate_attempted_ = false;
-  remove_attempted_ = false;
-  resync_attempted_ = false;
-  ephemeral_mount_attempted_ = false;
-
-  if (state != POSSIBLE_PW_CHANGE && state != NO_MOUNT &&
-      state != OFFLINE_LOGIN)
-    return state;
-
-  if (current_state_->online_complete()) {
-    // Online attempt succeeded as well, so combine the results.
-    return ResolveOnlineSuccessState(state);
-  }
-  // if online isn't complete yet, just return the offline result.
-  return state;
-}
-
-CryptohomeAuthenticator::AuthState
-CryptohomeAuthenticator::ResolveCryptohomeFailureState() {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  if (remove_attempted_ || resync_attempted_)
-    return FAILED_REMOVE;
-  if (ephemeral_mount_attempted_)
-    return FAILED_TMPFS;
-  if (migrate_attempted_)
-    return NEED_OLD_PW;
-
-  if (current_state_->cryptohome_code() ==
-      cryptohome::MOUNT_ERROR_TPM_NEEDS_REBOOT) {
-    // Critical TPM error detected, reboot needed.
-    return FAILED_TPM;
-  }
-
-  if (current_state_->cryptohome_code() ==
-      cryptohome::MOUNT_ERROR_OLD_ENCRYPTION) {
-    return FAILED_OLD_ENCRYPTION;
-  }
-  if (current_state_->cryptohome_code() ==
-      cryptohome::MOUNT_ERROR_PREVIOUS_MIGRATION_INCOMPLETE) {
-    return FAILED_PREVIOUS_MIGRATION_INCOMPLETE;
-  }
-  if (current_state_->cryptohome_code() ==
-      cryptohome::MOUNT_ERROR_TPM_UPDATE_REQUIRED) {
-    return TPM_UPDATE_REQUIRED;
-  }
-
-  if (current_state_->cryptohome_code() ==
-      cryptohome::MOUNT_ERROR_VAULT_UNRECOVERABLE) {
-    // Surface up if the mount attempt failed because the vault is
-    // unrecoverable.
-    return OFFLINE_MOUNT_UNRECOVERABLE;
-  }
-
-  // Return intermediate states in the following case:
-  // when there is an online result to use;
-  // This is the case after user finishes Gaia login;
-  if (current_state_->online_complete()) {
-    if (current_state_->cryptohome_code() ==
-        cryptohome::MOUNT_ERROR_KEY_FAILURE) {
-      // If we tried a mount but they used the wrong key, we may need to
-      // ask the user for their old password.  We'll only know once we've
-      // done the online check.
-      return POSSIBLE_PW_CHANGE;
-    }
-    if (current_state_->cryptohome_code() ==
-        cryptohome::MOUNT_ERROR_USER_DOES_NOT_EXIST) {
-      // If we tried a mount but the user did not exist, then we should wait
-      // for online login to succeed and try again with the "create" flag set.
-      return NO_MOUNT;
-    }
-  } else if (current_state_->cryptohome_code() ==
-             cryptohome::MOUNT_ERROR_USER_DOES_NOT_EXIST) {
-    // If we tried a mount but the user did not exist in the offline flow,
-    // surface this as an error.
-    return OFFLINE_NO_MOUNT;
-  }
-
-  if (!current_state_->username_hash_valid())
-    return FAILED_USERNAME_HASH;
-
-  return FAILED_MOUNT;
-}
-
-CryptohomeAuthenticator::AuthState
-CryptohomeAuthenticator::ResolveCryptohomeSuccessState() {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  if (resync_attempted_)
-    return CREATE_NEW;
-  if (remove_attempted_)
-    return REMOVED_DATA_AFTER_FAILURE;
-  if (migrate_attempted_)
-    return RECOVER_MOUNT;
-
-  const user_manager::UserType user_type =
-      current_state_->user_context->GetUserType();
-  if (user_type == user_manager::USER_TYPE_GUEST)
-    return GUEST_LOGIN;
-  if (user_type == user_manager::USER_TYPE_PUBLIC_ACCOUNT)
-    return PUBLIC_ACCOUNT_LOGIN;
-  if (user_type == user_manager::USER_TYPE_KIOSK_APP)
-    return KIOSK_ACCOUNT_LOGIN;
-
-  if (!VerifyOwner())
-    return CONTINUE;
-  return user_can_login_ ? OFFLINE_LOGIN : OWNER_REQUIRED;
-}
-
-CryptohomeAuthenticator::AuthState
-CryptohomeAuthenticator::ResolveOnlineSuccessState(
-    CryptohomeAuthenticator::AuthState offline_state) {
-  DCHECK(task_runner_->RunsTasksInCurrentSequence());
-  switch (offline_state) {
-    case POSSIBLE_PW_CHANGE:
-      return NEED_OLD_PW;
-    case NO_MOUNT:
-      return CREATE_NEW;
-    case OFFLINE_LOGIN:
-      return ONLINE_LOGIN;
-    default:
-      NOTREACHED();
-      return offline_state;
-  }
-}
-
-void CryptohomeAuthenticator::ResolveLoginCompletionStatus() {
-  // Shortcut online state resolution process.
-  current_state_->RecordOnlineLoginComplete();
-  Resolve();
-}
-
-void CryptohomeAuthenticator::SetOwnerState(bool owner_check_finished,
-                                            bool check_result) {
-  owner_is_verified_ = owner_check_finished;
-  user_can_login_ = check_result;
-}
-
-}  // namespace ash
diff --git a/chromeos/ash/components/login/auth/cryptohome_authenticator.h b/chromeos/ash/components/login/auth/cryptohome_authenticator.h
deleted file mode 100644
index 91e200af1..0000000
--- a/chromeos/ash/components/login/auth/cryptohome_authenticator.h
+++ /dev/null
@@ -1,270 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROMEOS_ASH_COMPONENTS_LOGIN_AUTH_CRYPTOHOME_AUTHENTICATOR_H_
-#define CHROMEOS_ASH_COMPONENTS_LOGIN_AUTH_CRYPTOHOME_AUTHENTICATOR_H_
-
-#include <memory>
-#include <string>
-
-#include "base/compiler_specific.h"
-#include "base/component_export.h"
-#include "base/gtest_prod_util.h"
-#include "base/memory/raw_ptr.h"
-#include "base/synchronization/lock.h"
-#include "base/task/sequenced_task_runner.h"
-#include "chromeos/ash/components/dbus/cryptohome/UserDataAuth.pb.h"
-#include "chromeos/ash/components/login/auth/auth_attempt_state.h"
-#include "chromeos/ash/components/login/auth/authenticator.h"
-#include "chromeos/ash/components/login/auth/public/auth_failure.h"
-#include "chromeos/ash/components/login/auth/safe_mode_delegate.h"
-#include "chromeos/ash/components/login/auth/test_attempt_state.h"
-#include "google_apis/gaia/gaia_auth_consumer.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-
-class AuthFailure;
-class PrefService;
-
-namespace ash {
-
-class AuthStatusConsumer;
-class CryptohomeAuthenticatorTest;
-
-// Authenticates a Chromium OS user against cryptohome.
-// Relies on the fact that online authentications has been already performed
-// (i.e. using_oauth_ is true).
-//
-// At a high, level, here's what happens:
-// AuthenticateToLogin() calls a Cryptohome's method to perform offline login.
-// Results are stored in a AuthAttemptState owned by CryptohomeAuthenticator
-// and then call Resolve().  Resolve() will attempt to
-// determine which AuthState we're in, based on the info at hand.
-// It then triggers further action based on the calculated AuthState; this
-// further action might include calling back the passed-in AuthStatusConsumer
-// to signal that login succeeded or failed, waiting for more outstanding
-// operations to complete, or triggering some more Cryptohome method calls.
-//
-// Typical flows
-// -------------
-// Add new user: CONTINUE > CONTINUE > CREATE_NEW > CONTINUE > ONLINE_LOGIN
-// Login as existing user: CONTINUE > OFFLINE_LOGIN
-// Login as existing user (failure): CONTINUE > FAILED_MOUNT
-// Change password detected:
-//   GAIA online ok: CONTINUE > CONTINUE > NEED_OLD_PW
-//     Recreate: CREATE_NEW > CONTINUE > ONLINE_LOGIN
-//     Old password failure: NEED_OLD_PW
-//     Old password ok: RECOVER_MOUNT > CONTINUE > ONLINE_LOGIN
-//
-class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_LOGIN_AUTH)
-    CryptohomeAuthenticator : public Authenticator {
- public:
-  enum AuthState {
-    CONTINUE = 0,            // State indeterminate; try again with more info.
-    NO_MOUNT = 1,            // Cryptohome doesn't exist yet.
-    FAILED_MOUNT = 2,        // Failed to mount existing cryptohome.
-    FAILED_REMOVE = 3,       // Failed to remove existing cryptohome.
-    FAILED_TMPFS = 4,        // Failed to mount tmpfs for guest user.
-    FAILED_TPM = 5,          // Failed to mount/create cryptohome, TPM error.
-    CREATE_NEW = 6,          // Need to create cryptohome for a new user.
-    RECOVER_MOUNT = 7,       // After RecoverEncryptedData, mount cryptohome.
-    POSSIBLE_PW_CHANGE = 8,  // Offline login failed, user may have changed pw.
-    NEED_NEW_PW = 9,         // Obsolete (ClientLogin): user changed pw,
-                             // we have the old one.
-    NEED_OLD_PW = 10,        // User changed pw, and we have the new one
-                             // (GAIA auth is OK).
-    HAVE_NEW_PW = 11,        // Obsolete (ClientLogin): We have verified new pw,
-                             // time to migrate key.
-    OFFLINE_LOGIN = 12,      // Login succeeded offline.
-    ONLINE_LOGIN = 13,       // Offline and online login succeeded.
-    UNLOCK = 14,             // Obsolete: Screen unlock succeeded.
-    ONLINE_FAILED = 15,      // Obsolete (ClientLogin): Online login disallowed,
-                             // but offline succeeded.
-    GUEST_LOGIN = 16,        // Logged in guest mode.
-    PUBLIC_ACCOUNT_LOGIN = 17,  // Logged into a public account.
-    // SUPERVISED_USER_LOGIN_DEPRECATED = 18,
-    LOGIN_FAILED = 19,                // Obsolete: Login denied.
-    OWNER_REQUIRED = 20,              // Login is restricted to the owner only.
-    FAILED_USERNAME_HASH = 21,        // Failed GetSanitizedUsername request.
-    KIOSK_ACCOUNT_LOGIN = 22,         // Logged into a kiosk account.
-    REMOVED_DATA_AFTER_FAILURE = 23,  // Successfully removed the user's
-                                      // cryptohome after a login failure.
-    FAILED_OLD_ENCRYPTION = 24,       // Login failed, cryptohome is encrypted
-                                      // in old format.
-    FAILED_PREVIOUS_MIGRATION_INCOMPLETE = 25,  // Login failed, cryptohome is
-                                                // partially encrypted in old
-                                                // format.
-    OFFLINE_NO_MOUNT = 26,  // Offline login failed due to missing cryptohome.
-    TPM_UPDATE_REQUIRED = 27,          // TPM firmware update is required.
-    OFFLINE_MOUNT_UNRECOVERABLE = 28,  // Offline login failed due to corrupted
-                                       // cryptohome.
-  };
-
-  CryptohomeAuthenticator(scoped_refptr<base::SequencedTaskRunner> task_runner,
-                          PrefService* local_state,
-                          std::unique_ptr<SafeModeDelegate> safe_mode_delegate,
-                          AuthStatusConsumer* consumer);
-
-  CryptohomeAuthenticator(const CryptohomeAuthenticator&) = delete;
-  CryptohomeAuthenticator& operator=(const CryptohomeAuthenticator&) = delete;
-
-  // Authenticator overrides.
-  void CompleteLogin(std::unique_ptr<UserContext> user_context) override;
-
-  // Given |user_context|, this method attempts to authenticate to your
-  // Chrome OS device. As soon as we have successfully mounted the encrypted
-  // home directory for the user, we will call consumer_->OnAuthSuccess()
-  // with the username.
-  // Upon failure to login consumer_->OnAuthFailure() is called
-  // with an error message.
-  void AuthenticateToLogin(std::unique_ptr<UserContext> user_context) override;
-
-  // Initiates incognito ("browse without signing in") login.
-  // Mounts tmpfs and notifies consumer on the success/failure.
-  void LoginOffTheRecord() override;
-
-  // Initiates login into a public session.
-  // Mounts an ephemeral cryptohome and notifies consumer on the
-  // success/failure.
-  void LoginAsPublicSession(const UserContext& user_context) override;
-
-  // Initiates login into kiosk mode account identified by |app_account_id|.
-  // The |app_account_id| is a generated account id for the account.
-  // So called Public mount is used to mount cryptohome.
-  void LoginAsKioskAccount(const AccountId& app_account_id) override;
-
-  // Initiates login into the ARC kiosk mode account identified by
-  // |app_account_id|.
-  // Mounts a public cryptohome, which will be ephemeral if the
-  // |DeviceEphemeralUsersEnabled| policy is enabled and non-ephemeral
-  // otherwise.
-  void LoginAsArcKioskAccount(const AccountId& app_account_id) override;
-
-  // Initiates login into the web kiosk mode account identified by
-  // |app_account_id|.
-  // Mounts a public cryptohome, which will be ephemeral if the
-  // |DeviceEphemeralUsersEnabled| policy is enabled and non-ephemeral
-  // otherwise.
-  void LoginAsWebKioskAccount(const AccountId& app_account_id) override;
-
-  // These methods must be called on the UI thread, as they make DBus calls
-  // and also call back to the login UI.
-  void OnAuthSuccess() override;
-  void OnAuthFailure(const AuthFailure& error) override;
-  void RecoverEncryptedData(std::unique_ptr<UserContext> user_context,
-                            const std::string& old_password) override;
-  void ResyncEncryptedData(std::unique_ptr<UserContext> user_context) override;
-
-  // Called after UnmountEx finishes.
-  void OnUnmountEx(absl::optional<user_data_auth::UnmountReply> reply);
-
-  // Attempts to make a decision and call back |consumer_| based on
-  // the state we have gathered at the time of call.  If a decision
-  // can't be made, defers until the next time this is called.
-  // When a decision is made, will call back to |consumer_| on the UI thread.
-  //
-  // Must be called on the UI thread.
-  void Resolve();
-
-  void OnOffTheRecordAuthSuccess();
-  void OnPasswordChangeDetected();
-  void OnOldEncryptionDetected(bool has_incomplete_migration);
-
-  void AuthenticateToUnlock(std::unique_ptr<UserContext> user_context) override;
-
- protected:
-  ~CryptohomeAuthenticator() override;
-
- private:
-  friend class CryptohomeAuthenticatorTest;
-  FRIEND_TEST_ALL_PREFIXES(CryptohomeAuthenticatorTest,
-                           ResolveOwnerNeededDirectFailedMount);
-  FRIEND_TEST_ALL_PREFIXES(CryptohomeAuthenticatorTest,
-                           ResolveOwnerNeededMount);
-  FRIEND_TEST_ALL_PREFIXES(CryptohomeAuthenticatorTest,
-                           ResolveOwnerNeededFailedMount);
-
-  // Removes the cryptohome of the user.
-  void RemoveEncryptedData();
-
-  // Returns the AuthState we're in, given the status info we have at
-  // the time of call.
-  // Must be called on the IO thread.
-  AuthState ResolveState();
-
-  // Helper for ResolveState().
-  // Given that some cryptohome operation has failed, determine which of the
-  // possible failure states we're in.
-  // Must be called on the IO thread.
-  AuthState ResolveCryptohomeFailureState();
-
-  // Helper for ResolveState().
-  // Given that some cryptohome operation has succeeded, determine which of
-  // the possible states we're in.
-  // Must be called on the IO thread.
-  AuthState ResolveCryptohomeSuccessState();
-
-  // Helper for ResolveState().
-  // Given that some online auth operation has succeeded, determine which of
-  // the possible success states we're in.
-  // Must be called on the IO thread.
-  AuthState ResolveOnlineSuccessState(AuthState offline_state);
-
-  // Used for testing.
-  void set_attempt_state(TestAttemptState* new_state) {  // takes ownership.
-    current_state_.reset(new_state);
-  }
-
-  // Used for testing to set the expected state of an owner check.
-  void SetOwnerState(bool owner_check_finished, bool check_result);
-
-  // checks if the current mounted home contains the owner case and either
-  // continues or fails the log-in. Used for policy lost mitigation "safe-mode".
-  // Returns true if the owner check has been successful or if it is not needed.
-  bool VerifyOwner();
-
-  // Handles completion of the ownership check and continues login.
-  void OnOwnershipChecked(bool is_owner);
-
-  // Handles completion of cryptohome unmount.
-  void OnUnmount(absl::optional<bool> success);
-
-  // Signal login completion status for cases when a new user is added via
-  // an external authentication provider (i.e. GAIA extension).
-  void ResolveLoginCompletionStatus();
-
-  scoped_refptr<base::SequencedTaskRunner> task_runner_;
-
-  const base::raw_ptr<PrefService> local_state_;
-
-  std::unique_ptr<SafeModeDelegate> safe_mode_delegate_;
-
-  std::unique_ptr<AuthAttemptState> current_state_;
-  bool migrate_attempted_ = false;
-  bool remove_attempted_ = false;
-  bool resync_attempted_ = false;
-  bool ephemeral_mount_attempted_ = false;
-
-  // When the user has changed their password, but gives us the old one, we will
-  // be able to mount their cryptohome, but online authentication will fail.
-  // This allows us to present the same behavior to the caller, regardless
-  // of the order in which we receive these results.
-  bool already_reported_success_ = false;
-  base::Lock success_lock_;  // A lock around |already_reported_success_|.
-
-  // Flags signaling whether the owner verification has been done and the result
-  // of it.
-  bool owner_is_verified_ = false;
-  bool user_can_login_ = false;
-
-  // Flag indicating to delete the user's cryptohome the login fails.
-  bool remove_user_data_on_failure_ = false;
-
-  // When |remove_user_data_on_failure_| is set, we delay calling
-  // consumer_->OnAuthFailure() until we removed the user cryptohome.
-  AuthFailure delayed_login_failure_;
-};
-
-}  // namespace ash
-
-#endif  // CHROMEOS_ASH_COMPONENTS_LOGIN_AUTH_CRYPTOHOME_AUTHENTICATOR_H_
diff --git a/chromeos/ash/components/network/hidden_network_handler.cc b/chromeos/ash/components/network/hidden_network_handler.cc
index 30928152..6bc8c4b 100644
--- a/chromeos/ash/components/network/hidden_network_handler.cc
+++ b/chromeos/ash/components/network/hidden_network_handler.cc
@@ -5,9 +5,11 @@
 #include "chromeos/ash/components/network/hidden_network_handler.h"
 
 #include "ash/constants/ash_features.h"
+#include "ash/constants/ash_switches.h"
+#include "base/command_line.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/timer/timer.h"
-#include "chromeos/ash/components/network/network_configuration_handler.h"
+#include "chromeos/ash/components/network/managed_network_configuration_handler.h"
 #include "chromeos/ash/components/network/network_handler.h"
 #include "chromeos/ash/components/network/network_metadata_store.h"
 #include "chromeos/ash/components/network/network_state_handler.h"
@@ -16,18 +18,29 @@
 namespace ash {
 namespace {
 
+constexpr char kRemoveAttemptResultHistogram[] =
+    "Network.Ash.WiFi.Hidden.RemovalAttempt.Result";
+
 constexpr base::TimeDelta kOneDay = base::Days(1);
+constexpr base::TimeDelta kOneMinute = base::Minutes(1);
 
 void OnRemoveConfigurationSuccess(const std::string guid) {
+  base::UmaHistogramBoolean(kRemoveAttemptResultHistogram, true);
   NET_LOG(EVENT) << "Successfully removed wrongly hidden network: " << guid;
 }
 
 void OnRemoveConfigurationFailure(const std::string guid,
                                   const std::string& error_name) {
+  base::UmaHistogramBoolean(kRemoveAttemptResultHistogram, false);
   NET_LOG(EVENT) << "Failed to remove wrongly hidden network: " << guid
                  << ", error: " << error_name;
 }
 
+bool ShouldForceMigration() {
+  return base::CommandLine::ForCurrentProcess()->HasSwitch(
+      switches::kForceHiddenNetworkMigration);
+}
+
 }  // namespace
 
 HiddenNetworkHandler::HiddenNetworkHandler() {
@@ -35,11 +48,12 @@
 }
 
 void HiddenNetworkHandler::Init(
-    NetworkStateHandler* network_state_handler,
-    NetworkConfigurationHandler* network_configuration_handler) {
+    ManagedNetworkConfigurationHandler* managed_network_configuration_handler,
+    NetworkStateHandler* network_state_handler) {
   DCHECK(NetworkHandler::IsInitialized());
   network_state_handler_ = network_state_handler;
-  network_configuration_handler_ = network_configuration_handler;
+  managed_network_configuration_handler_ =
+      managed_network_configuration_handler;
 }
 
 void HiddenNetworkHandler::SetNetworkMetadataStore(
@@ -52,8 +66,9 @@
     return;
 
   CleanHiddenNetworks();
+
   daily_event_timer_.Start(
-      FROM_HERE, kOneDay,
+      FROM_HERE, ShouldForceMigration() ? kOneMinute : kOneDay,
       base::BindRepeating(&HiddenNetworkHandler::CleanHiddenNetworks,
                           base::Unretained(this)));
 }
@@ -81,14 +96,15 @@
     // existed for more than two weeks.
     if (network_metadata_store_->UpdateAndRetrieveWiFiTimestamp(
             state->guid()) != base::Time::UnixEpoch()) {
-      continue;
+      if (!ShouldForceMigration())
+        continue;
     }
 
     NET_LOG(EVENT) << "Attempting to remove network configuration with GUID: "
                    << state->guid();
 
-    network_configuration_handler_->RemoveConfiguration(
-        state->path(), /*remove_confirmer=*/absl::nullopt,
+    managed_network_configuration_handler_->RemoveConfiguration(
+        state->path(),
         base::BindOnce(&OnRemoveConfigurationSuccess, state->guid()),
         base::BindOnce(&OnRemoveConfigurationFailure, state->guid()));
 
diff --git a/chromeos/ash/components/network/hidden_network_handler.h b/chromeos/ash/components/network/hidden_network_handler.h
index ca85c1a..0f248f20 100644
--- a/chromeos/ash/components/network/hidden_network_handler.h
+++ b/chromeos/ash/components/network/hidden_network_handler.h
@@ -10,8 +10,8 @@
 
 namespace ash {
 
+class ManagedNetworkConfigurationHandler;
 class NetworkStateHandler;
-class NetworkConfigurationHandler;
 class NetworkMetadataStore;
 
 // This class is responsible for removing wrongly hidden networks by
@@ -27,8 +27,9 @@
   HiddenNetworkHandler& operator=(const HiddenNetworkHandler&) = delete;
   ~HiddenNetworkHandler() = default;
 
-  void Init(NetworkStateHandler* network_state_handler,
-            NetworkConfigurationHandler* network_configuration_handler);
+  void Init(
+      ManagedNetworkConfigurationHandler* managed_network_configuration_handler,
+      NetworkStateHandler* network_state_handler);
   // This method will update the NetworkMetadataStore used when querying for
   // metadata about the network, and will result in immediately checking
   // for any hidden and wrongly configured networks.
@@ -40,8 +41,9 @@
   // Timer ensures that wrongly configured networks are searched for on
   // a daily basis.
   base::RepeatingTimer daily_event_timer_;
+  ManagedNetworkConfigurationHandler* managed_network_configuration_handler_ =
+      nullptr;
   NetworkStateHandler* network_state_handler_ = nullptr;
-  NetworkConfigurationHandler* network_configuration_handler_ = nullptr;
   NetworkMetadataStore* network_metadata_store_ = nullptr;
 };
 
diff --git a/chromeos/ash/components/network/hidden_network_handler_unittest.cc b/chromeos/ash/components/network/hidden_network_handler_unittest.cc
index db3337c2..489bc72 100644
--- a/chromeos/ash/components/network/hidden_network_handler_unittest.cc
+++ b/chromeos/ash/components/network/hidden_network_handler_unittest.cc
@@ -5,12 +5,16 @@
 #include "chromeos/ash/components/network/hidden_network_handler.h"
 
 #include "ash/constants/ash_features.h"
+#include "ash/constants/ash_switches.h"
 #include "base/callback.h"
+#include "base/command_line.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
+#include "chromeos/ash/components/dbus/shill/fake_shill_simulated_result.h"
+#include "chromeos/ash/components/dbus/shill/shill_profile_client.h"
 #include "chromeos/ash/components/network/network_configuration_handler.h"
 #include "chromeos/ash/components/network/network_connection_handler.h"
 #include "chromeos/ash/components/network/network_handler.h"
@@ -28,15 +32,20 @@
 
 // kTwoWeeks set to 15 days due to edge case where creating network while
 // internal timer is running results in network creation timestamp not being
-// initialized until the next time the timer fires, eg. the next day.
+// initialized until the next time the timer fires, e.g. the next day.
 constexpr base::TimeDelta kTwoWeeks = base::Days(15);
 constexpr base::TimeDelta kArbitraryTime = base::Days(11686);
+constexpr base::TimeDelta kForcedMigrationTime = base::Minutes(2);
 const char* kWiFiGuid1 = "wifi_guid1";
 const char* kWiFiGuid2 = "wifi_guid2";
 const char* kWiFiGuid3 = "wifi_guid3";
 constexpr char kServicePattern[] =
     R"({"GUID": "%s", "Type": "wifi", "State": "idle", "SSID": "wifi",
     "Strength": 100, "WiFi.HiddenSSID": %s})";
+constexpr char kRemovalAttemptHistogram[] =
+    "Network.Ash.WiFi.Hidden.RemovalAttempt";
+constexpr char kRemovalAttemptResultHistogram[] =
+    "Network.Ash.WiFi.Hidden.RemovalAttempt.Result";
 
 class FakeNetworkConfigurationObserver : public NetworkConfigurationObserver {
  public:
@@ -151,14 +160,22 @@
               network_configuration_observer_.get()->total_removed_count());
   }
 
-  void ExpectHistogramCount(int bucket, int frequency, int total, int sum) {
-    histogram_tester.ExpectBucketCount("Network.Ash.WiFi.Hidden.RemovalAttempt",
-                                       bucket, frequency);
-    histogram_tester.ExpectTotalCount("Network.Ash.WiFi.Hidden.RemovalAttempt",
-                                      total);
-    EXPECT_EQ(
-        histogram_tester.GetTotalSum("Network.Ash.WiFi.Hidden.RemovalAttempt"),
-        sum);
+  void ExpectRemovalAttemptHistogram(int bucket,
+                                     int frequency,
+                                     int total,
+                                     int sum) {
+    histogram_tester.ExpectBucketCount(kRemovalAttemptHistogram, bucket,
+                                       frequency);
+    histogram_tester.ExpectTotalCount(kRemovalAttemptHistogram, total);
+    EXPECT_EQ(histogram_tester.GetTotalSum(kRemovalAttemptHistogram), sum);
+  }
+
+  void ExpectRemovalAttemptResultHistogram(int success_count,
+                                           int failure_count) {
+    histogram_tester.ExpectBucketCount(kRemovalAttemptResultHistogram, true,
+                                       success_count);
+    histogram_tester.ExpectBucketCount(kRemovalAttemptResultHistogram, false,
+                                       failure_count);
   }
 
   void ErrorCallback(const std::string& error_name) {
@@ -167,6 +184,10 @@
 
   base::test::TaskEnvironment* task_environment() { return &task_environment_; }
 
+  ShillProfileClient::TestInterface* profile_test() {
+    return network_handler_test_helper_->profile_test();
+  }
+
  protected:
   base::HistogramTester histogram_tester;
 
@@ -187,15 +208,39 @@
   MaybeRegisterAndInitializePrefs();
 
   const std::string path = CreateDefaultHiddenWiFiNetwork();
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
   task_environment()->FastForwardBy(kTwoWeeks);
   base::RunLoop().RunUntilIdle();
   ExpectNetworksRemoved(/*service_path=*/path,
                         /*total_removed_count=*/1);
-  ExpectHistogramCount(/*bucket=*/1,
-                       /*frequency=*/1,
-                       /*total=*/16,
-                       /*sum=*/1);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/1,
+                                /*total=*/16,
+                                /*sum=*/1);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/1,
+      /*failure_count=*/0);
+}
+
+TEST_F(HiddenNetworkHandlerTest, MeetsAllCriteriaToRemoveForcedMigration) {
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      switches::kForceHiddenNetworkMigration);
+
+  MaybeRegisterAndInitializePrefs();
+
+  const std::string path = CreateDefaultHiddenWiFiNetwork();
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
+  task_environment()->FastForwardBy(kForcedMigrationTime);
+  base::RunLoop().RunUntilIdle();
+  ExpectNetworksRemoved(/*service_path=*/path,
+                        /*total_removed_count=*/1);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/1,
+                                /*total=*/3,
+                                /*sum=*/1);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/1,
+      /*failure_count=*/0);
 }
 
 TEST_F(HiddenNetworkHandlerTest, RemoveTwoNetworks) {
@@ -205,16 +250,19 @@
       /*hidden=*/true, /*add_to_profile=*/true, /*guid=*/kWiFiGuid1);
   const std::string path2 = CreateWiFiNetwork(
       /*hidden=*/true, /*add_to_profile=*/true, /*guid=*/kWiFiGuid2);
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
 
   task_environment()->FastForwardBy(kTwoWeeks);
   base::RunLoop().RunUntilIdle();
   ExpectNetworksRemoved(/*service_path=*/path2,
                         /*total_removed_count=*/2);
-  ExpectHistogramCount(/*bucket=*/2,
-                       /*frequency=*/1,
-                       /*total=*/16,
-                       /*sum=*/2);
+  ExpectRemovalAttemptHistogram(/*bucket=*/2,
+                                /*frequency=*/1,
+                                /*total=*/16,
+                                /*sum=*/2);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/2,
+      /*failure_count=*/0);
 }
 
 TEST_F(HiddenNetworkHandlerTest, ChecksForNetworksToRemoveDaily) {
@@ -233,35 +281,44 @@
   const std::string path3 = CreateWiFiNetwork(
       /*hidden=*/true, /*add_to_profile=*/true, /*guid=*/kWiFiGuid3);
 
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
 
   const base::TimeDelta kTimeSinceFirstNetworkWasCreated =
       kTwoWeeks - base::Days(2);
 
   task_environment()->FastForwardBy(kTimeSinceFirstNetworkWasCreated);
   ExpectNetworksRemoved(/*service_path=*/path1, /*total_removed_count=*/1);
-  ExpectHistogramCount(/*bucket=*/1,
-                       /*frequency=*/1,
-                       /*total=*/16,
-                       /*sum=*/1);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/1,
+                                /*total=*/16,
+                                /*sum=*/1);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/1,
+      /*failure_count=*/0);
 
   task_environment()->FastForwardBy(base::Days(1));
   ExpectNetworksRemoved(/*service_path=*/path2, /*total_removed_count=*/2);
-  ExpectHistogramCount(/*bucket=*/1,
-                       /*frequency=*/2,
-                       /*total=*/17,
-                       /*sum=*/2);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/2,
+                                /*total=*/17,
+                                /*sum=*/2);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/2,
+      /*failure_count=*/0);
 
   task_environment()->FastForwardBy(base::Days(1));
   ExpectNetworksRemoved(/*service_path=*/path3, /*total_removed_count=*/3);
-  ExpectHistogramCount(/*bucket=*/1,
-                       /*frequency=*/3,
-                       /*total=*/18,
-                       /*sum=*/3);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/3,
+                                /*total=*/18,
+                                /*sum=*/3);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/3,
+      /*failure_count=*/0);
 }
 
 TEST_F(HiddenNetworkHandlerTest, NetworksAreCheckedWhenPrefsAreInitialized) {
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
 
   const std::string path = CreateDefaultHiddenWiFiNetwork();
   MaybeRegisterAndInitializePrefs();
@@ -272,85 +329,143 @@
   // immediately check for wrongly configured networks.
   NetworkHandler::Get()->ShutdownPrefServices();
   base::RunLoop().RunUntilIdle();
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
 
   task_environment()->FastForwardBy(kTwoWeeks);
   MaybeRegisterAndInitializePrefs(/*should_register=*/false);
   base::RunLoop().RunUntilIdle();
   ExpectNetworksRemoved(/*service_path=*/path,
                         /*total_removed_count=*/1);
-  ExpectHistogramCount(/*bucket=*/1,
-                       /*frequency=*/1,
-                       /*total=*/2,
-                       /*sum=*/1);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/1,
+                                /*total=*/2,
+                                /*sum=*/1);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/1,
+      /*failure_count=*/0);
 }
 
 TEST_F(HiddenNetworkHandlerTest, LessThanTwoWeeks) {
   MaybeRegisterAndInitializePrefs();
 
   CreateDefaultHiddenWiFiNetwork();
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
   task_environment()->FastForwardBy(kTwoWeeks - base::Hours(5));
   base::RunLoop().RunUntilIdle();
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
-  ExpectHistogramCount(/*bucket=*/1,
-                       /*frequency=*/0,
-                       /*total=*/15,
-                       /*sum=*/0);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/0,
+                                /*total=*/15,
+                                /*sum=*/0);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/0,
+      /*failure_count=*/0);
 }
 
 TEST_F(HiddenNetworkHandlerTest, OnlyRemovesNetworksInCurrentProfile) {
   MaybeRegisterAndInitializePrefs();
 
   CreateWiFiNetwork(true, false, kWiFiGuid1);
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
   task_environment()->FastForwardBy(kTwoWeeks);
   base::RunLoop().RunUntilIdle();
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
-  ExpectHistogramCount(/*bucket=*/1,
-                       /*frequency=*/0,
-                       /*total=*/16,
-                       /*sum=*/0);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/0,
+                                /*total=*/16,
+                                /*sum=*/0);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/0,
+      /*failure_count=*/0);
 }
 
 TEST_F(HiddenNetworkHandlerTest, ConnectedNetworkNotRemoved) {
   MaybeRegisterAndInitializePrefs();
 
   const std::string path = CreateDefaultHiddenWiFiNetwork();
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
   ConnectToNetwork(path);
   task_environment()->FastForwardBy(kTwoWeeks);
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
-  ExpectHistogramCount(/*bucket=*/1,
-                       /*frequency=*/0,
-                       /*total=*/16,
-                       /*sum=*/0);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/0,
+                                /*total=*/16,
+                                /*sum=*/0);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/0,
+      /*failure_count=*/0);
 }
 
 TEST_F(HiddenNetworkHandlerTest, ManagedNetworkNotRemoved) {
   MaybeRegisterAndInitializePrefs();
   const std::string path = CreateDefaultHiddenWiFiNetwork();
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
   MakeNetworkManaged(path);
   task_environment()->FastForwardBy(kTwoWeeks);
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
-  ExpectHistogramCount(/*bucket=*/1,
-                       /*frequency=*/0,
-                       /*total=*/16,
-                       /*sum=*/0);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/0,
+                                /*total=*/16,
+                                /*sum=*/0);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/0,
+      /*failure_count=*/0);
 }
 
 TEST_F(HiddenNetworkHandlerTest, UnhiddenNetworkNotRemoved) {
   MaybeRegisterAndInitializePrefs();
 
   CreateWiFiNetwork(false, true, kWiFiGuid1);
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
   task_environment()->FastForwardBy(kTwoWeeks);
-  ExpectNetworksRemoved(/*service_path=*/"", /*total_removed_count=*/0u);
-  ExpectHistogramCount(/*bucket=*/1,
-                       /*frequency=*/0,
-                       /*total=*/16,
-                       /*sum=*/0);
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/0,
+                                /*total=*/16,
+                                /*sum=*/0);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/0,
+      /*failure_count=*/0);
+}
+
+TEST_F(HiddenNetworkHandlerTest, EmitsCorrectResultHistogram) {
+  MaybeRegisterAndInitializePrefs();
+
+  const std::string path1 = CreateWiFiNetwork(
+      /*hidden=*/true, /*add_to_profile=*/true, /*guid=*/kWiFiGuid1);
+  task_environment()->FastForwardBy(base::Days(1));
+
+  const std::string path2 = CreateWiFiNetwork(
+      /*hidden=*/true, /*add_to_profile=*/true, /*guid=*/kWiFiGuid2);
+  task_environment()->FastForwardBy(base::Days(1));
+
+  ExpectNetworksRemoved(/*service_path=*/std::string(), /*total_removed_count=*/0u);
+
+  const base::TimeDelta kTimeSinceFirstNetworkWasCreated =
+      kTwoWeeks - base::Days(2);
+
+  task_environment()->FastForwardBy(kTimeSinceFirstNetworkWasCreated);
+  ExpectNetworksRemoved(/*service_path=*/path1, /*total_removed_count=*/1);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/1,
+                                /*total=*/16,
+                                /*sum=*/1);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/1,
+      /*failure_count=*/0);
+
+  // Force the attempt to delete the second service to fail.
+  profile_test()->SetSimulateDeleteResult(FakeShillSimulatedResult::kFailure);
+
+  task_environment()->FastForwardBy(base::Days(1));
+  ExpectNetworksRemoved(/*service_path=*/path2, /*total_removed_count=*/2);
+  ExpectRemovalAttemptHistogram(/*bucket=*/1,
+                                /*frequency=*/2,
+                                /*total=*/17,
+                                /*sum=*/2);
+  ExpectRemovalAttemptResultHistogram(
+      /*success_count=*/1,
+      /*failure_count=*/1);
 }
 
 }  // namespace ash
diff --git a/chromeos/ash/components/network/network_handler.cc b/chromeos/ash/components/network/network_handler.cc
index e476057e..2b9226f1 100644
--- a/chromeos/ash/components/network/network_handler.cc
+++ b/chromeos/ash/components/network/network_handler.cc
@@ -132,8 +132,8 @@
       managed_cellular_pref_handler_.get(),
       managed_network_configuration_handler_.get());
   if (base::FeatureList::IsEnabled(features::kHiddenNetworkMigration)) {
-    hidden_network_handler_->Init(network_state_handler_.get(),
-                                  network_configuration_handler_.get());
+    hidden_network_handler_->Init(managed_network_configuration_handler_.get(),
+                                  network_state_handler_.get());
   }
   if (ash::features::IsHotspotEnabled()) {
     hotspot_state_handler_->Init(network_state_handler_.get());
diff --git a/chromeos/ash/components/network/network_state.cc b/chromeos/ash/components/network/network_state.cc
index 0b0a61a..be2d522 100644
--- a/chromeos/ash/components/network/network_state.cc
+++ b/chromeos/ash/components/network/network_state.cc
@@ -70,6 +70,15 @@
     }
     signal_strength_ = signal_strength;
     return true;
+  } else if (key == shill::kWifiSignalStrengthRssiProperty) {
+    int rssi = rssi_;
+    if (!GetIntegerValue(key, value, &rssi))
+      return false;
+    if (rssi == rssi_) {
+      return false;
+    }
+    rssi_ = rssi;
+    return true;
   } else if (key == shill::kStateProperty) {
     std::string connection_state;
     if (!GetStringValue(key, value, &connection_state))
diff --git a/chromeos/ash/components/network/network_state.h b/chromeos/ash/components/network/network_state.h
index 2a0d720..88badbe 100644
--- a/chromeos/ash/components/network/network_state.h
+++ b/chromeos/ash/components/network/network_state.h
@@ -132,6 +132,8 @@
   void set_signal_strength(int signal_strength) {
     signal_strength_ = signal_strength;
   }
+  int16_t rssi() const { return rssi_; }
+  void set_rssi(int16_t rssi) { rssi_ = rssi; }
   const std::string& bssid() const { return bssid_; }
   int frequency() const { return frequency_; }
   bool blocked_by_policy() const { return blocked_by_policy_; }
@@ -342,6 +344,9 @@
   // Wireless properties, used for icons and Connect logic.
   bool connectable_ = false;
   int signal_strength_ = 0;
+  // Default RSSI value when it is unknown.
+  // This value needs to be sync with shill::WiFiService::SignalLevelMin.
+  int16_t rssi_ = std::numeric_limits<int16_t>::min();
   std::string bssid_;
   int frequency_ = 0;
   bool blocked_by_policy_ = false;
diff --git a/chromeos/ash/services/cros_healthd/private/cpp/BUILD.gn b/chromeos/ash/services/cros_healthd/private/cpp/BUILD.gn
index f617f4a..48075a5a 100644
--- a/chromeos/ash/services/cros_healthd/private/cpp/BUILD.gn
+++ b/chromeos/ash/services/cros_healthd/private/cpp/BUILD.gn
@@ -13,6 +13,7 @@
     "data_collector.h",
   ]
   deps = [
+    "//ash:ash",
     "//base",
     "//chromeos/ash/components/mojo_service_manager",
     "//content/public/browser:browser",
diff --git a/chromeos/ash/services/cros_healthd/private/cpp/DEPS b/chromeos/ash/services/cros_healthd/private/cpp/DEPS
index 3e6ae05..7b7ad0a 100644
--- a/chromeos/ash/services/cros_healthd/private/cpp/DEPS
+++ b/chromeos/ash/services/cros_healthd/private/cpp/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
   "+ui/events",
   "+content/public/browser",
+  "+ash"
 ]
 
 specific_include_rules = {
diff --git a/chromeos/ash/services/cros_healthd/private/cpp/data_collector.cc b/chromeos/ash/services/cros_healthd/private/cpp/data_collector.cc
index 2e5e7a1..0757f597 100644
--- a/chromeos/ash/services/cros_healthd/private/cpp/data_collector.cc
+++ b/chromeos/ash/services/cros_healthd/private/cpp/data_collector.cc
@@ -6,6 +6,8 @@
 
 #include <fcntl.h>
 
+#include "ash/display/privacy_screen_controller.h"
+#include "ash/shell.h"
 #include "base/check_op.h"
 #include "base/files/file_enumerator.h"
 #include "base/no_destructor.h"
@@ -35,6 +37,8 @@
 
   // DataCollector::Delegate override.
   std::string GetTouchpadLibraryName() override;
+  bool IsPrivacyScreenSupported() override;
+  bool IsPrivacyScreenManaged() override;
 };
 
 DataCollectorDelegateImpl::DataCollectorDelegateImpl() = default;
@@ -77,6 +81,14 @@
 #endif
 }
 
+bool DataCollectorDelegateImpl::IsPrivacyScreenSupported() {
+  return Shell::Get()->privacy_screen_controller()->IsSupported();
+}
+
+bool DataCollectorDelegateImpl::IsPrivacyScreenManaged() {
+  return Shell::Get()->privacy_screen_controller()->IsManaged();
+}
+
 DataCollectorDelegateImpl* GetDataCollectorDelegate() {
   static base::NoDestructor<DataCollectorDelegateImpl> delegate;
   return delegate.get();
@@ -157,6 +169,21 @@
   std::move(callback).Run(delegate_->GetTouchpadLibraryName());
 }
 
+void DataCollector::SetPrivacyScreenState(
+    bool state,
+    SetPrivacyScreenStateCallback callback) {
+  if (!delegate_->IsPrivacyScreenSupported() ||
+      delegate_->IsPrivacyScreenManaged()) {
+    std::move(callback).Run(false);
+    return;
+  }
+
+  Shell::Get()->privacy_screen_controller()->SetEnabled(
+      state,
+      PrivacyScreenController::ToggleUISurface::kToggleUISurfaceToastButton);
+  std::move(callback).Run(true);
+}
+
 void DataCollector::Request(
     chromeos::mojo_service_manager::mojom::ProcessIdentityPtr identity,
     mojo::ScopedMessagePipeHandle receiver) {
diff --git a/chromeos/ash/services/cros_healthd/private/cpp/data_collector.h b/chromeos/ash/services/cros_healthd/private/cpp/data_collector.h
index 54d1394d..0d464dc 100644
--- a/chromeos/ash/services/cros_healthd/private/cpp/data_collector.h
+++ b/chromeos/ash/services/cros_healthd/private/cpp/data_collector.h
@@ -14,6 +14,8 @@
 
 namespace ash::cros_healthd::internal {
 
+// TODO(b/249182240): Rename interface name to another one. The
+// SetPrivacyScreenState method is conflicted with the interface name.
 class DataCollector
     : public mojom::ChromiumDataCollector,
       public chromeos::mojo_service_manager::mojom::ServiceProvider {
@@ -26,6 +28,10 @@
 
     // Get the touchpad library name.
     virtual std::string GetTouchpadLibraryName() = 0;
+    // Queries if privacy screen is supported.
+    virtual bool IsPrivacyScreenSupported() = 0;
+    // Queries if privacy screen is in managed mode.
+    virtual bool IsPrivacyScreenManaged() = 0;
   };
 
   DataCollector();
@@ -41,6 +47,8 @@
   // mojom::ChromiumDataCollector overrides.
   void GetTouchscreenDevices(GetTouchscreenDevicesCallback callback) override;
   void GetTouchpadLibraryName(GetTouchpadLibraryNameCallback callback) override;
+  void SetPrivacyScreenState(bool state,
+                             SetPrivacyScreenStateCallback callback) override;
 
   // chromeos::mojo_service_manager::mojom::ServiceProvider overrides.
   void Request(
diff --git a/chromeos/ash/services/cros_healthd/private/cpp/data_collector_unittest.cc b/chromeos/ash/services/cros_healthd/private/cpp/data_collector_unittest.cc
index 3ad0f171..8ae3801f 100644
--- a/chromeos/ash/services/cros_healthd/private/cpp/data_collector_unittest.cc
+++ b/chromeos/ash/services/cros_healthd/private/cpp/data_collector_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "chromeos/ash/services/cros_healthd/private/cpp/data_collector.h"
 
+#include "base/functional/callback_forward.h"
 #include "base/notreached.h"
 #include "base/test/bind.h"
 #include "content/public/test/browser_task_environment.h"
@@ -25,6 +26,24 @@
   std::string GetTouchpadLibraryName() override {
     return kFakeTouchpadLibraryName;
   }
+
+  bool IsPrivacyScreenSupported() override { return privacy_screen_supported_; }
+
+  bool IsPrivacyScreenManaged() override { return privacy_screen_managed_; }
+
+  void SetPrivacyScreenAttributes(bool supported,
+                                  bool managed,
+                                  [[maybe_unused]] bool enabled) {
+    privacy_screen_supported_ = supported;
+    privacy_screen_managed_ = managed;
+    // Parameter |enabled| is a no-op situation: whether privacy screen is
+    // enabled is not taken care of in the implementation, but remains tested in
+    // unittests.
+  }
+
+ private:
+  bool privacy_screen_supported_ = false;
+  bool privacy_screen_managed_ = false;
 };
 
 class DataCollectorTest : public testing::Test {
@@ -83,5 +102,59 @@
   run_loop.Run();
 }
 
+// Test that privacy screen set request will be rejected when privacy screen is
+// unsupported.
+TEST_F(DataCollectorTest, RejectPrivacyScreenSetRequestOnUnsupported) {
+  delegate_.SetPrivacyScreenAttributes(/*supported=*/false, /*managed=*/false,
+                                       /*enabled=*/false);
+  remote_->SetPrivacyScreenState(
+      true, base::BindOnce([](bool success) { EXPECT_FALSE(success); }));
+}
+
+// Test that privacy screen set request will be rejected when privacy screen is
+// in managed mode.
+TEST_F(DataCollectorTest, RejectPrivacyScreenSetRequestOnManagedMode) {
+  delegate_.SetPrivacyScreenAttributes(/*supported=*/true, /*managed=*/true,
+                                       /*enabled=*/false);
+  remote_->SetPrivacyScreenState(
+      true, base::BindOnce([](bool success) { EXPECT_FALSE(success); }));
+}
+
+// Test that privacy screen set request will be accepted when privacy screen is
+// on and is to be turned on.
+TEST_F(DataCollectorTest, AcceptPrivacyScreenSetRequestFromOnToOn) {
+  delegate_.SetPrivacyScreenAttributes(/*supported=*/true, /*managed=*/false,
+                                       /*enabled=*/true);
+  remote_->SetPrivacyScreenState(
+      true, base::BindOnce([](bool success) { EXPECT_TRUE(success); }));
+}
+
+// Test that privacy screen set request will be accepted when privacy screen is
+// on and is to be turned off.
+TEST_F(DataCollectorTest, AcceptPrivacyScreenSetRequestFromOnToOff) {
+  delegate_.SetPrivacyScreenAttributes(/*supported=*/true,
+                                       /*managed=*/false, /*enabled=*/true);
+  remote_->SetPrivacyScreenState(
+      false, base::BindOnce([](bool success) { EXPECT_TRUE(success); }));
+}
+
+// Test that privacy screen set request will be accepted when privacy screen is
+// off and is to be turned on.
+TEST_F(DataCollectorTest, AcceptPrivacyScreenSetRequestFromOffToOn) {
+  delegate_.SetPrivacyScreenAttributes(/*supported=*/true,
+                                       /*managed=*/false, /*enabled=*/false);
+  remote_->SetPrivacyScreenState(
+      true, base::BindOnce([](bool success) { EXPECT_TRUE(success); }));
+}
+
+// Test that privacy screen set request will be accepted when privacy screen is
+// off and is to be turned ff.
+TEST_F(DataCollectorTest, AcceptPrivacyScreenSetRequestFromOffToff) {
+  delegate_.SetPrivacyScreenAttributes(/*supported=*/true,
+                                       /*managed=*/false, /*enabled=*/false);
+  remote_->SetPrivacyScreenState(
+      false, base::BindOnce([](bool success) { EXPECT_TRUE(success); }));
+}
+
 }  // namespace
 }  // namespace ash::cros_healthd::internal
diff --git a/chromeos/ash/services/cros_healthd/private/mojom/cros_healthd_internal.mojom b/chromeos/ash/services/cros_healthd/private/mojom/cros_healthd_internal.mojom
index 7f94c35..e9c2ed09 100644
--- a/chromeos/ash/services/cros_healthd/private/mojom/cros_healthd_internal.mojom
+++ b/chromeos/ash/services/cros_healthd/private/mojom/cros_healthd_internal.mojom
@@ -13,13 +13,19 @@
 
 // Collects data from chromium to Healthd.
 //
-// NextMinVersion: 1, NextIndex: 2
+// TODO(b/249182240): Rename interface name to another one. The
+// SetPrivacyScreenState method is conflicted with the interface name.
+//
+// NextMinVersion: 2, NextIndex: 3
 [Stable]
 interface ChromiumDataCollector {
   // Get touchscreen devices info.
   GetTouchscreenDevices@0() => (array<TouchscreenDevice> devices);
   // Get the touchpad library name.
   GetTouchpadLibraryName@1() => (string library_name);
+  // Set privacy screen state. Return true if request is processed and the
+  // privacy screen state is updated, or false if the request is rejected.
+  [MinVersion=1] SetPrivacyScreenState@2(bool state) => (bool success);
 };
 
 // Data of a touch screen device in chromium.
diff --git a/chromeos/components/quick_answers/understanding/intent_generator.cc b/chromeos/components/quick_answers/understanding/intent_generator.cc
index e63e2281..9bbcea3 100644
--- a/chromeos/components/quick_answers/understanding/intent_generator.cc
+++ b/chromeos/components/quick_answers/understanding/intent_generator.cc
@@ -253,6 +253,7 @@
     text_annotation_request->text = request.selected_text;
     text_annotation_request->default_locales =
         QuickAnswersState::Get()->application_locale();
+    text_annotation_request->trigger_dictionary_on_beginner_words = true;
 
     text_classifier_->Annotate(
         std::move(text_annotation_request),
diff --git a/chromeos/strings/chromeos_strings_af.xtb b/chromeos/strings/chromeos_strings_af.xtb
index bff820b..06728556 100644
--- a/chromeos/strings/chromeos_strings_af.xtb
+++ b/chromeos/strings/chromeos_strings_af.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Verskaffertipe</translation>
 <translation id="7882501334836096755">Publieke sleutel</translation>
 <translation id="7890841768028788197">Interne raakskerm</translation>
+<translation id="7915220255123750251">Bestuur netwerk-APN-instellings. APN’e vestig ’n verbinding tussen ’n selnetwerk en die internet.</translation>
 <translation id="7936303884198020182">Geen naambedieners gekry nie</translation>
 <translation id="7942349550061667556">Rooi</translation>
 <translation id="7943235353293548836">Aanhoudende Hou Aktief-interval</translation>
diff --git a/chromeos/strings/chromeos_strings_be.xtb b/chromeos/strings/chromeos_strings_be.xtb
index dfd6544..9c8d683 100644
--- a/chromeos/strings/chromeos_strings_be.xtb
+++ b/chromeos/strings/chromeos_strings_be.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Тып пастаўшчыка</translation>
 <translation id="7882501334836096755">Адкрыты ключ</translation>
 <translation id="7890841768028788197">Убудаваны сэнсарны экран</translation>
+<translation id="7915220255123750251">Кіраванне наладамі сеткавых APN. З дапамогай APN устанаўліваецца падключэнне паміж сотавай сеткай і інтэрнэтам.</translation>
 <translation id="7936303884198020182">Серверы даменных імён не знойдзены</translation>
 <translation id="7942349550061667556">Чырвоны</translation>
 <translation id="7943235353293548836">Пастаянны інтэрвал для паведамлення keepalive</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb
index 42617f9..a1a51d30 100644
--- a/chromeos/strings/chromeos_strings_el.xtb
+++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Τύπος παρόχου</translation>
 <translation id="7882501334836096755">Δημόσιο κλειδί</translation>
 <translation id="7890841768028788197">Ενσωματωμένη οθόνη αφής</translation>
+<translation id="7915220255123750251">Διαχείριση ρυθμίσεων APN δικτύου. Τα APN δημιουργούν μια σύνδεση μεταξύ ενός δικτύου κινητής τηλεφωνίας και του διαδικτύου.</translation>
 <translation id="7936303884198020182">Δεν βρέθηκαν διακομιστές ονομάτων.</translation>
 <translation id="7942349550061667556">Κόκκινο</translation>
 <translation id="7943235353293548836">Χρονικό διάστημα συνεχούς μηνύματος keepalive</translation>
diff --git a/chromeos/strings/chromeos_strings_gl.xtb b/chromeos/strings/chromeos_strings_gl.xtb
index 5fc74a8..1333059 100644
--- a/chromeos/strings/chromeos_strings_gl.xtb
+++ b/chromeos/strings/chromeos_strings_gl.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Tipo de fornecedor</translation>
 <translation id="7882501334836096755">Clave pública</translation>
 <translation id="7890841768028788197">Pantalla táctil integrada</translation>
+<translation id="7915220255123750251">Xestiona a configuración do APN da rede. Os APN establecen unha conexión entre unha rede de telefonía móbil e Internet.</translation>
 <translation id="7936303884198020182">Non se atoparon servidores de nomes</translation>
 <translation id="7942349550061667556">Vermello</translation>
 <translation id="7943235353293548836">Intervalo de conexión persistente</translation>
diff --git a/chromeos/strings/chromeos_strings_hy.xtb b/chromeos/strings/chromeos_strings_hy.xtb
index 76847fc..331cafe 100644
--- a/chromeos/strings/chromeos_strings_hy.xtb
+++ b/chromeos/strings/chromeos_strings_hy.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Մատակարարի տեսակը</translation>
 <translation id="7882501334836096755">Բաց բանալի</translation>
 <translation id="7890841768028788197">Ներքին հպէկրան</translation>
+<translation id="7915220255123750251">Կառավարեք ցանցի APN կարգավորումները։ APN-ները կապ են հաստատում բջջային ցանցի և համացանցի միջև։</translation>
 <translation id="7936303884198020182">DNS սերվերներ չեն գտնվել</translation>
 <translation id="7942349550061667556">Կարմիր</translation>
 <translation id="7943235353293548836">Keep-alive միացումների ստատիկ ինտերվալ</translation>
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb
index 779e0ce..9b210bff 100644
--- a/chromeos/strings/chromeos_strings_kk.xtb
+++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">Провайдер түрі</translation>
 <translation id="7882501334836096755">Ашық кілт</translation>
 <translation id="7890841768028788197">Ендірілген сенсорлық экран</translation>
+<translation id="7915220255123750251">Желінің APN параметрлерін басқарыңыз. APN аттары ұялы желі мен интернет арасында байланыс орнатады.</translation>
 <translation id="7936303884198020182">Атау серверлері табылмады.</translation>
 <translation id="7942349550061667556">Қызыл</translation>
 <translation id="7943235353293548836">Тұрақты keepalive жиілігі</translation>
diff --git a/chromeos/strings/chromeos_strings_mn.xtb b/chromeos/strings/chromeos_strings_mn.xtb
index 6f751b0..6738596 100644
--- a/chromeos/strings/chromeos_strings_mn.xtb
+++ b/chromeos/strings/chromeos_strings_mn.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Нийлүүлэгчийн төрөл</translation>
 <translation id="7882501334836096755">Нийтийн түлхүүр</translation>
 <translation id="7890841768028788197">Дотоод мэдрэмтгий дэлгэц</translation>
+<translation id="7915220255123750251">Сүлжээний APN-н тохиргоог удирдана уу. APN үүрэн холбооны сүлжээ болон интернэтийн хооронд холболт тогтоодог.</translation>
 <translation id="7936303884198020182">DNS олдсонгүй</translation>
 <translation id="7942349550061667556">Улаан</translation>
 <translation id="7943235353293548836">Тогтмол keepalive интервал</translation>
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb
index 9206f52..ac5da00 100644
--- a/chromeos/strings/chromeos_strings_mr.xtb
+++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">प्रदाता प्रकार</translation>
 <translation id="7882501334836096755">सार्वजनिक की</translation>
 <translation id="7890841768028788197">अंतर्गत टचस्क्रीन</translation>
+<translation id="7915220255123750251">नेटवर्क APN सेटिंग्ज व्यवस्थापित करा. APNs ही मोबाइल नेटवर्क आणि इंटरनेट यांदरम्यान कनेक्शन जोडतात.</translation>
 <translation id="7936303884198020182">नेम सर्व्हर आढळले नाहीत</translation>
 <translation id="7942349550061667556">लाल</translation>
 <translation id="7943235353293548836">परसिस्टंट कीपअलाइव्ह इंटर्व्हल</translation>
diff --git a/chromeos/strings/chromeos_strings_nl.xtb b/chromeos/strings/chromeos_strings_nl.xtb
index c93e1736..27c78b8 100644
--- a/chromeos/strings/chromeos_strings_nl.xtb
+++ b/chromeos/strings/chromeos_strings_nl.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Type provider</translation>
 <translation id="7882501334836096755">Openbare sleutel</translation>
 <translation id="7890841768028788197">Intern touchscreen</translation>
+<translation id="7915220255123750251">Beheer de APN-instellingen voor het netwerk. APN's maken verbinding tussen een mobiel netwerk en internet.</translation>
 <translation id="7936303884198020182">Geen naamservers gevonden</translation>
 <translation id="7942349550061667556">Rood</translation>
 <translation id="7943235353293548836">Permanent keepalive-interval</translation>
diff --git a/chromeos/strings/chromeos_strings_or.xtb b/chromeos/strings/chromeos_strings_or.xtb
index e272034..5acf8993 100644
--- a/chromeos/strings/chromeos_strings_or.xtb
+++ b/chromeos/strings/chromeos_strings_or.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">ପ୍ରଦାତା ପ୍ରକାର</translation>
 <translation id="7882501334836096755">ସାର୍ବଜନୀନ କୀ</translation>
 <translation id="7890841768028788197">ଇଣ୍ଟର୍ନଲ ଟଚସ୍କ୍ରିନ</translation>
+<translation id="7915220255123750251">ନେଟୱାର୍କ APN ସେଟିଂସକୁ ପରିଚାଳନା କରନ୍ତୁ। APNଗୁଡ଼ିକ ଏକ ସେଲୁଲାର ନେଟୱାର୍କ ଏବଂ ଇଣ୍ଟରନେଟ ମଧ୍ୟରେ ଏକ କନେକ୍ସନ ତିଆରି କରେ।</translation>
 <translation id="7936303884198020182">କୌଣସି ନେମ୍ ସର୍ଭର୍ ମିଳୁ ନାହିଁ</translation>
 <translation id="7942349550061667556">ନାଲି</translation>
 <translation id="7943235353293548836">ଅବିରତ କିପଆଲାଇଭ୍ ଇଣ୍ଟରଭାଲ୍</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb
index 6ecb6fc..5a9b148 100644
--- a/chromeos/strings/chromeos_strings_pt-PT.xtb
+++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -306,6 +306,7 @@
 <translation id="4044093238444069296">Não é possível contactar o gateway</translation>
 <translation id="4046123991198612571">Faixa seguinte</translation>
 <translation id="404928562651467259">AVISO</translation>
+<translation id="4060260348856573701">Novo APN</translation>
 <translation id="4093865285251893588">Imagem do perfil</translation>
 <translation id="409427325554347132">Guardar detalhes do teste</translation>
 <translation id="4110686435123617899">Selecionar o álbum <ph name="TITLE" /> <ph name="DESC" /></translation>
@@ -609,6 +610,7 @@
 <translation id="6766275201586212568">Resoluções de DNS com falhas</translation>
 <translation id="6768237774506518020">Taxa de falhas de resolução de DNS elevada</translation>
 <translation id="6791471867139427246">cor da luz do teclado</translation>
+<translation id="6793680441750437230">Prima qualquer tecla do teclado. Pode premir até 4 teclas ao mesmo tempo. Prima Alt + Esc para fechar a caixa de diálogo.</translation>
 <translation id="680983167891198932">Chave</translation>
 <translation id="6816797338148849397">Informações disponíveis relacionadas com a sua seleção. Utilize a tecla da seta para cima para aceder.</translation>
 <translation id="6853312040151791195">Velocidade de descarregamento</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb
index d79a70fb6..9fa5b4d1 100644
--- a/chromeos/strings/chromeos_strings_sr-Latn.xtb
+++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Tip dobavljača</translation>
 <translation id="7882501334836096755">Javni ključ</translation>
 <translation id="7890841768028788197">Interni dodirni ekran</translation>
+<translation id="7915220255123750251">Upravljajte podešavanjima naziva pristupne tačke mreže. Nazivi pristupnih tačaka uspostavljaju vezu između mobilne mreže i interneta.</translation>
 <translation id="7936303884198020182">Nije pronađen nijedan server za imena</translation>
 <translation id="7942349550061667556">Crvena</translation>
 <translation id="7943235353293548836">Trajni interval održavanja linka</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index 8403d9e..c492592 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Тип добављача</translation>
 <translation id="7882501334836096755">Јавни кључ</translation>
 <translation id="7890841768028788197">Интерни додирни екран</translation>
+<translation id="7915220255123750251">Управљајте подешавањима назива приступне тачке мреже. Називи приступних тачака успостављају везу између мобилне мреже и интернета.</translation>
 <translation id="7936303884198020182">Није пронађен ниједан сервер за имена</translation>
 <translation id="7942349550061667556">Црвена</translation>
 <translation id="7943235353293548836">Трајни интервал одржавања линка</translation>
diff --git a/chromeos/strings/chromeos_strings_ur.xtb b/chromeos/strings/chromeos_strings_ur.xtb
index 6b75dce..b3c70eda 100644
--- a/chromeos/strings/chromeos_strings_ur.xtb
+++ b/chromeos/strings/chromeos_strings_ur.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">فراہم کنندہ کی قسم</translation>
 <translation id="7882501334836096755">عوامی کلید</translation>
 <translation id="7890841768028788197">پہلے سے شامل ٹچ اسکرین</translation>
+<translation id="7915220255123750251">‏نیٹ ورک APN کی ترتیبات کا نظم کریں۔ APNs سیلولر نیٹ ورک اور انٹرنیٹ کے درمیان رابطہ قائم کرتے ہیں۔</translation>
 <translation id="7936303884198020182">کوئی نام سرور نہیں ملا</translation>
 <translation id="7942349550061667556">سرخ</translation>
 <translation id="7943235353293548836">‏مسلسل keepalive وقفہ</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb
index da1d87bc..8069c84 100644
--- a/chromeos/strings/chromeos_strings_vi.xtb
+++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Loại nhà mạng</translation>
 <translation id="7882501334836096755">Khóa công khai</translation>
 <translation id="7890841768028788197">Màn hình cảm ứng tích hợp sẵn</translation>
+<translation id="7915220255123750251">Quản lý chế độ cài đặt APN của mạng. APN thiết lập kết nối giữa mạng di động và Internet.</translation>
 <translation id="7936303884198020182">Không tìm thấy máy chủ định danh</translation>
 <translation id="7942349550061667556">Đỏ</translation>
 <translation id="7943235353293548836">Khoảng thời gian duy trì hoạt động liên tục</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb
index 04fd0d5e..946987f 100644
--- a/chromeos/strings/chromeos_strings_zh-TW.xtb
+++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">供應商類型</translation>
 <translation id="7882501334836096755">公開金鑰</translation>
 <translation id="7890841768028788197">內部觸控螢幕</translation>
+<translation id="7915220255123750251">管理網路 APN 設定。APN 會在行動網路和網際網路之間建立連線。</translation>
 <translation id="7936303884198020182">找不到任何名稱伺服器</translation>
 <translation id="7942349550061667556">紅色</translation>
 <translation id="7943235353293548836">持續保持運作時間間隔</translation>
diff --git a/components/attribution_reporting/BUILD.gn b/components/attribution_reporting/BUILD.gn
index fbd0e19..a6523b0 100644
--- a/components/attribution_reporting/BUILD.gn
+++ b/components/attribution_reporting/BUILD.gn
@@ -29,6 +29,8 @@
     "filters.h",
     "os_registration.cc",
     "os_registration.h",
+    "parsing_utils.cc",
+    "parsing_utils.h",
     "source_registration.cc",
     "source_registration.h",
     "suitable_origin.cc",
@@ -55,10 +57,13 @@
   testonly = true
 
   sources = [
+    "aggregatable_trigger_data_unittest.cc",
+    "aggregatable_values_unittest.cc",
     "aggregation_keys_unittest.cc",
     "bounded_list_unittest.cc",
     "filters_unittest.cc",
     "os_registration_unittest.cc",
+    "parsing_utils_unittest.cc",
     "source_registration_unittest.cc",
     "suitable_origin_unittest.cc",
   ]
diff --git a/components/attribution_reporting/aggregatable_trigger_data.cc b/components/attribution_reporting/aggregatable_trigger_data.cc
index ba65dcc..0736e62 100644
--- a/components/attribution_reporting/aggregatable_trigger_data.cc
+++ b/components/attribution_reporting/aggregatable_trigger_data.cc
@@ -4,28 +4,102 @@
 
 #include "components/attribution_reporting/aggregatable_trigger_data.h"
 
+#include <stddef.h>
+
 #include <string>
 #include <utility>
 
 #include "base/check.h"
 #include "base/containers/flat_set.h"
 #include "base/ranges/algorithm.h"
+#include "base/types/expected.h"
+#include "base/values.h"
 #include "components/attribution_reporting/constants.h"
+#include "components/attribution_reporting/filters.h"
+#include "components/attribution_reporting/parsing_utils.h"
+#include "components/attribution_reporting/trigger_registration_error.mojom.h"
+#include "third_party/abseil-cpp/absl/numeric/int128.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace attribution_reporting {
 
 namespace {
 
+using ::attribution_reporting::mojom::TriggerRegistrationError;
+
 bool AreSourceKeysValid(const base::flat_set<std::string>& source_keys) {
   if (source_keys.size() > kMaxAggregationKeysPerSourceOrTrigger)
     return false;
 
   return base::ranges::all_of(source_keys, [](const auto& key) {
-    return key.size() <= kMaxBytesPerAggregationKeyId;
+    return AggregationKeyIdHasValidLength(key);
   });
 }
 
+base::expected<absl::uint128, TriggerRegistrationError> ParseKeyPiece(
+    const base::Value::Dict& registration) {
+  const base::Value* v = registration.Find("key_piece");
+  if (!v) {
+    return base::unexpected(
+        TriggerRegistrationError::kAggregatableTriggerDataKeyPieceMissing);
+  }
+
+  const std::string* s = v->GetIfString();
+  if (!s) {
+    return base::unexpected(
+        TriggerRegistrationError::kAggregatableTriggerDataKeyPieceWrongType);
+  }
+
+  absl::optional<absl::uint128> key_piece = StringToAggregationKeyPiece(*s);
+  if (!key_piece) {
+    return base::unexpected(
+        TriggerRegistrationError::kAggregatableTriggerDataKeyPieceWrongFormat);
+  }
+  return *key_piece;
+}
+
+base::expected<base::flat_set<std::string>, TriggerRegistrationError>
+ParseSourceKeys(base::Value::Dict& registration) {
+  base::Value* v = registration.Find("source_keys");
+  if (!v) {
+    return base::unexpected(
+        TriggerRegistrationError::kAggregatableTriggerDataSourceKeysMissing);
+  }
+
+  base::Value::List* l = v->GetIfList();
+  if (!l) {
+    return base::unexpected(
+        TriggerRegistrationError::kAggregatableTriggerDataSourceKeysWrongType);
+  }
+
+  const size_t num_source_keys = l->size();
+
+  if (num_source_keys > kMaxAggregationKeysPerSourceOrTrigger) {
+    return base::unexpected(TriggerRegistrationError::
+                                kAggregatableTriggerDataSourceKeysTooManyKeys);
+  }
+
+  base::flat_set<std::string>::container_type source_keys;
+  source_keys.reserve(num_source_keys);
+
+  for (auto& maybe_string_value : *l) {
+    std::string* s = maybe_string_value.GetIfString();
+    if (!s) {
+      return base::unexpected(
+          TriggerRegistrationError::
+              kAggregatableTriggerDataSourceKeysKeyWrongType);
+    }
+    if (!AggregationKeyIdHasValidLength(*s)) {
+      return base::unexpected(TriggerRegistrationError::
+                                  kAggregatableTriggerDataSourceKeysKeyTooLong);
+    }
+
+    source_keys.emplace_back(std::move(*s));
+  }
+
+  return source_keys;
+}
+
 }  // namespace
 
 // static
@@ -41,6 +115,35 @@
                                  std::move(filters), std::move(not_filters));
 }
 
+// static
+base::expected<AggregatableTriggerData, TriggerRegistrationError>
+AggregatableTriggerData::FromJSON(base::Value& value) {
+  base::Value::Dict* dict = value.GetIfDict();
+  if (!dict) {
+    return base::unexpected(
+        TriggerRegistrationError::kAggregatableTriggerDataWrongType);
+  }
+
+  auto key_piece = ParseKeyPiece(*dict);
+  if (!key_piece.has_value())
+    return base::unexpected(key_piece.error());
+
+  auto source_keys = ParseSourceKeys(*dict);
+  if (!source_keys.has_value())
+    return base::unexpected(source_keys.error());
+
+  auto filters = Filters::FromJSON(dict->Find("filters"));
+  if (!filters.has_value())
+    return base::unexpected(filters.error());
+
+  auto not_filters = Filters::FromJSON(dict->Find("not_filters"));
+  if (!not_filters.has_value())
+    return base::unexpected(not_filters.error());
+
+  return AggregatableTriggerData(*key_piece, std::move(*source_keys),
+                                 std::move(*filters), std::move(*not_filters));
+}
+
 AggregatableTriggerData::AggregatableTriggerData(
     absl::uint128 key_piece,
     base::flat_set<std::string> source_keys,
diff --git a/components/attribution_reporting/aggregatable_trigger_data.h b/components/attribution_reporting/aggregatable_trigger_data.h
index 7a04773..ad79754b 100644
--- a/components/attribution_reporting/aggregatable_trigger_data.h
+++ b/components/attribution_reporting/aggregatable_trigger_data.h
@@ -9,12 +9,18 @@
 
 #include "base/component_export.h"
 #include "base/containers/flat_set.h"
+#include "base/types/expected.h"
 #include "components/attribution_reporting/bounded_list.h"
 #include "components/attribution_reporting/constants.h"
 #include "components/attribution_reporting/filters.h"
+#include "components/attribution_reporting/trigger_registration_error.mojom-forward.h"
 #include "third_party/abseil-cpp/absl/numeric/int128.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
+namespace base {
+class Value;
+}  // namespace base
+
 namespace attribution_reporting {
 
 class COMPONENT_EXPORT(ATTRIBUTION_REPORTING) AggregatableTriggerData {
@@ -25,6 +31,10 @@
       Filters filters,
       Filters not_filters);
 
+  static base::expected<AggregatableTriggerData,
+                        mojom::TriggerRegistrationError>
+  FromJSON(base::Value& value);
+
   ~AggregatableTriggerData();
 
   AggregatableTriggerData(const AggregatableTriggerData&);
diff --git a/components/attribution_reporting/aggregatable_trigger_data_unittest.cc b/components/attribution_reporting/aggregatable_trigger_data_unittest.cc
new file mode 100644
index 0000000..3be0add6
--- /dev/null
+++ b/components/attribution_reporting/aggregatable_trigger_data_unittest.cc
@@ -0,0 +1,161 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/attribution_reporting/aggregatable_trigger_data.h"
+
+#include <stddef.h>
+
+#include <string>
+#include <utility>
+
+#include "base/containers/flat_set.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/test/values_test_util.h"
+#include "base/types/expected.h"
+#include "base/values.h"
+#include "components/attribution_reporting/constants.h"
+#include "components/attribution_reporting/filters.h"
+#include "components/attribution_reporting/test_utils.h"
+#include "components/attribution_reporting/trigger_registration_error.mojom.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/numeric/int128.h"
+
+namespace attribution_reporting {
+namespace {
+
+using ::attribution_reporting::mojom::TriggerRegistrationError;
+
+TEST(AggregatableTriggerDataTest, FromJSON) {
+  const auto make_aggregatable_trigger_data_with_keys = [](size_t n) {
+    base::Value::Dict dict;
+    dict.Set("key_piece", "0x1");
+
+    base::Value::List list;
+    for (size_t i = 0; i < n; ++i) {
+      list.Append(base::NumberToString(i));
+    }
+    dict.Set("source_keys", std::move(list));
+    return base::Value(std::move(dict));
+  };
+
+  const auto make_aggregatable_trigger_data_with_key_length = [](size_t n) {
+    base::Value::Dict dict;
+    dict.Set("key_piece", "0x1");
+
+    base::Value::List list;
+    list.Append(std::string(n, 'a'));
+    dict.Set("source_keys", std::move(list));
+    return base::Value(std::move(dict));
+  };
+
+  struct {
+    const char* description;
+    base::Value json;
+    base::expected<AggregatableTriggerData, TriggerRegistrationError> expected;
+  } kTestCases[] = {
+      {"required_fields_only", base::test::ParseJson(R"json({
+         "key_piece": "0x1234",
+         "source_keys": ["abc"]
+       })json"),
+       *AggregatableTriggerData::Create(
+           /*key_piece=*/4660, /*source_keys=*/{"abc"},
+           /*filters=*/Filters(), /*not_filters=*/Filters())},
+      {"empty_source_keys", base::test::ParseJson(R"json({
+         "key_piece": "0x1234",
+         "source_keys": []
+       })json"),
+       *AggregatableTriggerData::Create(
+           /*key_piece=*/4660, /*source_keys=*/{},
+           /*filters=*/Filters(), /*not_filters=*/Filters())},
+      {"filters", base::test::ParseJson(R"json({
+         "key_piece": "0x1",
+         "source_keys": ["a", "b"],
+         "filters": {"a": ["b", "c"]}
+      })json"),
+       *AggregatableTriggerData::Create(
+           /*key_piece=*/1, /*source_keys=*/{"a", "b"},
+           /*filters=*/*Filters::Create({{"a", {"b", "c"}}}),
+           /*not_filters=*/Filters())},
+      {"not_filters", base::test::ParseJson(R"json({
+         "key_piece": "0x2",
+         "source_keys": ["a", "b"],
+         "not_filters": {"a": ["b", "c"]}
+      })json"),
+       *AggregatableTriggerData::Create(
+           /*key_piece=*/2, /*source_keys=*/{"a", "b"},
+           /*filters=*/Filters(),
+           /*not_filters=*/*Filters::Create({{"a", {"b", "c"}}}))},
+      {"not_dictionary", base::Value(base::Value::List()),
+       base::unexpected(
+           TriggerRegistrationError::kAggregatableTriggerDataWrongType)},
+      {"key_piece_missing", base::Value(base::Value::Dict()),
+       base::unexpected(
+           TriggerRegistrationError::kAggregatableTriggerDataKeyPieceMissing)},
+      {"key_piece_wrong_type",
+       base::test::ParseJson(R"json({"key_piece":123})json"),
+       base::unexpected(TriggerRegistrationError::
+                            kAggregatableTriggerDataKeyPieceWrongType)},
+      {"key_piece_wrong_format",
+       base::test::ParseJson(R"json({"key_piece":"1234"})json"),
+       base::unexpected(TriggerRegistrationError::
+                            kAggregatableTriggerDataKeyPieceWrongFormat)},
+      {"source_keys_missing",
+       base::test::ParseJson(R"json({"key_piece":"0x1234"})json"),
+       base::unexpected(TriggerRegistrationError::
+                            kAggregatableTriggerDataSourceKeysMissing)},
+      {"source_keys_wrong_type",
+       base::test::ParseJson(
+           R"json({"key_piece":"0x1234", "source_keys":{}})json"),
+       base::unexpected(TriggerRegistrationError::
+                            kAggregatableTriggerDataSourceKeysWrongType)},
+      {"source_keys_key_wrong_type",
+       base::test::ParseJson(
+           R"json({"key_piece":"0x1234", "source_keys":[123]})json"),
+       base::unexpected(TriggerRegistrationError::
+                            kAggregatableTriggerDataSourceKeysKeyWrongType)},
+      {"source_keys_too_many_keys",
+       make_aggregatable_trigger_data_with_keys(
+           kMaxAggregationKeysPerSourceOrTrigger + 1),
+       base::unexpected(TriggerRegistrationError::
+                            kAggregatableTriggerDataSourceKeysTooManyKeys)},
+      {"source_keys_key_too_long",
+       make_aggregatable_trigger_data_with_key_length(
+           kMaxBytesPerAggregationKeyId + 1),
+       base::unexpected(TriggerRegistrationError::
+                            kAggregatableTriggerDataSourceKeysKeyTooLong)},
+      {"filters_wrong_type", base::test::ParseJson(R"json({
+         "key_piece": "0x1",
+         "source_keys": ["abc"],
+         "filters": 123
+       })json"),
+       base::unexpected(TriggerRegistrationError::kFiltersWrongType)},
+      {"not_filters_wrong_type", base::test::ParseJson(R"json({
+         "key_piece": "0x1",
+         "source_keys": ["abc"],
+         "not_filters": 123
+       })json"),
+       base::unexpected(TriggerRegistrationError::kFiltersWrongType)},
+  };
+
+  for (auto& test_case : kTestCases) {
+    EXPECT_EQ(AggregatableTriggerData::FromJSON(test_case.json),
+              test_case.expected)
+        << test_case.description;
+  }
+
+  {
+    base::Value json = make_aggregatable_trigger_data_with_keys(
+        kMaxAggregationKeysPerSourceOrTrigger);
+    EXPECT_TRUE(AggregatableTriggerData::FromJSON(json).has_value());
+  }
+
+  {
+    base::Value json = make_aggregatable_trigger_data_with_key_length(
+        kMaxBytesPerAggregationKeyId);
+    EXPECT_TRUE(AggregatableTriggerData::FromJSON(json).has_value());
+  }
+}
+
+}  // namespace
+}  // namespace attribution_reporting
diff --git a/components/attribution_reporting/aggregatable_values.cc b/components/attribution_reporting/aggregatable_values.cc
index e18858e4..618690e 100644
--- a/components/attribution_reporting/aggregatable_values.cc
+++ b/components/attribution_reporting/aggregatable_values.cc
@@ -7,21 +7,34 @@
 #include <utility>
 
 #include "base/check.h"
+#include "base/containers/flat_tree.h"
 #include "base/ranges/algorithm.h"
+#include "base/types/expected.h"
+#include "base/values.h"
 #include "components/attribution_reporting/constants.h"
+#include "components/attribution_reporting/trigger_registration_error.mojom.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace attribution_reporting {
 
 namespace {
 
+using ::attribution_reporting::mojom::TriggerRegistrationError;
+
+bool KeyIdHasValidLength(const std::string& key) {
+  return key.size() <= kMaxBytesPerAggregationKeyId;
+}
+
+bool IsValueInRange(int value) {
+  return value > 0 && value <= kMaxAggregatableValue;
+}
+
 bool IsValid(const AggregatableValues::Values& values) {
   if (values.size() > kMaxAggregationKeysPerSourceOrTrigger)
     return false;
 
   return base::ranges::all_of(values, [](const auto& value) {
-    return value.first.size() <= kMaxBytesPerAggregationKeyId &&
-           value.second > 0 && value.second <= kMaxAggregatableValue;
+    return KeyIdHasValidLength(value.first) && IsValueInRange(value.second);
   });
 }
 
@@ -35,6 +48,48 @@
   return AggregatableValues(std::move(values));
 }
 
+// static
+base::expected<AggregatableValues, mojom::TriggerRegistrationError>
+AggregatableValues::FromJSON(const base::Value* input_value) {
+  if (!input_value)
+    return AggregatableValues();
+
+  const base::Value::Dict* dict = input_value->GetIfDict();
+  if (!dict) {
+    return base::unexpected(
+        TriggerRegistrationError::kAggregatableValuesWrongType);
+  }
+
+  if (dict->size() > kMaxAggregationKeysPerSourceOrTrigger) {
+    return base::unexpected(
+        TriggerRegistrationError::kAggregatableValuesTooManyKeys);
+  }
+
+  Values::container_type container;
+
+  for (auto [id, key_value] : *dict) {
+    if (!KeyIdHasValidLength(id)) {
+      return base::unexpected(
+          TriggerRegistrationError::kAggregatableValuesKeyTooLong);
+    }
+
+    absl::optional<int> int_value = key_value.GetIfInt();
+    if (!int_value.has_value()) {
+      return base::unexpected(
+          TriggerRegistrationError::kAggregatableValuesValueWrongType);
+    }
+
+    if (!IsValueInRange(*int_value)) {
+      return base::unexpected(
+          TriggerRegistrationError::kAggregatableValuesValueOutOfRange);
+    }
+
+    container.emplace_back(id, *int_value);
+  }
+
+  return AggregatableValues(Values(base::sorted_unique, std::move(container)));
+}
+
 AggregatableValues::AggregatableValues() = default;
 
 AggregatableValues::AggregatableValues(Values values)
diff --git a/components/attribution_reporting/aggregatable_values.h b/components/attribution_reporting/aggregatable_values.h
index f1f5bf0..e81d92b 100644
--- a/components/attribution_reporting/aggregatable_values.h
+++ b/components/attribution_reporting/aggregatable_values.h
@@ -11,8 +11,14 @@
 
 #include "base/component_export.h"
 #include "base/containers/flat_map.h"
+#include "base/types/expected.h"
+#include "components/attribution_reporting/trigger_registration_error.mojom-forward.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
+namespace base {
+class Value;
+}  // namespace base
+
 namespace attribution_reporting {
 
 class COMPONENT_EXPORT(ATTRIBUTION_REPORTING) AggregatableValues {
@@ -21,6 +27,9 @@
 
   static absl::optional<AggregatableValues> Create(Values);
 
+  static base::expected<AggregatableValues, mojom::TriggerRegistrationError>
+  FromJSON(const base::Value*);
+
   AggregatableValues();
 
   ~AggregatableValues();
diff --git a/components/attribution_reporting/aggregatable_values_unittest.cc b/components/attribution_reporting/aggregatable_values_unittest.cc
new file mode 100644
index 0000000..9791b1a1
--- /dev/null
+++ b/components/attribution_reporting/aggregatable_values_unittest.cc
@@ -0,0 +1,121 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/attribution_reporting/aggregatable_values.h"
+
+#include <stddef.h>
+
+#include <string>
+#include <utility>
+
+#include "base/strings/string_number_conversions.h"
+#include "base/test/values_test_util.h"
+#include "base/types/expected.h"
+#include "base/types/optional_util.h"
+#include "base/values.h"
+#include "components/attribution_reporting/test_utils.h"
+#include "components/attribution_reporting/trigger_registration_error.mojom.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace attribution_reporting {
+namespace {
+
+using ::attribution_reporting::mojom::TriggerRegistrationError;
+
+TEST(AggregatableValuesTest, Parse) {
+  const struct {
+    const char* description;
+    absl::optional<base::Value> json;
+    base::expected<AggregatableValues, TriggerRegistrationError> expected;
+  } kTestCases[] = {
+      {
+          "null",
+          absl::nullopt,
+          AggregatableValues(),
+      },
+      {
+          "empty",
+          base::Value(base::Value::Dict()),
+          AggregatableValues(),
+      },
+      {
+          "not_dictionary",
+          base::Value(base::Value::List()),
+          base::unexpected(
+              TriggerRegistrationError::kAggregatableValuesWrongType),
+      },
+      {
+          "value_not_int",
+          base::test::ParseJson(R"json({"a": true})json"),
+          base::unexpected(
+              TriggerRegistrationError::kAggregatableValuesValueWrongType),
+      },
+      {
+          "value_below_range",
+          base::test::ParseJson(R"json({"a": 0})json"),
+          base::unexpected(
+              TriggerRegistrationError::kAggregatableValuesValueOutOfRange),
+      },
+      {
+          "value_above_range",
+          base::test::ParseJson(R"json({"a": 65537})json"),
+          base::unexpected(
+              TriggerRegistrationError::kAggregatableValuesValueOutOfRange),
+      },
+      {
+          "valid",
+          base::test::ParseJson(R"json({"a": 1, "b": 65536})json"),
+          *AggregatableValues::Create({
+              {"a", 1},
+              {"b", 65536},
+          }),
+      },
+  };
+
+  for (const auto& test_case : kTestCases) {
+    EXPECT_EQ(AggregatableValues::FromJSON(base::OptionalToPtr(test_case.json)),
+              test_case.expected)
+        << test_case.description;
+  }
+}
+
+TEST(AggregatableValuesTest, Parse_KeyLength) {
+  auto parse_dict_with_key_length = [](size_t length) {
+    base::Value::Dict dict;
+    dict.Set(std::string(length, 'a'), 1);
+    base::Value value(std::move(dict));
+    return AggregatableValues::FromJSON(&value);
+  };
+
+  for (size_t length = 0; length < 26; length++) {
+    EXPECT_TRUE(parse_dict_with_key_length(length).has_value());
+  }
+
+  EXPECT_EQ(parse_dict_with_key_length(26),
+            base::unexpected(
+                TriggerRegistrationError::kAggregatableValuesKeyTooLong));
+}
+
+TEST(AggregatableValuesTest, Parse_KeyCount) {
+  auto parse_dict_with_key_count = [](size_t count) {
+    base::Value::Dict dict;
+    for (size_t i = 0; i < count; i++) {
+      dict.Set(base::NumberToString(i), 1);
+    }
+    base::Value value(std::move(dict));
+    return AggregatableValues::FromJSON(&value);
+  };
+
+  for (size_t count = 0; count < 50; count++) {
+    EXPECT_TRUE(parse_dict_with_key_count(count).has_value());
+  }
+
+  EXPECT_EQ(parse_dict_with_key_count(51),
+            base::unexpected(
+                TriggerRegistrationError::kAggregatableValuesTooManyKeys));
+}
+
+}  // namespace
+}  // namespace attribution_reporting
diff --git a/components/attribution_reporting/aggregation_keys.cc b/components/attribution_reporting/aggregation_keys.cc
index abd9a46..13023a9 100644
--- a/components/attribution_reporting/aggregation_keys.cc
+++ b/components/attribution_reporting/aggregation_keys.cc
@@ -11,12 +11,12 @@
 #include "base/metrics/histogram_base.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/ranges/algorithm.h"
-#include "base/strings/abseil_string_number_conversions.h"
-#include "base/strings/string_util.h"
 #include "base/types/expected.h"
 #include "base/values.h"
 #include "components/attribution_reporting/constants.h"
+#include "components/attribution_reporting/parsing_utils.h"
 #include "components/attribution_reporting/source_registration_error.mojom.h"
+#include "third_party/abseil-cpp/absl/numeric/int128.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace attribution_reporting {
@@ -28,7 +28,7 @@
 bool IsValid(const AggregationKeys::Keys& keys) {
   return keys.size() <= kMaxAggregationKeysPerSourceOrTrigger &&
          base::ranges::all_of(keys, [](const auto& key) {
-           return key.first.size() <= kMaxBytesPerAggregationKeyId;
+           return AggregationKeyIdHasValidLength(key.first);
          });
 }
 
@@ -75,7 +75,7 @@
   keys.reserve(num_keys);
 
   for (auto [key_id, maybe_string_value] : *dict) {
-    if (key_id.size() > kMaxBytesPerAggregationKeyId) {
+    if (!AggregationKeyIdHasValidLength(key_id)) {
       return base::unexpected(
           SourceRegistrationError::kAggregationKeysKeyTooLong);
     }
@@ -86,15 +86,13 @@
           SourceRegistrationError::kAggregationKeysValueWrongType);
     }
 
-    absl::uint128 key;
-
-    if (!base::StartsWith(*s, "0x", base::CompareCase::INSENSITIVE_ASCII) ||
-        !base::HexStringToUInt128(*s, &key)) {
+    absl::optional<absl::uint128> key = StringToAggregationKeyPiece(*s);
+    if (!key) {
       return base::unexpected(
           SourceRegistrationError::kAggregationKeysValueWrongFormat);
     }
 
-    keys.emplace_back(key_id, key);
+    keys.emplace_back(key_id, *key);
   }
 
   return AggregationKeys(Keys(base::sorted_unique, std::move(keys)));
diff --git a/components/attribution_reporting/parsing_utils.cc b/components/attribution_reporting/parsing_utils.cc
new file mode 100644
index 0000000..929b5a2
--- /dev/null
+++ b/components/attribution_reporting/parsing_utils.cc
@@ -0,0 +1,31 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/attribution_reporting/parsing_utils.h"
+
+#include "base/strings/abseil_string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "components/attribution_reporting/constants.h"
+#include "third_party/abseil-cpp/absl/numeric/int128.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace attribution_reporting {
+
+absl::optional<absl::uint128> StringToAggregationKeyPiece(
+    const std::string& s) {
+  if (!base::StartsWith(s, "0x", base::CompareCase::INSENSITIVE_ASCII))
+    return absl::nullopt;
+
+  absl::uint128 key_piece;
+  if (!base::HexStringToUInt128(s, &key_piece))
+    return absl::nullopt;
+
+  return key_piece;
+}
+
+bool AggregationKeyIdHasValidLength(const std::string& key) {
+  return key.size() <= kMaxBytesPerAggregationKeyId;
+}
+
+}  // namespace attribution_reporting
diff --git a/components/attribution_reporting/parsing_utils.h b/components/attribution_reporting/parsing_utils.h
new file mode 100644
index 0000000..fe375ff
--- /dev/null
+++ b/components/attribution_reporting/parsing_utils.h
@@ -0,0 +1,24 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_ATTRIBUTION_REPORTING_PARSING_UTILS_H_
+#define COMPONENTS_ATTRIBUTION_REPORTING_PARSING_UTILS_H_
+
+#include <string>
+
+#include "base/component_export.h"
+#include "third_party/abseil-cpp/absl/numeric/int128.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace attribution_reporting {
+
+COMPONENT_EXPORT(ATTRIBUTION_REPORTING)
+absl::optional<absl::uint128> StringToAggregationKeyPiece(const std::string& s);
+
+COMPONENT_EXPORT(ATTRIBUTION_REPORTING)
+bool AggregationKeyIdHasValidLength(const std::string& key);
+
+}  // namespace attribution_reporting
+
+#endif  // COMPONENTS_ATTRIBUTION_REPORTING_PARSING_UTILS_H_
diff --git a/components/attribution_reporting/parsing_utils_unittest.cc b/components/attribution_reporting/parsing_utils_unittest.cc
new file mode 100644
index 0000000..fd563048
--- /dev/null
+++ b/components/attribution_reporting/parsing_utils_unittest.cc
@@ -0,0 +1,42 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/attribution_reporting/parsing_utils.h"
+
+#include <string>
+
+#include "components/attribution_reporting/constants.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/numeric/int128.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace attribution_reporting {
+namespace {
+
+TEST(AggregationKeyUtilsTest, StringToAggregationKeyPiece) {
+  const struct {
+    const char* string;
+    absl::optional<absl::uint128> expected;
+  } kTestCases[] = {
+      {"123", absl::nullopt},
+      {"0x123", 291},
+      {"0X123", 291},
+      {"0xG", absl::nullopt},
+  };
+
+  for (const auto& test_case : kTestCases) {
+    EXPECT_EQ(StringToAggregationKeyPiece(test_case.string),
+              test_case.expected);
+  }
+}
+
+TEST(AggregationKeyUtilsTest, AggregationKeyIdHasValidLength) {
+  EXPECT_TRUE(AggregationKeyIdHasValidLength(
+      std::string(kMaxBytesPerAggregationKeyId, 'a')));
+  EXPECT_FALSE(AggregationKeyIdHasValidLength(
+      std::string(kMaxBytesPerAggregationKeyId + 1, 'a')));
+}
+
+}  // namespace
+}  // namespace attribution_reporting
diff --git a/components/attribution_reporting/trigger_registration_error.mojom b/components/attribution_reporting/trigger_registration_error.mojom
index d8d5cbc..d7e167d 100644
--- a/components/attribution_reporting/trigger_registration_error.mojom
+++ b/components/attribution_reporting/trigger_registration_error.mojom
@@ -12,4 +12,20 @@
   kFiltersListTooLong,
   kFiltersValueWrongType,
   kFiltersValueTooLong,
+
+  kAggregatableValuesWrongType,
+  kAggregatableValuesTooManyKeys,
+  kAggregatableValuesKeyTooLong,
+  kAggregatableValuesValueWrongType,
+  kAggregatableValuesValueOutOfRange,
+
+  kAggregatableTriggerDataWrongType,
+  kAggregatableTriggerDataKeyPieceMissing,
+  kAggregatableTriggerDataKeyPieceWrongType,
+  kAggregatableTriggerDataKeyPieceWrongFormat,
+  kAggregatableTriggerDataSourceKeysMissing,
+  kAggregatableTriggerDataSourceKeysWrongType,
+  kAggregatableTriggerDataSourceKeysTooManyKeys,
+  kAggregatableTriggerDataSourceKeysKeyWrongType,
+  kAggregatableTriggerDataSourceKeysKeyTooLong,
 };
diff --git a/components/autofill/core/browser/payments/payments_client_unittest.cc b/components/autofill/core/browser/payments/payments_client_unittest.cc
index dae51800..6d34111 100644
--- a/components/autofill/core/browser/payments/payments_client_unittest.cc
+++ b/components/autofill/core/browser/payments/payments_client_unittest.cc
@@ -162,8 +162,6 @@
     test_personal_data_.SetAccountInfoForPayments(
         identity_test_env_.MakePrimaryAccountAvailable(
             "example@gmail.com", signin::ConsentLevel::kSync));
-    scoped_feature_list_.InitAndEnableFeature(
-        features::kAutofillEnableSendingBcnInGetUploadDetails);
   }
 
   void TearDown() override { client_.reset(); }
@@ -253,8 +251,6 @@
   }
 
  protected:
-  base::test::ScopedFeatureList scoped_feature_list_;
-
   // Issue a GetUnmaskDetails request. This requires an OAuth token before
   // starting the request.
   void StartGettingUnmaskDetails() {
@@ -1308,10 +1304,6 @@
 }
 
 TEST_F(PaymentsClientTest, GetDetailsIncludeBillingCustomerNumber) {
-  scoped_feature_list_.Reset();
-  scoped_feature_list_.InitAndEnableFeature(
-      features::kAutofillEnableSendingBcnInGetUploadDetails);
-
   StartGettingUploadDetails();
 
   // Verify that the billing customer number is included in the request if flag
@@ -1323,12 +1315,9 @@
 
 TEST_F(PaymentsClientTest,
        GetDetailsExcludesBillingCustomerNumberIfNoBcnExists) {
-  scoped_feature_list_.Reset();
-  scoped_feature_list_.InitAndEnableFeature(
-      features::kAutofillEnableSendingBcnInGetUploadDetails);
-
   StartGettingUploadDetails(
       PaymentsClient::UploadCardSource::UNKNOWN_UPLOAD_CARD_SOURCE, 0L);
+
   // Verify that the billing customer number is not included in the request if
   // billing customer number is 0.
   EXPECT_TRUE(GetUploadData().find("\"external_customer_id\"") ==
@@ -1337,21 +1326,6 @@
               std::string::npos);
 }
 
-TEST_F(PaymentsClientTest,
-       GetDetailsExcludesBillingCustomerNumberIfFlagDisabled) {
-  scoped_feature_list_.Reset();
-  scoped_feature_list_.InitAndDisableFeature(
-      features::kAutofillEnableSendingBcnInGetUploadDetails);
-
-  StartGettingUploadDetails();
-  // Verify that the billing customer number is not included in the request if
-  // flag is disabled.
-  EXPECT_TRUE(GetUploadData().find("\"external_customer_id\"") ==
-              std::string::npos);
-  EXPECT_TRUE(GetUploadData().find("\"customer_context\"") ==
-              std::string::npos);
-}
-
 TEST_F(PaymentsClientTest, GetDetailsFollowedByUploadSuccess) {
   StartGettingUploadDetails();
   ReturnResponse(
@@ -1511,8 +1485,8 @@
 
 TEST_F(PaymentsClientTest,
        UploadSuccessGetDetailsForEnrollmentResponseDetailsPresent) {
-  scoped_feature_list_.Reset();
-  scoped_feature_list_.InitAndEnableFeature(
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeature(
       features::kAutofillEnableGetDetailsForEnrollParsingInUploadCardResponse);
   StartUploading(/*include_cvc=*/true);
   IssueOAuthToken();
diff --git a/components/autofill/core/browser/payments/payments_requests/get_upload_details_request.cc b/components/autofill/core/browser/payments/payments_requests/get_upload_details_request.cc
index dce0290..f42cb40 100644
--- a/components/autofill/core/browser/payments/payments_requests/get_upload_details_request.cc
+++ b/components/autofill/core/browser/payments/payments_requests/get_upload_details_request.cc
@@ -55,9 +55,7 @@
   base::Value::Dict context;
   context.Set("language_code", app_locale_);
   context.Set("billable_service", billable_service_number_);
-  if (base::FeatureList::IsEnabled(
-          features::kAutofillEnableSendingBcnInGetUploadDetails) &&
-      billing_customer_number_ != 0) {
+  if (billing_customer_number_ != 0) {
     context.Set("customer_context",
                 BuildCustomerContextDictionary(billing_customer_number_));
   }
diff --git a/components/autofill/core/common/autofill_payments_features.cc b/components/autofill/core/common/autofill_payments_features.cc
index e753b428..7eeb7cc 100644
--- a/components/autofill/core/common/autofill_payments_features.cc
+++ b/components/autofill/core/common/autofill_payments_features.cc
@@ -112,12 +112,6 @@
              "AutofillEnableRemadeDownstreamMetrics",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-// Controls whether we send billing customer number in GetUploadDetails
-// preflight call.
-BASE_FEATURE(kAutofillEnableSendingBcnInGetUploadDetails,
-             "AutofillEnableSendingBcnInGetUploadDetails",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 // When enabled, if the user interacts with the manual fallback bottom sheet
 // on Android, it'll remain sticky until the user dismisses it.
 BASE_FEATURE(kAutofillEnableStickyManualFallbackForCards,
diff --git a/components/autofill/core/common/autofill_payments_features.h b/components/autofill/core/common/autofill_payments_features.h
index dc87b77..00ed44f 100644
--- a/components/autofill/core/common/autofill_payments_features.h
+++ b/components/autofill/core/common/autofill_payments_features.h
@@ -27,7 +27,6 @@
 BASE_DECLARE_FEATURE(kAutofillEnableOfferNotificationForPromoCodes);
 BASE_DECLARE_FEATURE(kAutofillEnableOffersInClankKeyboardAccessory);
 BASE_DECLARE_FEATURE(kAutofillEnableRemadeDownstreamMetrics);
-BASE_DECLARE_FEATURE(kAutofillEnableSendingBcnInGetUploadDetails);
 BASE_DECLARE_FEATURE(kAutofillEnableStickyManualFallbackForCards);
 BASE_DECLARE_FEATURE(kAutofillEnableUnmaskCardRequestSetInstrumentId);
 BASE_DECLARE_FEATURE(kAutofillEnableUpdateVirtualCardEnrollment);
diff --git a/components/autofill_assistant/android/public/java/src/org/chromium/components/autofill_assistant/AssistantIsMsbbEnabledFunction.java b/components/autofill_assistant/android/public/java/src/org/chromium/components/autofill_assistant/AssistantIsMsbbEnabledFunction.java
index 82127d4..87b9faf 100644
--- a/components/autofill_assistant/android/public/java/src/org/chromium/components/autofill_assistant/AssistantIsMsbbEnabledFunction.java
+++ b/components/autofill_assistant/android/public/java/src/org/chromium/components/autofill_assistant/AssistantIsMsbbEnabledFunction.java
@@ -4,7 +4,7 @@
 
 package org.chromium.components.autofill_assistant;
 
-import org.chromium.base.supplier.BooleanSupplier;
+import java.util.function.BooleanSupplier;
 
 /**
  * Determines whether 'Make Searches and Browsing Better' is enabled.
diff --git a/components/autofill_assistant/android/public/java/src/org/chromium/components/autofill_assistant/AssistantModuleInstallUi.java b/components/autofill_assistant/android/public/java/src/org/chromium/components/autofill_assistant/AssistantModuleInstallUi.java
index 8c19bd8..34ebac6 100644
--- a/components/autofill_assistant/android/public/java/src/org/chromium/components/autofill_assistant/AssistantModuleInstallUi.java
+++ b/components/autofill_assistant/android/public/java/src/org/chromium/components/autofill_assistant/AssistantModuleInstallUi.java
@@ -4,7 +4,7 @@
 
 package org.chromium.components.autofill_assistant;
 
-import org.chromium.base.Consumer;
+import java.util.function.Consumer;
 
 /**
  * UI informing the user about the status of installing a dynamic feature module.
diff --git a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PickerBitmap.java b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PickerBitmap.java
index 61804dc..0a632fe5 100644
--- a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PickerBitmap.java
+++ b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/PickerBitmap.java
@@ -9,8 +9,6 @@
 import androidx.annotation.IntDef;
 import androidx.annotation.VisibleForTesting;
 
-import org.chromium.base.ApiCompatibilityUtils;
-
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.text.DateFormat;
@@ -101,7 +99,7 @@
      */
     @Override
     public int compareTo(PickerBitmap other) {
-        return ApiCompatibilityUtils.compareLong(other.mLastModified, mLastModified);
+        return Long.compare(other.mLastModified, mLastModified);
     }
 
     /**
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
index c167b26..867c65d 100644
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -196,6 +196,7 @@
     "java/res/drawable-xxxhdpi/permission_protected_media.png",
     "java/res/drawable-xxxhdpi/settings_sensors.png",
     "java/res/drawable-xxxhdpi/web_asset.png",
+    "java/res/drawable/gm_database_24.xml",
     "java/res/drawable/ic_block.xml",
     "java/res/drawable/ic_person_24dp.xml",
     "java/res/drawable/settings_bluetooth.xml",
diff --git a/components/browser_ui/site_settings/android/java/res/drawable/gm_database_24.xml b/components/browser_ui/site_settings/android/java/res/drawable/gm_database_24.xml
new file mode 100644
index 0000000..fb853353
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/res/drawable/gm_database_24.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2022 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <path
+      android:fillColor="@color/default_icon_color_white_tint_list"
+      android:pathData="M21,7c0,2.21 -4.03,4 -9,4S3,9.21 3,7s4.03,-4 9,-4S21,4.79 21,7zM20.55,10.75c-0.13,0.18 -0.3,0.35 -0.49,0.52c-1.47,1.32 -4.52,2.23 -8.06,2.23s-6.59,-0.91 -8.06,-2.23c-0.19,-0.17 -0.35,-0.34 -0.49,-0.52C3.16,10.36 3,9.94 3,9.5V12c0,0 0,0 0,0c0,2.21 4.03,4 9,4s9,-1.79 9,-4v0V9.5C21,9.94 20.84,10.36 20.55,10.75zM20.55,15.75c-0.13,0.18 -0.3,0.35 -0.49,0.52c-1.47,1.32 -4.52,2.23 -8.06,2.23s-6.59,-0.91 -8.06,-2.23c-0.19,-0.17 -0.35,-0.34 -0.49,-0.52C3.16,15.36 3,14.94 3,14.5V17c0,0 0,0 0,0c0,2.21 4.03,4 9,4s9,-1.79 9,-4v0v-2.5C21,14.94 20.84,15.36 20.55,15.75z"/>
+</vector>
diff --git a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
index f12f5e5a..7ac3414 100644
--- a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
+++ b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
@@ -15,10 +15,20 @@
         android:title="@string/all_sites"
         android:icon="@drawable/settings_all_sites"
         app:iconTint="@macro/default_icon_color" />
-    <!-- Cookies -->
+    <!-- Cookies (PrivacySandboxSettings4 disabled) -->
     <org.chromium.components.browser_ui.settings.ChromeBasePreference
         android:key="cookies"
         android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings" />
+    <!-- Cookies (PrivacySandboxSettings4 enabled) -->
+    <org.chromium.components.browser_ui.settings.ChromeBasePreference
+        android:key="third_party_cookies"
+        android:title="@string/third_party_cookies_page_title"
+        android:icon="@drawable/permission_cookie"
+        app:iconTint="@macro/default_icon_color" />
+        android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings" />
+    <org.chromium.components.browser_ui.settings.ChromeBasePreference
+        android:key="site_data"
+        android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings" />
     <!-- Location -->
     <org.chromium.components.browser_ui.settings.ChromeBasePreference
         android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings"
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
index fe882ef..042514e9 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
@@ -87,8 +87,10 @@
 
     /**
      * Returns the ResourceItem for a ContentSettingsType.
+     * @param delegate A site settings delegate to check feature states. Only needs to be passed
+     *                 to access Cookie icon or title.
      */
-    private static ResourceItem getResourceItem(int contentType) {
+    private static ResourceItem getResourceItem(int contentType, SiteSettingsDelegate delegate) {
         switch (contentType) {
             case ContentSettingsType.ADS:
                 return new ResourceItem(R.drawable.web_asset, R.string.ads_permission_title,
@@ -145,7 +147,15 @@
                         R.string.website_settings_category_clipboard_blocked);
 
             case ContentSettingsType.COOKIES:
-                return new ResourceItem(R.drawable.permission_cookie, R.string.cookies_title,
+                return new ResourceItem(delegate == null
+                                ? 0
+                                : (delegate.isPrivacySandboxSettings4Enabled()
+                                                ? R.drawable.gm_database_24
+                                                : R.drawable.permission_cookie),
+                        delegate == null ? 0
+                                         : (delegate.isPrivacySandboxSettings4Enabled()
+                                                         ? R.string.site_data_page_title
+                                                         : R.string.cookies_title),
                         ContentSettingValues.ALLOW, ContentSettingValues.BLOCK,
                         R.string.website_settings_category_cookie_allowed, 0);
 
@@ -277,8 +287,8 @@
     /**
      * Returns the resource id of the 24dp icon for a content type.
      */
-    public static int getIcon(int contentType) {
-        return getResourceItem(contentType).getIcon();
+    public static int getIcon(int contentType, SiteSettingsDelegate delegate) {
+        return getResourceItem(contentType, delegate).getIcon();
     }
 
     /**
@@ -293,8 +303,9 @@
      */
     public static Drawable getContentSettingsIcon(Context context,
             @ContentSettingsType int contentSettingsType,
-            @ContentSettingValues @Nullable Integer value) {
-        Drawable icon = SettingsUtils.getTintedIcon(context, getIcon(contentSettingsType));
+            @ContentSettingValues @Nullable Integer value, SiteSettingsDelegate delegate) {
+        Drawable icon =
+                SettingsUtils.getTintedIcon(context, getIcon(contentSettingsType, delegate));
         if (value != null && value == ContentSettingValues.BLOCK) {
             return getBlockedSquareIcon(context.getResources(), icon);
         }
@@ -317,7 +328,8 @@
             @ContentSettingValues @Nullable Integer value, boolean isIncognito) {
         int color = isIncognito ? R.color.default_icon_color_blue_light
                                 : R.color.default_icon_color_accent1_tint_list;
-        Drawable icon = SettingsUtils.getTintedIcon(context, getIcon(contentSettingsType), color);
+        Drawable icon =
+                SettingsUtils.getTintedIcon(context, getIcon(contentSettingsType, null), color);
         if (value != null && value == ContentSettingValues.BLOCK) {
             return getBlockedSquareIcon(context.getResources(), icon);
         }
@@ -381,18 +393,17 @@
      * Returns the resource id of the title (short version), shown on the Site Settings page
      * and in the global toggle at the top of a Website Settings page for a content type.
      */
-    public static int getTitle(int contentType) {
-        return getResourceItem(contentType).getTitle();
+    public static int getTitle(int contentType, SiteSettingsDelegate delegate) {
+        return getResourceItem(contentType, delegate).getTitle();
     }
 
-
     /**
      * Returns which ContentSetting the global default is set to, when enabled.
      * Either Ask/Allow. Not required unless this entry describes a settings
      * that appears on the Site Settings page and has a global toggle.
      */
     public static @ContentSettingValues @Nullable Integer getDefaultEnabledValue(int contentType) {
-        return getResourceItem(contentType).getDefaultEnabledValue();
+        return getResourceItem(contentType, null).getDefaultEnabledValue();
     }
 
     /**
@@ -401,7 +412,7 @@
      * that appears on the Site Settings page and has a global toggle.
      */
     public static @ContentSettingValues @Nullable Integer getDefaultDisabledValue(int contentType) {
-        return getResourceItem(contentType).getDefaultDisabledValue();
+        return getResourceItem(contentType, null).getDefaultDisabledValue();
     }
 
     /**
@@ -456,14 +467,14 @@
      * Returns the summary (resource id) to show when the content type is enabled.
      */
     public static int getEnabledSummary(int contentType) {
-        return getResourceItem(contentType).getEnabledSummary();
+        return getResourceItem(contentType, null).getEnabledSummary();
     }
 
     /**
      * Returns the summary (resource id) to show when the content type is disabled.
      */
     public static int getDisabledSummary(int contentType) {
-        return getResourceItem(contentType).getDisabledSummary();
+        return getResourceItem(contentType, null).getDisabledSummary();
     }
 
     /**
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
index 4b402d6..0269c19 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
@@ -901,7 +901,8 @@
             extras.putSerializable(ChosenObjectSettings.EXTRA_OBJECT_INFOS, entry.first);
             extras.putSerializable(ChosenObjectSettings.EXTRA_SITES, entry.second);
             preference.setIcon(SettingsUtils.getTintedIcon(getContext(),
-                    ContentSettingsResources.getIcon(mCategory.getContentSettingsType())));
+                    ContentSettingsResources.getIcon(
+                            mCategory.getContentSettingsType(), getSiteSettingsDelegate())));
             preference.setTitle(entry.first.get(0).getName());
             preference.setFragment(ChosenObjectSettings.class.getCanonicalName());
             getPreferenceScreen().addPreference(preference);
@@ -1107,7 +1108,8 @@
 
     private void configureBinaryToggle(ChromeSwitchPreference binaryToggle, int contentType) {
         binaryToggle.setOnPreferenceChangeListener(this);
-        binaryToggle.setTitle(ContentSettingsResources.getTitle(contentType));
+        binaryToggle.setTitle(
+                ContentSettingsResources.getTitle(contentType, getSiteSettingsDelegate()));
 
         // Set summary on or off.
         BrowserContextHandle browserContextHandle =
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
index 70235b23..e754d8f 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
@@ -453,7 +453,7 @@
     private Drawable getContentSettingsIcon(@ContentSettingsType int contentSettingsType,
             @ContentSettingValues @Nullable Integer value) {
         return ContentSettingsResources.getContentSettingsIcon(
-                getContext(), contentSettingsType, value);
+                getContext(), contentSettingsType, value, getSiteSettingsDelegate());
     }
 
     /**
@@ -962,7 +962,8 @@
             Preference preference, @ContentSettingValues @Nullable Integer value) {
         @ContentSettingsType
         int contentType = getContentSettingsTypeFromPreferenceKey(preference.getKey());
-        int titleResourceId = ContentSettingsResources.getTitle(contentType);
+        int titleResourceId =
+                ContentSettingsResources.getTitle(contentType, getSiteSettingsDelegate());
 
         if (titleResourceId != 0) {
             preference.setTitle(titleResourceId);
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
index d551f6fb..379290c 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
@@ -62,6 +62,9 @@
         // associated content settings entry.
         BrowserContextHandle browserContextHandle =
                 getSiteSettingsDelegate().getBrowserContextHandle();
+        @CookieControlsMode
+        int cookieControlsMode =
+                UserPrefs.get(browserContextHandle).getInteger(COOKIE_CONTROLS_MODE);
         for (@Type int prefCategory = 0; prefCategory < Type.NUM_ENTRIES; prefCategory++) {
             Preference p = findPreference(prefCategory);
             int contentType = SiteSettingsCategory.contentSettingsType(prefCategory);
@@ -87,7 +90,7 @@
                         browserContextHandle, contentType);
             }
 
-            p.setTitle(ContentSettingsResources.getTitle(contentType));
+            p.setTitle(ContentSettingsResources.getTitle(contentType, getSiteSettingsDelegate()));
             p.setOnPreferenceClickListener(this);
 
             if ((Type.CAMERA == prefCategory || Type.MICROPHONE == prefCategory
@@ -100,8 +103,7 @@
                 // Show 'disabled' message when permission is not granted in Android.
                 p.setSummary(ContentSettingsResources.getCategorySummary(contentType, false));
             } else if (Type.COOKIES == prefCategory && checked
-                    && UserPrefs.get(browserContextHandle).getInteger(COOKIE_CONTROLS_MODE)
-                            == CookieControlsMode.BLOCK_THIRD_PARTY) {
+                    && cookieControlsMode == CookieControlsMode.BLOCK_THIRD_PARTY) {
                 p.setSummary(ContentSettingsResources.getCookieAllowedExceptThirdPartySummary());
             } else if (Type.DEVICE_LOCATION == prefCategory && checked
                     && WebsitePreferenceBridge.isLocationAllowedByPolicy(browserContextHandle)) {
@@ -122,8 +124,8 @@
                 p.setSummary(ContentSettingsResources.getCategorySummary(contentType, checked));
             }
 
-            p.setIcon(SettingsUtils.getTintedIcon(
-                    getContext(), ContentSettingsResources.getIcon(contentType)));
+            p.setIcon(SettingsUtils.getTintedIcon(getContext(),
+                    ContentSettingsResources.getIcon(contentType, getSiteSettingsDelegate())));
         }
 
         Preference p = findPreference(Type.ALL_SITES);
@@ -131,6 +133,16 @@
         // TODO(finnur): Re-move this for Storage once it can be moved to the 'Usage' menu.
         p = findPreference(Type.USE_STORAGE);
         if (p != null) p.setOnPreferenceClickListener(this);
+
+        p = findPreference(Type.THIRD_PARTY_COOKIES);
+        if (p != null) {
+            p.setOnPreferenceClickListener(this);
+            // TODO(b/254416343): Handle block 3p cookies in incognito state?
+            p.setSummary(ContentSettingsResources.getCategorySummary(
+                    (cookieControlsMode == CookieControlsMode.BLOCK_THIRD_PARTY)
+                            ? ContentSettingValues.BLOCK
+                            : ContentSettingValues.ALLOW));
+        }
     }
 
     @Override
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
index f08c0740..e9159d3 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
@@ -43,7 +43,7 @@
             Type.JAVASCRIPT, Type.MICROPHONE, Type.NFC, Type.NOTIFICATIONS, Type.POPUPS,
             Type.PROTECTED_MEDIA, Type.SENSORS, Type.SOUND, Type.USB, Type.VIRTUAL_REALITY,
             Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE,
-            Type.FEDERATED_IDENTITY_API})
+            Type.FEDERATED_IDENTITY_API, Type.THIRD_PARTY_COOKIES, Type.SITE_DATA})
     @Retention(RetentionPolicy.SOURCE)
     public @interface Type {
         // All updates here must also be reflected in {@link #preferenceKey(int)
@@ -74,10 +74,12 @@
         int AUTO_DARK_WEB_CONTENT = 23;
         int REQUEST_DESKTOP_SITE = 24;
         int FEDERATED_IDENTITY_API = 25;
+        int THIRD_PARTY_COOKIES = 26;
+        int SITE_DATA = 27;
         /**
          * Number of handled categories used for calculating array sizes.
          */
-        int NUM_ENTRIES = 26;
+        int NUM_ENTRIES = 28;
     }
 
     private final BrowserContextHandle mBrowserContextHandle;
@@ -173,6 +175,7 @@
             case Type.CLIPBOARD:
                 return ContentSettingsType.CLIPBOARD_READ_WRITE;
             case Type.COOKIES:
+            case Type.SITE_DATA:
                 return ContentSettingsType.COOKIES;
             case Type.REQUEST_DESKTOP_SITE:
                 return ContentSettingsType.REQUEST_DESKTOP_SITE;
@@ -202,11 +205,13 @@
                 return ContentSettingsType.USB_GUARD;
             case Type.VIRTUAL_REALITY:
                 return ContentSettingsType.VR;
-            // case Type.ALL_SITES
-            // case Type.USE_STORAGE
-            default:
+            case Type.ALL_SITES:
+            case Type.USE_STORAGE:
+            case Type.THIRD_PARTY_COOKIES:
                 return ContentSettingsType.DEFAULT; // Conversion unavailable.
         }
+        assert false;
+        return ContentSettingsType.DEFAULT;
     }
 
     /**
@@ -282,6 +287,10 @@
                 return "use_storage";
             case Type.VIRTUAL_REALITY:
                 return "virtual_reality";
+            case Type.SITE_DATA:
+                return "site_data";
+            case Type.THIRD_PARTY_COOKIES:
+                return "third_party_cookies";
             default:
                 assert false;
                 return "";
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java
index cf016a1..e80ab7f8 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java
@@ -66,6 +66,11 @@
     boolean isPrivacySandboxFirstPartySetsUIFeatureEnabled();
 
     /**
+     * @return true if the PrivacySandboxSettings4 feature is enabled.
+     */
+    boolean isPrivacySandboxSettings4Enabled();
+
+    /**
      * @return The id of the notification channel associated with the given origin.
      */
     // TODO(crbug.com/1069895): Remove this once WebLayer supports notifications.
diff --git a/components/browser_ui/strings/android/site_settings.grdp b/components/browser_ui/strings/android/site_settings.grdp
index ab9fc25..b4c770c4 100644
--- a/components/browser_ui/strings/android/site_settings.grdp
+++ b/components/browser_ui/strings/android/site_settings.grdp
@@ -30,6 +30,12 @@
   <message name="IDS_CLIPBOARD_PERMISSION_TITLE" desc="Title of the permission to read from clipboard [CHAR_LIMIT=32]">
     Clipboard
   </message>
+  <message name="IDS_THIRD_PARTY_COOKIES_PAGE_TITLE" desc="The label used for the third-party cookies settings controls." translateable="false">
+    Third-party cookies
+  </message>
+  <message name="IDS_SITE_DATA_PAGE_TITLE" desc="The label used for the site data settings controls." translateable="false">
+    On-device site data
+  </message>
   <message name="IDS_WEBSITE_SETTINGS_IDLE_DETECTION" desc="Title of the permission to detect user activity [CHAR_LIMIT=32]">
     Your device use
   </message>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb
index d1bd7a30..1804a20b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Sleep van bo af en raak die terugknoppie om volskerm te verlaat.</translation>
 <translation id="5300589172476337783">Wys</translation>
 <translation id="5301954838959518834">OK, het dit</translation>
-<translation id="5313967007315987356">Voeg werf by</translation>
 <translation id="5317780077021120954">Berg</translation>
 <translation id="5335288049665977812">Laat werwe toe om JavaScript te gebruik (aanbeveel)</translation>
 <translation id="534295439873310000">NFC-toestelle</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> gekies</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> en <ph name="PERMISSION_2" /> word toegelaat</translation>
 <translation id="7302486331832100261">Jy blokkeer gewoonlik kennisgewings. Tik op Besonderhede om toe te laat.</translation>
+<translation id="7366415735885268578">Voeg 'n werf by</translation>
 <translation id="7383715096023715447">Instellings vir <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Vra eers</translation>
 <translation id="7423538860840206698">Geblokkeer om knipbord te lees</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Hierdie werf wys indringerige of misleidende advertensies</translation>
 <translation id="8394832520002899662">Tik om na werf terug te keer</translation>
 <translation id="8409345997656833551">Word in kennis gestel wanneer ’n artikel in vereenvoudigde aansig gewys kan word</translation>
+<translation id="8423565414844018592">Teksskalering is gestel op <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Instellings</translation>
 <translation id="8441146129660941386">Soek agtertoe</translation>
 <translation id="8444433999583714703">Om <ph name="APP_NAME" /> toegang tot jou ligging te gee, moet jy ligging ook in <ph name="BEGIN_LINK" />Android-instellings<ph name="END_LINK" /> aanskakel.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC is af vir hierdie toestel. Skakel dit aan in <ph name="BEGIN_LINK" />Android-instellings<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Blokkeer werwe om inligting op NFC-toestelle te sien en te verander</translation>
-<translation id="8941729603749328384">www.voorbeeld.com</translation>
 <translation id="8958424370300090006">Blokkeer webkoekies vir 'n spesifieke werf.</translation>
 <translation id="8959122750345127698">Navigasie is onbereikbaar: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Vergeet</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
index 3d831e92..4b0e743a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">ከሙሉ ማያ ገጽ ለመውጣት ከላይ ይጎትቱ እና የተመለስ አዝራሩን ይንኩ።</translation>
 <translation id="5300589172476337783">አሳይ</translation>
 <translation id="5301954838959518834">እሺ፣ ገባኝ</translation>
-<translation id="5313967007315987356">ጣቢያ አክል</translation>
 <translation id="5317780077021120954">አስቀምጥ</translation>
 <translation id="5335288049665977812">ጣቢያዎች ጃቫስክሪፕትን እንዲያሄዱ ፍቀድላቸው (የሚመከር)</translation>
 <translation id="534295439873310000">የNFC መሣሪያዎች</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ተመርጠዋል</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> እና <ph name="PERMISSION_2" /> ተፈቅደዋል</translation>
 <translation id="7302486331832100261">ማሳወቂያዎችን ብዙውን ጊዜ ያግዳሉ። ለመፍቀድ፣ ዝርዝሮች ላይ መታ ያድርጉ።</translation>
+<translation id="7366415735885268578">አንድ ጣቢያ ያክሉ</translation>
 <translation id="7383715096023715447">የ<ph name="DOMAIN" /> ቅንብሮች</translation>
 <translation id="7423098979219808738">መጀመሪያ ጠይቅ</translation>
 <translation id="7423538860840206698">ቅንጥብ ሰሌዳን ከማንበብ ታግዷል</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC ለዚህ መሣሪያ ጠፍቷል። በ<ph name="BEGIN_LINK" />Android ቅንበሮች<ph name="END_LINK" /> ውስጥ ያብሩት።</translation>
 <translation id="8928445016601307354">ጣቢያዎች በኤንኤፍሲ መሣሪያዎች ላይ መረጃን እንዳያዩ እና እንዳይቀይሩ ያግዱ</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">የአንድ የተወሰነ ጣቢያ ኩኪዎችን ያግዱ።</translation>
 <translation id="8959122750345127698">ዳሰሳ ሊደረስበት አይችልም፦ <ph name="URL" /></translation>
 <translation id="8986362086234534611">እርሳ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
index 5f95a3e..7ee72a6 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
@@ -201,7 +201,6 @@
 <translation id="528192093759286357">اسحب من الجزء العلوي والمس زر الرجوع للخروج من وضع ملء الشاشة.</translation>
 <translation id="5300589172476337783">عرض</translation>
 <translation id="5301954838959518834">حسنًا</translation>
-<translation id="5313967007315987356">إضافة موقع إلكتروني</translation>
 <translation id="5317780077021120954">حفظ</translation>
 <translation id="5335288049665977812">‏السماح للمواقع الإلكترونية بتشغيل JavaScript (موصى به)</translation>
 <translation id="534295439873310000">‏أجهزة NFC</translation>
@@ -300,6 +299,7 @@
 <translation id="7250468141469952378">تم اختيار <ph name="ITEM_COUNT" /> عنصراً</translation>
 <translation id="7260727271532453612">تم السماح بالوصول إلى <ph name="PERMISSION_1" /> و<ph name="PERMISSION_2" />.</translation>
 <translation id="7302486331832100261">أنت تحظر الإشعارات عادةً. للسماح بها، يُرجى النقر على "التفاصيل".</translation>
+<translation id="7366415735885268578">إضافة موقع إلكتروني</translation>
 <translation id="7383715096023715447">إعدادات النطاق <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">السؤال أولاً</translation>
 <translation id="7423538860840206698">تم الحظر من قراءة الحافظة</translation>
@@ -385,7 +385,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">‏تقنية NFC غير مفعّلة على هذا الجهاز. فعّلها في<ph name="BEGIN_LINK" />إعدادات Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">‏يتيح لك هذا الإعداد منع المواقع الإلكترونية من الاطّلاع على المعلومات وتعديلها على الأجهزة المزوَّدة بتقنية NFC.</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">حظر ملفات تعريف الارتباط لموقع إلكتروني مُحدَّد.</translation>
 <translation id="8959122750345127698">التنقل غير قابل للوصول: <ph name="URL" /></translation>
 <translation id="8986362086234534611">حذف</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb
index feb25b79..18e655a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">সম্পূৰ্ণ স্ক্ৰীনৰ পৰা প্ৰস্থান কৰিবলৈ ওপৰৰ পৰা টানি আনক আৰু বেক বুটামটো টিপক।</translation>
 <translation id="5300589172476337783">দেখুৱাওক</translation>
 <translation id="5301954838959518834">ঠিক আছে, বুজি পালোঁ</translation>
-<translation id="5313967007315987356">ছাইট যোগ দিয়ক</translation>
 <translation id="5317780077021120954">ছেভ কৰক</translation>
 <translation id="5335288049665977812">JavaScript চলাবলৈ ছাইটক অনুমতি দিয়ক (চুপাৰিছ কৰা)</translation>
 <translation id="534295439873310000">NFC ডিভাইচসমূহ</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" />টা বাছনি কৰা হৈছে</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> আৰু <ph name="PERMISSION_2" />ৰ অনুমতি দিয়া আছে</translation>
 <translation id="7302486331832100261">আপুনি সাধাৰণতে জাননীসমূহ অৱৰোধ কৰে। অনুমতি দিবলৈ সবিশেষত টিপক।</translation>
+<translation id="7366415735885268578">এটা ছাইট যোগ দিয়ক</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" />ৰ ছেটিং</translation>
 <translation id="7423098979219808738">প্ৰথমে সোধক</translation>
 <translation id="7423538860840206698">ক্লিপব’ৰ্ড পঢ়াৰ সুবিধা অৱৰোধ কৰা হৈছে</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">এই ডিভাইচটোৰ বাবে NFC অফ কৰা আছে। ইয়াক <ph name="BEGIN_LINK" />Android ছেটিংসমূহ<ph name="END_LINK" />লৈ গৈ অন কৰক।</translation>
 <translation id="8928445016601307354">ছাইটসমূহক NFC ডিভাইচত তথ্য চোৱা আৰু সলনি কৰাৰ পৰা অৱৰোধ কৰক</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">কোনো বিশেষ ছাইটৰ বাবে কুকিসমূহ অৱৰোধ কৰক।</translation>
 <translation id="8959122750345127698">ইয়ালৈ নেভিগেশ্বন পাব পৰা অৱস্থাত নাই: <ph name="URL" /></translation>
 <translation id="8986362086234534611">পাহৰক</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
index d0d8bad8..d1562cb 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Yuxarıdan sürüşdürün və tam ekrandan çıxmaq üçün geri düyməsinə basın.</translation>
 <translation id="5300589172476337783">Göstərin</translation>
 <translation id="5301954838959518834">Ok, anladım</translation>
-<translation id="5313967007315987356">Sayt əlavə edin</translation>
 <translation id="5317780077021120954">Yadda saxlayın</translation>
 <translation id="5335288049665977812">Saytlara JavaScript işlətməyə icazə verin (tövsiyə olunur)</translation>
 <translation id="534295439873310000">NFC cihazları</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> seçildi</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> və <ph name="PERMISSION_2" /> üçün icazə verilib</translation>
 <translation id="7302486331832100261">Adətən bildirişləri bloklayırsınız. İcazə vermək üçün Detallar seçiminə toxunun.</translation>
+<translation id="7366415735885268578">Sayt əlavə edin</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> üçün ayarlar</translation>
 <translation id="7423098979219808738">Öncə soruşun</translation>
 <translation id="7423538860840206698">Buferdə oxu girişi blok edildi</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC bu cihazda deaktivdir. <ph name="BEGIN_LINK" />Android Ayarlarında<ph name="END_LINK" /> onu aktiv edin.</translation>
 <translation id="8928445016601307354">Saytların NFC cihazlarındakı məlumatları görməsi və dəyişməsini bloklayın</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Xüsusi sayt üçün kukiləri blok edin.</translation>
 <translation id="8959122750345127698">Naviqasiya əlçatmazdır: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Unudun</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb
index cebc27e..5821dd7 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Каб выйсці з поўнаэкраннага рэжыму, правядзіце зверху ўніз і націсніце кнопку "Назад".</translation>
 <translation id="5300589172476337783">Паказаць</translation>
 <translation id="5301954838959518834">OK</translation>
-<translation id="5313967007315987356">Дадаванне сайта</translation>
 <translation id="5317780077021120954">Захаваць</translation>
 <translation id="5335288049665977812">Дазволіць сайтам запускаць JavaScript (рэкамендавана)</translation>
 <translation id="534295439873310000">Прылады NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Выбрана: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Дазволены <ph name="PERMISSION_1" /> і <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Звычайна вы блакіруеце апавяшчэнні. Каб дазволіць іх, націсніце "Падрабязнасці".</translation>
+<translation id="7366415735885268578">Дадаванне сайта</translation>
 <translation id="7383715096023715447">Налады для дамена <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Спачатку запытваць</translation>
 <translation id="7423538860840206698">Чытанне буфера абмену заблакіравана</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Гэты сайт паказвае назойлівую рэкламу або рэкламу, якая ўводзіць у зман</translation>
 <translation id="8394832520002899662">Каб вярнуцца на сайт, націсніце тут</translation>
 <translation id="8409345997656833551">Апавяшчаць, калі артыкул можна адкрыць у спрошчаным выглядзе</translation>
+<translation id="8423565414844018592">Зададзены маштаб тэксту: <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Налады</translation>
 <translation id="8441146129660941386">Перайсці назад</translation>
 <translation id="8444433999583714703">Каб даць праграме "<ph name="APP_NAME" />" доступ да даных пра ваша месцазнаходжанне, уключыце апошнія ў <ph name="BEGIN_LINK" />Наладах Android<ph name="END_LINK" />.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Функцыя NFC выключана на гэтай прыладзе. Уключыце яе ў <ph name="BEGIN_LINK" />Наладах Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Забараніць сайтам праглядаць і змяняць інфармацыю на прыладах NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Блакіраваць файлы cookie для пэўнага сайта.</translation>
 <translation id="8959122750345127698">Пераход па наступным адрасе недаступны: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Забыць</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
index 657450d..9db9dd7 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Плъзнете пръст от горната част на екрана и докоснете бутона за връщане назад, за да излезете от режима на цял екран.</translation>
 <translation id="5300589172476337783">Показване</translation>
 <translation id="5301954838959518834">Добре, разбрах</translation>
-<translation id="5313967007315987356">Добавяне на сайт</translation>
 <translation id="5317780077021120954">Запазване</translation>
 <translation id="5335288049665977812">Разрешаване на сайтовете да изпълняват JavaScript (препоръчително)</translation>
 <translation id="534295439873310000">Устройства с NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Избрани: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Достъпът до <ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /> е разрешен</translation>
 <translation id="7302486331832100261">Обикновено блокирате известията. За да разрешите, докоснете „Подробности“.</translation>
+<translation id="7366415735885268578">Добавяне на сайт</translation>
 <translation id="7383715096023715447">Настройки за <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Първо ще се извежда запитване</translation>
 <translation id="7423538860840206698">Достъпът за четене до буферната памет е блокиран</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Функцията за NFC е изключена на това устройство. Включете я от <ph name="BEGIN_LINK" />настройките на Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Блокиране на сайтовете, така че да не могат да четат и променят информация на устройства с NFC (препоръчително)</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Блокиране на „бисквитките“ за конкретен сайт.</translation>
 <translation id="8959122750345127698">Навигирането не е възможно: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Забравяне</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
index 502a5c5..d7d23b4 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">উপর থেকে টেনে আনুন এবং পূর্ণ স্ক্রিন থেকে বেরিয়ে যেতে পিছনে ফেরার বোতাম স্পর্শ করুন।</translation>
 <translation id="5300589172476337783">দেখান</translation>
 <translation id="5301954838959518834">ঠিক আছে, বুঝেছি</translation>
-<translation id="5313967007315987356">সাইট যোগ করুন</translation>
 <translation id="5317780077021120954">সেভ করুন</translation>
 <translation id="5335288049665977812">সাইটগুলিকে JavaScript চালানোর অনুমতি দিন (প্রস্তাবিত)</translation>
 <translation id="534295439873310000">NFC ডিভাইস</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" />টি বেছে নেওয়া হয়েছে</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> ও <ph name="PERMISSION_2" /> ব্যবহারের অনুমতি দেওয়া হয়েছে</translation>
 <translation id="7302486331832100261">আপনি সাধারণত বিজ্ঞপ্তি ব্লক করেন। অনুমতি দিতে, 'বিবরণ' বিকল্পে ক্লিক করুন।</translation>
+<translation id="7366415735885268578">একটি সাইট যোগ করুন</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" />-এর সেটিংস</translation>
 <translation id="7423098979219808738">প্রথমে জিজ্ঞাসা করুন</translation>
 <translation id="7423538860840206698">ক্লিপবোর্ড পড়া ব্লক করা হয়েছে</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">এই ডিভাইসে NFC বন্ধ আছে। <ph name="BEGIN_LINK" />Android সেটিংস<ph name="END_LINK" /> থেকে এটি চালু করুন।</translation>
 <translation id="8928445016601307354">NFC ডিভাইসে তথ্য দেখা এবং পরিবর্তন করা থেকে সাইটগুলিকে ব্লক করুন</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">কোনও নির্দিষ্ট সাইটের জন্য কুকি ব্লক করুন।</translation>
 <translation id="8959122750345127698">নেভিগেশানে পৌছানো যাচ্ছে না: <ph name="URL" /></translation>
 <translation id="8986362086234534611">ভুলে যান</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
index 5e9e8d55..42d8c69 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Povucite s vrha i dodirnite dugme za nazad da napustite prikaz preko cijelog ekrana.</translation>
 <translation id="5300589172476337783">Prikaži</translation>
 <translation id="5301954838959518834">Uredu, razumijem</translation>
-<translation id="5313967007315987356">Dodajte web lokaciju</translation>
 <translation id="5317780077021120954">Sačuvaj</translation>
 <translation id="5335288049665977812">Web-lokacije mogu pokretati JavaScript (preporučeno)</translation>
 <translation id="534295439873310000">NFC uređaji</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Odabrano <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Dozvoljeno: <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Obično blokirate obavještenja. Da dozvolite, dodirnite Detalji.</translation>
+<translation id="7366415735885268578">Dodajte web lokaciju</translation>
 <translation id="7383715096023715447">Postavke za domenu <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Prvo pitaj</translation>
 <translation id="7423538860840206698">Čitanje međumemorije je blokirano</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC je isključen na ovom uređaju. Uključite ga u <ph name="BEGIN_LINK" />Postavkama Androida<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Blokirajte web lokacijama pregled i izmjenu informacija na NFC uređajima</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokiranje kolačića za određenu web lokaciju.</translation>
 <translation id="8959122750345127698">Navigacija je nedostupna: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Zaboravi</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb
index 3919fda..12e75641 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Arrossegueu la pantalla des de la part superior i toqueu el botó Enrere per sortir de la pantalla completa.</translation>
 <translation id="5300589172476337783">Mostra</translation>
 <translation id="5301954838959518834">D'acord</translation>
-<translation id="5313967007315987356">Afegeix un lloc web</translation>
 <translation id="5317780077021120954">Desa</translation>
 <translation id="5335288049665977812">Permet que els llocs web executin JavaScript (opció recomanada)</translation>
 <translation id="534295439873310000">Dispositius amb NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> elements seleccionats</translation>
 <translation id="7260727271532453612">S'han permès <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Normalment bloqueges les notificacions. Per permetre-les, toca Detalls.</translation>
+<translation id="7366415735885268578">Afegeix un lloc</translation>
 <translation id="7383715096023715447">Configuració de <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Pregunta abans</translation>
 <translation id="7423538860840206698">L'accés de lectura al porta-retalls està bloquejat</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">L'NFC està desactivada en aquest dispositiu. Activa-la a la <ph name="BEGIN_LINK" />configuració d'Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Bloqueja els llocs web perquè no vegin ni canviïn la informació que hi ha als dispositius amb NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Bloqueja les galetes d'un lloc web concret.</translation>
 <translation id="8959122750345127698">No es pot accedir a la navegació: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Oblida</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb
index f837e35d..018a989 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Režim celé obrazovky ukončíte přetažením z horního okraje obrazovky a klepnutím na tlačítko Zpět.</translation>
 <translation id="5300589172476337783">Zobrazit</translation>
 <translation id="5301954838959518834">Dobře, rozumím</translation>
-<translation id="5313967007315987356">Přidat web</translation>
 <translation id="5317780077021120954">Uložit</translation>
 <translation id="5335288049665977812">Povolit webům spouštět JavaScript (doporučeno)</translation>
 <translation id="534295439873310000">Zařízení NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Vybráno: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Oprávnění <ph name="PERMISSION_1" /> a <ph name="PERMISSION_2" /> jsou povolena</translation>
 <translation id="7302486331832100261">Obvykle oznámení blokujete. Chcete-li je povolit, klepněte na Podrobnosti.</translation>
+<translation id="7366415735885268578">Přidání webu</translation>
 <translation id="7383715096023715447">Nastavení zařízení <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Nejprve se dotázat</translation>
 <translation id="7423538860840206698">Čtení schránky je blokováno</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Funkce NFC je v tomto zařízení vypnutá. Zapnete ji v <ph name="BEGIN_LINK" />Nastavení Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Bránit webům v zobrazení a změně informací na zařízeních NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokovat soubory cookie pro konkrétní web.</translation>
 <translation id="8959122750345127698">Navigace není dosažitelná: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Odstranit</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb
index 8e4a75f..2ab52bc 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Llusgwch o'r brig a chyffyrddwch â'r botwm nôl i adael y sgrîn lawn.</translation>
 <translation id="5300589172476337783">Arddangos</translation>
 <translation id="5301954838959518834">Iawn</translation>
-<translation id="5313967007315987356">Ychwanegu gwefan</translation>
 <translation id="5317780077021120954">Cadw</translation>
 <translation id="5335288049665977812">Caniatáu i wefannau redeg JavaScript (argymhellir)</translation>
 <translation id="534295439873310000">Dyfeisiau NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Mae <ph name="ITEM_COUNT" /> wedi'u dewis</translation>
 <translation id="7260727271532453612">Caniateir <ph name="PERMISSION_1" /> a <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Rydych fel arfer yn rhwystro hysbysiadau. I'w caniatáu, tapiwch Manylion.</translation>
+<translation id="7366415735885268578">Ychwanegu gwefan</translation>
 <translation id="7383715096023715447">Gosodiadau ar gyfer <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Gofyn yn gyntaf</translation>
 <translation id="7423538860840206698">Wedi'i rwystro rhag darllen y clipfwrdd</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Mae NFC wedi'i ddiffodd ar gyfer y ddyfais hon. Trowch ef ymlaen yn <ph name="BEGIN_LINK" />Gosodiadau Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Rhwystro gwefannau rhag gweld a newid gwybodaeth ar ddyfeisiau NFC</translation>
-<translation id="8941729603749328384">www.enghraifft.com</translation>
 <translation id="8958424370300090006">Rhwystro cwcis ar gyfer gwefan benodol.</translation>
 <translation id="8959122750345127698">Mae llywio yn anghyraeddadwy: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Anghofio</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
index 081c1e2..963755a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Træk fra toppen, og tryk på tilbageknappen igen for at afslutte fuld skærm.</translation>
 <translation id="5300589172476337783">Vis</translation>
 <translation id="5301954838959518834">OK, det er forstået</translation>
-<translation id="5313967007315987356">Tilføj website</translation>
 <translation id="5317780077021120954">Gem</translation>
 <translation id="5335288049665977812">Tillad, at websites kører JavaScript (anbefales)</translation>
 <translation id="534295439873310000">NFC-enheder</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> er markeret</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /> blev tilladt</translation>
 <translation id="7302486331832100261">Du blokerer som regel notifikationer. Tryk på Info for at give tilladelse.</translation>
+<translation id="7366415735885268578">Tilføj et website</translation>
 <translation id="7383715096023715447">Indstillinger for <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Spørg først</translation>
 <translation id="7423538860840206698">Blokeret fra at læse udklipsholderen</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC er deaktiveret for denne enhed. Aktivér funktionen i <ph name="BEGIN_LINK" />Android-indstillingerne<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Bloker websites, så de ikke kan få adgang til og ændre oplysninger på NFC-enheder</translation>
-<translation id="8941729603749328384">www.eksempel.dk</translation>
 <translation id="8958424370300090006">Bloker cookies for et bestemt website.</translation>
 <translation id="8959122750345127698">Navigationen er ikke mulig: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Glem</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
index cf41e14f..9c7d66f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Ziehe zum Beenden des Vollbildmodus von oben und tippe auf die Zurück-Taste.</translation>
 <translation id="5300589172476337783">Anzeigen</translation>
 <translation id="5301954838959518834">Ok</translation>
-<translation id="5313967007315987356">Website hinzufügen</translation>
 <translation id="5317780077021120954">Speichern</translation>
 <translation id="5335288049665977812">Ausführung von JavaScript durch Websites zulassen (empfohlen)</translation>
 <translation id="534295439873310000">NFC-Geräte</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ausgewählt</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> und <ph name="PERMISSION_2" /> zugelassen</translation>
 <translation id="7302486331832100261">Normalerweise blockierst du Benachrichtigungen. Du kannst auf Details tippen, um sie zuzulassen.</translation>
+<translation id="7366415735885268578">Website hinzufügen</translation>
 <translation id="7383715096023715447">Einstellungen für <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Zuerst fragen</translation>
 <translation id="7423538860840206698">Es dürfen keine Dateien aus der Zwischenablage abgerufen werden</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC ist für dieses Gerät deaktiviert. Du kannst die Funktion in den <ph name="BEGIN_LINK" />Android-Einstellungen<ph name="END_LINK" /> aktivieren.</translation>
 <translation id="8928445016601307354">Websites daran hindern, Informationen auf NFC-Geräten abzurufen und zu ändern</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Cookies für eine bestimmte Website werden blockiert.</translation>
 <translation id="8959122750345127698">Navigation nicht möglich: <ph name="URL" /> ist nicht erreichbar.</translation>
 <translation id="8986362086234534611">Entfernen</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
index 0e9a941f..500f4d8 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Σύρετε από το επάνω τμήμα και αγγίξτε το κουμπί επιστροφής για έξοδο από την πλήρη οθόνη.</translation>
 <translation id="5300589172476337783">Εμφάνιση</translation>
 <translation id="5301954838959518834">OK, το κατάλαβα</translation>
-<translation id="5313967007315987356">Προσθήκη ιστότοπου</translation>
 <translation id="5317780077021120954">Αποθήκευση</translation>
 <translation id="5335288049665977812">Να επιτρέπεται στους ιστότοπους να εκτελούν JavaScript (συνιστάται)</translation>
 <translation id="534295439873310000">Συσκευές NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Επιλέχθηκαν <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Οι άδειες <ph name="PERMISSION_1" /> και <ph name="PERMISSION_2" /> επιτράπηκαν.</translation>
 <translation id="7302486331832100261">Συνήθως αποκλείετε τις ειδοποιήσεις. Για να τις επιτρέψετε, πατήστε Λεπτομέρειες.</translation>
+<translation id="7366415735885268578">Προσθήκη ιστοτόπου</translation>
 <translation id="7383715096023715447">Ρυθμίσεις για τον τομέα <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Να γίνεται ερώτηση πρώτα</translation>
 <translation id="7423538860840206698">Αποκλεισμός από ανάγνωση πρόχειρου</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Αυτός ο ιστότοπος εμφανίζει παρεμβατικές ή παραπλανητικές διαφημίσεις</translation>
 <translation id="8394832520002899662">Πατήστε για επιστροφή στον ιστότοπο</translation>
 <translation id="8409345997656833551">Λάβετε ειδοποίηση όταν ένα άρθρο μπορεί να εμφανιστεί σε απλοποιημένη προβολή.</translation>
+<translation id="8423565414844018592">Η κλιμάκωση κειμένου ορίστηκε σε <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Ρυθμίσεις</translation>
 <translation id="8441146129660941386">Αναζήτηση προς τα πίσω</translation>
 <translation id="8444433999583714703">Για να επιτρέψετε στην εφαρμογή <ph name="APP_NAME" /> να αποκτήσει πρόσβαση στην τοποθεσία σας, ενεργοποιήστε επίσης την τοποθεσία στις <ph name="BEGIN_LINK" />Ρυθμίσεις Android<ph name="END_LINK" />.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Το NFC είναι ανενεργό για αυτήν τη συσκευή. Ενεργοποιήστε το στις <ph name="BEGIN_LINK" />Ρυθμίσεις Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Αποκλεισμός ιστοτόπων από την εμφάνιση και την αλλαγή πληροφοριών σε συσκευές NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Αποκλεισμός cookie για έναν συγκεκριμένο ιστοτόπο.</translation>
 <translation id="8959122750345127698">Δεν είναι δυνατή η μετάβαση στη διεύθυνση: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Διαγραφή από τη μνήμη</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
index 99ad6a7..c65ea4d 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Drag from top and touch the back button to exit full screen.</translation>
 <translation id="5300589172476337783">Show</translation>
 <translation id="5301954838959518834">OK, got it</translation>
-<translation id="5313967007315987356">Add site</translation>
 <translation id="5317780077021120954">Save</translation>
 <translation id="5335288049665977812">Allow sites to run JavaScript (recommended)</translation>
 <translation id="534295439873310000">NFC devices</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> selected</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> and <ph name="PERMISSION_2" /> allowed</translation>
 <translation id="7302486331832100261">You usually block notifications. To allow, tap Details.</translation>
+<translation id="7366415735885268578">Add a site</translation>
 <translation id="7383715096023715447">Settings for <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Ask first</translation>
 <translation id="7423538860840206698">Blocked from reading clipboard</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC is off for this device. Turn it on in <ph name="BEGIN_LINK" />Android settings<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Block sites from seeing and changing information on NFC devices</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Block cookies for a specific site.</translation>
 <translation id="8959122750345127698">Navigation is unreachable: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Forget</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
index c86fb183..76e0ac53 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Arrastra el dedo desde la parte superior y toca el botón Atrás para salir de la pantalla completa.</translation>
 <translation id="5300589172476337783">Mostrar</translation>
 <translation id="5301954838959518834">Entendido</translation>
-<translation id="5313967007315987356">Agregar sitio</translation>
 <translation id="5317780077021120954">Guardar</translation>
 <translation id="5335288049665977812">Permitir que los sitios ejecuten JavaScript (recomendado)</translation>
 <translation id="534295439873310000">Dispositivos NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Elementos seleccionados: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Permitidos: <ph name="PERMISSION_1" /> y <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Por lo general, bloqueas las notificaciones. Para permitirlas, presiona Detalles.</translation>
+<translation id="7366415735885268578">Agregar un sitio</translation>
 <translation id="7383715096023715447">Configuración de <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Preguntar primero</translation>
 <translation id="7423538860840206698">Se impidió la lectura del portapapeles</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">La tecnología NFC está desactivada en este dispositivo. Actívala en la <ph name="BEGIN_LINK" />Configuración de Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">No permitir que los sitio vean y cambien la información de los dispositivos NFC</translation>
-<translation id="8941729603749328384">www.ejemplo.com</translation>
 <translation id="8958424370300090006">Bloquea las cookies en un sitio específico.</translation>
 <translation id="8959122750345127698">Navegación inaccesible: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Borrar</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
index 2a28b67c..dffec3b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Arrastra el dedo desde la parte superior y toca el botón de retroceso para salir de la pantalla completa.</translation>
 <translation id="5300589172476337783">Mostrar</translation>
 <translation id="5301954838959518834">Entendido</translation>
-<translation id="5313967007315987356">Añadir sitio</translation>
 <translation id="5317780077021120954">Guardar</translation>
 <translation id="5335288049665977812">Permitir que los sitios utilicen JavaScript (recomendado)</translation>
 <translation id="534295439873310000">Dispositivos NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Elementos seleccionados: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> y <ph name="PERMISSION_2" /> permitidos</translation>
 <translation id="7302486331832100261">Sueles bloquear las notificaciones. Para permitirlas, toca Detalles.</translation>
+<translation id="7366415735885268578">Añadir un sitio</translation>
 <translation id="7383715096023715447">Configuración de <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Preguntar antes</translation>
 <translation id="7423538860840206698">Se ha bloqueado la lectura del portapapeles</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">La tecnología NFC está desactivada en este dispositivo. Actívala en los <ph name="BEGIN_LINK" />ajustes de Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Impide que los sitios vean y cambien la información de los dispositivos NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Bloquear las cookies de un sitio específico.</translation>
 <translation id="8959122750345127698">No se puede realizar la navegación: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Dejar de recordar</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
index 2d1c9022..c7604c1d 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Täisekraanilt väljumiseks lohistage ülaservast alla ja puudutage tagasinuppu.</translation>
 <translation id="5300589172476337783">Kuva</translation>
 <translation id="5301954838959518834">Selge, sain aru</translation>
-<translation id="5313967007315987356">Lisa sait</translation>
 <translation id="5317780077021120954">Salvesta</translation>
 <translation id="5335288049665977812">Luba saitidel käitada JavaScripti (soovitatav)</translation>
 <translation id="534295439873310000">NFC-seadmed</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> on valitud</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> ja <ph name="PERMISSION_2" /> on lubatud</translation>
 <translation id="7302486331832100261">Tavaliselt blokeerite märguanded. Lubamiseks puudutage valikut Üksikasjad.</translation>
+<translation id="7366415735885268578">Saidi lisamine</translation>
 <translation id="7383715096023715447">Domeeni <ph name="DOMAIN" /> seaded</translation>
 <translation id="7423098979219808738">Esmalt küsib</translation>
 <translation id="7423538860840206698">Lõikelaua lugemine on blokeeritud</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC on selle seadme puhul välja lülitatud. Lülitage see <ph name="BEGIN_LINK" />Androidi seadetes<ph name="END_LINK" /> sisse.</translation>
 <translation id="8928445016601307354">Saitidel keelatakse NFC-seadmetes teabe nägemine ja muutmine</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokeerige konkreetse saidi küpsisefailid.</translation>
 <translation id="8959122750345127698">Navigeerimine ei ole saadaval: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Unusta</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
index a4d95f4..575ac6d 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Pantaila osoko ikuspegitik irteteko, arrastatu goitik eta ukitu Atzera botoia.</translation>
 <translation id="5300589172476337783">Erakutsi</translation>
 <translation id="5301954838959518834">Ados, ulertu dut</translation>
-<translation id="5313967007315987356">Gehitu webgunea</translation>
 <translation id="5317780077021120954">Gorde</translation>
 <translation id="5335288049665977812">Baimendu webguneei JavaScript erabiltzea (gomendatua)</translation>
 <translation id="534295439873310000">NFC darabilten gailuak</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> hautatu dira</translation>
 <translation id="7260727271532453612">Baimena eman zaie hauei: <ph name="PERMISSION_1" /> eta <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Jakinarazpenak blokeatu ohi dituzu. Baimena emateko, sakatu "Xehetasunak".</translation>
+<translation id="7366415735885268578">Gehitu webgune bat</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> domeinuaren ezarpenak</translation>
 <translation id="7423098979219808738">Galdetu lehenbizi</translation>
 <translation id="7423538860840206698">Blokeatuta dago arbeleko edukia irakurtzeko aukera</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC aukera desaktibatuta dago gailu honetan. Aktiba ezazu <ph name="BEGIN_LINK" />Android-en ezarpenetan<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Ez utzi webguneei NFC darabilten gailuetako informazioa ikusten eta aldatzen</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokeatu webgune jakin bateko cookieak.</translation>
 <translation id="8959122750345127698">Ezin da joan <ph name="URL" /> orrira</translation>
 <translation id="8986362086234534611">Ahaztu</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb
index cf920fb..97727f31 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">برای خروج از حالت تمام صفحه، از بالا صفحه را بکشید و دکمه برگشت را لمس کنید.</translation>
 <translation id="5300589172476337783">نمایش</translation>
 <translation id="5301954838959518834">بله، متوجه شدم</translation>
-<translation id="5313967007315987356">افزودن سایت</translation>
 <translation id="5317780077021120954">ذخیره</translation>
 <translation id="5335288049665977812">مجاز کردن همه سایت‌ها برای اجرای جاوااسکریپت (توصیه‌ می‌شود)</translation>
 <translation id="534295439873310000">‏دستگاه‌های NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> مورد انتخاب شد</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> و <ph name="PERMISSION_2" /> مجاز هستند</translation>
 <translation id="7302486331832100261">معمولاً اعلان‌ها را مسدود می‌کنید. برای مجاز کردن، روی «جزئیات» ضربه بزنید.</translation>
+<translation id="7366415735885268578">افزودن سایت</translation>
 <translation id="7383715096023715447">تنظیمات <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">ابتدا سؤال شود</translation>
 <translation id="7423538860840206698">خواندن محتوای بریده‌دان مسدود شد</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">‏NFC برای این دستگاه خاموش است. در <ph name="BEGIN_LINK" />تنظیمات Android<ph name="END_LINK" /> آن را روشن کنید.</translation>
 <translation id="8928445016601307354">‏سایت‌ها اجازه نداشته باشند اطلاعات دستگاه‌های NFC را ببینند و تغییر دهند</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">کوکی‌ها را برای سایت خاصی مسدود کنید.</translation>
 <translation id="8959122750345127698">پیمایش غیرقابل دسترسی است: <ph name="URL" /></translation>
 <translation id="8986362086234534611">فراموش شود</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb
index f321b7ab..e4290eae 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Poistu koko näytön tilasta vetämällä näytön yläreunasta ja koskettamalla Takaisin-painiketta.</translation>
 <translation id="5300589172476337783">Näytä</translation>
 <translation id="5301954838959518834">Selvä</translation>
-<translation id="5313967007315987356">Lisää sivusto</translation>
 <translation id="5317780077021120954">Tallenna</translation>
 <translation id="5335288049665977812">Anna kaikkien sivustojen käyttää JavaScriptiä (suositus).</translation>
 <translation id="534295439873310000">NFC-laitteet</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> valittu</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> ja <ph name="PERMISSION_2" /> sallittu</translation>
 <translation id="7302486331832100261">Estät yleensä ilmoitukset. Voit sallia ne valitsemalla Tiedot.</translation>
+<translation id="7366415735885268578">Lisää sivusto</translation>
 <translation id="7383715096023715447">Asetukset: <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Kysy ensin</translation>
 <translation id="7423538860840206698">Leikepöydältä lukeminen estetty</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC on pois päältä tällä laitteella. Voit laittaa sen päälle <ph name="BEGIN_LINK" />Androidin asetuksista<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Estä sivustoja näkemästä ja muuttamasta NFC-laitteiden tietoja</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Estä evästeet tietyltä sivustolta.</translation>
 <translation id="8959122750345127698">Kohde ei ole saatavilla: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Unohda</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb
index d23d036..04a7965 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">I-drag mula sa itaas at pindutin ang button na bumalik upang lumabas sa full screen.</translation>
 <translation id="5300589172476337783">Ipakita</translation>
 <translation id="5301954838959518834">OK, nakuha ko</translation>
-<translation id="5313967007315987356">Magdagdag ng site</translation>
 <translation id="5317780077021120954">I-save</translation>
 <translation id="5335288049665977812">Payagan ang mga site na magpatakbo ng JavaScript (inirerekomenda)</translation>
 <translation id="534295439873310000">Mga NFC device</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ang napili</translation>
 <translation id="7260727271532453612">Pinapayagan ang <ph name="PERMISSION_1" /> at <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Kadalasan mong bina-block ang mga notification. Para payagan, i-tap ang Mga Detalye.</translation>
+<translation id="7366415735885268578">Magdagdag ng site</translation>
 <translation id="7383715096023715447">Mga setting para sa <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Magtanong muna</translation>
 <translation id="7423538860840206698">Na-block sa pag-read ng clipboard</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Naka-off ang NFC para sa device na ito. I-on ito sa <ph name="BEGIN_LINK" />Mga Setting ng Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">I-block ang mga site sa pagtingin at pagbago ng impormasyon sa mga NFC device</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Mag-block ng cookies para sa isang partikular na site.</translation>
 <translation id="8959122750345127698">Hindi gumagana ang navigation: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Kalimutan</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
index 9d72e1d..6ce25cb 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Faites glisser du haut vers le bas et appuyez sur le bouton de retour pour quitter le mode plein écran.</translation>
 <translation id="5300589172476337783">Afficher</translation>
 <translation id="5301954838959518834">J'ai compris.</translation>
-<translation id="5313967007315987356">Ajouter un site</translation>
 <translation id="5317780077021120954">Enregistrer</translation>
 <translation id="5335288049665977812">Autoriser les sites à exécuter JavaScript (recommandé)</translation>
 <translation id="534295439873310000">Appareils CCP</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> élément(s) sélectionné(s)</translation>
 <translation id="7260727271532453612">Autorisations <ph name="PERMISSION_1" /> et <ph name="PERMISSION_2" /> accordées</translation>
 <translation id="7302486331832100261">Vous bloquez habituellement les notifications. Pour les autoriser, touchez Détails.</translation>
+<translation id="7366415735885268578">Ajouter un site</translation>
 <translation id="7383715096023715447">Paramètres de <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Demander d'abord</translation>
 <translation id="7423538860840206698">La lecture du presse-papiers a été bloquée</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> sur <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">La CCP est désactivée pour cet appareil. Activez-la dans le menu <ph name="BEGIN_LINK" />Paramètres Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Empêcher les sites de consulter et de modifier les données stockées sur les appareils CCP</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Bloquer les témoins pour un site en particulier.</translation>
 <translation id="8959122750345127698">Navigation inaccessible : <ph name="URL" /></translation>
 <translation id="8986362086234534611">Supprimer</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
index 60eb2a42..f59a4913 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Pour quitter le mode plein écran, faites glisser un doigt du haut vers le bas, puis appuyez sur le bouton Retour.</translation>
 <translation id="5300589172476337783">Afficher</translation>
 <translation id="5301954838959518834">OK</translation>
-<translation id="5313967007315987356">Ajouter un site</translation>
 <translation id="5317780077021120954">Enregistrer</translation>
 <translation id="5335288049665977812">Autoriser les sites à exécuter JavaScript (recommandé)</translation>
 <translation id="534295439873310000">Appareils NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Nombre d'éléments sélectionnés : <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Autorisations accordées : <ph name="PERMISSION_1" /> et <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Vous avez l'habitude de bloquer les notifications. Pour les autoriser, appuyez sur "Détails".</translation>
+<translation id="7366415735885268578">Ajouter un site</translation>
 <translation id="7383715096023715447">Paramètres pour <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Demander d'abord</translation>
 <translation id="7423538860840206698">Accès en lecture au presse-papiers bloqué</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">La fonctionnalité NFC est désactivée pour cet appareil. Activez-la dans les <ph name="BEGIN_LINK" />paramètres Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Empêcher les sites de consulter et de modifier des informations sur des appareils NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Bloquez les cookies pour un site spécifique.</translation>
 <translation id="8959122750345127698">Impossible d'accéder à <ph name="URL" />.</translation>
 <translation id="8986362086234534611">Retirer</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb
index abd0dc4c..bf76ef1 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Arrastra desde a parte superior e toca o botón Volver para saír da pantalla completa.</translation>
 <translation id="5300589172476337783">Mostrar</translation>
 <translation id="5301954838959518834">Entendido</translation>
-<translation id="5313967007315987356">Engadir sitio</translation>
 <translation id="5317780077021120954">Gardar</translation>
 <translation id="5335288049665977812">Permite que os sitios executen JavaScript (recomendado)</translation>
 <translation id="534295439873310000">Dispositivos con NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Elementos seleccionados: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /> (permitidos)</translation>
 <translation id="7302486331832100261">Adoitas bloquear as notificacións. Para permitilas, toca Detalles.</translation>
+<translation id="7366415735885268578">Engade un sitio</translation>
 <translation id="7383715096023715447">Opcións de configuración de <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Preguntar primeiro</translation>
 <translation id="7423538860840206698">Bloqueouse a lectura do portapapeis</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Este sitio mostra anuncios intrusivos ou enganosos</translation>
 <translation id="8394832520002899662">Toca para volver ao sitio</translation>
 <translation id="8409345997656833551">Recibe notificacións cando se poida mostrar un artigo na vista simplificada</translation>
+<translation id="8423565414844018592">Tamaño de texto definido en <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8441146129660941386">Buscar cara atrás</translation>
 <translation id="8444433999583714703">Para permitir que <ph name="APP_NAME" /> acceda á túa localización, actívaa tamén en <ph name="BEGIN_LINK" />Configuración de Android<ph name="END_LINK" />.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">A NFC está desactivada para este dispositivo. Actívaa en <ph name="BEGIN_LINK" />Configuración de Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Impide que os sitios consulten e cambien información en dispositivos con NFC</translation>
-<translation id="8941729603749328384">www.exemplo.com</translation>
 <translation id="8958424370300090006">Bloquea cookies para un sitio específico.</translation>
 <translation id="8959122750345127698">A navegación é inaccesible: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Borrar</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb
index d30d2f4..a6bb56a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">પૂર્ણસ્ક્રીનથી બહાર નીકળવા માટે ઉપરથી ખેંચો અને પાછળ બટનને ટચ કરો.</translation>
 <translation id="5300589172476337783">બતાવો</translation>
 <translation id="5301954838959518834">બરાબર, સમજાઇ ગયું</translation>
-<translation id="5313967007315987356">સાઈટ ઉમેરો</translation>
 <translation id="5317780077021120954">સાચવો</translation>
 <translation id="5335288049665977812">સાઇટને JavaScript ચલાવાની મંજૂરી આપો (સુઝાવ આપીએ છીએ)</translation>
 <translation id="534295439873310000">NFC ડિવાઇસ</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" />ની પસંદગી કરી</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> અને <ph name="PERMISSION_2" />ની મંજૂરી આપી</translation>
 <translation id="7302486331832100261">તમે સામાન્ય રીતે નોટિફિકેશનને બ્લૉક કરો છો. મંજૂરી આપવા માટે, વિગતો પર ટૅપ કરો.</translation>
+<translation id="7366415735885268578">એક સાઇટ ઉમેરો</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> માટેના સેટિંગ</translation>
 <translation id="7423098979219808738">પ્રથમ પૂછો</translation>
 <translation id="7423538860840206698">ક્લિપબોર્ડ વાંચવાનું બ્લૉક કરેલ છે</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">આ ડિવાઇસ માટે NFC સેવા બંધ કરેલી છે. તેને <ph name="BEGIN_LINK" />Android સેટિંગ<ph name="END_LINK" />માં ચાલુ કરો.</translation>
 <translation id="8928445016601307354">NFC ડિવાઇસ પર સાઇટને માહિતી જોવાથી અને બદલવાથી બ્લૉક કરો</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">કોઈ ચોક્કસ સાઇટ માટે કુકીને બ્લૉક કરો.</translation>
 <translation id="8959122750345127698">નેવિગેશન બિનપહોંચ યોગ્ય છે: <ph name="URL" /></translation>
 <translation id="8986362086234534611">ભૂલી જાઓ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
index 2d1fb02a..33defeea 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">फ़ुल स्क्रीन से बाहर निकलने के लिए ऊपर से खींचें और वापस जाएं स्पर्श करें.</translation>
 <translation id="5300589172476337783">दिखाएं</translation>
 <translation id="5301954838959518834">ठीक है, समझ लिया</translation>
-<translation id="5313967007315987356">साइट जोड़ें</translation>
 <translation id="5317780077021120954">सेव करें</translation>
 <translation id="5335288049665977812">साइटों को JavaScript चलाने की अनुमति दें (हम इस सेटिंग को चालू रखने का सुझाव देते हैं)</translation>
 <translation id="534295439873310000">एनएफ़सी डिवाइस</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> चुने गए</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> और <ph name="PERMISSION_2" /> इस्तेमाल करने की अनुमति दी गई</translation>
 <translation id="7302486331832100261">आप आम तौर पर, सूचनाओंं पर रोक लगाते हैं. अनुमति देने के लिए, 'जानकारी' पर टैप करें.</translation>
+<translation id="7366415735885268578">साइट जोड़ें</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> की सेटिंग</translation>
 <translation id="7423098979219808738">पहले पूछें</translation>
 <translation id="7423538860840206698">क्लिपबोर्ड पढ़ने से ब्लॉक किया गया है</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">इस डिवाइस पर NFC बंद है. <ph name="BEGIN_LINK" />Android सेटिंग<ph name="END_LINK" /> में इसे चालू करें.</translation>
 <translation id="8928445016601307354">साइटों को एनएफ़सी की सुविधा वाले डिवाइसों पर जानकारी देखने और उसमें बदलाव करने से रोकें</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">किसी खास साइट के लिए कुकी ब्लॉक करें.</translation>
 <translation id="8959122750345127698">मार्गदर्शक तक नहीं पहुंचा जा सकता: <ph name="URL" /></translation>
 <translation id="8986362086234534611">भूल जाएं</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
index 0fc519d..873d9aa 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Povucite od vrha zaslona i dodirnite gumb Natrag da biste zatvorili prikaz na cijelom zaslonu.</translation>
 <translation id="5300589172476337783">Prikaži</translation>
 <translation id="5301954838959518834">U redu, shvaćam</translation>
-<translation id="5313967007315987356">Dodaj web-lokaciju</translation>
 <translation id="5317780077021120954">Spremi</translation>
 <translation id="5335288049665977812">Web-lokacije mogu pokretati JavaScript (preporučeno)</translation>
 <translation id="534295439873310000">NFC uređaji</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Odabrano: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Odobrena su dopuštenja <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Uglavnom blokirate obavijesti. Da biste ih dopustili, kliknite Pojedinosti.</translation>
+<translation id="7366415735885268578">Dodavanje web-lokacije</translation>
 <translation id="7383715096023715447">Postavke domene <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Prvo pitaj</translation>
 <translation id="7423538860840206698">Blokirano je čitanje međuspremnika</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC je isključen za ovaj uređaj. Uključite ga u <ph name="BEGIN_LINK" />postavkama Androida<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Onemogući web-lokacijama da vide i mijenjaju podatke na NFC uređajima</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokiraj kolačiće za određenu web-lokaciju.</translation>
 <translation id="8959122750345127698">Otvaranje je nedostupno: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Zaboravi</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
index 9a94a424..cb6ee97 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">A teljes képernyős megjelenítésből való kilépéshez húzza le felülről, majd koppintson a vissza gombra.</translation>
 <translation id="5300589172476337783">Megjelenítés</translation>
 <translation id="5301954838959518834">Rendben, értem</translation>
-<translation id="5313967007315987356">Webhely hozzáadása</translation>
 <translation id="5317780077021120954">Mentés</translation>
 <translation id="5335288049665977812">Engedélyezze a webhelyek számára a JavaScript futtatását (ajánlott)</translation>
 <translation id="534295439873310000">NFC-eszközök</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> elem kiválasztva</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> és <ph name="PERMISSION_2" /> engedélyezve</translation>
 <translation id="7302486331832100261">Ön általában letiltja az értesítéseket. Az engedélyezéshez koppintson a Részletek elemre.</translation>
+<translation id="7366415735885268578">Webhely hozzáadása</translation>
 <translation id="7383715096023715447">Beállítások – <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Kérdezzen rá</translation>
 <translation id="7423538860840206698">Le van tiltva a vágólap megtekintése</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Az NFC ki van kapcsolva ezen az eszközön. Kapcsolja be az <ph name="BEGIN_LINK" />Android Beállítások alkalmazásában<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">NFC-eszközökön található információk megtekintésének és az ilyen eszközökkel való információcserének a tiltása a webhelyek számára</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Adott webhely cookie-jainak letiltása.</translation>
 <translation id="8959122750345127698">Nem érhető el az ide vezető navigáció: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Elfelejt</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
index 012c3662..2e8f866 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Լիաէկրան ռեժիմից դուրս գալու համար քաշեք վերևից և հպեք «Հետ» կոճակին:</translation>
 <translation id="5300589172476337783">Ցույց տալ</translation>
 <translation id="5301954838959518834">Պարզ է</translation>
-<translation id="5313967007315987356">Ավելացնել կայք</translation>
 <translation id="5317780077021120954">Պահել</translation>
 <translation id="5335288049665977812">Թույլ տալ կայքերին գործարկել JavaScript-ը (խորհուրդ է տրվում)</translation>
 <translation id="534295439873310000">NFC սարքեր</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Ընտրված է <ph name="ITEM_COUNT" /> տարր</translation>
 <translation id="7260727271532453612">Թույլատրված են՝ «<ph name="PERMISSION_1" />» և «<ph name="PERMISSION_2" />»</translation>
 <translation id="7302486331832100261">Դուք սովորաբար արգելափակում եք ծանուցումները։ Թույլատրելու համար սեղմեք «Մանրամասներ»։</translation>
+<translation id="7366415735885268578">Ավելացրեք կայք</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> տիրույթի կարգավորումներ</translation>
 <translation id="7423098979219808738">Նախ հարցնել</translation>
 <translation id="7423538860840206698">Սեղմատախտակի հասանելիությունն արգելափակված է</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Այս կայքը հոգնեցնող կամ մոլորեցնող գովազդ է ցուցադրում։</translation>
 <translation id="8394832520002899662">Հպեք՝ կայք վերադառնալու համար</translation>
 <translation id="8409345997656833551">Ստանալ ծանուցում, երբ հոդվածը հնարավոր լինի դիտել պարզեցված տեսքով</translation>
+<translation id="8423565414844018592">Տեքստի մասշտաբը սահմանված է <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Կարգավորումներ</translation>
 <translation id="8441146129660941386">Որոնել դեպի հետ</translation>
 <translation id="8444433999583714703">Որպեսզի ձեր տեղադրությունը հասանելի դառնա <ph name="APP_NAME" />-ին, միացրեք այն <ph name="BEGIN_LINK" />Android-ի կարգավորումներում<ph name="END_LINK" />։</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Սարքի NFC-ն անջատված է։ Միացրեք այն <ph name="BEGIN_LINK" />Android-ի կարգավորումներում<ph name="END_LINK" />։</translation>
 <translation id="8928445016601307354">Արգելել կայքերին տեսնել և փոփոխել տեղեկությունները NFC սարքերում</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Արգելափակել քուքիները կոնկրետ կայքի համար:</translation>
 <translation id="8959122750345127698">Նավիգացիան անհասանելի է՝ <ph name="URL" /></translation>
 <translation id="8986362086234534611">Հեռացնել</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
index 3853fd1..190239fe 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Tarik dari atas dan ketuk tombol kembali untuk keluar dari mode layar penuh.</translation>
 <translation id="5300589172476337783">Tampilkan</translation>
 <translation id="5301954838959518834">Oke, mengerti</translation>
-<translation id="5313967007315987356">Tambahkan situs</translation>
 <translation id="5317780077021120954">Simpan</translation>
 <translation id="5335288049665977812">Izinkan situs menjalankan JavaScript (disarankan)</translation>
 <translation id="534295439873310000">Perangkat NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> dipilih</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> dan <ph name="PERMISSION_2" /> diizinkan</translation>
 <translation id="7302486331832100261">Anda biasanya memblokir notifikasi. Untuk mengizinkan, ketuk Detail.</translation>
+<translation id="7366415735885268578">Tambahkan situs</translation>
 <translation id="7383715096023715447">Setelan untuk <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Tanyakan dulu</translation>
 <translation id="7423538860840206698">Diblokir agar tidak membaca papan klip</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC dinonaktifkan di perangkat ini. Aktifkan di <ph name="BEGIN_LINK" />Setelan Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Blokir situs agar tidak melihat dan mengubah informasi di perangkat NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokir cookie untuk situs tertentu.</translation>
 <translation id="8959122750345127698">Navigasi tidak dapat dijangkau: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Lupakan</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
index 50ecc1d..bd0d193b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Dragðu ofan frá og snertu bakkhnappinn til að hætta birtingu á öllum skjánum.</translation>
 <translation id="5300589172476337783">Sýna</translation>
 <translation id="5301954838959518834">Ég skil</translation>
-<translation id="5313967007315987356">Bæta vefsvæði við</translation>
 <translation id="5317780077021120954">Vista</translation>
 <translation id="5335288049665977812">Leyfa vefsvæðum að keyra JavaScript (ráðlagt)</translation>
 <translation id="534295439873310000">NFC-tæki</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> valin</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /> leyft</translation>
 <translation id="7302486331832100261">Þú lokar yfirleitt á tilkynningar. Ýttu á „Upplýsingar“ til að leyfa þær.</translation>
+<translation id="7366415735885268578">Bæta vefsvæði við</translation>
 <translation id="7383715096023715447">Stillingar fyrir <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Spyrja fyrst</translation>
 <translation id="7423538860840206698">Lokað fyrir lestur klippiborðs</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Slökkt er á NFC fyrir þetta tæki. Kveiktu á því í <ph name="BEGIN_LINK" />stillingum Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Loka á að vefsvæði sjái og breyti upplýsingum í NFC-tækjum</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Lokaðu á fótspor fyrir tiltekið vefsvæði.</translation>
 <translation id="8959122750345127698">Ekki næst samband: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Gleyma</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
index de8b9aa..f01a83b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Trascina dall'alto e tocca il pulsante Indietro per uscire dalla modalità a schermo intero.</translation>
 <translation id="5300589172476337783">Mostra</translation>
 <translation id="5301954838959518834">OK</translation>
-<translation id="5313967007315987356">Aggiungi sito</translation>
 <translation id="5317780077021120954">Salva</translation>
 <translation id="5335288049665977812">Consenti l'esecuzione di JavaScript nei siti (opzione consigliata)</translation>
 <translation id="534295439873310000">Dispositivi NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> elementi selezionati</translation>
 <translation id="7260727271532453612">Autorizzazioni <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /> consentite</translation>
 <translation id="7302486331832100261">Di solito blocchi le notifiche. Per consentirle, tocca Dettagli.</translation>
+<translation id="7366415735885268578">Aggiunta di un sito</translation>
 <translation id="7383715096023715447">Impostazioni di <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Chiedi prima</translation>
 <translation id="7423538860840206698">Lettura degli appunti non consentita</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Funzionalità NFC non attiva per questo dispositivo. Attivala nelle <ph name="BEGIN_LINK" />Impostazioni Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Impedisci ai siti di vedere e modificare informazioni su dispositivi NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blocca i cookie per un sito specifico.</translation>
 <translation id="8959122750345127698">Navigazione inaccessibile: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Elimina</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
index df99f7a9..255eadc 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">כדי לצאת ממסך מלא, יש לגרור מלמעלה ולגעת בלחצן 'הקודם'.</translation>
 <translation id="5300589172476337783">הצגה</translation>
 <translation id="5301954838959518834">בסדר, הבנתי</translation>
-<translation id="5313967007315987356">הוספת אתר</translation>
 <translation id="5317780077021120954">שמירה</translation>
 <translation id="5335288049665977812">‏התרה לאתרים להריץ JavaScript (מומלץ)</translation>
 <translation id="534295439873310000">‏מכשירי NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">נבחרו <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">פועלות: <ph name="PERMISSION_1" /> וגם <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">הבחירה שלך היא בדרך כלל לחסום התראות. כדי לאפשר את ההתראות, ניתן להקיש על 'פרטים'.</translation>
+<translation id="7366415735885268578">הוספת אתר</translation>
 <translation id="7383715096023715447">ההגדרות של <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">תופיע בקשת אישור</translation>
 <translation id="7423538860840206698">הגישה לקריאה מלוח העריכה נחסמה</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">‏קישוריות ה-NFC מושבתת במכשיר הזה. ניתן להפעיל אותה דרך <ph name="BEGIN_LINK" />הגדרות Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">‏לאתרים אין הרשאה לראות ולשנות מידע במכשירי NFC.</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">‏חסימת קובצי Cookie של אתר מסוים.</translation>
 <translation id="8959122750345127698">הניווט לא אפשרי: <ph name="URL" /></translation>
 <translation id="8986362086234534611">לשכוח</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
index ed8532b..6872008 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">全画面表示を終了するには、上からドラッグして、戻るボタンをタップします。</translation>
 <translation id="5300589172476337783">表示</translation>
 <translation id="5301954838959518834">OK</translation>
-<translation id="5313967007315987356">サイトを追加</translation>
 <translation id="5317780077021120954">保存</translation>
 <translation id="5335288049665977812">サイトに JavaScript の実行を許可する(推奨)</translation>
 <translation id="534295439873310000">NFC デバイス</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> 件選択されています</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" />、<ph name="PERMISSION_2" />を許可</translation>
 <translation id="7302486331832100261">通知はデフォルトでブロックされています。許可するには [詳細] をタップしてください。</translation>
+<translation id="7366415735885268578">サイトの追加</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> の設定</translation>
 <translation id="7423098979219808738">最初に確認する</translation>
 <translation id="7423538860840206698">クリップボードの読み取りがブロックされています</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">このデバイスでは NFC がオフになっています。<ph name="BEGIN_LINK" />Android の設定<ph name="END_LINK" />でオンにしてください。</translation>
 <translation id="8928445016601307354">サイトが NFC デバイスの情報を参照および変更することをブロックする</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">特定のサイトの Cookie をブロックします。</translation>
 <translation id="8959122750345127698"><ph name="URL" /> にアクセスできません</translation>
 <translation id="8986362086234534611">削除</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb
index f3ffd57..cecc736 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">სრულეკრანიანი რეჟიმიდან გამოსასვლელად, გაუსვით ეკრანს თითი ზემოდან ქვემოთ და შეეხეთ ღილაკს „უკან“.</translation>
 <translation id="5300589172476337783">ჩვენება</translation>
 <translation id="5301954838959518834">კარგი, გასაგებია</translation>
-<translation id="5313967007315987356">საიტის დამატება</translation>
 <translation id="5317780077021120954">შენახვა</translation>
 <translation id="5335288049665977812">საიტებისთვის JavaScript-ის გაშვების დაშვება (რეკომენდებული)</translation>
 <translation id="534295439873310000">NFC მოწყობილობები</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">არჩეულია <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> და <ph name="PERMISSION_2" /> დაშვებულია</translation>
 <translation id="7302486331832100261">როგორც წესი, თქვენ ბლოკავთ შეტყობინებებს. დასაშვებად შეხებით აირჩიეთ „დეტალები“.</translation>
+<translation id="7366415735885268578">საიტის დამატება</translation>
 <translation id="7383715096023715447">პარამეტრები <ph name="DOMAIN" />-ისთვის</translation>
 <translation id="7423098979219808738">წინასწარი შეკითხვა</translation>
 <translation id="7423538860840206698">გაცვლის ბუფერზე წვდომა დაბლოკილია</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC გამორთულია ამ მოწყობილობისთვის. მისი ჩართვა შეგიძლიათ <ph name="BEGIN_LINK" />Android-ის პარამეტრებიდან<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">აეკრძალოს საიტებს ინფორმაციაზე წვდომა და მისი შეცვლა NFC მოწყობილობებზე</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">ქუქი-ჩანაწერების დაბლოკვა კონკრეტული საიტისთვის.</translation>
 <translation id="8959122750345127698">ნავიგაცია მიუწვდომელია: <ph name="URL" /></translation>
 <translation id="8986362086234534611">დავიწყება</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
index e3aa557c..c6515b98 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Толық экраннан шығу үшін үстіңгі жақтан сүйреп, "Артқа" түймесін түртіңіз.</translation>
 <translation id="5300589172476337783">Көрсету</translation>
 <translation id="5301954838959518834">Жарайды, түсінікті</translation>
-<translation id="5313967007315987356">Сайт қосу</translation>
 <translation id="5317780077021120954">Сақтау</translation>
 <translation id="5335288049665977812">Сайттарға JavaScript тілін іске қосуға рұқсат беру (ұсынылады)</translation>
 <translation id="534295439873310000">NFC функциясы бар құрылғылар</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> таңдалды</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> және <ph name="PERMISSION_2" /> үшін рұқсат етілген.</translation>
 <translation id="7302486331832100261">Әдетте хабарландыруларға тыйым саласыз. Рұқсат беру үшін "Мәліметтер" түймесін түртіңіз.</translation>
+<translation id="7366415735885268578">Сайтты енгізу</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> параметрлері</translation>
 <translation id="7423098979219808738">Алдымен сұрау</translation>
 <translation id="7423538860840206698">Буфердегі мазмұнды оқуға тыйым салынған</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Бұл сайтта мазалайтын немесе жалған ақпаратты жарнамалар көрсетіледі</translation>
 <translation id="8394832520002899662">Сайтқа оралу үшін түртіңіз.</translation>
 <translation id="8409345997656833551">Мақала үшін қарапайым көрініс қолжетімді болған кезде хабарлау</translation>
+<translation id="8423565414844018592">Мәтін масштабы <ph name="TEXT_SCALING" /> күйіне орнатылған</translation>
 <translation id="8428213095426709021">Параметрлер</translation>
 <translation id="8441146129660941386">Артқа</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> браузері геодерегіңізді пайдалануы үшін, <ph name="BEGIN_LINK" />Android параметрлерінде<ph name="END_LINK" /> оны да қосыңыз.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Бұл құрылғыда NFC функциясы өшірілген. Оны <ph name="BEGIN_LINK" />Android параметрлерінен<ph name="END_LINK" /> қосыңыз.</translation>
 <translation id="8928445016601307354">Сайттардың NFC құрылғылары туралы ақпаратты көруіне және өзгертуіне тыйым салу</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Белгілі бір сайт үшін cookie файлдарына тыйым салыңыз.</translation>
 <translation id="8959122750345127698"><ph name="URL" /> мекенжайына өту мүмкін емес</translation>
 <translation id="8986362086234534611">Ұмыту</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb
index 77b9a33..d94d246 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">អូសពីលើ ហើយប៉ះប៊ូតុងថយក្រោយដើម្បីចេញពីរបៀបពេញអេក្រង់។</translation>
 <translation id="5300589172476337783">បង្ហាញ</translation>
 <translation id="5301954838959518834">យល់ព្រម ខ្ញុំយល់ហើយ</translation>
-<translation id="5313967007315987356">បន្ថែមគេហទំព័រ</translation>
 <translation id="5317780077021120954">រក្សាទុក</translation>
 <translation id="5335288049665977812">អនុញ្ញាតឲ្យគេហទំព័រដំណើរការ JavaScript (បានណែនាំ)</translation>
 <translation id="534295439873310000">ឧបករណ៍ NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">បានជ្រើស​រើស <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">បានអនុញ្ញាត <ph name="PERMISSION_1" /> និង <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">ជាធម្មតា អ្នកទប់ស្កាត់​ការជូនដំណឹង។ ដើម្បី​អនុញ្ញាត សូម​ចុច "ព័ត៌មាន​លម្អិត"​។</translation>
+<translation id="7366415735885268578">បញ្ចូល​ទំព័រ</translation>
 <translation id="7383715096023715447">ការ​កំណត់​សម្រាប់ <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">សួរជាមុនសិន</translation>
 <translation id="7423538860840206698">បាន​ទប់​ស្កាត់​មិន​ឱ្យ​អាន​អង្គ​ចងចាំ</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC ត្រូវ​បាន​បិទសម្រាប់​ឧបករណ៍​នេះ។ បើក NFC នៅក្នុង<ph name="BEGIN_LINK" />ការកំណត់ Android<ph name="END_LINK" />។</translation>
 <translation id="8928445016601307354">ទប់ស្កាត់គេហទំព័រកុំឱ្យមើលឃើញ និងផ្លាស់ប្ដូរព័ត៌មាននៅលើឧបករណ៍ NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">ទប់ស្កាត់​ខូគីសម្រាប់​គេហទំព័រ​ជាក់លាក់។</translation>
 <translation id="8959122750345127698">ការុករកមិនអាចភ្ជាប់បានទេ៖ <ph name="URL" /></translation>
 <translation id="8986362086234534611">បំភ្លេច</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb
index d2bcefe..96c15ac 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">ಪೂರ್ಣಪರದೆಯನ್ನು ನಿರ್ಗಮಿಸಲು ಮೇಲಿನಿಂದ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ ಹಾಗೂ ಹಿಂದೆ ಬಟನ್ ಸ್ಪರ್ಶಿಸಿ.</translation>
 <translation id="5300589172476337783">ತೋರಿಸಿ</translation>
 <translation id="5301954838959518834">ಸರಿ, ಅರ್ಥವಾಯಿತು</translation>
-<translation id="5313967007315987356">ಸೈಟ್ ಸೇರಿಸಿ</translation>
 <translation id="5317780077021120954">ಉಳಿಸು</translation>
 <translation id="5335288049665977812">JavaScript ರನ್ ಮಾಡಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="534295439873310000">NFC ಸಾಧನಗಳು</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ಅನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> ಮತ್ತು <ph name="PERMISSION_2" /> ಅನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ</translation>
 <translation id="7302486331832100261">ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತೀರಿ. ಅನುಮತಿಸಲು, ವಿವರಗಳನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ.</translation>
+<translation id="7366415735885268578">ಸೈಟ್ ಸೇರಿಸಿ</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> ಗಾಗಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="7423098979219808738">ಮೊದಲು ಕೇಳಿ</translation>
 <translation id="7423538860840206698">ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ಓದದಂತೆ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">ಈ ಸಾಧನದಲ್ಲಿ NFC ಅನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ. ಇದನ್ನು <ph name="BEGIN_LINK" />Android ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="END_LINK" /> ತೆರೆಯಿರಿ.</translation>
 <translation id="8928445016601307354">NFC ಸಾಧನಗಳಲ್ಲಿ ಮಾಹಿತಿಯನ್ನು ನೋಡದಂತೆ ಮತ್ತು ಬದಲಾಯಿಸದಂತೆ ಸೈಟ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">ನಿರ್ದಿಷ್ಟ ಸೈಟ್‌ ಒಂದಕ್ಕೆ ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ.</translation>
 <translation id="8959122750345127698">ನ್ಯಾವಿಗೇಶನ್‌ ತಲುಪಲಾಗುವುದಿಲ್ಲ: <ph name="URL" /></translation>
 <translation id="8986362086234534611">ಮರೆತುಹೋಗು</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
index 6423256..e1893a9 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">전체화면을 종료하려면 상단에서 드래그하여 뒤로 버튼을 터치하세요.</translation>
 <translation id="5300589172476337783">표시</translation>
 <translation id="5301954838959518834">확인</translation>
-<translation id="5313967007315987356">사이트 추가</translation>
 <translation id="5317780077021120954">저장</translation>
 <translation id="5335288049665977812">사이트에서 자바스크립트를 실행하도록 허용(권장)</translation>
 <translation id="534295439873310000">NFC 기기</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" />개 선택됨</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> 및 <ph name="PERMISSION_2" /> 허용됨</translation>
 <translation id="7302486331832100261">기본적으로 알림을 차단하는 중입니다. 허용하려면 '세부정보'를 탭하세요.</translation>
+<translation id="7366415735885268578">사이트 추가</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> 설정</translation>
 <translation id="7423098979219808738">우선 확인</translation>
 <translation id="7423538860840206698">클립보드 액세스가 차단됨</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">기기에서 NFC가 사용 중지되어 있습니다. <ph name="BEGIN_LINK" />Android 설정<ph name="END_LINK" />에서 NFC를 사용 설정하세요.</translation>
 <translation id="8928445016601307354">사이트에서 NFC 기기의 정보를 보고 변경할 수 없도록 차단</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">특정 사이트의 쿠키를 차단합니다.</translation>
 <translation id="8959122750345127698">탐색할 수 없음: <ph name="URL" /></translation>
 <translation id="8986362086234534611">저장 안함</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
index 3f00da0..5b7c65a 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
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Толук экрандан чыгуу үчүн жогорудан ылдый сүйрөп келип, "Артка" деген баскычка тийип коюңуз.</translation>
 <translation id="5300589172476337783">Көрсөтүү</translation>
 <translation id="5301954838959518834">Жарайт, түшүндүм</translation>
-<translation id="5313967007315987356">Сайт кошуу</translation>
 <translation id="5317780077021120954">Сактоо</translation>
 <translation id="5335288049665977812">Сайттарга JavaScript'ти иштетүүгө уруксат берилсин (сунушталат)</translation>
 <translation id="534295439873310000">NFC түзмөктөрү</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> нерсе тандалды</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> жана <ph name="PERMISSION_2" /> дайындарын колдонууга уруксат берилди</translation>
 <translation id="7302486331832100261">Адатта билдирмелерди өчүрөсүз. Уруксат берүү үчүн "Чоо-жайын" таптап коюңуз.</translation>
+<translation id="7366415735885268578">Сайт кошуу</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> параметрлери</translation>
 <translation id="7423098979219808738">Адегенде сура</translation>
 <translation id="7423538860840206698">Алмашуу буферин окуу бөгөттөлгөн</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC бул түзмөктө өчүрүлгөн. <ph name="BEGIN_LINK" />Android жөндөөлөрүнө<ph name="END_LINK" /> өтүп, аны күйгүзүңүз.</translation>
 <translation id="8928445016601307354">Сайттардын NFC түзмөктөрүндөгү маалыматты көрүү жана өзгөртүү мүмкүнчүлүгүн бөгөттөө</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Белгилүү бир сайттын cookie файлдарын бөгөттөө.</translation>
 <translation id="8959122750345127698">Чабыттоо жеткиликсиз: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Унутуу</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb
index e038fc9..5c07705 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">ລາກຈາກດ້ານເທິງ ແລ້ວແຕະປຸ່ມກັບຄືນ ເພື່ອອອກຈາກເຕັມຈໍ.</translation>
 <translation id="5300589172476337783">ສະ​ແດງ​</translation>
 <translation id="5301954838959518834">ຕົກລົງ, ເຂົ້າໃຈແລ້ວ</translation>
-<translation id="5313967007315987356">ເພີ່ມ​ເວັບ​ໄຊ​ທ໌</translation>
 <translation id="5317780077021120954">ບັນທຶກ</translation>
 <translation id="5335288049665977812">ອະນຸຍາດໃຫ້ເວັບໄຊເປີດໃຊ້ JavaScript (ແນະນຳ)</translation>
 <translation id="534295439873310000">ອຸປະກອນ NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">ເລືອກ <ph name="ITEM_COUNT" /> ລາຍການແລ້ວ</translation>
 <translation id="7260727271532453612">ອະນຸຍາດ <ph name="PERMISSION_1" /> ແລະ <ph name="PERMISSION_2" /> ແລ້ວ</translation>
 <translation id="7302486331832100261">ໂດຍປົກກະຕິແລ້ວທ່ານບລັອກການແຈ້ງເຕືອນ. ເພື່ອອະນຸຍາດ, ກະລຸນາແຕະລາຍລະອຽດ.</translation>
+<translation id="7366415735885268578">ເພີ່ມເວັບໄຊ</translation>
 <translation id="7383715096023715447">ການຕັ້ງຄ່າສຳລັບ <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">ຖາມ​ກ່ອນ</translation>
 <translation id="7423538860840206698">ບລັອກບໍ່ໃຫ້ອ່ານຄລິບບອດແລ້ວ</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC ປິດຢູ່ສຳລັບອຸປະກອນນີ້. ກະລຸນາເປີດມັນໃນ <ph name="BEGIN_LINK" />ການຕັ້ງຄ່າ Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">ບລັອກເວັບໄຊບໍ່ໃຫ້ເບິ່ງເຫັນ ແລະ ບໍ່ໃຫ້ປ່ຽນຂໍ້ມູນຢູ່ອຸປະກອນ NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">ບລັອກຄຸກກີ້ສຳລັບເວັບໄຊສະເພາະ.</translation>
 <translation id="8959122750345127698">ການນຳທາງແມ່ນບໍ່ສາມາດເຂົ້າເຖິງໄດ້: <ph name="URL" /></translation>
 <translation id="8986362086234534611">ລືມ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
index 179574e..5f87b14 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Vilkite žymeklį nuo viršaus ir palieskite mygtuką „Atgal“, kad išeitumėte iš viso ekrano režimo.</translation>
 <translation id="5300589172476337783">Rodyti</translation>
 <translation id="5301954838959518834">Gerai, supratau</translation>
-<translation id="5313967007315987356">Pridėti svetainę</translation>
 <translation id="5317780077021120954">Išsaugoti</translation>
 <translation id="5335288049665977812">Leisti svetainėms paleisti „JavaScript“ (rekomenduojama)</translation>
 <translation id="534295439873310000">ALR įrenginiai</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Pasirinkta: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Leidžiama: <ph name="PERMISSION_1" /> ir <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Įprastai blokuojate pranešimus. Norėdami leisti, palieskite „Išsami informacija“.</translation>
+<translation id="7366415735885268578">Svetainės pridėjimas</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> nustatymai</translation>
 <translation id="7423098979219808738">Pirmiausia paklausti</translation>
 <translation id="7423538860840206698">Neleidžiama skaityti iškarpinės</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">ALR išjungtas šiame įrenginyje. Įjunkite ALR <ph name="BEGIN_LINK" />„Android“ nustatymuose<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Blokuoti svetaines neleidžiant peržiūrėti ir keisti informacijos NFC įrenginiuose</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokuoti konkrečios svetainės slapukus.</translation>
 <translation id="8959122750345127698">Naršymas nepasiekiamas: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Pamiršti</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb
index f80f9f3..56b0f5a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Lai izietu no pilnekrāna režīma, velciet no augšas un pieskarieties pogai Atpakaļ.</translation>
 <translation id="5300589172476337783">Rādīt</translation>
 <translation id="5301954838959518834">Labi, sapratu</translation>
-<translation id="5313967007315987356">Pievienot vietni</translation>
 <translation id="5317780077021120954">Saglabāt</translation>
 <translation id="5335288049665977812">Atļaut vietnēm izmantot JavaScript (ieteicams)</translation>
 <translation id="534295439873310000">NFC ierīces</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Atlasīti vienumi: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Atļautas: <ph name="PERMISSION_1" /> un <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Parasti jūs bloķējat paziņojumus. Lai tos atļautu, pieskarieties vienumam Detalizēta informācija.</translation>
+<translation id="7366415735885268578">Vietnes pievienošana</translation>
 <translation id="7383715096023715447">Domēna <ph name="DOMAIN" /> iestatījumi</translation>
 <translation id="7423098979219808738">Vispirms jautāt</translation>
 <translation id="7423538860840206698">Bloķēta starpliktuves satura lasīšana</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Šajā ierīcē tehnoloģija NFC ir izslēgta. Ieslēdziet to <ph name="BEGIN_LINK" />Android iestatījumos<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Liegt vietnēm NFC ierīcēs piekļūt informācijai un to mainīt</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Bloķēt sīkfailus konkrētai vietnei.</translation>
 <translation id="8959122750345127698">Navigācija nav sasniedzama: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Aizmirst</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb
index b2340e3..267786f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Повлечете од врвот и допрете го копчето Назад за да излезете од цел екран.</translation>
 <translation id="5300589172476337783">Прикажи</translation>
 <translation id="5301954838959518834">Добро, сфатив</translation>
-<translation id="5313967007315987356">Додај локација</translation>
 <translation id="5317780077021120954">Зачувај</translation>
 <translation id="5335288049665977812">Дозволи сајтовите да извршуваат JavaScript (се препорачува)</translation>
 <translation id="534295439873310000">NFC-уреди</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Избрани ставки: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /> се одобрени.</translation>
 <translation id="7302486331832100261">Вообичаено ги блокирате известувањата. За да ги дозволите, допрете „Детали“.</translation>
+<translation id="7366415735885268578">Додајте сајт</translation>
 <translation id="7383715096023715447">Поставки за <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Прво прашај</translation>
 <translation id="7423538860840206698">Блокирано читање на привремената меморија</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC е исклучена за уредов. Вклучете ја во <ph name="BEGIN_LINK" />„Поставки за Android“<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Блокирај сајтовите да не ги гледаат и менуваат податоците на NFC-уреди</translation>
-<translation id="8941729603749328384">www.primer.com</translation>
 <translation id="8958424370300090006">Блокирајте колачиња за одреден сајт.</translation>
 <translation id="8959122750345127698">Навигацијата е недостапна: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Заборави</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb
index 048abc7..d84e3ef5 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">പൂർണ്ണ സ്‌ക്രീനിൽ നിന്ന് പുറത്തുകടക്കാൻ, മുകളിൽ നിന്ന് വലിച്ചിട്ട് ബാക്ക് ബട്ടണിൽ സ്‌പർശിക്കുക.</translation>
 <translation id="5300589172476337783">കാണിക്കുക</translation>
 <translation id="5301954838959518834">മനസ്സിലായി</translation>
-<translation id="5313967007315987356">സൈറ്റ് ചേർക്കുക</translation>
 <translation id="5317780077021120954">സംരക്ഷിക്കുക</translation>
 <translation id="5335288049665977812">JavaScript റൺ ചെയ്യാൻ സൈറ്റുകളെ അനുവദിക്കുക (ശുപാർശചെയ്‌തിരിക്കുന്നു)</translation>
 <translation id="534295439873310000">NFC ഉപകരണങ്ങൾ</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> എണ്ണം തിരഞ്ഞെടുത്തു</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> എന്നിവ അനുവദിച്ചു</translation>
 <translation id="7302486331832100261">നിങ്ങൾ സാധാരണയായി അറിയിപ്പുകൾ ബ്ലോക്ക് ചെയ്യാറുണ്ട്. അനുവദിക്കാൻ, വിശദാംശങ്ങൾ ടാപ്പ് ചെയ്യുക.</translation>
+<translation id="7366415735885268578">ഒരു സൈറ്റ് ചേർക്കുക</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> -ന്റെ ക്രമീകരണം</translation>
 <translation id="7423098979219808738">ആദ്യതവണ ചോദിക്കുക</translation>
 <translation id="7423538860840206698">ക്ലിപ്പ്ബോർഡ് റീഡ് ചെയ്യുന്നതിൽ നിന്ന് ബ്ലോക്ക് ചെയ്‌തു</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">ഈ ഉപകരണത്തിനുള്ള NFC ഓഫാണ്. ഇത് <ph name="BEGIN_LINK" />Android ക്രമീകരണത്തിൽ<ph name="END_LINK" /> ഓണാക്കുക.</translation>
 <translation id="8928445016601307354">NFC ഉപകരണങ്ങളിലെ വിവരങ്ങൾ കാണുന്നതിലും അവയിൽ മാറ്റം വരുത്തുന്നതിലും നിന്ന് സൈറ്റുകളെ ബ്ലോക്ക് ചെയ്യുക</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">ഒരു പ്രത്യേക സൈറ്റിനായി കുക്കികൾ ബ്ലോക്ക് ചെയ്യുക.</translation>
 <translation id="8959122750345127698">നാവിഗേഷൻ ലഭ്യമല്ല: <ph name="URL" /></translation>
 <translation id="8986362086234534611">മറന്നു</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb
index 03bb3ffe..b09cd64 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Бүтэн дэлгэцийн горимоос гарахын тулд дээрээс зөөгөөд, буцах товчлуурыг дарна уу.</translation>
 <translation id="5300589172476337783">Харуулах</translation>
 <translation id="5301954838959518834">OK, ойлголоо</translation>
-<translation id="5313967007315987356">Сайт нэмэх</translation>
 <translation id="5317780077021120954">Хадгалах</translation>
 <translation id="5335288049665977812">Сайтад JavaScript-г ажиллуулахыг зөвшөөрөх (санал болгосон)</translation>
 <translation id="534295439873310000">NFC төхөөрөмжүүд</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" />-г сонгосон</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> болон <ph name="PERMISSION_2" />-г зөвшөөрсөн</translation>
 <translation id="7302486331832100261">Та ихэвчлэн мэдэгдлийг хориглодог. Зөвшөөрөхийн тулд Дэлгэрэнгүй мэдээлэл дээр товшино уу.</translation>
+<translation id="7366415735885268578">Сайт нэмэх</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" />-н тохиргоо</translation>
 <translation id="7423098979219808738">Эхлээд асуу</translation>
 <translation id="7423538860840206698">Түр санах ойгоос уншихыг хориглосон</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Энэ сайт төвөгтэй эсвэл хуурамч зар харуулдаг</translation>
 <translation id="8394832520002899662">Сайт руу буцахын тулд товшино уу</translation>
 <translation id="8409345997656833551">Нийтлэлийг хялбаршуулсан харагдах байдлаар харуулах боломжтой болох үед мэдэгдэл авна уу</translation>
+<translation id="8423565414844018592">Текстийн хэмжээсийг <ph name="TEXT_SCALING" /> болгож тохируулсан</translation>
 <translation id="8428213095426709021">Тохиргоо</translation>
 <translation id="8441146129660941386">Буцаж хайх</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" />-д таны байршилд хандахыг зөвшөөрөхийн тулд байршлыг мөн <ph name="BEGIN_LINK" />Андройдын тохиргоо<ph name="END_LINK" />-нд асаана уу.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Энэ төхөөрөмж дээр NFC унтраалттай байна. Үүнийг <ph name="BEGIN_LINK" />Android-н тохиргоо<ph name="END_LINK" /> хэсэгт асаана уу.</translation>
 <translation id="8928445016601307354">Сайтуудыг NFC төхөөрөмжүүд дээрх мэдээллийг харах болон өөрчлөхийг блоклох</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Күүкиг тодорхой сайтад хориглоно уу.</translation>
 <translation id="8959122750345127698">Навигацтай холбогдох боломжгүй байна: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Мартах</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
index c6221a8e..0a8bb95f5 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">शीर्ष पासून ड्रॅग करा आणि फुलस्क्रीन मधून बाहेर पडण्यासाठी परत बटणास स्पर्श करा.</translation>
 <translation id="5300589172476337783">दर्शवा</translation>
 <translation id="5301954838959518834">ठीक आहे, समजले</translation>
-<translation id="5313967007315987356">साइट जोडा</translation>
 <translation id="5317780077021120954">सेव्ह करा</translation>
 <translation id="5335288049665977812">साइटना JavaScript रन करण्याची अनुमती द्या (शिफारस केलेले)</translation>
 <translation id="534295439873310000">NFC डिव्हाइस</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> निवडले</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> आणि <ph name="PERMISSION_2" /> ला अनुमती दिली</translation>
 <translation id="7302486331832100261">तुम्ही सहसा सूचना ब्लॉक करता. अनुमती देण्यासाठी, तपशील वर टॅप करा.</translation>
+<translation id="7366415735885268578">एक साइट जोडा</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> साठी सेटिंग्ज</translation>
 <translation id="7423098979219808738">प्रथम विचारा</translation>
 <translation id="7423538860840206698">क्लिपबोर्ड वाचणे ब्लॉक केले</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">ही साइट अनाहूत किंवा दिशाभूल करणाऱ्या जाहिराती दाखवते</translation>
 <translation id="8394832520002899662">साइटवर परत जाण्यासाठी टॅप करा</translation>
 <translation id="8409345997656833551">एखादा लेख हा सुलभ दृश्यात दाखवला जाऊ शकत असल्यास, सूचना मिळवा</translation>
+<translation id="8423565414844018592">मजकूर स्केलिंग <ph name="TEXT_SCALING" /> वर सेट केले आहे</translation>
 <translation id="8428213095426709021">सेटिंग्ज</translation>
 <translation id="8441146129660941386">मागे शोधा</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> ला तुमचे स्थान अ‍ॅक्सेस करू देण्यासाठी, <ph name="BEGIN_LINK" />Android सेटिंग्ज<ph name="END_LINK" /> मध्येदेखील स्थान सुरू करा.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">या डिव्हाइससाठी NFC बंद केले आहे. ते <ph name="BEGIN_LINK" />Android सेटिंग्जमध्ये<ph name="END_LINK" /> सुरू करा.</translation>
 <translation id="8928445016601307354">NFC डिव्हाइसवर माहिती पाहण्यापासून आणि बदलण्यापासून साइटना ब्लॉक करा</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">विशिष्ट साइटसाठी कुकी ब्लॉक करा.</translation>
 <translation id="8959122750345127698">नेव्हिगेशन आवाक्याबाहेर आहे: <ph name="URL" /></translation>
 <translation id="8986362086234534611">विसरा</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb
index daa5ea2..d4c2432 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Seret dari atas dan sentuh butang kembali untuk keluar daripada skrin penuh.</translation>
 <translation id="5300589172476337783">Paparkan</translation>
 <translation id="5301954838959518834">OK, faham</translation>
-<translation id="5313967007315987356">Tambahkan tapak</translation>
 <translation id="5317780077021120954">Simpan</translation>
 <translation id="5335288049665977812">Benarkan tapak menjalankan JavaScript (disyorkan)</translation>
 <translation id="534295439873310000">Peranti NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> dipilih</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> dan <ph name="PERMISSION_2" /> dibenarkan</translation>
 <translation id="7302486331832100261">Anda biasanya menyekat pemberitahuan. Untuk membenarkan pemberitahuan, ketik Butiran.</translation>
+<translation id="7366415735885268578">Tambahkan tapak</translation>
 <translation id="7383715096023715447">Tetapan untuk <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Tanya dahulu</translation>
 <translation id="7423538860840206698">Disekat daripada membaca papan keratan</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC dimatikan untuk peranti ini. Hidupkan dalam <ph name="BEGIN_LINK" />Tetapan Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Sekat laman daripada melihat dan menukar maklumat pada peranti NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Sekat kuki untuk tapak tertentu.</translation>
 <translation id="8959122750345127698">Tidak dapat mencapai navigasi: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Lupa</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
index 14193d7e..a69725b3 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">မျက်နှာပြင်အပြည့်ဖွင့်ခြင်းမှ ထွက်ရန် ထိပ်ဆုံးမှဆွဲချကာ နောက်ဆုတ်ရန်ခလုတ်ကို နှိပ်ပါ။</translation>
 <translation id="5300589172476337783">ပြရန်</translation>
 <translation id="5301954838959518834">OK</translation>
-<translation id="5313967007315987356">ဆိုက်အား ထည့်ရန်</translation>
 <translation id="5317780077021120954">သိမ်းရန်</translation>
 <translation id="5335288049665977812">ဆိုက်များကို JavaScript အားဖွင့်ခွင့်ပေးပါ (အကြံပြုထားသည်)</translation>
 <translation id="534295439873310000">NFC စက်များ</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ခု ရွေးထားသည်</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> နှင့် <ph name="PERMISSION_2" /> ခွင့်ပြုထားသည်</translation>
 <translation id="7302486331832100261">ပုံမှန်အားဖြင့် သင်သည် အကြောင်းကြားချက်များကို ပိတ်ထားသည်။ ခွင့်ပြုရန် 'အသေးစိတ်များ' ကို တို့ပါ။</translation>
+<translation id="7366415735885268578">ဝဘ်ဆိုက်တစ်ခု ထည့်ရန်</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> အတွက် ဆက်တင်များ</translation>
 <translation id="7423098979219808738">အရင်မေးပါ</translation>
 <translation id="7423538860840206698">ကလစ်ဘုတ်ကို ကြည့်ရှုခွင့် ပိတ်ထားသည်</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">ဤစက်အတွက် NFC ကို ပိတ်ထားသည်။ <ph name="BEGIN_LINK" />Android ဆက်တင်များ<ph name="END_LINK" /> ထဲတွင် ၎င်းကို ဖွင့်ပါ။</translation>
 <translation id="8928445016601307354">ဝဘ်ဆိုက်များအား NFC စက်ပစ္စည်းများရှိ အချက်အလက်များကို ကြည့်ခွင့်နှင့် ပြောင်းလဲခွင့် ပိတ်ရန်</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">အချို့ဝဘ်ဆိုက်များအတွက် ကွတ်ကီးများကို ပိတ်ဆို့သည်။</translation>
 <translation id="8959122750345127698">သွားလာမှုပြလမ်းညွှန်ဆီသို့ မရောက်နိုင်ပါ- <ph name="URL" /></translation>
 <translation id="8986362086234534611">မေ့ပစ်လိုက်ပါ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb
index 094e86a..8b55656 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">पूर्ण स्क्रिनबाट बाहिर निस्कनका लागि शीर्षबाट तानेर पछाडि बटनलाई छुनुहोस्।</translation>
 <translation id="5300589172476337783">देखाउनुहोस्</translation>
 <translation id="5301954838959518834">ठिक छ, बुझेँ</translation>
-<translation id="5313967007315987356">साइट थप्नुहोस्</translation>
 <translation id="5317780077021120954">बचत गर्नुहोस्</translation>
 <translation id="5335288049665977812">साइटहरूलाई JavaScript सञ्चालन गर्न अनुमति दिने (सिफारिस गरिएको)</translation>
 <translation id="534295439873310000">NFC यन्त्रहरू</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> चयन गरिए</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> र <ph name="PERMISSION_2" /> सम्बन्धी अनुमति दिइएको छ</translation>
 <translation id="7302486331832100261">तपाईं सामान्यतया सूचनाहरूमाथि रोक लगाउनुहुन्छ। अनुमति दिन विवरणहरूमा ट्याप गर्नुहोस्।</translation>
+<translation id="7366415735885268578">कुनै साइट थप्नुहोस्</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> का सेटिङ</translation>
 <translation id="7423098979219808738">पहिले सोध्नुहोस्</translation>
 <translation id="7423538860840206698">क्लिपबोर्डका सामग्री पढ्नबाट रोक लगाइयो</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">यो डिभाइसमा NFC निष्क्रिय पारिएको छ। <ph name="BEGIN_LINK" />Android का सेटिङ<ph name="END_LINK" /> मा गई यसलाई अन गर्नुहोस्।</translation>
 <translation id="8928445016601307354">साइटहरूलाई NFC डिभाइसमा भएका जानकारी हेर्न र ती जानकारी परिवर्तन गर्नबाट ब्लक गरियोस्</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">कुनै खास साइटमा कुकीहरूलाई रोक लगाउनुहोस्।</translation>
 <translation id="8959122750345127698">नेभिगेशन पहुँचयोग्य छैन: <ph name="URL" /></translation>
 <translation id="8986362086234534611">बिर्सनुहोस्</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
index 19bae37..076b71f3 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Sleep vanaf de bovenkant en tik op de knop Terug om het volledige scherm te sluiten.</translation>
 <translation id="5300589172476337783">Tonen</translation>
 <translation id="5301954838959518834">OK, begrepen</translation>
-<translation id="5313967007315987356">Site toevoegen</translation>
 <translation id="5317780077021120954">Opslaan</translation>
 <translation id="5335288049665977812">Sites toestaan JavaScript uit te voeren (aanbevolen)</translation>
 <translation id="534295439873310000">NFC-apparaten</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> geselecteerd</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> en <ph name="PERMISSION_2" /> toegestaan</translation>
 <translation id="7302486331832100261">Meestal blokkeer je meldingen. Tik op Details om meldingen toe te staan.</translation>
+<translation id="7366415735885268578">Een site toevoegen</translation>
 <translation id="7383715096023715447">Instellingen voor <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Eerst vragen</translation>
 <translation id="7423538860840206698">Lezen van het klembord geblokkeerd</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Deze site toont opdringerige of misleidende advertenties</translation>
 <translation id="8394832520002899662">Tik hier om terug te gaan naar de site</translation>
 <translation id="8409345997656833551">Melding krijgen als een artikel in de vereenvoudigde weergave kan worden getoond</translation>
+<translation id="8423565414844018592">Tekstgrootte ingesteld op <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Instellingen</translation>
 <translation id="8441146129660941386">Achteruit zoeken</translation>
 <translation id="8444433999583714703">Als je <ph name="APP_NAME" /> toegang wilt geven tot je locatie, moet je je locatie ook aanzetten via de <ph name="BEGIN_LINK" />Android-instellingen<ph name="END_LINK" />.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC staat uit voor dit apparaat. Zet deze functie aan via de <ph name="BEGIN_LINK" />Android-instellingen<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Voorkomen dat sites informatie op NFC-apparaten kunnen zien en wijzigen</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Cookies voor een specifieke site blokkeren.</translation>
 <translation id="8959122750345127698">Navigatie is onbereikbaar: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Vergeten</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
index aa88022..a45dea9 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Dra ned fra toppen og trykk på tilbakeknappen for å avslutte fullskjerm.</translation>
 <translation id="5300589172476337783">Vis</translation>
 <translation id="5301954838959518834">Greit</translation>
-<translation id="5313967007315987356">Legg til et nettsted</translation>
 <translation id="5317780077021120954">Lagre</translation>
 <translation id="5335288049665977812">Tillat nettsteder å kjøre JavaScript (anbefales)</translation>
 <translation id="534295439873310000">NFC-enheter</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> er valgt</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /> er tillatt</translation>
 <translation id="7302486331832100261">Du blokkerer vanligvis varsler. For å tillate dette trykker du på Detaljer.</translation>
+<translation id="7366415735885268578">Legg til et nettsted</translation>
 <translation id="7383715096023715447">Innstillinger for <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Spør først</translation>
 <translation id="7423538860840206698">Blokkert fra å lese utklippstavlen</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC er av for denne enheten. Slå det på i <ph name="BEGIN_LINK" />Android-innstillingene<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Blokker nettsteder fra å se og endre informasjon på NFC-enheter</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokkér informasjonskapsler for et spesifikt nettsted.</translation>
 <translation id="8959122750345127698">Nettadressen er utilgjengelig: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Glem</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb
index 2e2b6ed..621cce0 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍‌ରୁ ପ୍ରସ୍ଥାନ କରିବାକୁ ଶୀର୍ଷରୁ ଟାଣନ୍ତୁ ଏବଂ ପଛପଟ ବଟନ୍‌କୁ ସ୍ପର୍ଶ କରନ୍ତୁ</translation>
 <translation id="5300589172476337783">ପ୍ରଦର୍ଶନ କରନ୍ତୁ</translation>
 <translation id="5301954838959518834">ଠିକ୍ ଅଛି, ବୁଝିଗଲି</translation>
-<translation id="5313967007315987356">ସାଇଟ୍ ଯୋଗ କରନ୍ତୁ</translation>
 <translation id="5317780077021120954">ସଞ୍ଚୟ</translation>
 <translation id="5335288049665977812">ସାଇଟ୍‌ଗୁଡ଼ିକୁ JavaScript ଚଲାଇବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ (ସୁପାରିଶ କରାଯାଇଛି)</translation>
 <translation id="534295439873310000">NFC ଡିଭାଇସ୍‌ଗୁଡ଼ିକ</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ଚୟନିତ</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> ଏବଂ <ph name="PERMISSION_2" />ର ଅନୁମତି ଦିଆଯାଇଛି</translation>
 <translation id="7302486331832100261">ଆପଣ ସାଧାରଣତଃ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରନ୍ତି। ଅନୁମତି ଦେବା ପାଇଁ, ବିବରଣୀରେ ଟାପ୍ କରନ୍ତୁ।</translation>
+<translation id="7366415735885268578">ଏକ ସାଇଟ୍ ଯୋଗକରନ୍ତୁ</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> ପାଇଁ ସେଟିଂସ</translation>
 <translation id="7423098979219808738">ପ୍ରଥମେ ପଚାରନ୍ତୁ</translation>
 <translation id="7423538860840206698">ପଢ଼ିବା କ୍ଲିପ୍‌ବୋର୍ଡରୁ ଅବରୋଧ କରାଯାଇଛି</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">ଏହି ସାଇଟ୍, ଅନଧିକାର ପ୍ରବେଶ କରିଥିବା କିମ୍ବା ବିଭ୍ରାନ୍ତିକର ବିଜ୍ଞାପନ ଦେଖାଉଛି</translation>
 <translation id="8394832520002899662">ସାଇଟକୁ ଫେରିବାକୁ ଟାପ୍ କରନ୍ତୁ</translation>
 <translation id="8409345997656833551">ଯେତେବେଳେ ଏକ ଆର୍ଟିକିଲ ସରଳୀକୃତ ଭ୍ୟୁରେ ଦେଖାଯାଇପାରିବ, ସେତେବେଳେ ସେ ବିଷୟରେ ସୂଚନା ପାଆନ୍ତୁ</translation>
+<translation id="8423565414844018592">ଟେକ୍ସଟ ସ୍କେଲିଂ <ph name="TEXT_SCALING" />ରେ ସେଟ କରାଯାଇଛି</translation>
 <translation id="8428213095426709021">ସେଟିଂସ୍</translation>
 <translation id="8441146129660941386">ପଛକୁ ଫେରନ୍ତୁ</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" />କୁ ଆପଣଙ୍କ ଲୋକେସନ୍ ଆକ୍ସେସ୍ ଦେବା ପାଇଁ, <ph name="BEGIN_LINK" />Android ସେଟିଂସ<ph name="END_LINK" />ରେ ଲୋକେସନ୍ ମଧ୍ୟ ଚାଲୁ କରନ୍ତୁ।</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">ଏହି ଡିଭାଇସ୍ ପାଇଁ NFC ବନ୍ଦ ଅଛି। ଏହାକୁ <ph name="BEGIN_LINK" />Android ସେଟିଂସ୍‌<ph name="END_LINK" />ରେ ଚାଲୁ କରନ୍ତୁ।</translation>
 <translation id="8928445016601307354">NFC ଡିଭାଇସଗୁଡ଼ିକରେ ସୂଚନା ଦେଖିବାରୁ ଏବଂ ପରିବର୍ତ୍ତନ କରିବାରୁ ସାଇଟଗୁଡ଼ିକୁ ବ୍ଲକ କରନ୍ତୁ</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ସାଇଟ୍ ପାଇଁ କୁକୀଗୁଡ଼ିକୁ ଅବରୋଧ କରନ୍ତୁ।</translation>
 <translation id="8959122750345127698">ନାଭିଗେସନ୍‌ରେ ପହଞ୍ଚି ହେଉନାହିଁ: <ph name="URL" /></translation>
 <translation id="8986362086234534611">ଭୁଲିଗଲେ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
index e4cccad..5186b1d 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">ਉੱਪਰ ਤੋਂ ਘਸੀਟੋ ਅਤੇ ਪੂਰੀ ਸਕ੍ਰੀਨ ਤੋਂ ਬਾਹਰ ਜਾਣ ਲਈ ਪਿੱਛੇ ਜਾਓ ਬਟਨ ਨੂੰ ਸਪਰਸ਼ ਕਰੋ।</translation>
 <translation id="5300589172476337783">ਦਿਖਾਓ</translation>
 <translation id="5301954838959518834">ਠੀਕ, ਸਮਝ ਲਿਆ</translation>
-<translation id="5313967007315987356">ਸਾਈਟ ਜੋੜੋ</translation>
 <translation id="5317780077021120954">ਰੱਖਿਅਤ ਕਰੋ</translation>
 <translation id="5335288049665977812">ਸਾਈਟਾਂ ਨੂੰ JavaScript ਚਲਾਉਣ ਦੀ ਆਗਿਆ ਦਿਓ (ਸਿਫ਼ਾਰਸ਼ੀ)</translation>
 <translation id="534295439873310000">NFC ਡੀਵਾਈਸਾਂ</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ਨੂੰ ਚੁਣਿਆ ਗਿਆ</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> ਅਤੇ <ph name="PERMISSION_2" /> ਦੀ ਇਜਾਜ਼ਤ ਦਿੱਤੀ ਗਈ</translation>
 <translation id="7302486331832100261">ਆਮ ਤੌਰ 'ਤੇ ਤੁਸੀਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬਲਾਕ ਕਰਦੇ ਹੋ। ਇਜਾਜ਼ਤ ਦੇਣ ਲਈ, ਵੇਰਵਿਆਂ 'ਤੇ ਟੈਪ ਕਰੋ।</translation>
+<translation id="7366415735885268578">ਕੋਈ ਸਾਈਟ ਸ਼ਾਮਲ ਕਰੋ</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> ਲਈ ਸੈਟਿੰਗਾਂ</translation>
 <translation id="7423098979219808738">ਪਹਿਲਾਂ ਪੁੱਛੋ</translation>
 <translation id="7423538860840206698">ਕਲਿੱਪਬੋਰਡ ਪੜ੍ਹਨ ਤੋਂ ਬਲਾਕ ਕੀਤਾ ਗਿਆ</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">ਇਸ ਡੀਵਾਈਸ ਲਈ NFC ਬੰਦ ਹੈ। ਇਸਨੂੰ <ph name="BEGIN_LINK" />Android ਸੈਟਿੰਗਾਂ<ph name="END_LINK" /> ਵਿੱਚ ਚਾਲੂ ਕਰੋ।</translation>
 <translation id="8928445016601307354">ਸਾਈਟਾਂ ਨੂੰ NFC ਡੀਵਾਈਸਾਂ 'ਤੇ ਜਾਣਕਾਰੀ ਦੇਖਣ ਅਤੇ ਬਦਲਣ ਤੋਂ ਬਲਾਕ ਕਰੋ</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">ਕਿਸੇ ਖਾਸ ਸਾਈਟ ਲਈ ਕੁਕੀਜ਼ ਬਲਾਕ ਕਰੋ।</translation>
 <translation id="8959122750345127698">ਨੈਵੀਗੇਸ਼ਨ ਨਾਪਹੁੰਚਯੋਗ ਹੈ: <ph name="URL" /></translation>
 <translation id="8986362086234534611">ਭੁੱਲਣਾ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb
index aa732c6..590ca0e 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Przeciągnij od góry i kliknij przycisk Wstecz, by wyjść z trybu pełnoekranowego.</translation>
 <translation id="5300589172476337783">Pokaż</translation>
 <translation id="5301954838959518834">Rozumiem</translation>
-<translation id="5313967007315987356">Dodaj stronę</translation>
 <translation id="5317780077021120954">Zapisz</translation>
 <translation id="5335288049665977812">Zezwalaj na wykonywanie kodu JavaScript w witrynach (zalecane)</translation>
 <translation id="534295439873310000">Urządzenia z funkcją NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Wybrano <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Dozwolone: <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Zazwyczaj blokujesz powiadomienia. Aby na nie zezwolić, kliknij Szczegóły.</translation>
+<translation id="7366415735885268578">Dodawanie strony</translation>
 <translation id="7383715096023715447">Ustawienia domeny <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Najpierw zapytaj</translation>
 <translation id="7423538860840206698">Zablokowano odczytywanie schowka</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Funkcja NFC na tym urządzeniu jest wyłączona. Włącz ją w <ph name="BEGIN_LINK" />Ustawieniach Androida<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Nie zezwalaj stronom na odczytywanie i zmienianie informacji na urządzeniach z funkcją NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokuj pliki cookie z określonej strony internetowej.</translation>
 <translation id="8959122750345127698">Adres nieosiągalny: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Zapomnij</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
index dc0c3ca..9afb56d0 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Arraste a partir da parte superior e toque no botão "Voltar" para sair da tela cheia.</translation>
 <translation id="5300589172476337783">Mostrar</translation>
 <translation id="5301954838959518834">Ok, entendi</translation>
-<translation id="5313967007315987356">Adicionar site</translation>
 <translation id="5317780077021120954">Salvar</translation>
 <translation id="5335288049665977812">Permitir que sites executem o JavaScript (recomendado)</translation>
 <translation id="534295439873310000">Dispositivos NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> itens selecionados</translation>
 <translation id="7260727271532453612">Permitidas: <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Você geralmente bloqueia notificações. Para permitir, toque em "Detalhes".</translation>
+<translation id="7366415735885268578">Adicionar um site</translation>
 <translation id="7383715096023715447">Configurações de <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Perguntar primeiro</translation>
 <translation id="7423538860840206698">Leitura da área de transferência bloqueada</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">A NFC está desativada neste dispositivo. Ative-a nas <ph name="BEGIN_LINK" />configurações do Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Impedir que sites vejam e mudem informações em dispositivos NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Bloqueie cookies de um site específico.</translation>
 <translation id="8959122750345127698">A Navegação GPS está inacessível: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Esquecer</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
index f579c4b..d3a845c 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Arraste a partir da parte superior e toque no botão de retrocesso para sair do ecrã inteiro.</translation>
 <translation id="5300589172476337783">Mostrar</translation>
 <translation id="5301954838959518834">OK</translation>
-<translation id="5313967007315987356">Adicionar site</translation>
 <translation id="5317780077021120954">Guardar</translation>
 <translation id="5335288049665977812">Permitir que os sites executem JavaScript (recomendado)</translation>
 <translation id="534295439873310000">Dispositivos NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> selecionado(s).</translation>
 <translation id="7260727271532453612">Autorização de <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" />.</translation>
 <translation id="7302486331832100261">Normalmente, bloqueia as notificações. Para permitir, toque em Detalhes.</translation>
+<translation id="7366415735885268578">Adicionar um site</translation>
 <translation id="7383715096023715447">Definições do <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Perguntar primeiro</translation>
 <translation id="7423538860840206698">Leitura da área de transferência bloqueada</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">O NFC está desativado para este dispositivo. Ative-o nas <ph name="BEGIN_LINK" />Definições do Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Impedir os sites de verem e alterarem informações em dispositivos NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Bloqueie cookies para um site específico.</translation>
 <translation id="8959122750345127698">A navegação está inacessível: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Esquecer</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
index db21783..55cfed8 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Trage din partea de sus și atinge butonul Înapoi pentru a ieși din ecranul complet.</translation>
 <translation id="5300589172476337783">Afișează</translation>
 <translation id="5301954838959518834">OK, am înțeles</translation>
-<translation id="5313967007315987356">Adaugă un site</translation>
 <translation id="5317780077021120954">Salvează</translation>
 <translation id="5335288049665977812">Permite site-urilor să ruleze JavaScript (recomandat)</translation>
 <translation id="534295439873310000">Dispozitive NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> selectate</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> și <ph name="PERMISSION_2" /> sunt permise</translation>
 <translation id="7302486331832100261">De obicei blochezi notificările. Ca să le permiți, atinge Detalii.</translation>
+<translation id="7366415735885268578">Adaugă un site</translation>
 <translation id="7383715096023715447">Setări pentru <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Mai întâi întreabă</translation>
 <translation id="7423538860840206698">Citirea clipboardului este blocată</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC este dezactivat pentru acest dispozitiv. Activează-l în <ph name="BEGIN_LINK" />Setări Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Împiedică site-urile să vadă și să modifice informații de pe dispozitive NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blochează cookie-urile pentru un anumit site.</translation>
 <translation id="8959122750345127698">Navigarea nu este accesibilă: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Șterge</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
index a3d2390..77913d6a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Чтобы выйти из полноэкранного режима, проведите по экрану сверху вниз и нажмите кнопку "Назад".</translation>
 <translation id="5300589172476337783">Показать</translation>
 <translation id="5301954838959518834">ОК</translation>
-<translation id="5313967007315987356">Добавить сайт</translation>
 <translation id="5317780077021120954">Сохранить</translation>
 <translation id="5335288049665977812">Разрешить сайтам использовать JavaScript (рекомендуется)</translation>
 <translation id="534295439873310000">Устройства с NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Выбрано: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Разрешено: <ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Обычно вы блокируете уведомления. Чтобы разрешить их показ, нажмите "Подробнее".</translation>
+<translation id="7366415735885268578">Добавление сайта</translation>
 <translation id="7383715096023715447">Настройки домена <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Сначала спрашивать</translation>
 <translation id="7423538860840206698">Доступ к данным в буфере обмена заблокирован</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Функция NFC на этом устройстве отключена. Включите ее в <ph name="BEGIN_LINK" />настройках Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Запретить сайтам получать доступ к информации и изменять ее через NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Блокировать файлы cookie для определенного сайта.</translation>
 <translation id="8959122750345127698">Страница не найдена: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Удалить</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
index 266cb8f1..5dfb01d 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">ඉහළින් ඇද, පූර්ණ තිරයෙන් ඉවත් වීමට පිටුපස බොත්තම ස්පර්ශ කරන්න.</translation>
 <translation id="5300589172476337783">පෙන්වන්න</translation>
 <translation id="5301954838959518834">හරි, එය තේරුණා</translation>
-<translation id="5313967007315987356">අඩවිය එක් කරන්න</translation>
 <translation id="5317780077021120954">සුරකින්න</translation>
 <translation id="5335288049665977812">ජාවාස්ක්‍රිප්ට් ධාවනය කිරීමට අඩවි වලට ඉඩ දෙන්න (නිර්දේශිතයි)</translation>
 <translation id="534295439873310000">NFC උපාංග</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ක් තෝරන ලදී</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> සහ <ph name="PERMISSION_2" /> ඉඩ දෙන ලදි</translation>
 <translation id="7302486331832100261">ඔබ සාමාන්‍යයෙන් දැනුම් දීම් අවහිර කරයි. අවසර දීමට, විස්තර තට්ටු කරන්න.</translation>
+<translation id="7366415735885268578">අඩවියක් එක් කරන්න</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> සඳහා සැකසීම්</translation>
 <translation id="7423098979219808738">පළමුව අසන්න</translation>
 <translation id="7423538860840206698">පසුරු පුවරුව කියවීමෙන් අවහිරයි</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">මෙම උපාංගය සඳහා NFC අක්‍රියයි. <ph name="BEGIN_LINK" />Android සැකසීම්<ph name="END_LINK" /> තුළින් එය සක්‍රීය කරන්න.</translation>
 <translation id="8928445016601307354">NFC උපාංගවල තොරතුරු බැලීමෙන් සහ වෙනස් කිරීමෙන් අඩවි අවහිර කරන්න</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">නිශ්චිත අඩවියක් සඳහා කුකී අවහිර කරන්න.</translation>
 <translation id="8959122750345127698">සංචාලනය වෙත ළඟා විය නොහැකිය: <ph name="URL" /></translation>
 <translation id="8986362086234534611">අමතක</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
index 2a27c1a..ad8082a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Režim celej obrazovky ukončíte potiahnutím z hornej časti a klepnutím na tlačidlo Späť.</translation>
 <translation id="5300589172476337783">Zobraziť</translation>
 <translation id="5301954838959518834">Dobre</translation>
-<translation id="5313967007315987356">Pridať web</translation>
 <translation id="5317780077021120954">Uložiť</translation>
 <translation id="5335288049665977812">Povoliť webom spúšťať JavaScript (odporúča sa)</translation>
 <translation id="534295439873310000">Zariadenia NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Vybrané: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Povolené: <ph name="PERMISSION_1" /> a <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Zvyčajne blokujete upozornenia. Ak ich chcete povoliť, klepnite na Podrobnosti.</translation>
+<translation id="7366415735885268578">Pridanie webu</translation>
 <translation id="7383715096023715447">Nastavenia domény <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Najprv sa opýtať</translation>
 <translation id="7423538860840206698">Blokovať čítanie schránky</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Technológia NFC je v tomto zariadení vypnutá. Zapnite ju v <ph name="BEGIN_LINK" />Nastaveniach Androidu<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Zakázať webom zobrazovať a meniť informácie v zariadeniach s rozhraním NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokovať súbory cookie na konkrétnom webe.</translation>
 <translation id="8959122750345127698">Navigácia je nedostupná: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Odstrániť</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
index 4cb13019..9c2fcefc 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Povlecite z vrha in se dotaknite gumba za nazaj, če želite zapreti celozaslonski način.</translation>
 <translation id="5300589172476337783">Pokaži</translation>
 <translation id="5301954838959518834">V redu, razumem</translation>
-<translation id="5313967007315987356">Dodajanje mesta</translation>
 <translation id="5317780077021120954">Shrani</translation>
 <translation id="5335288049665977812">Spletnim mestom dovoli izvajanje JavaScripta (priporočeno)</translation>
 <translation id="534295439873310000">Naprave s tehnologijo NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Št. izbranih: <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Dovoljeno: <ph name="PERMISSION_1" /> in <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Obvestila običajno blokirate. Če želite to omogočiti, se dotaknite Podrobnosti.</translation>
+<translation id="7366415735885268578">Dodajanje spletnega mesta</translation>
 <translation id="7383715096023715447">Nastavitve za domeno <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Najprej vprašaj</translation>
 <translation id="7423538860840206698">Blokirano branje vsebine odložišča</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Tehnologija NFC je izklopljena za to napravo. Vklopite jo v <ph name="BEGIN_LINK" />nastavitvah za Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Preprečevanje ogleda in spreminjanja podatkov v napravah NFC spletnim mestom</translation>
-<translation id="8941729603749328384">www.primer.si</translation>
 <translation id="8958424370300090006">Blokiranje piškotkov za določeno spletno mesto.</translation>
 <translation id="8959122750345127698">Krmarjenje ni dosegljivo: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Pozabi</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
index f89f3a17..9537ef4b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Zvarrit nga lart dhe prek butonin e kthimit për të dalë nga ekrani i plotë.</translation>
 <translation id="5300589172476337783">Shfaq</translation>
 <translation id="5301954838959518834">Në rregull, kuptova.</translation>
-<translation id="5313967007315987356">Shto një sajt</translation>
 <translation id="5317780077021120954">Ruaj</translation>
 <translation id="5335288049665977812">Lejoji sajtet të ekzekutojnë JavaScript (rekomandohet)</translation>
 <translation id="534295439873310000">Pajisjet me NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> të zgjedhura</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> dhe <ph name="PERMISSION_2" /> janë lejuar</translation>
 <translation id="7302486331832100261">Ti i bllokon zakonisht njoftimet. Për t'i lejuar, trokit te "Detajet".</translation>
+<translation id="7366415735885268578">Shto një sajt</translation>
 <translation id="7383715096023715447">Cilësimet për <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Pyet në fillim</translation>
 <translation id="7423538860840206698">Bllokuar për leximin e kujtesës së fragmenteve</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Veçoria NFC është joaktive për këtë pajisje. Aktivizoje te <ph name="BEGIN_LINK" />Cilësimet e Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Blloko sajtet që të mos shikojnë dhe ndryshojnë informacionin në pajisjet NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blloko kukit për një sajt specifik.</translation>
 <translation id="8959122750345127698">Lundrimi është i paarritshëm: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Harro</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
index 5b462f4..f3c7395f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Prevucite od vrha ekrana i dodirnite dugme Nazad da biste izašli iz režima celog ekrana.</translation>
 <translation id="5300589172476337783">Prikaži</translation>
 <translation id="5301954838959518834">Važi</translation>
-<translation id="5313967007315987356">Dodajte sajt</translation>
 <translation id="5317780077021120954">Sačuvaj</translation>
 <translation id="5335288049665977812">Dozvoli sajtovima da pokreću JavaScript (preporučeno)</translation>
 <translation id="534295439873310000">NFC uređaji</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Izabrali ste <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Odobrene su dozvole <ph name="PERMISSION_1" /> i <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Obično blokirate obaveštenja. Da biste ih dozvolili, dodirnite Detalji.</translation>
+<translation id="7366415735885268578">Dodajte sajt</translation>
 <translation id="7383715096023715447">Podešavanja za <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Prvo pitaj</translation>
 <translation id="7423538860840206698">Čitanje privremene memorije je blokirano</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Ovaj sajt prikazuje oglase koji ometaju aktivnosti ili obmanjujuće oglase</translation>
 <translation id="8394832520002899662">Dodirnite da biste se vratili na sajt</translation>
 <translation id="8409345997656833551">Dobijte obaveštenje kada je pojednostavljeni prikaz dostupan za članak</translation>
+<translation id="8423565414844018592">Promena veličine teksta je podešena na <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Podešavanja</translation>
 <translation id="8441146129660941386">Premotaj unazad</translation>
 <translation id="8444433999583714703">Da biste dozvolili da <ph name="APP_NAME" /> pristupa lokaciji, uključite lokaciju i u <ph name="BEGIN_LINK" />Android podešavanjima<ph name="END_LINK" />.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC je isključen za ovaj uređaj. Uključite ga u <ph name="BEGIN_LINK" />Android podešavanjima<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Sprečite sajtove da vide i menjaju informacije na NFC uređajima</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blokirajte kolačiće za određeni sajt.</translation>
 <translation id="8959122750345127698">Navigacija je nedostupna: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Zaboravi</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
index 29a6ec6..eaf043e 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Превуците од врха екрана и додирните дугме Назад да бисте изашли из режима целог екрана.</translation>
 <translation id="5300589172476337783">Прикажи</translation>
 <translation id="5301954838959518834">Важи</translation>
-<translation id="5313967007315987356">Додајте сајт</translation>
 <translation id="5317780077021120954">Сачувај</translation>
 <translation id="5335288049665977812">Дозволи сајтовима да покрећу JavaScript (препоручено)</translation>
 <translation id="534295439873310000">NFC уређаји</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Изабрали сте <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Одобрене су дозволе <ph name="PERMISSION_1" /> и <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Обично блокирате обавештења. Да бисте их дозволили, додирните Детаљи.</translation>
+<translation id="7366415735885268578">Додајте сајт</translation>
 <translation id="7383715096023715447">Подешавања за <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Прво питај</translation>
 <translation id="7423538860840206698">Читање привремене меморије је блокирано</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Овај сајт приказује огласе који ометају активности или обмањујуће огласе</translation>
 <translation id="8394832520002899662">Додирните да бисте се вратили на сајт</translation>
 <translation id="8409345997656833551">Добијте обавештење када је поједностављени приказ доступан за чланак</translation>
+<translation id="8423565414844018592">Промена величине текста је подешена на <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Подешавања</translation>
 <translation id="8441146129660941386">Премотај уназад</translation>
 <translation id="8444433999583714703">Да бисте дозволили да <ph name="APP_NAME" /> приступа локацији, укључите локацију и у <ph name="BEGIN_LINK" />Android подешавањима<ph name="END_LINK" />.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC је искључен за овај уређај. Укључите га у <ph name="BEGIN_LINK" />Android подешавањима<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Спречите сајтове да виде и мењају информације на NFC уређајима</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Блокирајте колачиће за одређени сајт.</translation>
 <translation id="8959122750345127698">Навигација је недоступна: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Заборави</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
index fe8e8fb..18ef1b1 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Dra uppifrån och tryck på bakåtknappen för att lämna helskärmsläget.</translation>
 <translation id="5300589172476337783">Visa</translation>
 <translation id="5301954838959518834">Ok, jag förstår</translation>
-<translation id="5313967007315987356">Lägg till webbplats</translation>
 <translation id="5317780077021120954">Spara</translation>
 <translation id="5335288049665977812">Tillåt att JavaScript körs på webbplatser (rekommenderas)</translation>
 <translation id="534295439873310000">NFC-enheter</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> har valts</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> och <ph name="PERMISSION_2" /> tillåts</translation>
 <translation id="7302486331832100261">Du brukar blockera aviseringar. Tryck på Info om du vill tillåta dem.</translation>
+<translation id="7366415735885268578">Lägg till en webbplats</translation>
 <translation id="7383715096023715447">Inställningar för <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Fråga först</translation>
 <translation id="7423538860840206698">Läsbehörighet till Urklipp har nekats</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC är inte aktiverat på enheten. Aktivera det i <ph name="BEGIN_LINK" />Android-inställningarna<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Förhindra att webbplatser visar och ändrar information på NFC-enheter</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Blockera cookies för en enskild webbplats.</translation>
 <translation id="8959122750345127698">Det går inte att nå webbadressen: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Glöm</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
index e36eb165..64d2b68 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Buruta kutoka juu na uguse kitufe cha kurudi nyuma ili uondoke kwenye skrini nzima.</translation>
 <translation id="5300589172476337783">Onyesha</translation>
 <translation id="5301954838959518834">Sawa, nimeelewa</translation>
-<translation id="5313967007315987356">Ongeza tovuti</translation>
 <translation id="5317780077021120954">Hifadhi</translation>
 <translation id="5335288049665977812">Ruhusu tovuti zitumie JavaScript (inapendekezwa)</translation>
 <translation id="534295439873310000">Vifaa vya NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Umechagua <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Umeruhusu <ph name="PERMISSION_1" /> na <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Huwa unazuia arifa. Ili uziruhusu, gusa Maelezo.</translation>
+<translation id="7366415735885268578">Ongeza tovuti</translation>
 <translation id="7383715096023715447">Mipangilio ya <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Uliza kwanza</translation>
 <translation id="7423538860840206698">Imezuiwa kusoma ubao wa kunakili</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Kipengele cha NFC kimezimwa kwenye kifaa hiki. Kiwashe katika <ph name="BEGIN_LINK" />Mipangilio ya Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Zuia tovuti zisione wala kubadilisha maelezo kwenye vifaa vya NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Zuia vidakuzi katika tovuti maalum.</translation>
 <translation id="8959122750345127698">Kudurusu hakufikiki: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Sahau</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb
index 0c0c588..e05ca580 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">முழுத்திரையிலிருந்து வெளியேற, மேலிருந்து இழுத்து "முந்தையது" பட்டனைத் தொடவும்.</translation>
 <translation id="5300589172476337783">காண்பி</translation>
 <translation id="5301954838959518834">சரி, புரிந்தது</translation>
-<translation id="5313967007315987356">தளத்தைச் சேர்</translation>
 <translation id="5317780077021120954">சேமி</translation>
 <translation id="5335288049665977812">JavaScriptஐ இயக்குவதற்கு, தளங்களை அனுமதி (பரிந்துரைக்கப்படுகிறது)</translation>
 <translation id="534295439873310000">NFC சாதனங்கள்</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> தேர்ந்தெடுக்கப்பட்டன</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ஆகியவற்றுக்கான அனுமதிகள் வழங்கப்பட்டன</translation>
 <translation id="7302486331832100261">பொதுவாக அறிவிப்புகளைத் தடுத்துள்ளீர்கள். அவற்றை அனுமதிக்க 'விவரங்கள்' என்பதைத் தட்டவும்.</translation>
+<translation id="7366415735885268578">தளத்தைச் சேர்</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> தளத்திற்கான அமைப்புகள்</translation>
 <translation id="7423098979219808738">முதலில் கேள்</translation>
 <translation id="7423538860840206698">கிளிப்போர்டைப் படிப்பது தடுக்கப்பட்டுள்ளது</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">இந்தச் சாதனத்தில் NFC ஆஃப் செய்யப்பட்டுள்ளது. அதை <ph name="BEGIN_LINK" />Android அமைப்புகளில்<ph name="END_LINK" /> ஆன் செய்யவும்.</translation>
 <translation id="8928445016601307354">NFC சாதனங்களின் தகவல்களைத் தளங்கள் பார்ப்பதும் மாற்றுவதும் தடுக்கப்படும்</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">குறிப்பிட்ட தளத்திற்கான குக்கீகளைத் தடுக்கும்.</translation>
 <translation id="8959122750345127698">செல்ல முடியவில்லை: <ph name="URL" /></translation>
 <translation id="8986362086234534611">மற</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
index b24f143..2a39259 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">ఫుల్-స్క్రీన్‌ నుండి నిష్క్రమించడానికి పైనుండి లాగి, వెనుకకు బటన్‌ను తాకండి.</translation>
 <translation id="5300589172476337783">చూపించు</translation>
 <translation id="5301954838959518834">సరే, అర్థమైంది</translation>
-<translation id="5313967007315987356">సైట్‌ను జోడించు</translation>
 <translation id="5317780077021120954">సేవ్ చేయండి</translation>
 <translation id="5335288049665977812">సైట్‌లను జావాస్క్రిప్ట్ అమలు చేయడానికి అనుమతిస్తుంది (సిఫార్సు చేయబడింది)</translation>
 <translation id="534295439873310000">NFC పరికరాలు</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ఎంచుకోబడ్డాయి</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> అనుమతించబడ్డాయి</translation>
 <translation id="7302486331832100261">మీరు సాధారణంగా నోటిఫికేషన్‌లను బ్లాక్ చేస్తుంటారు. అనుమతించడానికి, 'వివరాలు'ను నొక్కండి.</translation>
+<translation id="7366415735885268578">సైట్‌ను జోడించండి</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> కోసం సెట్టింగ్‌లు</translation>
 <translation id="7423098979219808738">ముందుగా అడుగుతుంది</translation>
 <translation id="7423538860840206698">క్లిప్‌బోర్డ్‌ని చదవకుండా బ్లాక్ చేశారు</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">ఈ పరికరంలో NFC ఆఫ్ చేయబడింది. <ph name="BEGIN_LINK" />Android సెట్టింగ్‌ల<ph name="END_LINK" />లో దాన్ని ఆన్ చేయండి.</translation>
 <translation id="8928445016601307354">NFC పరికరాలలో సమాచారాన్ని చూడకుండా, మార్చకుండా ఉండేలా సైట్‌లను బ్లాక్ చేయండి</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">ఏదైనా ఒక నిర్దిష్ట సైట్‌లో కుక్కీలను బ్లాక్ చేయండి.</translation>
 <translation id="8959122750345127698">దీనికి నావిగేట్ చేయడం సాధ్యపడదు: <ph name="URL" /></translation>
 <translation id="8986362086234534611">మరిచిపోయారా</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
index 5896cfc..436c26a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">ลากจากด้านบน แล้วแตะปุ่มกลับเพื่อออกจากโหมดเต็มหน้าจอ</translation>
 <translation id="5300589172476337783">แสดง</translation>
 <translation id="5301954838959518834">ตกลง เข้าใจแล้ว</translation>
-<translation id="5313967007315987356">เพิ่มเว็บไซต์</translation>
 <translation id="5317780077021120954">บันทึก</translation>
 <translation id="5335288049665977812">อนุญาตให้เว็บไซต์เรียกใช้ JavaScript (แนะนำ)</translation>
 <translation id="534295439873310000">อุปกรณ์ NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">เลือกไว้ <ph name="ITEM_COUNT" /> รายการ</translation>
 <translation id="7260727271532453612">อนุญาตให้เข้าถึง<ph name="PERMISSION_1" />และ<ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">คุณมักจะบล็อกการแจ้งเตือน หากต้องการอนุญาต ให้แตะ "รายละเอียด"</translation>
+<translation id="7366415735885268578">เพิ่มเว็บไซต์</translation>
 <translation id="7383715096023715447">การตั้งค่าสำหรับ <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">ถามก่อน</translation>
 <translation id="7423538860840206698">บล็อกไม่ให้อ่านคลิปบอร์ด</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC ในอุปกรณ์นี้ปิดอยู่ เปิดได้ใน<ph name="BEGIN_LINK" />การตั้งค่า Android<ph name="END_LINK" /></translation>
 <translation id="8928445016601307354">บล็อกเว็บไซต์ไม่ให้ดูและเปลี่ยนแปลงข้อมูลในอุปกรณ์ NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">บล็อกคุกกี้ของเว็บไซต์ที่เจาะจง</translation>
 <translation id="8959122750345127698">ไม่สามารถเข้าถึงการนำทางได้: <ph name="URL" /></translation>
 <translation id="8986362086234534611">เลิกจำ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
index e8b9473..207d7d8 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Tam ekrandan çıkmak için yukarıdan sürükleyin ve geri düğmesine dokunun.</translation>
 <translation id="5300589172476337783">Göster</translation>
 <translation id="5301954838959518834">Tamam, anladım</translation>
-<translation id="5313967007315987356">Site ekle</translation>
 <translation id="5317780077021120954">Kaydet</translation>
 <translation id="5335288049665977812">Sitelerin JavaScript çalıştırmasına izin ver (önerilir)</translation>
 <translation id="534295439873310000">NFC cihazları</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> öğe seçildi</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> ve <ph name="PERMISSION_2" /> için izin verildi</translation>
 <translation id="7302486331832100261">Genelde bildirimleri engelliyorsunuz. İzin vermek için Ayrıntılar'a dokunun.</translation>
+<translation id="7366415735885268578">Site ekle</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> ayarları</translation>
 <translation id="7423098979219808738">Önce sor</translation>
 <translation id="7423538860840206698">Pano okuma engellendi</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC bu cihazda kapalı. Bu özelliği <ph name="BEGIN_LINK" />Android Ayarları<ph name="END_LINK" />'nda açın.</translation>
 <translation id="8928445016601307354">NFC cihazlarda sitelerin bilgileri görmesini ve değiştirmesini engelle</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Belirli bir site için çerezleri engelleyin.</translation>
 <translation id="8959122750345127698">Gezinme işlevine ulaşılamıyor: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Unut</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
index 6d8a797..d5a9910 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Щоб вийти з повноекранного режиму, проведіть пальцем по екрану згори вниз і торкніться кнопки "Назад".</translation>
 <translation id="5300589172476337783">Показати</translation>
 <translation id="5301954838959518834">OK</translation>
-<translation id="5313967007315987356">Додати сайт</translation>
 <translation id="5317780077021120954">Зберегти</translation>
 <translation id="5335288049665977812">Дозволити сайтам запускати JavaScript (рекомендується)</translation>
 <translation id="534295439873310000">Пристрої NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Вибрано <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Дозволено: "<ph name="PERMISSION_1" />" і "<ph name="PERMISSION_2" />"</translation>
 <translation id="7302486331832100261">Зазвичай ви блокуєте сповіщення. Щоб дозволити, натисніть "Деталі".</translation>
+<translation id="7366415735885268578">Додати сайт</translation>
 <translation id="7383715096023715447">Налаштування для домену <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Спершу запитувати</translation>
 <translation id="7423538860840206698">Заборонено переглядати буфер обміну</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC вимкнено на цьому пристрої. Увімкніть цю функцію в <ph name="BEGIN_LINK" />налаштуваннях Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Заборонити сайтам переглядати й змінювати інформацію на пристроях NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Блокувати файли cookie з конкретного сайту.</translation>
 <translation id="8959122750345127698">Веб-сторінка <ph name="URL" /> недоступна</translation>
 <translation id="8986362086234534611">Забути</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
index cee07cc..735d73a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">پوری اسکرین سے باہر نکلنے کیلئے اوپر سے گھسیٹیں اور پیچھے جائیں بٹن کو ٹچ کریں۔</translation>
 <translation id="5300589172476337783">دکھائیں</translation>
 <translation id="5301954838959518834">ٹھیک ہے، سمجھ آ گئی</translation>
-<translation id="5313967007315987356">سائٹ شامل کریں</translation>
 <translation id="5317780077021120954">محفوظ کریں</translation>
 <translation id="5335288049665977812">‏سائٹس کو JavaScript چلانے کی اجازت دیں (تجویز کردہ)</translation>
 <translation id="534295439873310000">‏NFC آلات</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> منتخب ہو گئے</translation>
 <translation id="7260727271532453612"><ph name="PERMISSION_1" /> اور <ph name="PERMISSION_2" /> کی اجازت دی گئی</translation>
 <translation id="7302486331832100261">آپ عام طور پر اطلاعات کو مسدود کرتے ہیں۔ اجازت دینے کے لیے، تفصیلات پر تھپتھپائیں۔</translation>
+<translation id="7366415735885268578">ایک سائٹ شامل کریں</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> کیلئے ترتیبات</translation>
 <translation id="7423098979219808738">پہلے پوچھیں</translation>
 <translation id="7423538860840206698">کلپ بورڈ پڑھنے سے مسدود کیا گیا</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">یہ سائٹ دخل انداز یا گمراہ کن اشتہارات دکھاتی ہے</translation>
 <translation id="8394832520002899662">سائٹ پر واپس جانے کے لیے تھپتھپائیں</translation>
 <translation id="8409345997656833551">جب کوئی مضمون آسان منظر میں دکھایا جا سکتا ہے تو مطلع کریں</translation>
+<translation id="8423565414844018592">ٹیکسٹ اسکیلنگ کو <ph name="TEXT_SCALING" /> پر سیٹ کیا گیا</translation>
 <translation id="8428213095426709021">ترتیبات</translation>
 <translation id="8441146129660941386">پیچھے لے جائیں</translation>
 <translation id="8444433999583714703">‏<ph name="APP_NAME" /> کو اپنے مقام تک رسائی دینے کے لیے، <ph name="BEGIN_LINK" />Android کی ترتیبات<ph name="END_LINK" /> میں بھی مقام آن کریں۔</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">‏اس آلہ کے لیے NFC آف ہے۔ اسے <ph name="BEGIN_LINK" />Android ترتیبات<ph name="END_LINK" /> میں آن کریں۔</translation>
 <translation id="8928445016601307354">‏سائٹس کو NFC آلات پر معلومات دیکھنے اور تبدیل کرنے سے مسدود کریں</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">کسی مخصوص سائٹ کے لیے کوکیز مسدود کریں۔</translation>
 <translation id="8959122750345127698">نیویگیشن ناقابل رسائی ہے: <ph name="URL" /></translation>
 <translation id="8986362086234534611">بھول جائیں</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb
index 9146b04..95ce4d37 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">To‘liq ekran rejimidan chiqish uchun ekranni tepadan pastga torting va “Orqaga” tugmasini bosing.</translation>
 <translation id="5300589172476337783">Ko‘rsatish</translation>
 <translation id="5301954838959518834">OK</translation>
-<translation id="5313967007315987356">Sayt qo‘shish</translation>
 <translation id="5317780077021120954">Saqlash</translation>
 <translation id="5335288049665977812">Saytlarga JavaScript ishga tushirishiga ruxsat berish (tavsiya etiladi)</translation>
 <translation id="534295439873310000">NFC qurilmalar</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> ta element tanlandi</translation>
 <translation id="7260727271532453612">Ruxsat berildi: <ph name="PERMISSION_1" /> va <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Odatda bildirishnomalarni bloklaysiz. Ruxsat berish uchun Tafsilotlar ustiga bosing.</translation>
+<translation id="7366415735885268578">Sayt qo‘shish</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> sozlamalari</translation>
 <translation id="7423098979219808738">Avval so‘ralsin</translation>
 <translation id="7423538860840206698">Klipborddan o‘qish taqiqlangan</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">Telefonda NFC yoqilmagan. Uni <ph name="BEGIN_LINK" />Android sozlamalari<ph name="END_LINK" /> orqali yoqing.</translation>
 <translation id="8928445016601307354">Saytlarga NFC qurilmalarni koʻrish va ulardagi axborotni oʻzgartirishni taqiqlash</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Muayyan saytlar uchun cookie-fayllarni bloklang.</translation>
 <translation id="8959122750345127698">Sahifa topilmadi: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Olib tashlash</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
index e73300c..823d6823 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Kéo từ trên xuống và chạm vào nút quay lại để thoát khỏi chế độ toàn màn hình.</translation>
 <translation id="5300589172476337783">Hiển thị</translation>
 <translation id="5301954838959518834">Ok</translation>
-<translation id="5313967007315987356">Thêm trang web</translation>
 <translation id="5317780077021120954">Lưu</translation>
 <translation id="5335288049665977812">Cho phép các trang web chạy JavaScript (được đề xuất)</translation>
 <translation id="534295439873310000">Thiết bị dùng công nghệ NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">Đã chọn <ph name="ITEM_COUNT" /></translation>
 <translation id="7260727271532453612">Đã cho phép <ph name="PERMISSION_1" /> và <ph name="PERMISSION_2" /></translation>
 <translation id="7302486331832100261">Bạn thường chặn các thông báo. Để cho phép, hãy nhấn vào Chi tiết.</translation>
+<translation id="7366415735885268578">Thêm trang web</translation>
 <translation id="7383715096023715447">Chế độ cài đặt cho <ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Hỏi trước</translation>
 <translation id="7423538860840206698">Đã chặn quyền đọc bảng nhớ tạm</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Trang web này hiển thị quảng cáo xâm nhập hoặc quảng cáo gây hiểu nhầm</translation>
 <translation id="8394832520002899662">Nhấn để quay lại trang web</translation>
 <translation id="8409345997656833551">Nhận thông báo khi có thể xem bài viết ở chế độ đơn giản hoá</translation>
+<translation id="8423565414844018592">Đã đặt tỷ lệ văn bản thành <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Cài đặt</translation>
 <translation id="8441146129660941386">Tìm kiếm lùi</translation>
 <translation id="8444433999583714703">Để cho phép <ph name="APP_NAME" /> truy cập vào thông tin vị trí của bạn, hãy bật cả dịch vụ vị trí trong phần <ph name="BEGIN_LINK" />Cài đặt Android<ph name="END_LINK" />.</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">NFC đã tắt đối với thiết bị này. Hãy bật trong phần <ph name="BEGIN_LINK" />Cài đặt Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Chặn không cho các trang web xem và thay đổi thông tin trên thiết bị NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Chặn cookie của một trang web cụ thể.</translation>
 <translation id="8959122750345127698">Không thể tiếp cận điều hướng: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Quên</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
index fb7f22c..b23b61c 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">从顶部向下拖动并触摸“返回”按钮,即可退出全屏模式。</translation>
 <translation id="5300589172476337783">显示</translation>
 <translation id="5301954838959518834">知道了</translation>
-<translation id="5313967007315987356">添加网站</translation>
 <translation id="5317780077021120954">保存</translation>
 <translation id="5335288049665977812">允许网站运行 JavaScript(推荐)</translation>
 <translation id="534295439873310000">NFC 设备</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">已选择 <ph name="ITEM_COUNT" /> 项</translation>
 <translation id="7260727271532453612">已授予“<ph name="PERMISSION_1" />”权限和“<ph name="PERMISSION_2" />”权限</translation>
 <translation id="7302486331832100261">您通常会屏蔽通知。要允许显示通知,请点按“详细信息”。</translation>
+<translation id="7366415735885268578">添加网站</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> 的设置</translation>
 <translation id="7423098979219808738">先询问</translation>
 <translation id="7423538860840206698">已阻止读取剪贴板中的内容</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">此设备的 NFC 功能处于关闭状态。请在 <ph name="BEGIN_LINK" />Android 设置<ph name="END_LINK" />中开启此功能。</translation>
 <translation id="8928445016601307354">禁止网站查看和更改 NFC 设备上的信息</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">阻止特定网站使用 Cookie。</translation>
 <translation id="8959122750345127698">无法访问 <ph name="URL" /></translation>
 <translation id="8986362086234534611">不保存</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb
index 9b06243b..7a8afb8 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">由上而下拖曳,然後輕觸返回按鈕即可退出全螢幕。</translation>
 <translation id="5300589172476337783">顯示</translation>
 <translation id="5301954838959518834">好,我知道了</translation>
-<translation id="5313967007315987356">新增網站</translation>
 <translation id="5317780077021120954">儲存</translation>
 <translation id="5335288049665977812">允許網站執行 JavaScript (建議)</translation>
 <translation id="534295439873310000">NFC 裝置</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">揀咗 <ph name="ITEM_COUNT" /> 個</translation>
 <translation id="7260727271532453612">已允許「<ph name="PERMISSION_1" />」和「<ph name="PERMISSION_2" />」</translation>
 <translation id="7302486331832100261">您通常會封鎖通知。如要允許,請輕按 [詳情]。</translation>
+<translation id="7366415735885268578">新增網站</translation>
 <translation id="7383715096023715447"><ph name="DOMAIN" /> 的設定</translation>
 <translation id="7423098979219808738">事先詢問</translation>
 <translation id="7423538860840206698">禁止讀取剪貼簿</translation>
@@ -384,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">此裝置的 NFC 已關閉,請在「<ph name="BEGIN_LINK" />Android 設定<ph name="END_LINK" />」中開啟。</translation>
 <translation id="8928445016601307354">禁止網站在 NFC 裝置上查看和變更資料</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">禁止特定網站存取 Cookie。</translation>
 <translation id="8959122750345127698">無法存取瀏覽網址:<ph name="URL" /></translation>
 <translation id="8986362086234534611">清除</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
index 758a2b9..d8a867d 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">從頂端拖曳並輕觸返回按鈕即可結束全螢幕模式。</translation>
 <translation id="5300589172476337783">顯示</translation>
 <translation id="5301954838959518834">好,我知道了</translation>
-<translation id="5313967007315987356">新增網站</translation>
 <translation id="5317780077021120954">儲存</translation>
 <translation id="5335288049665977812">允許網站執行 JavaScript (建議)</translation>
 <translation id="534295439873310000">NFC 裝置</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378">已選取 <ph name="ITEM_COUNT" /> 個項目</translation>
 <translation id="7260727271532453612">已允許「<ph name="PERMISSION_1" />」和「<ph name="PERMISSION_2" />」</translation>
 <translation id="7302486331832100261">你通常會封鎖通知。如要允許通知,請輕觸 [詳細資料]。</translation>
+<translation id="7366415735885268578">新增網站</translation>
 <translation id="7383715096023715447">「<ph name="DOMAIN" />」的設定</translation>
 <translation id="7423098979219808738">先詢問我</translation>
 <translation id="7423538860840206698">禁止讀取剪貼簿</translation>
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">這個網站會顯示干擾性或誤導性的廣告</translation>
 <translation id="8394832520002899662">輕觸即可返回網站</translation>
 <translation id="8409345997656833551">在文章能以簡易檢視模式顯示時通知我</translation>
+<translation id="8423565414844018592">文字縮放已設為 <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">設定</translation>
 <translation id="8441146129660941386">倒轉到特定的播放時間點</translation>
 <translation id="8444433999583714703">如要允許 <ph name="APP_NAME" /> 存取你的位置,請一併在 <ph name="BEGIN_LINK" />Android 設定<ph name="END_LINK" />中開啟定位功能。</translation>
@@ -383,7 +384,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation>
 <translation id="8926666909099850184">這部裝置的 NFC 功能已關閉。請前往 <ph name="BEGIN_LINK" />Android 設定<ph name="END_LINK" />開啟這項功能。</translation>
 <translation id="8928445016601307354">禁止網站在 NFC 裝置上查看和變更資訊</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">封鎖特定網站的 Cookie。</translation>
 <translation id="8959122750345127698">瀏覽的網址無法存取:<ph name="URL" /></translation>
 <translation id="8986362086234534611">清除</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb
index 97b7974..847069b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb
@@ -200,7 +200,6 @@
 <translation id="528192093759286357">Hudula kusukela phezulu uphinde uthinte inkinobho yokubuyela emuva ukuze uphume kusikrini esigcwele.</translation>
 <translation id="5300589172476337783">Bonisa</translation>
 <translation id="5301954838959518834">OK, ngiyezwa</translation>
-<translation id="5313967007315987356">Engeza isayithi</translation>
 <translation id="5317780077021120954">Londoloza</translation>
 <translation id="5335288049665977812">Vumela amasayithi ukuthi aqalise i-JavaScript (kunconyiwe)</translation>
 <translation id="534295439873310000">Amadivayisi e-NFC</translation>
@@ -299,6 +298,7 @@
 <translation id="7250468141469952378"><ph name="ITEM_COUNT" /> kukhethiwe</translation>
 <translation id="7260727271532453612">I-<ph name="PERMISSION_1" /> ne-<ph name="PERMISSION_2" /> kuvunyelwe</translation>
 <translation id="7302486331832100261">Uvamise ukuvimba izaziso. Ukuze uvumele, thepha imininingwane.</translation>
+<translation id="7366415735885268578">Engeza isayithi</translation>
 <translation id="7383715096023715447">Amasethingi e-<ph name="DOMAIN" /></translation>
 <translation id="7423098979219808738">Buza kuqala</translation>
 <translation id="7423538860840206698">Kuvinjelwe kusukela ekufundeni ibhodi lokunamathisela</translation>
@@ -383,7 +383,6 @@
 <translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation>
 <translation id="8926666909099850184">I-NFC ivaliwe kule divayisi. Ivule kokuthi <ph name="BEGIN_LINK" />Izilungiselelo ze-Android<ph name="END_LINK" />.</translation>
 <translation id="8928445016601307354">Vimba amasayithi ekuboneni nasekuguquleni ulwazi kumadivayisi e-NFC</translation>
-<translation id="8941729603749328384">www.example.com</translation>
 <translation id="8958424370300090006">Vimbela amakhukhi kusayithi elithile.</translation>
 <translation id="8959122750345127698">Ukuzulazula akufinyeleleki: <ph name="URL" /></translation>
 <translation id="8986362086234534611">Khohlwa</translation>
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/text/AlertDialogEditText.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/text/AlertDialogEditText.java
index ef20645..a15fb425 100644
--- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/text/AlertDialogEditText.java
+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/text/AlertDialogEditText.java
@@ -8,20 +8,16 @@
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.ViewStructure;
-import android.widget.EditText;
 
 import androidx.appcompat.widget.AppCompatEditText;
 
-import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.url.GURL;
 
 /**
  * Wrapper class needed due to b/122113958.
  *
  * Note that for password fields the hint text is expected to be set in XML so that it is available
- * during inflation. If the hint text or content description is changed programmatically, consider
- * calling {@link ApiCompatibilityUtils#setPasswordEditTextContentDescription(EditText)} after
- * the change.
+ * during inflation.
  */
 public class AlertDialogEditText extends AppCompatEditText {
     private GURL mUrl;
@@ -35,12 +31,6 @@
     }
 
     @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        ApiCompatibilityUtils.setPasswordEditTextContentDescription(this);
-    }
-
-    @Override
     @SuppressLint("NewApi")
     public void onProvideAutofillStructure(ViewStructure structure, int flags) {
         if (mUrl != null && !mUrl.isEmpty()) {
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 27e31aa..7992ff7f 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "14.29",
-  "log_list_timestamp": "2022-11-14T12:54:37Z",
+  "version": "14.30",
+  "log_list_timestamp": "2022-11-15T12:55:09Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/desks_storage/BUILD.gn b/components/desks_storage/BUILD.gn
index b958372..dad81af 100644
--- a/components/desks_storage/BUILD.gn
+++ b/components/desks_storage/BUILD.gn
@@ -82,5 +82,7 @@
     "//components/app_constants",
     "//components/sync:test_support",
     "//testing/gtest",
+    "//ui/gfx/geometry",
+    "//ui/gfx/range",
   ]
 }
diff --git a/components/desks_storage/DEPS b/components/desks_storage/DEPS
index e27267f6..3cb20ab 100644
--- a/components/desks_storage/DEPS
+++ b/components/desks_storage/DEPS
@@ -13,5 +13,6 @@
   "+third_party/re2",
   "+ui/base/ui_base_types.h",
   "+ui/base/window_open_disposition.h",
-  "+ui/gfx/geometry"
+  "+ui/gfx/geometry",
+  "+ui/gfx/range",
 ]
diff --git a/components/desks_storage/core/desk_sync_bridge_unittest.cc b/components/desks_storage/core/desk_sync_bridge_unittest.cc
index 7858ce54..03fd2a0 100644
--- a/components/desks_storage/core/desk_sync_bridge_unittest.cc
+++ b/components/desks_storage/core/desk_sync_bridge_unittest.cc
@@ -935,9 +935,14 @@
       SavedDeskBuilder()
           .SetUuid(base::StringPrintf(kUuidFormat, kDefaultTemplateIndex))
           .SetName(base::StringPrintf(kNameFormat, kDefaultTemplateIndex))
-          .AddAshBrowserAppWindow(kBrowserWindowId,
-                                  {GURL(base::StringPrintf(kTestUrlFormat, 1)),
-                                   GURL(base::StringPrintf(kTestUrlFormat, 2))})
+          .AddAppWindow(
+              SavedDeskBrowserBuilder()
+                  .SetUrls({GURL(base::StringPrintf(kTestUrlFormat, 1)),
+                            GURL(base::StringPrintf(kTestUrlFormat, 2))})
+                  .SetIsLacros(false)
+                  .SetGenericBuilder(SavedDeskGenericAppBuilder().SetWindowId(
+                      kBrowserWindowId))
+                  .Build())
           .Build();
 
   EXPECT_THAT(
@@ -956,9 +961,14 @@
       SavedDeskBuilder()
           .SetUuid(base::StringPrintf(kUuidFormat, kDefaultTemplateIndex))
           .SetName(base::StringPrintf(kNameFormat, kDefaultTemplateIndex))
-          .AddLacrosBrowserAppWindow(
-              kBrowserWindowId, {GURL(base::StringPrintf(kTestUrlFormat, 1)),
-                                 GURL(base::StringPrintf(kTestUrlFormat, 2))})
+          .AddAppWindow(
+              SavedDeskBrowserBuilder()
+                  .SetUrls({GURL(base::StringPrintf(kTestUrlFormat, 1)),
+                            GURL(base::StringPrintf(kTestUrlFormat, 2))})
+                  .SetIsLacros(true)
+                  .SetGenericBuilder(SavedDeskGenericAppBuilder().SetWindowId(
+                      kBrowserWindowId))
+                  .Build())
           .Build();
 
   EXPECT_THAT(
@@ -974,8 +984,14 @@
       SavedDeskBuilder()
           .SetUuid(base::StringPrintf(kUuidFormat, kDefaultTemplateIndex))
           .SetName(base::StringPrintf(kNameFormat, kDefaultTemplateIndex))
-          .AddAshPwaAppWindow(kPwaWindowId,
-                              base::StringPrintf(kTestUrlFormat, 1))
+          .AddAppWindow(
+              SavedDeskBrowserBuilder()
+                  .SetUrls({GURL(base::StringPrintf(kTestUrlFormat, 1))})
+                  .SetIsLacros(false)
+                  .SetIsApp(true)
+                  .SetGenericBuilder(
+                      SavedDeskGenericAppBuilder().SetWindowId(kPwaWindowId))
+                  .Build())
           .Build();
 
   EXPECT_THAT(
@@ -991,8 +1007,14 @@
       SavedDeskBuilder()
           .SetUuid(base::StringPrintf(kUuidFormat, kDefaultTemplateIndex))
           .SetName(base::StringPrintf(kNameFormat, kDefaultTemplateIndex))
-          .AddLacrosPwaAppWindow(kPwaWindowId,
-                                 base::StringPrintf(kTestUrlFormat, 1))
+          .AddAppWindow(
+              SavedDeskBrowserBuilder()
+                  .SetUrls({GURL(base::StringPrintf(kTestUrlFormat, 1))})
+                  .SetIsLacros(true)
+                  .SetIsApp(true)
+                  .SetGenericBuilder(
+                      SavedDeskGenericAppBuilder().SetWindowId(kPwaWindowId))
+                  .Build())
           .Build();
 
   EXPECT_THAT(
@@ -1008,8 +1030,10 @@
       SavedDeskBuilder()
           .SetUuid(base::StringPrintf(kUuidFormat, kDefaultTemplateIndex))
           .SetName(base::StringPrintf(kNameFormat, kDefaultTemplateIndex))
-          .AddChromeAppWindow(kChromeAppWindowId,
-                              desk_test_util::kTestChromeAppId)
+          .AddAppWindow(SavedDeskGenericAppBuilder()
+                            .SetAppId(desk_test_util::kTestChromeAppId)
+                            .SetWindowId(kChromeAppWindowId)
+                            .Build())
           .Build();
 
   EXPECT_THAT(
@@ -1026,8 +1050,10 @@
       SavedDeskBuilder()
           .SetUuid(base::StringPrintf(kUuidFormat, kDefaultTemplateIndex))
           .SetName(base::StringPrintf(kNameFormat, kDefaultTemplateIndex))
-          .AddChromeAppWindow(kChromeAppWindowId,
-                              desk_test_util::kTestLacrosChromeAppId)
+          .AddAppWindow(SavedDeskGenericAppBuilder()
+                            .SetAppId(desk_test_util::kTestLacrosChromeAppId)
+                            .SetWindowId(kChromeAppWindowId)
+                            .Build())
           .Build();
 
   EXPECT_THAT(
@@ -1045,10 +1071,14 @@
       SavedDeskBuilder()
           .SetUuid(base::StringPrintf(kUuidFormat, kDefaultTemplateIndex))
           .SetName(base::StringPrintf(kNameFormat, kDefaultTemplateIndex))
-          .AddChromeAppWindow(kChromeAppWindowId,
-                              desk_test_util::kTestChromeAppId)
-          .AddGenericAppWindow(kUnsupportedAppWindowId,
-                               desk_test_util::kTestUnsupportedAppId)
+          .AddAppWindow(SavedDeskGenericAppBuilder()
+                            .SetWindowId(kChromeAppWindowId)
+                            .SetAppId(desk_test_util::kTestChromeAppId)
+                            .Build())
+          .AddAppWindow(SavedDeskGenericAppBuilder()
+                            .SetWindowId(kUnsupportedAppWindowId)
+                            .SetAppId(desk_test_util::kTestUnsupportedAppId)
+                            .Build())
           .Build();
 
   EXPECT_THAT(
diff --git a/components/desks_storage/core/desk_template_conversion_unittests.cc b/components/desks_storage/core/desk_template_conversion_unittests.cc
index af19b3f..d7e6d89 100644
--- a/components/desks_storage/core/desk_template_conversion_unittests.cc
+++ b/components/desks_storage/core/desk_template_conversion_unittests.cc
@@ -365,8 +365,12 @@
           .SetName(kBrowserTemplateName)
           .SetType(ash::DeskTemplateType::kSaveAndRecall)
           .SetCreatedTime(created_time)
-          .AddLacrosBrowserAppWindow(kBrowserWindowId,
-                                     {GURL(kBrowserUrl1), GURL(kBrowserUrl2)})
+          .AddAppWindow(
+              SavedDeskBrowserBuilder()
+                  .SetGenericBuilder(SavedDeskGenericAppBuilder().SetWindowId(
+                      kBrowserWindowId))
+                  .SetUrls({GURL(kBrowserUrl1), GURL(kBrowserUrl2)})
+                  .Build())
           .Build();
 
   base::Value desk_template_value =
diff --git a/components/desks_storage/core/saved_desk_builder.cc b/components/desks_storage/core/saved_desk_builder.cc
index cf90199e..2a6b747 100644
--- a/components/desks_storage/core/saved_desk_builder.cc
+++ b/components/desks_storage/core/saved_desk_builder.cc
@@ -6,28 +6,357 @@
 
 #include "ash/public/cpp/desk_template.h"
 #include "base/guid.h"
+#include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
+#include "components/app_constants/constants.h"
 #include "components/app_restore/app_launch_info.h"
+#include "components/desks_storage/core/desk_template_conversion.h"
 #include "components/desks_storage/core/saved_desk_test_util.h"
+#include "components/tab_groups/tab_group_visual_data.h"
 
 namespace desks_storage {
 
+namespace {
+
+// Fills restore data by invoking `builder`s build method.  Drops data if the
+// build fails.
+void FillRestoreData(BuiltApp& app,
+                     app_restore::RestoreData* out_restore_data) {
+  if (app.status != BuiltApp::Status::kOk)
+    return;
+
+  // Something has gone very wrong if we built with OK status and don't have
+  // a `window_id` or `app_id` which are needed to construct a valid launch
+  // info.
+  DCHECK(app.launch_info);
+  DCHECK(app.window_info);
+
+  int32_t window_id = app.launch_info->window_id.value();
+  std::string app_id = app.launch_info->app_id;
+
+  out_restore_data->AddAppLaunchInfo(std::move(app.launch_info));
+  out_restore_data->ModifyWindowInfo(app_id, window_id, *app.window_info.get());
+}
+
+}  // namespace
+
+// SavedDeskGenericAppBuilder implementation.
+SavedDeskGenericAppBuilder::SavedDeskGenericAppBuilder() = default;
+SavedDeskGenericAppBuilder::SavedDeskGenericAppBuilder(
+    SavedDeskGenericAppBuilder&&) = default;
+SavedDeskGenericAppBuilder& SavedDeskGenericAppBuilder::operator=(
+    SavedDeskGenericAppBuilder&&) = default;
+SavedDeskGenericAppBuilder::~SavedDeskGenericAppBuilder() = default;
+
+SavedDeskGenericAppBuilder& SavedDeskGenericAppBuilder::SetWindowBound(
+    gfx::Rect bounds) {
+  window_bounds_ = bounds;
+  return *this;
+}
+
+SavedDeskGenericAppBuilder& SavedDeskGenericAppBuilder::SetWindowState(
+    chromeos::WindowStateType state) {
+  window_show_state_ = state;
+  return *this;
+}
+
+SavedDeskGenericAppBuilder&
+SavedDeskGenericAppBuilder::SetPreMinimizedWindowState(
+    ui::WindowShowState state) {
+  pre_minimized_window_show_state_ = state;
+  return *this;
+}
+
+SavedDeskGenericAppBuilder& SavedDeskGenericAppBuilder::SetAppId(
+    std::string app_id) {
+  app_id_ = app_id;
+  return *this;
+}
+
+SavedDeskGenericAppBuilder& SavedDeskGenericAppBuilder::SetZIndex(int index) {
+  z_index_ = index;
+  return *this;
+}
+
+SavedDeskGenericAppBuilder& SavedDeskGenericAppBuilder::SetWindowId(
+    int window_id) {
+  window_id_ = window_id;
+  return *this;
+}
+
+SavedDeskGenericAppBuilder& SavedDeskGenericAppBuilder::SetDisplayId(
+    int64_t display_id) {
+  display_id_ = display_id;
+  return *this;
+}
+
+SavedDeskGenericAppBuilder& SavedDeskGenericAppBuilder::SetLaunchContainer(
+    apps::LaunchContainer container) {
+  launch_conatiner_ = container;
+  return *this;
+}
+
+SavedDeskGenericAppBuilder&
+SavedDeskGenericAppBuilder::SetWindowOpenDisposition(
+    WindowOpenDisposition disposition) {
+  disposition_ = disposition;
+  return *this;
+}
+
+SavedDeskGenericAppBuilder& SavedDeskGenericAppBuilder::SetName(
+    std::string name) {
+  name_ = name;
+  return *this;
+}
+
+SavedDeskGenericAppBuilder& SavedDeskGenericAppBuilder::SetSnapPercentage(
+    int percentage) {
+  snap_percentage_ = percentage;
+  return *this;
+}
+
+BuiltApp SavedDeskGenericAppBuilder::Build() {
+  if (!window_id_)
+    return BuiltApp(BuiltApp::Status::kNoWindowId, nullptr, nullptr);
+
+  if (!app_id_)
+    app_id_ = GetAppId();
+
+  auto app_launch_info = std::make_unique<app_restore::AppLaunchInfo>(
+      GetAppId(), window_id_.value());
+  auto window_info = std::make_unique<app_restore::WindowInfo>();
+
+  window_info->window_state_type = window_show_state_;
+  window_info->pre_minimized_show_state_type = pre_minimized_window_show_state_;
+  window_info->current_bounds = window_bounds_;
+  window_info->activation_index = z_index_;
+  window_info->snap_percentage = snap_percentage_;
+  window_info->display_id = display_id_;
+
+  if (launch_conatiner_) {
+    app_launch_info->container = absl::optional<int32_t>(
+        static_cast<int32_t>(launch_conatiner_.value()));
+  }
+
+  if (disposition_) {
+    app_launch_info->disposition =
+        absl::optional<int32_t>(static_cast<int32_t>(disposition_.value()));
+  }
+
+  app_launch_info->window_id = window_id_;
+
+  return BuiltApp(BuiltApp::Status::kOk, std::move(window_info),
+                  std::move(app_launch_info));
+}
+
+const std::string& SavedDeskGenericAppBuilder::GetAppId() {
+  if (app_id_)
+    return app_id_.value();
+
+  app_id_ = base::GUID::GenerateRandomV4().AsLowercaseString();
+  return app_id_.value();
+}
+
+// SavedDeskGenericAppBuilder::BuiltApp implementation
+BuiltApp::BuiltApp(BuiltApp::Status status,
+                   std::unique_ptr<app_restore::WindowInfo> window_info,
+                   std::unique_ptr<app_restore::AppLaunchInfo> launch_info)
+    : status(status),
+      window_info(std::move(window_info)),
+      launch_info(std::move(launch_info)) {}
+BuiltApp::BuiltApp(BuiltApp&&) = default;
+BuiltApp& BuiltApp::operator=(BuiltApp&&) = default;
+BuiltApp::~BuiltApp() = default;
+
+// TabGroupWithStatus implementation
+SavedDeskTabGroupBuilder::TabGroupWithStatus::TabGroupWithStatus(
+    TabGroupBuildStatus status,
+    std::unique_ptr<app_restore::TabGroupInfo> tab_group)
+    : status(status), tab_group(std::move(tab_group)) {}
+SavedDeskTabGroupBuilder::TabGroupWithStatus::~TabGroupWithStatus() = default;
+
+// SavedDeskTabGroup builder implementation.
+SavedDeskTabGroupBuilder::SavedDeskTabGroupBuilder() = default;
+SavedDeskTabGroupBuilder::SavedDeskTabGroupBuilder(SavedDeskTabGroupBuilder&&) =
+    default;
+SavedDeskTabGroupBuilder::~SavedDeskTabGroupBuilder() = default;
+
+SavedDeskTabGroupBuilder& SavedDeskTabGroupBuilder::SetRange(gfx::Range range) {
+  range_ = range;
+  return *this;
+}
+
+SavedDeskTabGroupBuilder& SavedDeskTabGroupBuilder::SetTitle(
+    std::string title) {
+  title_ = title;
+  return *this;
+}
+
+SavedDeskTabGroupBuilder& SavedDeskTabGroupBuilder::SetColor(
+    tab_groups::TabGroupColorId color) {
+  color_ = color;
+  return *this;
+}
+
+SavedDeskTabGroupBuilder& SavedDeskTabGroupBuilder::SetIsCollapsed(
+    bool is_collapsed) {
+  is_collapsed_ = is_collapsed;
+  return *this;
+}
+
+SavedDeskTabGroupBuilder::TabGroupWithStatus SavedDeskTabGroupBuilder::Build() {
+  if (!range_ || !title_ || !color_ || !is_collapsed_)
+    return TabGroupWithStatus(TabGroupBuildStatus::kNotAllFieldsSet, nullptr);
+
+  auto tab_group = std::make_unique<app_restore::TabGroupInfo>(
+      range_.value(),
+      tab_groups::TabGroupVisualData(base::UTF8ToUTF16(title_.value()),
+                                     color_.value(), is_collapsed_.value()));
+
+  return TabGroupWithStatus(TabGroupBuildStatus::kOk, std::move(tab_group));
+}
+
+// SavedDeskBrowserBuilder implementation.
+SavedDeskBrowserBuilder::SavedDeskBrowserBuilder() = default;
+SavedDeskBrowserBuilder::~SavedDeskBrowserBuilder() = default;
+
+SavedDeskBrowserBuilder& SavedDeskBrowserBuilder::SetActiveTabIndex(int index) {
+  active_tab_index_ = index;
+  return *this;
+}
+
+SavedDeskBrowserBuilder& SavedDeskBrowserBuilder::SetFirstNonPinnedTabIndex(
+    int index) {
+  first_non_pinned_tab_index_ = index;
+  return *this;
+}
+
+SavedDeskBrowserBuilder& SavedDeskBrowserBuilder::SetUrls(
+    std::vector<GURL> urls) {
+  urls_ = urls;
+  return *this;
+}
+
+SavedDeskBrowserBuilder& SavedDeskBrowserBuilder::SetIsLacros(bool is_lacros) {
+  is_lacros_ = is_lacros;
+  return *this;
+}
+
+SavedDeskBrowserBuilder& SavedDeskBrowserBuilder::SetIsApp(bool is_app) {
+  is_app_ = is_app;
+  return *this;
+}
+
+SavedDeskBrowserBuilder& SavedDeskBrowserBuilder::AddTabGroupBuilder(
+    SavedDeskTabGroupBuilder tab_group) {
+  tab_group_builders_.push_back(std::move(tab_group));
+  return *this;
+}
+
+BuiltApp SavedDeskBrowserBuilder::Build() {
+  generic_builder_.SetAppId(is_lacros_ ? app_constants::kLacrosAppId
+                                       : app_constants::kChromeAppId);
+
+  BuiltApp generic_app = generic_builder_.Build();
+  if (generic_app.status != BuiltApp::Status::kOk)
+    return BuiltApp(generic_app.status, nullptr, nullptr);
+
+  generic_app.launch_info->active_tab_index = active_tab_index_;
+  generic_app.launch_info->first_non_pinned_tab_index =
+      first_non_pinned_tab_index_;
+  generic_app.launch_info->urls = urls_;
+  generic_app.launch_info->app_type_browser = is_app_;
+
+  for (auto& tab_group : tab_group_builders_) {
+    SavedDeskTabGroupBuilder::TabGroupWithStatus built_group =
+        tab_group.Build();
+    if (built_group.status !=
+        SavedDeskTabGroupBuilder::TabGroupBuildStatus::kOk)
+      continue;
+    DCHECK(built_group.tab_group);
+
+    generic_app.launch_info->tab_group_infos.value().push_back(
+        *built_group.tab_group.release());
+  }
+
+  return BuiltApp(BuiltApp::Status::kOk, std::move(generic_app.window_info),
+                  std::move(generic_app.launch_info));
+}
+
+SavedDeskBrowserBuilder& SavedDeskBrowserBuilder::SetGenericBuilder(
+    SavedDeskGenericAppBuilder& generic_builder) {
+  generic_builder_ = std::move(generic_builder);
+  return *this;
+}
+
+// SavedDeskArcAppBuilder implementation
+SavedDeskArcAppBuilder::SavedDeskArcAppBuilder() = default;
+SavedDeskArcAppBuilder::~SavedDeskArcAppBuilder() = default;
+
+SavedDeskArcAppBuilder& SavedDeskArcAppBuilder::SetAppId(std::string app_id) {
+  app_id_ = app_id;
+  return *this;
+}
+
+SavedDeskArcAppBuilder& SavedDeskArcAppBuilder::SetMinimumSize(gfx::Size size) {
+  minimum_size_ = size;
+  return *this;
+}
+
+SavedDeskArcAppBuilder& SavedDeskArcAppBuilder::SetMaximumSize(gfx::Size size) {
+  maximum_size_ = size;
+  return *this;
+}
+
+SavedDeskArcAppBuilder& SavedDeskArcAppBuilder::SetBoundsInRoot(
+    gfx::Rect bounds) {
+  bounds_in_root_ = bounds;
+  return *this;
+}
+
+BuiltApp SavedDeskArcAppBuilder::Build() {
+  BuiltApp generic_app = generic_builder_.SetAppId(app_id_.value()).Build();
+
+  if (generic_app.status != BuiltApp::Status::kOk)
+    return BuiltApp(generic_app.status, nullptr, nullptr);
+
+  app_restore::WindowInfo::ArcExtraInfo arc_info_;
+  arc_info_.bounds_in_root = bounds_in_root_;
+  arc_info_.maximum_size = maximum_size_;
+  arc_info_.minimum_size = minimum_size_;
+
+  generic_app.window_info->arc_extra_info = arc_info_;
+
+  return BuiltApp(BuiltApp::Status::kOk, std::move(generic_app.window_info),
+                  std::move(generic_app.launch_info));
+}
+
+SavedDeskArcAppBuilder& SavedDeskArcAppBuilder::SetGenericBuilder(
+    SavedDeskGenericAppBuilder& generic_builder) {
+  generic_builder_ = std::move(generic_builder);
+  return *this;
+}
+
+// SavedDeskBuilder implementation.
 SavedDeskBuilder::SavedDeskBuilder()
     : desk_name_("unnamed desk"),
       desk_source_(ash::DeskTemplateSource::kUser),
-      desk_type_(ash::DeskTemplateType::kTemplate),
-      restore_data_(std::make_unique<app_restore::RestoreData>()) {
+      desk_type_(ash::DeskTemplateType::kTemplate) {
   desk_uuid_ = base::GUID::GenerateRandomV4();
   created_time_ = base::Time::Now();
 }
-
-SavedDeskBuilder::~SavedDeskBuilder() {}
+SavedDeskBuilder::~SavedDeskBuilder() = default;
 
 std::unique_ptr<ash::DeskTemplate> SavedDeskBuilder::Build() {
   auto desk_template = std::make_unique<ash::DeskTemplate>(
       desk_uuid_, desk_source_, desk_name_, created_time_, desk_type_);
 
-  desk_template->set_desk_restore_data(std::move(restore_data_));
+  auto restore_data = std::make_unique<app_restore::RestoreData>();
+
+  for (auto& app : built_apps_)
+    FillRestoreData(app, restore_data.get());
+
+  desk_template->set_desk_restore_data(std::move(restore_data));
 
   return desk_template;
 }
@@ -58,50 +387,8 @@
   return *this;
 }
 
-SavedDeskBuilder& SavedDeskBuilder::AddAshBrowserAppWindow(
-    int window_id,
-    std::vector<GURL> urls) {
-  saved_desk_test_util::AddBrowserWindow(/*is_lacros=*/false, window_id, urls,
-                                         restore_data_.get());
-  return *this;
-}
-
-SavedDeskBuilder& SavedDeskBuilder::AddLacrosBrowserAppWindow(
-    int window_id,
-    std::vector<GURL> urls) {
-  saved_desk_test_util::AddBrowserWindow(/*is_lacros=*/true, window_id, urls,
-                                         restore_data_.get());
-  return *this;
-}
-
-SavedDeskBuilder& SavedDeskBuilder::AddAshPwaAppWindow(int window_id,
-                                                       const std::string url) {
-  saved_desk_test_util::AddPwaWindow(/*is_lacros=*/false, window_id, url,
-                                     restore_data_.get());
-  return *this;
-}
-
-SavedDeskBuilder& SavedDeskBuilder::AddLacrosPwaAppWindow(
-    int window_id,
-    const std::string url) {
-  saved_desk_test_util::AddPwaWindow(/*is_lacros=*/true, window_id, url,
-                                     restore_data_.get());
-  return *this;
-}
-
-SavedDeskBuilder& SavedDeskBuilder::AddChromeAppWindow(
-    int window_id,
-    const std::string app_id) {
-  saved_desk_test_util::AddGenericAppWindow(window_id, app_id,
-                                            restore_data_.get());
-  return *this;
-}
-
-SavedDeskBuilder& SavedDeskBuilder::AddGenericAppWindow(
-    int window_id,
-    const std::string app_id) {
-  saved_desk_test_util::AddGenericAppWindow(window_id, app_id,
-                                            restore_data_.get());
+SavedDeskBuilder& SavedDeskBuilder::AddAppWindow(BuiltApp built_app) {
+  built_apps_.push_back(std::move(built_app));
   return *this;
 }
 
diff --git a/components/desks_storage/core/saved_desk_builder.h b/components/desks_storage/core/saved_desk_builder.h
index b3a2e46..448a5a80 100644
--- a/components/desks_storage/core/saved_desk_builder.h
+++ b/components/desks_storage/core/saved_desk_builder.h
@@ -10,7 +10,19 @@
 
 #include "base/guid.h"
 #include "base/time/time.h"
+#include "chromeos/ui/base/window_state_type.h"
+#include "components/app_restore/app_launch_info.h"
 #include "components/app_restore/restore_data.h"
+#include "components/app_restore/tab_group_info.h"
+#include "components/app_restore/window_info.h"
+#include "components/services/app_service/public/cpp/app_launch_util.h"
+#include "components/sync/protocol/workspace_desk_specifics.pb.h"
+#include "components/tab_groups/tab_group_color.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/base/ui_base_types.h"
+#include "ui/base/window_open_disposition.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/range/range.h"
 #include "url/gurl.h"
 
 namespace ash {
@@ -21,6 +33,198 @@
 
 namespace desks_storage {
 
+// This structure represents an app that has been built by a builder.
+// Both the window_info struct and the launch info struct are needed by the
+// AppRestoreClass to add a new app.
+struct BuiltApp {
+  enum Status {
+    kOk,
+    // All apps must have a window Id.
+    kNoWindowId
+  };
+
+  BuiltApp(Status status,
+           std::unique_ptr<app_restore::WindowInfo> window_info,
+           std::unique_ptr<app_restore::AppLaunchInfo> launch_info);
+  BuiltApp(BuiltApp&&);
+  BuiltApp& operator=(BuiltApp&&);
+  ~BuiltApp();
+
+  // Any BuiltApp that does not have status kOk should be discarded.
+  Status status;
+  std::unique_ptr<app_restore::WindowInfo> window_info;
+  std::unique_ptr<app_restore::AppLaunchInfo> launch_info;
+};
+
+// Generic App Builder class that contains the definitions for the
+// base fields that can be set for every app.  Chrome Apps, SWAs
+// and other unknown types can be generated via this class.
+class SavedDeskGenericAppBuilder {
+ public:
+  SavedDeskGenericAppBuilder();
+  SavedDeskGenericAppBuilder(const SavedDeskGenericAppBuilder&) = delete;
+  SavedDeskGenericAppBuilder& operator=(const SavedDeskGenericAppBuilder&) =
+      delete;
+  SavedDeskGenericAppBuilder(SavedDeskGenericAppBuilder&&);
+  SavedDeskGenericAppBuilder& operator=(SavedDeskGenericAppBuilder&&);
+  ~SavedDeskGenericAppBuilder();
+
+  // This method builds a generic app and populates a BuiltApp struct with
+  // initial fields.
+  BuiltApp Build();
+
+  // Setters and Adders.
+  SavedDeskGenericAppBuilder& SetAppId(std::string app_id_);
+  SavedDeskGenericAppBuilder& SetWindowBound(gfx::Rect bounds);
+  SavedDeskGenericAppBuilder& SetWindowState(chromeos::WindowStateType state);
+  SavedDeskGenericAppBuilder& SetPreMinimizedWindowState(
+      ui::WindowShowState state);
+  SavedDeskGenericAppBuilder& SetZIndex(int index);
+  SavedDeskGenericAppBuilder& SetWindowId(int window_id);
+  SavedDeskGenericAppBuilder& SetDisplayId(int64_t display_id);
+  SavedDeskGenericAppBuilder& SetLaunchContainer(
+      apps::LaunchContainer container);
+  SavedDeskGenericAppBuilder& SetWindowOpenDisposition(
+      WindowOpenDisposition disposition);
+  SavedDeskGenericAppBuilder& SetName(std::string name);
+  SavedDeskGenericAppBuilder& SetSnapPercentage(int percentage);
+
+  // Apps are keyed by their ID, this returns the ID associated with this app
+  // assuming it has been set.  There are some special app cases in which this
+  // ID is a constant (i.e. a browser)  In the case where this is an app
+  // with an assignable ID then a random one is assigned upon calling this
+  // method.
+  const std::string& GetAppId();
+
+ private:
+  absl::optional<std::string> app_id_;
+  absl::optional<gfx::Rect> window_bounds_;
+  absl::optional<chromeos::WindowStateType> window_show_state_;
+  absl::optional<ui::WindowShowState> pre_minimized_window_show_state_;
+  absl::optional<int> z_index_;
+  absl::optional<int> window_id_;
+  absl::optional<int64_t> display_id_;
+  absl::optional<apps::LaunchContainer> launch_conatiner_;
+  absl::optional<WindowOpenDisposition> disposition_;
+  absl::optional<std::string> name_;
+  absl::optional<int> snap_percentage_;
+};
+
+// Builder for TabGroups.  Each instance represents a single tab group.
+class SavedDeskTabGroupBuilder {
+ public:
+  enum TabGroupBuildStatus {
+    kOk,
+    // All fields must be set to build a TabGroup.
+    kNotAllFieldsSet
+  };
+
+  // Caller will have to release the TabGroup from the unique_ptr contained
+  // within.  This will help facilitate moving this result object around after
+  // calling build.
+  struct TabGroupWithStatus {
+    TabGroupWithStatus(TabGroupBuildStatus status,
+                       std::unique_ptr<app_restore::TabGroupInfo> tab_group);
+    ~TabGroupWithStatus();
+
+    TabGroupBuildStatus status;
+    std::unique_ptr<app_restore::TabGroupInfo> tab_group;
+  };
+
+  SavedDeskTabGroupBuilder();
+  SavedDeskTabGroupBuilder(const SavedDeskTabGroupBuilder&) = delete;
+  SavedDeskTabGroupBuilder& operator=(const SavedDeskTabGroupBuilder&) = delete;
+  SavedDeskTabGroupBuilder(SavedDeskTabGroupBuilder&&);
+  ~SavedDeskTabGroupBuilder();
+
+  // Setters and adders.
+  SavedDeskTabGroupBuilder& SetRange(gfx::Range range);
+  SavedDeskTabGroupBuilder& SetTitle(std::string title);
+  SavedDeskTabGroupBuilder& SetColor(tab_groups::TabGroupColorId color);
+  SavedDeskTabGroupBuilder& SetIsCollapsed(bool is_collapsed);
+
+  // Returns a TabGroupWithStatus, pointer to the tab group will be nullptr
+  // unless all fields associated with this struct are set.
+  TabGroupWithStatus Build();
+
+ private:
+  absl::optional<gfx::Range> range_;
+  absl::optional<std::string> title_;
+  absl::optional<tab_groups::TabGroupColorId> color_;
+  absl::optional<bool> is_collapsed_;
+};
+
+// Builder that constructs Browser representations, this can also be used to
+// create PWAs.  To construct a PWA only use a single URL in the URLs field
+// and set IsApp to true.  Requires a GenericAppBuilder with `window_id` set
+// in order to correctly build.
+class SavedDeskBrowserBuilder {
+ public:
+  SavedDeskBrowserBuilder();
+  SavedDeskBrowserBuilder(const SavedDeskBrowserBuilder&) = delete;
+  SavedDeskBrowserBuilder& operator=(const SavedDeskBrowserBuilder&) = delete;
+  ~SavedDeskBrowserBuilder();
+
+  BuiltApp Build();
+
+  // Compose a generic builder to build with altered generic traits.
+  SavedDeskBrowserBuilder& SetGenericBuilder(
+      SavedDeskGenericAppBuilder& generic_builder);
+
+  // setters and adders.
+  SavedDeskBrowserBuilder& SetFirstNonPinnedTabIndex(int index);
+  SavedDeskBrowserBuilder& SetActiveTabIndex(int index);
+  SavedDeskBrowserBuilder& SetUrls(std::vector<GURL> urls);
+  SavedDeskBrowserBuilder& SetIsLacros(bool is_lacros);
+  SavedDeskBrowserBuilder& AddTabGroupBuilder(
+      SavedDeskTabGroupBuilder tab_group);
+
+  // Indicates that this browser instance is a PWA.
+  SavedDeskBrowserBuilder& SetIsApp(bool is_app);
+
+  const std::string& GetAppId();
+
+ private:
+  SavedDeskGenericAppBuilder generic_builder_;
+
+  bool is_lacros_;
+  absl::optional<bool> is_app_;
+  std::vector<SavedDeskTabGroupBuilder> tab_group_builders_;
+  absl::optional<int> active_tab_index_;
+  absl::optional<int> first_non_pinned_tab_index_;
+  absl::optional<std::vector<GURL>> urls_;
+};
+
+// Builder that constructs arc apps.  Requires a GenericAppBuilder with the
+// `window_id` field set to construct properly.
+class SavedDeskArcAppBuilder {
+ public:
+  SavedDeskArcAppBuilder();
+  SavedDeskArcAppBuilder(const SavedDeskArcAppBuilder&) = delete;
+  SavedDeskArcAppBuilder operator=(const SavedDeskArcAppBuilder&) = delete;
+  ~SavedDeskArcAppBuilder();
+
+  BuiltApp Build();
+
+  // set composed generic builder for setting generic traits.
+  SavedDeskArcAppBuilder& SetGenericBuilder(
+      SavedDeskGenericAppBuilder& generic_builder);
+
+  // setters and adders.
+  SavedDeskArcAppBuilder& SetAppId(std::string app_id);
+  SavedDeskArcAppBuilder& SetMinimumSize(gfx::Size size);
+  SavedDeskArcAppBuilder& SetMaximumSize(gfx::Size size);
+  SavedDeskArcAppBuilder& SetBoundsInRoot(gfx::Rect bounds_in_root);
+
+ private:
+  SavedDeskGenericAppBuilder generic_builder_;
+
+  absl::optional<std::string> app_id_;
+  absl::optional<gfx::Size> minimum_size_;
+  absl::optional<gfx::Size> maximum_size_;
+  absl::optional<gfx::Rect> bounds_in_root_;
+};
+
 // Helper class for building a saved desk for test.
 class SavedDeskBuilder {
  public:
@@ -50,26 +254,8 @@
   // its creation timestamp set at the creation time of the SavedDeskBuilder.
   SavedDeskBuilder& SetCreatedTime(base::Time& created_time);
 
-  // Adds a Ash Chrome Browser App window.
-  SavedDeskBuilder& AddAshBrowserAppWindow(int window_id,
-                                           std::vector<GURL> urls);
-
-  // Adds a Lacros Chrome Browser App window.
-  SavedDeskBuilder& AddLacrosBrowserAppWindow(int window_id,
-                                              std::vector<GURL> urls);
-
-  // Adds a PWA window hosted in Ash Chrome.
-  SavedDeskBuilder& AddAshPwaAppWindow(int window_id, const std::string url);
-
-  // Adds a PWA window hosted in Lacros Chrome.
-  SavedDeskBuilder& AddLacrosPwaAppWindow(int window_id, const std::string url);
-
-  // Adds a Chrome app window.
-  SavedDeskBuilder& AddChromeAppWindow(int window_id, const std::string app_id);
-
-  // Adds a generic app window.
-  SavedDeskBuilder& AddGenericAppWindow(int window_id,
-                                        const std::string app_id);
+  // Adds an app window.
+  SavedDeskBuilder& AddAppWindow(BuiltApp built_app);
 
  private:
   base::GUID desk_uuid_;
@@ -77,7 +263,7 @@
   ash::DeskTemplateSource desk_source_;
   ash::DeskTemplateType desk_type_;
   base::Time created_time_;
-  std::unique_ptr<app_restore::RestoreData> restore_data_;
+  std::vector<BuiltApp> built_apps_;
 };
 
 }  // namespace desks_storage
diff --git a/components/embedder_support/android/metrics/java/src/org/chromium/components/metrics/AndroidMetricsLogUploader.java b/components/embedder_support/android/metrics/java/src/org/chromium/components/metrics/AndroidMetricsLogUploader.java
index 5c55c723..f80b3ad 100644
--- a/components/embedder_support/android/metrics/java/src/org/chromium/components/metrics/AndroidMetricsLogUploader.java
+++ b/components/embedder_support/android/metrics/java/src/org/chromium/components/metrics/AndroidMetricsLogUploader.java
@@ -4,10 +4,11 @@
 
 package org.chromium.components.metrics;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 
+import java.util.function.Consumer;
+
 /**
  * Passes UMA logs from native to a java uploader.
  */
diff --git a/components/exo/wayland/protocol/chrome-color-management.xml b/components/exo/wayland/protocol/chrome-color-management.xml
index 2120b1e..2c7228c 100644
--- a/components/exo/wayland/protocol/chrome-color-management.xml
+++ b/components/exo/wayland/protocol/chrome-color-management.xml
@@ -43,7 +43,7 @@
   over the course of our development.
   </description>
 
-  <interface name="zcr_color_manager_v1" version="1">
+  <interface name="zcr_color_manager_v1" version="2">
     <description summary="color manager singleton">
 	A global interface used for getting color management surface and color
 	management output objects as well as creating color space objects from
@@ -66,6 +66,9 @@
       <entry name="bt2087" value="3" summary="BT.2087 transfer function"/>
       <entry name="adobergb" value="4" summary="AdobeRGB transfer function"/>
       <entry name="pq" value="5" summary="Perceptual quantizer / SMPTEST2084"/>
+	  <entry name="hlg" value="6" summary="hybrid log gamma" since="2"/>
+      <entry name="bt709" value="7" summary="gamma for rec709 encoded videos" since="2"/>
+      <entry name="extendedsrgb10" value="8" summary="sRGB transfer function with headroom for HDR" since="2"/>
     </enum>
 
     <enum name="chromaticity_names">
diff --git a/components/exo/wayland/zcr_color_manager.cc b/components/exo/wayland/zcr_color_manager.cc
index bd75aea..4bd042a 100644
--- a/components/exo/wayland/zcr_color_manager.cc
+++ b/components/exo/wayland/zcr_color_manager.cc
@@ -50,7 +50,7 @@
  public:
   explicit ColorManagerColorSpace(gfx::ColorSpace color_space)
       : color_space(color_space),
-        eotf(ui::wayland::ToColorManagerEOTF(color_space.GetTransferID())),
+        eotf(ui::wayland::ToColorManagerEOTF(color_space)),
         primaries(color_space.GetPrimaries()) {}
 
   ColorManagerColorSpace(gfx::ColorSpace color_space,
@@ -386,6 +386,19 @@
   const auto* maybe_eotf = ui::wayland::kEotfMap.find(eotf);
   if (maybe_eotf != std::end(ui::wayland::kEotfMap)) {
     eotf_id = maybe_eotf->second;
+  } else if (ui::wayland::kHDRTransferMap.contains(eotf)) {
+    auto transfer_fn = ui::wayland::kHDRTransferMap.at(eotf);
+    CreateColorSpace(
+        client, id,
+        std::make_unique<NameBasedColorSpace>(
+            gfx::ColorSpace(
+                chromaticity_id, gfx::ColorSpace::TransferID::CUSTOM_HDR,
+                gfx::ColorSpace::MatrixID::RGB, gfx::ColorSpace::RangeID::FULL,
+                nullptr, &transfer_fn, /*is_hdr=*/true),
+            static_cast<zcr_color_manager_v1_chromaticity_names>(chromaticity),
+            static_cast<zcr_color_manager_v1_eotf_names>(eotf),
+            static_cast<zcr_color_manager_v1_whitepoint_names>(whitepoint)));
+    return;
   } else {
     DLOG(ERROR) << "Unable to find named eotf for id=" << eotf;
     wl_resource_post_error(color_manager_resource,
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaRouteUmaRecorder.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaRouteUmaRecorder.java
index bf61490..6d2557d 100644
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaRouteUmaRecorder.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/MediaRouteUmaRecorder.java
@@ -4,13 +4,8 @@
 
 package org.chromium.components.media_router;
 
-import androidx.annotation.IntDef;
-
 import org.chromium.base.metrics.RecordHistogram;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
 /**
  * Record statistics on interesting cast events and actions.
  */
@@ -25,96 +20,4 @@
     public static void recordDeviceCountWithDelay(int count) {
         RecordHistogram.recordCount100Histogram("MediaRouter.Ui.Device.Count", count);
     }
-
-    /**
-     * UMA histogram values for the fullscreen controls the user could tap.
-     * <p>
-     * These values are persisted to logs. Entries should not be renumbered and
-     * numeric values should never be reused.
-     */
-    @IntDef({FullScreenControls.RESUME, FullScreenControls.PAUSE, FullScreenControls.SEEK})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface FullScreenControls {
-        int RESUME = 0;
-        int PAUSE = 1;
-        int SEEK = 2;
-        int NUM_ENTRIES = 3;
-    }
-
-    /**
-     * UMA histogram values for the notification controls the user could tap.
-     * <p>
-     * These values are persisted to logs. Entries should not be renumbered and
-     * numeric values should never be reused.
-     */
-    @IntDef({CastNotificationControls.RESUME, CastNotificationControls.PAUSE,
-            CastNotificationControls.STOP})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface CastNotificationControls {
-        int RESUME = 0;
-        int PAUSE = 1;
-        int STOP = 2;
-        int NUM_ENTRIES = 3;
-    }
-
-    /**
-     * Record when an action was taken on the cast notification by the user.
-     *
-     * @param action one of the CAST_NOTIFICATION_CONTROLS* constants defined above.
-     */
-    public static void recordCastNotificationControlsAction(int action) {
-        RecordHistogram.recordEnumeratedHistogram("Cast.Sender.Clank.NotificationControlsAction",
-                action, CastNotificationControls.NUM_ENTRIES);
-    }
-
-    /**
-     * Record when an action was taken on the {@link CafExpandedControllerActivity} by the user.
-     *
-     * @param action one of the FULLSCREEN_CONTROLS_* constants defined above.
-     */
-    public static void recordFullscreenControlsAction(int action) {
-        RecordHistogram.recordEnumeratedHistogram("Cast.Sender.Clank.FullscreenControlsAction",
-                action, FullScreenControls.NUM_ENTRIES);
-    }
-
-    /**
-     * Record the ratio of the time the media element was detached from the remote playback session
-     * to the total duration of the session (as from when the element has been attached till when
-     * the session stopped or disconnected). The ratio is rounded to the nearest tenth and a value
-     * of 1 means 10%.
-     *
-     * @param position the current video playback position in milliseconds.
-     * @param duration the total length of the video in milliseconds.
-     */
-    public static void recordRemoteSessionTimeWithoutMediaElementPercentage(
-            long position, long duration) {
-        RecordHistogram.recordExactLinearHistogram(
-                "Cast.Sender.Clank.SessionTimeWithoutMediaElementPercentage",
-                getBucketizedPercentage(position, duration), 11);
-    }
-
-    /**
-     * Record the ratio of the amount of time remaining on the video when the remote playback stops
-     * to the total duration of the session. The ratio is rounded to the nearest tenth and a value
-     * of 1 means 10%.
-     *
-     * @param position the current video playback position in milliseconds.
-     * @param duration the total length of the video in milliseconds.
-     */
-    public static void castEndedTimeRemaining(long position, long duration) {
-        RecordHistogram.recordExactLinearHistogram("Cast.Sender.Clank.CastTimeRemainingPercentage",
-                getBucketizedPercentage(duration - position, duration), 11);
-    }
-
-    /**
-     * Calculate what percentage |a| is of |b| and bucketize the result into groups of 10. The
-     * result is rounded to the nearest tenth and a value of 1 means 10%.
-     */
-    private static int getBucketizedPercentage(long a, long b) {
-        if (b > 0) {
-            return ((int) (10 * a / b));
-        } else {
-            return 10;
-        }
-    }
 }
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseNotificationController.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseNotificationController.java
index b04cc369..4b75bf7 100644
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseNotificationController.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/BaseNotificationController.java
@@ -13,7 +13,6 @@
 import org.chromium.components.browser_ui.media.MediaNotificationInfo;
 import org.chromium.components.browser_ui.media.MediaNotificationListener;
 import org.chromium.components.browser_ui.media.MediaNotificationManager;
-import org.chromium.components.media_router.MediaRouteUmaRecorder;
 import org.chromium.components.media_router.MediaRouterClient;
 import org.chromium.components.media_router.R;
 import org.chromium.services.media_session.MediaMetadata;
@@ -125,8 +124,6 @@
         if (!mSessionController.isConnected()) return;
 
         mSessionController.getRemoteMediaClient().play();
-        MediaRouteUmaRecorder.recordCastNotificationControlsAction(
-                MediaRouteUmaRecorder.CastNotificationControls.RESUME);
     }
 
     @Override
@@ -134,8 +131,6 @@
         if (!mSessionController.isConnected()) return;
 
         mSessionController.getRemoteMediaClient().pause();
-        MediaRouteUmaRecorder.recordCastNotificationControlsAction(
-                MediaRouteUmaRecorder.CastNotificationControls.PAUSE);
     }
 
     @Override
@@ -143,8 +138,6 @@
         if (!mSessionController.isConnected()) return;
 
         mSessionController.endSession();
-        MediaRouteUmaRecorder.recordCastNotificationControlsAction(
-                MediaRouteUmaRecorder.CastNotificationControls.STOP);
     }
 
     @Override
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafBaseMediaRouteProvider.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafBaseMediaRouteProvider.java
index 667edf2..ae3d7bd 100644
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafBaseMediaRouteProvider.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafBaseMediaRouteProvider.java
@@ -14,7 +14,6 @@
 
 import com.google.android.gms.cast.framework.CastSession;
 import com.google.android.gms.cast.framework.SessionManagerListener;
-import com.google.android.gms.cast.framework.media.RemoteMediaClient;
 
 import org.chromium.base.Log;
 import org.chromium.components.media_router.DiscoveryCallback;
@@ -23,7 +22,6 @@
 import org.chromium.components.media_router.MediaRoute;
 import org.chromium.components.media_router.MediaRouteManager;
 import org.chromium.components.media_router.MediaRouteProvider;
-import org.chromium.components.media_router.MediaRouteUmaRecorder;
 import org.chromium.components.media_router.MediaRouterClient;
 import org.chromium.components.media_router.MediaSink;
 import org.chromium.components.media_router.MediaSource;
@@ -276,22 +274,12 @@
 
     @Override
     public final void onSessionEnding(CastSession session) {
-        RemoteMediaClient client = session.getRemoteMediaClient();
-        if (client != null) {
-            MediaRouteUmaRecorder.castEndedTimeRemaining(
-                    client.getApproximateStreamPosition(), client.getStreamDuration());
-        }
         handleSessionEnd();
     }
 
     @Override
     public final void onSessionEnded(CastSession session, int error) {
         Log.d(TAG, "Session ended with error code " + error);
-        RemoteMediaClient client = session.getRemoteMediaClient();
-        if (client != null) {
-            MediaRouteUmaRecorder.castEndedTimeRemaining(
-                    client.getApproximateStreamPosition(), client.getStreamDuration());
-        }
         handleSessionEnd();
     }
 
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafExpandedControllerActivity.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafExpandedControllerActivity.java
index 8dce30d1..a6692a9 100644
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafExpandedControllerActivity.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafExpandedControllerActivity.java
@@ -18,7 +18,6 @@
 import androidx.mediarouter.app.MediaRouteButton;
 
 import org.chromium.components.browser_ui.media.MediaNotificationUma;
-import org.chromium.components.media_router.MediaRouteUmaRecorder;
 import org.chromium.components.media_router.R;
 import org.chromium.components.media_router.caf.BaseSessionController;
 import org.chromium.third_party.android.media.MediaController;
@@ -48,8 +47,6 @@
             if (!mSessionController.isConnected()) return;
 
             mSessionController.getSession().getRemoteMediaClient().play();
-            MediaRouteUmaRecorder.recordFullscreenControlsAction(
-                    MediaRouteUmaRecorder.FullScreenControls.RESUME);
         }
 
         @Override
@@ -57,8 +54,6 @@
             if (!mSessionController.isConnected()) return;
 
             mSessionController.getSession().getRemoteMediaClient().pause();
-            MediaRouteUmaRecorder.recordFullscreenControlsAction(
-                    MediaRouteUmaRecorder.FullScreenControls.PAUSE);
         }
 
         @Override
@@ -78,8 +73,6 @@
             if (!mSessionController.isConnected()) return;
 
             mSessionController.getSession().getRemoteMediaClient().seek(pos);
-            MediaRouteUmaRecorder.recordFullscreenControlsAction(
-                    MediaRouteUmaRecorder.FullScreenControls.SEEK);
         }
 
         @Override
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java
index 66a60a46..74a95713 100644
--- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java
+++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java
@@ -12,7 +12,6 @@
 import org.chromium.components.media_router.FlingingController;
 import org.chromium.components.media_router.MediaRouteManager;
 import org.chromium.components.media_router.MediaRouteProvider;
-import org.chromium.components.media_router.MediaRouteUmaRecorder;
 import org.chromium.components.media_router.MediaSource;
 import org.chromium.components.media_router.caf.BaseSessionController;
 import org.chromium.components.media_router.caf.CafBaseMediaRouteProvider;
@@ -47,14 +46,6 @@
     }
 
     @Override
-    public void detachRoute(String routeId) {
-        super.detachRoute(routeId);
-        MediaRouteUmaRecorder.recordRemoteSessionTimeWithoutMediaElementPercentage(
-                mSessionController.getFlingingController().getApproximateCurrentTime(),
-                mSessionController.getFlingingController().getDuration());
-    }
-
-    @Override
     public void sendStringMessage(String routeId, String message) {
         Log.e(TAG, "Remote playback does not support sending messages");
     }
diff --git a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageAnimationCoordinator.java b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageAnimationCoordinator.java
index 8832dd1..708617a 100644
--- a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageAnimationCoordinator.java
+++ b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageAnimationCoordinator.java
@@ -252,23 +252,24 @@
 
         if (currentFront == null) {
             // No message is being displayed now: trigger #onStartShowing.
+            mCurrentDisplayedMessages = new ArrayList<>(candidates);
             mMessageQueueDelegate.onStartShowing(
                     () -> { triggerStackingAnimation(candidates, onFinished); });
         } else if (nextFront == null) {
             // All messages will be hidden: trigger #onFinishHiding.
             Runnable runnable = () -> {
                 mMessageQueueDelegate.onFinishHiding();
-                mCurrentDisplayedMessage = mLastShownMessage = null;
+                mCurrentDisplayedMessages = new ArrayList<>(candidates);
                 onFinished.run();
             };
             triggerStackingAnimation(candidates, runnable);
         } else {
+            mCurrentDisplayedMessages = new ArrayList<>(candidates);
             triggerStackingAnimation(candidates, onFinished);
         }
     }
 
     private void triggerStackingAnimation(List<MessageState> candidates, Runnable onFinished) {
-        mCurrentDisplayedMessages = new ArrayList<>(candidates);
         Runnable runnable = () -> {
             mAnimatorSet.cancel();
             mAnimatorSet.removeAllListeners();
diff --git a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageAnimationCoordinatorUnitTest.java b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageAnimationCoordinatorUnitTest.java
index c740927..2b1f6d0 100644
--- a/components/messages/android/internal/java/src/org/chromium/components/messages/MessageAnimationCoordinatorUnitTest.java
+++ b/components/messages/android/internal/java/src/org/chromium/components/messages/MessageAnimationCoordinatorUnitTest.java
@@ -345,6 +345,56 @@
         Assert.assertEquals(1, d2.getDelta());
     }
 
+    /**
+     * Test messages are hidden before #onStartShow is done.
+     */
+    @Test
+    @SmallTest
+    public void testHideBeforeFullyShow() {
+        mAnimationCoordinator.setMessageQueueDelegate(new MessageQueueDelegate() {
+            @Override
+            public void onStartShowing(Runnable callback) {}
+
+            @Override
+            public void onFinishHiding() {}
+
+            @Override
+            public void onAnimationStart() {}
+
+            @Override
+            public void onAnimationEnd() {}
+        });
+        var currentMessages = mAnimationCoordinator.getCurrentDisplayedMessages();
+        Assert.assertArrayEquals(new MessageState[] {null, null}, currentMessages.toArray());
+        HistogramDelta d1 = new HistogramDelta(MessagesMetrics.STACKING_HISTOGRAM_NAME,
+                MessagesMetrics.StackingAnimationType.SHOW_ALL);
+        HistogramDelta d2 = new HistogramDelta(MessagesMetrics.STACKING_ACTION_HISTOGRAM_PREFIX
+                        + MessagesMetrics.stackingAnimationActionToHistogramSuffix(
+                                MessagesMetrics.StackingAnimationAction.INSERT_AT_FRONT),
+                1);
+        HistogramDelta d3 = new HistogramDelta(MessagesMetrics.STACKING_ACTION_HISTOGRAM_PREFIX
+                        + MessagesMetrics.stackingAnimationActionToHistogramSuffix(
+                                MessagesMetrics.StackingAnimationAction.INSERT_AT_BACK),
+                2);
+        MessageState m1 = buildMessageState();
+        setMessageIdentifier(m1, 1);
+        MessageState m2 = buildMessageState();
+        setMessageIdentifier(m2, 2);
+        mAnimationCoordinator.updateWithStacking(Arrays.asList(m1, m2), false, () -> {});
+
+        Assert.assertEquals(1, d1.getDelta());
+        Assert.assertEquals(1, d2.getDelta());
+        Assert.assertEquals(1, d3.getDelta());
+        verify(m1.handler).show(Position.INVISIBLE, Position.FRONT);
+        verify(m2.handler).show(Position.FRONT, Position.BACK);
+        currentMessages = mAnimationCoordinator.getCurrentDisplayedMessages();
+        Assert.assertArrayEquals(new MessageState[] {m1, m2}, currentMessages.toArray());
+
+        mAnimationCoordinator.updateWithStacking(Arrays.asList(null, null), false, () -> {});
+        verify(m1.handler).hide(anyInt(), anyInt(), anyBoolean());
+        verify(m2.handler).hide(anyInt(), anyInt(), anyBoolean());
+    }
+
     private void setMessageIdentifier(MessageState message, int messageIdentifier) {
         doReturn(messageIdentifier).when(message.handler).getMessageIdentifier();
     }
diff --git a/components/messages/android/internal/java/src/org/chromium/components/messages/SingleActionMessage.java b/components/messages/android/internal/java/src/org/chromium/components/messages/SingleActionMessage.java
index b825a09..6c198e9e 100644
--- a/components/messages/android/internal/java/src/org/chromium/components/messages/SingleActionMessage.java
+++ b/components/messages/android/internal/java/src/org/chromium/components/messages/SingleActionMessage.java
@@ -13,11 +13,12 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.Callback;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.components.messages.MessageContainer.MessageContainerA11yDelegate;
 import org.chromium.ui.modelutil.PropertyModel;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * Coordinator to show / hide a banner message on given container and delegate events.
  */
diff --git a/components/messages/android/java/src/org/chromium/components/messages/MessageBannerProperties.java b/components/messages/android/java/src/org/chromium/components/messages/MessageBannerProperties.java
index 646b571..b84c4cf 100644
--- a/components/messages/android/java/src/org/chromium/components/messages/MessageBannerProperties.java
+++ b/components/messages/android/java/src/org/chromium/components/messages/MessageBannerProperties.java
@@ -11,7 +11,6 @@
 import androidx.annotation.ColorInt;
 
 import org.chromium.base.Callback;
-import org.chromium.base.supplier.BooleanSupplier;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.components.browser_ui.widget.listmenu.ListMenuButtonDelegate;
 import org.chromium.ui.modelutil.PropertyKey;
@@ -22,6 +21,8 @@
 import org.chromium.ui.modelutil.PropertyModel.WritableLongPropertyKey;
 import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey;
 
+import java.util.function.BooleanSupplier;
+
 /**
  * Properties of message banner.
  */
diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoControllerDelegate.java b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoControllerDelegate.java
index 599e62ff..d2769be 100644
--- a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoControllerDelegate.java
+++ b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoControllerDelegate.java
@@ -13,7 +13,6 @@
 import androidx.fragment.app.FragmentManager;
 
 import org.chromium.base.Callback;
-import org.chromium.base.Consumer;
 import org.chromium.components.browser_ui.site_settings.SiteSettingsDelegate;
 import org.chromium.components.content_settings.CookieControlsBridge;
 import org.chromium.components.content_settings.CookieControlsObserver;
@@ -25,6 +24,7 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Collection;
+import java.util.function.Consumer;
 
 /**
  *  Provides embedder-level information to PageInfoController.
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc
index 446c648..a50b297 100644
--- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc
+++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc
@@ -629,8 +629,7 @@
     content::RenderFrameHost* render_frame_host,
     const gfx::Rect& main_frame_intersection_rect) {
   int frame_tree_node_id = render_frame_host->GetFrameTreeNodeId();
-  if (render_frame_host ==
-      GetDelegate().GetWebContents()->GetPrimaryMainFrame()) {
+  if (render_frame_host->IsInPrimaryMainFrame()) {
     page_ad_density_tracker_.UpdateMainFrameRect(main_frame_intersection_rect);
     return;
   }
diff --git a/components/password_manager/core/browser/import/csv_reader.cc b/components/password_manager/core/browser/import/csv_reader.cc
deleted file mode 100644
index 19d086f3..0000000
--- a/components/password_manager/core/browser/import/csv_reader.cc
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/password_manager/core/browser/import/csv_reader.h"
-
-#include <stddef.h>
-
-#include <algorithm>
-#include <utility>
-
-#include "base/check.h"
-#include "base/strings/string_util.h"
-#include "components/password_manager/core/browser/import/csv_field_parser.h"
-
-namespace password_manager {
-
-namespace {
-
-// Returns all the characters from the start of |input| until the first '\n',
-// "\r\n" (exclusive) or the end of |input|. Cuts the returned part (inclusive
-// the line breaks) from |input|. Skips blocks of matching quotes. Examples:
-// old input -> returned value, new input
-// "ab\ncd" -> "ab", "cd"
-// "\r\n" -> "", ""
-// "abcd" -> "abcd", ""
-// "\r" -> "\r", ""
-// "a\"\n\"b" -> "a\"\n\"b", ""
-base::StringPiece ConsumeLine(base::StringPiece* input) {
-  DCHECK(input);
-  DCHECK(!input->empty());
-
-  bool inside_quotes = false;
-  bool last_char_was_CR = false;
-  for (size_t current = 0; current < input->size(); ++current) {
-    char c = (*input)[current];
-    switch (c) {
-      case '\n':
-        if (!inside_quotes) {
-          const size_t eol_start = last_char_was_CR ? current - 1 : current;
-          base::StringPiece ret(input->data(), eol_start);
-          *input = input->substr(current + 1);
-          return ret;
-        }
-        break;
-      case '"':
-        inside_quotes = !inside_quotes;
-        break;
-      default:
-        break;
-    }
-    last_char_was_CR = (c == '\r');
-  }
-
-  // The whole |*input| is one line.
-  base::StringPiece ret = *input;
-  *input = base::StringPiece();
-  return ret;
-}
-
-// Created for a string with potentially multiple rows of
-// comma-separated-values, iteratively returns individual fields from row after
-// row.
-class CSVParser {
- public:
-  explicit CSVParser(base::StringPiece csv);
-
-  CSVParser(const CSVParser&) = delete;
-  CSVParser& operator=(const CSVParser&) = delete;
-
-  ~CSVParser();
-
-  // Reads and unescapes values from the next row, and writes them to |fields|.
-  // Consumes the end-of-line terminator. Returns false on syntax error. The
-  // input must not be empty (check with HasMoreRows() before calling).
-  bool ParseNextCSVRow(std::vector<std::string>* fields);
-
-  bool HasMoreRows() const { return !remaining_csv_piece_.empty(); }
-
- private:
-  base::StringPiece remaining_csv_piece_;
-};
-
-CSVParser::CSVParser(base::StringPiece csv) : remaining_csv_piece_(csv) {}
-
-CSVParser::~CSVParser() = default;
-
-bool CSVParser::ParseNextCSVRow(std::vector<std::string>* fields) {
-  fields->clear();
-
-  DCHECK(HasMoreRows());
-  CSVFieldParser parser(ConsumeLine(&remaining_csv_piece_));
-  base::StringPiece current_field;
-  while (parser.HasMoreFields()) {
-    if (!parser.NextField(&current_field))
-      return false;
-    // TODO(crbug.com/918530): Unescape the field contents in-place, as part of
-    // NextField().
-    std::string field_copy(current_field);
-    base::ReplaceSubstringsAfterOffset(&field_copy, 0, "\"\"", "\"");
-    fields->push_back(std::move(field_copy));
-  }
-  return true;
-}
-
-}  // namespace
-
-CSVTable::CSVTable() = default;
-
-CSVTable::~CSVTable() = default;
-
-bool CSVTable::ReadCSV(base::StringPiece csv) {
-  records_.clear();
-  column_names_.clear();
-
-  // Read header row.
-  CSVParser parser(csv);
-  if (!parser.HasMoreRows()) {
-    // The empty CSV is a special case. It can be seen as having one row, with a
-    // single field, which is an empty string.
-    column_names_.emplace_back();
-    return true;
-  }
-  if (!parser.ParseNextCSVRow(&column_names_))
-    return false;
-
-  // Reader data records rows.
-  std::vector<std::string> fields;
-  while (parser.HasMoreRows()) {
-    if (!parser.ParseNextCSVRow(&fields))
-      return false;
-    // If there are more line-breaking characters in sequence, the row parser
-    // will see an empty row in between each successive two of those. Discard
-    // such results, because those are useless for importing passwords.
-    if (fields.size() == 1 && fields[0].empty())
-      continue;
-
-    std::map<base::StringPiece, std::string> row_map;
-    const size_t available_columns =
-        std::min(column_names_.size(), fields.size());
-    for (size_t i = 0; i < available_columns; ++i) {
-      row_map[column_names_[i]] = std::move(fields[i]);
-    }
-    records_.push_back(std::move(row_map));
-  }
-
-  return true;
-}
-
-}  // namespace password_manager
diff --git a/components/password_manager/core/browser/import/csv_reader.h b/components/password_manager/core/browser/import/csv_reader.h
deleted file mode 100644
index 98469de..0000000
--- a/components/password_manager/core/browser/import/csv_reader.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_IMPORT_CSV_READER_H_
-#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_IMPORT_CSV_READER_H_
-
-#include <map>
-#include <string>
-#include <vector>
-
-#include "base/strings/string_piece.h"
-
-namespace password_manager {
-
-// Parsed representation of tabular CSV data.
-class CSVTable {
- public:
-  CSVTable();
-
-  CSVTable(const CSVTable&) = delete;
-  CSVTable& operator=(const CSVTable&) = delete;
-
-  ~CSVTable();
-
-  // Reads tabular data |csv| in a CSV (Comma Separated Values) format and fills
-  // the column_names_ and records_ accordingly. The CSV format is understood as
-  // defined in RFC 4180, with the following limitations/relaxations:
-  //   * The input should be UTF-8 encoded. No code points should be escaped.
-  //   * The first line must be a header that contains the column names.
-  //   * Records may be separated by either LF or CRLF sequences.
-  //   * Inconsistent number of fields within records is handled gracefully.
-  //     Extra fields are ignored. Missing fields will have no corresponding
-  //     key-value pair in the record.
-  //   * Seeing a row with too many cells is a syntax error (see CSVFieldParser
-  //     for the actual limit).
-  //   * Repeated columns of the same name are not supported (the last value
-  //     will be preserved).
-  // Returns false if parsing failed due to a syntax error.
-  bool ReadCSV(base::StringPiece csv);
-
-  const std::vector<std::string>& column_names() const { return column_names_; }
-
-  const std::vector<std::map<base::StringPiece, std::string>>& records() const {
-    return records_;
-  }
-
- private:
-  // Values from the first row.
-  std::vector<std::string> column_names_;
-  // Values from the subsequent rows. Each map represents one row and maps the
-  // column names to the value stored at that column in that row.
-  std::vector<std::map<base::StringPiece, std::string>> records_;
-};
-
-}  // namespace password_manager
-
-#endif  // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_IMPORT_CSV_READER_H_
diff --git a/components/password_manager/core/browser/import/csv_reader_unittest.cc b/components/password_manager/core/browser/import/csv_reader_unittest.cc
deleted file mode 100644
index 8b90664..0000000
--- a/components/password_manager/core/browser/import/csv_reader_unittest.cc
+++ /dev/null
@@ -1,244 +0,0 @@
-// Copyright 2014 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/password_manager/core/browser/import/csv_reader.h"
-
-#include <utility>
-#include <vector>
-
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace password_manager {
-
-TEST(CSVReaderTest, Positive) {
-  struct TestCase {
-    const char* name;
-    const std::string input;
-    std::vector<const char*> expected_column_names;
-    std::vector<std::vector<std::pair<const char*, const char*>>>
-        expected_row_maps;
-  };
-  const TestCase kCases[] = {
-      {
-          "EmptyCSV",
-          "",
-          {""},
-          {},
-      },
-      {
-          "CSVConsistingOfSingleNewLine",
-          "\n",
-          {""},
-          {},
-      },
-      {
-          "SingleColumn",
-          "foo\n"
-          "alpha\n"
-          "beta\n",
-          {"foo"},
-          {{{"foo", "alpha"}}, {{"foo", "beta"}}},
-      },
-      {
-          "HeaderOnly",
-          "foo,bar\n",
-          {"foo", "bar"},
-          {},
-      },
-      {
-          "NoNewline",
-          "foo,bar",
-          {"foo", "bar"},
-          {},
-      },
-      {
-          "HeaderAndSimpleRecords",
-          "foo,bar,baz\n"
-          "alpha,beta,gamma\n"
-          "delta,epsilon,zeta\n",
-          {"foo", "bar", "baz"},
-          {{{"bar", "beta"}, {"baz", "gamma"}, {"foo", "alpha"}},
-           {{"bar", "epsilon"}, {"baz", "zeta"}, {"foo", "delta"}}},
-      },
-      {
-          "EmptyStringColumnNamesAreSupported",
-          "foo,,bar\n"
-          "alpha,beta,gamma\n",
-          {"foo", "", "bar"},
-          {{{"", "beta"}, {"bar", "gamma"}, {"foo", "alpha"}}},
-      },
-      {
-          "ExtraSpacesArePreserved",
-          "left,right\n"
-          " alpha  beta ,  \n",
-          {"left", "right"},
-          {{{"left", " alpha  beta "}, {"right", "  "}}},
-      },
-      {
-          "CharactersOutsideASCIIPrintableArePreservedVerbatim",
-          "left,right\n"
-          "\x07\t\x0B\x1F,$\xc2\xa2\xe2\x98\x83\xf0\xa4\xad\xa2\n",
-          {"left", "right"},
-          {{// Characters below 0x20: bell, horizontal + vertical tab, unit
-            // separator.
-            {"left", "\x07\t\x0B\x1F"},
-            // Unicode code points having 1..4 byte UTF-8 representation: dollar
-            // sign (U+0024), cent sign (U+00A2), snowman (U+2603), Han
-            // character U+24B62.
-            {"right", "$\xc2\xa2\xe2\x98\x83\xf0\xa4\xad\xa2"}}},
-      },
-      {
-          "EnclosingDoubleQuotesAreTrimmed",
-          "\"left\",\"right\"\n"
-          "\"alpha\",\"beta\"\n",
-          {"left", "right"},
-          {{{"left", "alpha"}, {"right", "beta"}}},
-      },
-      {
-          "SeparatorsInsideDoubleQuotesAreTreatedVerbatim",
-          "left,right\n"
-          "\"A\rB\",\"B\nC\"\n"
-          "\"C\r\nD\",\"D\n\"\n"
-          "\",\",\",,\"\n",
-          {"left", "right"},
-          {{{"left", "A\rB"}, {"right", "B\nC"}},
-           {{"left", "C\r\nD"}, {"right", "D\n"}},
-           {{"left", ","}, {"right", ",,"}}},
-      },
-      {
-          "EscapedDoubleQuotes",
-          "left,right\n"
-          R"("","""""")"
-          "\n"
-          R"("""","A""B""""C")"
-          "\n",
-          {"left", "right"},
-          {{{"left", ""}, {"right", "\"\""}},
-           {{"left", "\""}, {"right", "A\"B\"\"C"}}},
-      },
-      {
-          "InconsistentFieldsCountIsTreatedGracefully",
-          "left,right\n"
-          "A\n"
-          "B,C,D\n",
-          {"left", "right"},
-          {{{"left", "A"}}, {{"left", "B"}, {"right", "C"}}},
-      },
-      {
-          "SupportMissingNewLineAtEOF",
-          "left,right\n"
-          "alpha,beta",
-          {"left", "right"},
-          {{{"left", "alpha"}, {"right", "beta"}}},
-      },
-      {
-          "EmptyFields",
-          "left,middle,right\n"
-          "alpha,beta,\n"
-          ",,gamma\n",
-          {"left", "middle", "right"},
-          {{{"left", "alpha"}, {"middle", "beta"}, {"right", ""}},
-           {{"left", ""}, {"middle", ""}, {"right", "gamma"}}},
-      },
-      {
-          "CRLFTreatedAsLF",
-          "left,right\r\n"
-          "\"\r\",\"\r\n\"\r\n",
-          {"left", "right"},
-          {{{"left", "\r"}, {"right", "\r\n"}}},
-      },
-      {
-          "CRAloneIgnored",
-          "left,right\r"
-          "A,B\r\n"
-          "1,2,3",
-          {"left", "right\rA", "B"},
-          {{{"B", "3"}, {"left", "1"}, {"right\rA", "2"}}},
-      },
-      {
-          "LastValueForRepeatedColumnNamesIsPreserved",
-          "foo,bar,bar\n"
-          "alpha,beta,gamma\n",
-          {"foo", "bar", "bar"},
-          {{{"bar", "gamma"}, {"foo", "alpha"}}},
-      },
-      {
-          "EmptyLastFieldAndNoNewline",
-          "alpha,",
-          {"alpha", ""},
-          {},
-      },
-      {
-          "EmptyLinesIgnored",
-          "foo,bar\n"
-          "\n"
-          "a,b\n"
-          "\r\n"
-          "c,d\r\r\r\r\r\r\r\r\n"
-          "e,f",
-          {"foo", "bar"},
-          {
-              {{"bar", "b"}, {"foo", "a"}},
-              {{"bar", "d\r\r\r\r\r\r\r"}, {"foo", "c"}},
-              {{"bar", "f"}, {"foo", "e"}},
-          },
-      },
-  };
-
-  for (const TestCase& test_case : kCases) {
-    SCOPED_TRACE(test_case.name);
-    CSVTable table;
-    ASSERT_TRUE(table.ReadCSV(test_case.input));
-
-    EXPECT_THAT(table.column_names(),
-                testing::ElementsAreArray(test_case.expected_column_names));
-    ASSERT_EQ(test_case.expected_row_maps.size(), table.records().size());
-    for (size_t i = 0; i < test_case.expected_row_maps.size(); ++i) {
-      SCOPED_TRACE(i);
-      EXPECT_THAT(table.records()[i],
-                  testing::ElementsAreArray(test_case.expected_row_maps[i]));
-    }
-  }
-}
-
-TEST(CSVReaderTest, Negative) {
-  struct TestCase {
-    const char* name;
-    const std::string input;
-  };
-  const TestCase kCases[] = {
-      {
-          "FailureWhenEOFInsideQuotes",
-          "left,right\n"
-          "\"alpha\",\"unmatched\n",
-      },
-      {
-          "FailureWhenSemiQuotedContentInHeader",
-          "\"a\"b\"c\",right\n"
-          "alpha,beta\n",
-      },
-      {
-          "FailureWhenSemiQuotedContentOnSubsequentLine",
-          "alpha,beta\n"
-          "left,\"a\"b\"c\"\n",
-      },
-      {
-          "FailureWhenJustOneQuote",
-          "\"",
-      },
-      {
-          "FailureWhenJustOneQuoteAndComma",
-          "\",",
-      },
-  };
-
-  for (const TestCase& test_case : kCases) {
-    SCOPED_TRACE(test_case.name);
-    CSVTable table;
-    EXPECT_FALSE(table.ReadCSV(test_case.input));
-  }
-}
-
-}  // namespace password_manager
diff --git a/components/permissions/README.md b/components/permissions/README.md
index 258750f..32be305 100644
--- a/components/permissions/README.md
+++ b/components/permissions/README.md
@@ -263,3 +263,7 @@
 > The [PortalActivation] test verifies that permissions are disabled in Portals.
 > [VerifyPermissionsDeniedForPortal](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/permissions/permissions_security_model_interactive_uitest.cc;drc=c662f11e160976c04682f41941aaeccad92ace48;l=429) incapsulates all logic
 > needed for a particular permission verification.
+
+## Add new permission
+
+See [add_new_permission.md](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/add_new_permission.md)
diff --git a/components/permissions/add_new_permission.md b/components/permissions/add_new_permission.md
new file mode 100644
index 0000000..940071e
--- /dev/null
+++ b/components/permissions/add_new_permission.md
@@ -0,0 +1,236 @@
+# Add new permission
+
+[TOC]
+
+Make sure to notify permissions-core@ when you plan to add a new permission.
+
+### PermissionType vs ContentSettingsType
+
+[PermissionType](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/common/permissions/permission_utils.h;l=23;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+roughly matches the web-facing APIs for Permission Policy and Permissions API.
+
+[ContentSettingsType](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h)
+is a key used in
+[HostContentSettingsMap](https://cs.chromium.org/chromium/src/components/content_settings/core/browser/host_content_settings_map.h)
+to store per-type and per-origin JSON dictionaries. It contains all entries from
+[PermissionType](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/common/permissions/permission_utils.h;l=23;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+but additionally, it contains entries that are not permissions, e.g. Cookies,
+Images, Javascript, Sound, etc.
+
+[ContentSettingsType](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h)
+represents the Chrome-layer entity and is not available outside of Chrome. We
+use
+[PermissionType](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/common/permissions/permission_utils.h;l=23;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+as a Web Platform - layer list of permissions. That means we always need to have
+a pair of
+[PermissionType](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/common/permissions/permission_utils.h;l=23;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+[ContentSettingsType](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h).
+To improve clarity of the permissions API we’re trying to use
+[PermissionType](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/common/permissions/permission_utils.h;l=23;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+everywhere it is possible. Conceptually
+[ContentSettingsType](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h)
+should be used only in
+[HostContentSettingsMap](https://cs.chromium.org/chromium/src/components/content_settings/core/browser/host_content_settings_map.h).
+But there are still a few places where
+[ContentSettingsType](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h)
+is presented.
+
+* [PermissionContextBase](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_context_base.h)
+* [PermissionManager](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_manager.h;drc=38bff96f36fb3980fef273c1066ba65a7b32da7c;l=44)
+* [PermissionRequestManager](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_request_manager.h)
+* [PermissionRequest](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_request.h)
+* [PermissionManagerFactory](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/permissions/permission_manager_factory.h)
+
+We’re actively working on reducing [ContentSettingsType](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h)
+footprint in the permissions code base.
+
+We have a few utils methods in components/permissions/permission_util.h that
+convert [PermissionType](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/common/permissions/permission_utils.h;l=23;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+to
+[ContentSettingsType](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h)
+and vice versa. We strongly encourage developers to use
+[PermissionType](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/common/permissions/permission_utils.h;l=23;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb).
+
+### PermissionContexts
+
+[PermissionContextBase](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_context_base.h)
+provides default implementation for requesting/verifying and saving a permission
+state. Most of the methods in the class are virtual that allows for a newly
+added permission to customize how it can be requested, verified and stored. A
+custom implementation of the
+[PermissionContextBase](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_context_base.h)
+is the only way to init permission policy. For most of the cases you do not need
+to change the default implementation. A good example of the custom behavior is
+an integration with OS-level permissions. E.g. Notifications permission on
+Android has custom logic that verifies if Chrome has app-level permission and if
+a notification channel exists, additionally Notifications has custom logic for
+extensions. Similarly Geolocation has multiple implementations for different
+platforms
+[GeolocationPermissionContext](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/contexts/geolocation_permission_context.h).
+
+## Add new permission
+### Add PermissionType
+1. Add a new enum entry to [PermissionType](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/common/permissions/permission_utils.h;l=23;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+2. Update [permission_descriptor.idl](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/permissions/permission_descriptor.idl)
+3. In  [permission_utils.cc](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/permissions/permission_utils.cc)
+update methods:
+    * [PermissionNameToString()](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/permissions/permission_utils.cc;l=56;drc=5a1dda5d1bf6b67b478b2d35dc478508318213cf)
+    * [ParsePermissionDescriptor()](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/permissions/permission_utils.cc;l=148;drc=5a1dda5d1bf6b67b478b2d35dc478508318213cf)
+4. Update [permission.mojom](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/mojom/permissions/permission.mojom)
+5. In [permission_utils.cc](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/common/permissions/permission_utils.cc)
+update
+    * [GetPermissionString()](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/common/permissions/permission_utils.cc;l=28;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+    * [PermissionDescriptorInfoToPermissionType()](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/common/permissions/permission_utils.cc;l=126;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+6. In [permission_controller_impl.cc](https://source.chromium.org/chromium/chromium/src/+/main:content/browser/permissions/permission_controller_impl.cc)
+update [PermissionToSchedulingFeature()](https://source.chromium.org/chromium/chromium/src/+/main:content/browser/permissions/permission_controller_impl.cc;l=31;drc=a989b8968ead0d1a80b285eef0a2acf9feb71c82)
+. By default the new feature should return `absl::nullopt`. That means it will
+not block back-forward cache. If your feature needs to block it, make sure it is
+explicitly mentioned in a design doc as that needs to be reviewed.
+7. In [aw_permission_manager.cc](https://source.chromium.org/chromium/chromium/src/+/main:android_webview/browser/aw_permission_manager.cc)
+update
+    * [RequestPermissions()](https://source.chromium.org/chromium/chromium/src/+/main:android_webview/browser/aw_permission_manager.cc;l=252;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+    * [CancelPermissionRequest()](https://source.chromium.org/chromium/chromium/src/+/main:android_webview/browser/aw_permission_manager.cc;l=514;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+8. In [shell_permission_manager.cc](https://source.chromium.org/chromium/chromium/src/+/main:content/shell/browser/shell_permission_manager.cc)
+update [IsAllowlistedPermissionType()](https://source.chromium.org/chromium/chromium/src/+/main:content/shell/browser/shell_permission_manager.cc;l=24;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+
+### Add ContentSettingType
+1. In [content_settings_types.h](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h)
+update
+[ContentSettingsType](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h;l=17;drc=0c2e6d2e27af976e1b28eebd7dacc7a0296bb1cc)
+2. In [content_settings.cc](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings.cc)
+update
+[kHistogramValue](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings.cc;l=31;drc=0c2e6d2e27af976e1b28eebd7dacc7a0296bb1cc)
+3. In [content_settings_registry.cc](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/browser/content_settings_registry.cc)
+update method
+[ContentSettingsRegistry::Init()](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/browser/content_settings_registry.cc;l=122;drc=0c2e6d2e27af976e1b28eebd7dacc7a0296bb1cc)
+    * Register the new entry as
+    [WebsiteSettingsInfo::UNSYNCABLE](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/browser/website_settings_info.h;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0;l=19)
+    . If you need to use
+    [WebsiteSettingsInfo::SYNCABLE](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/browser/website_settings_info.h;l=23;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+    , then it should be explicitly mentioned in a design doc.
+4. In [permission_util.cc](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_util.cc)
+update
+    * [GetPermissionDelegationMode()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_util.cc;l=49;drc=334d00e7293fa3a7127a6270f0c5720d5e46a7eb)
+. If you need non-default permission delegation logic. That should be explicitly stated in a design doc.
+    * [GetPermissionType()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_util.cc;l=78;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+    * [PermissionTypeToContentSettingTypeSafe()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_util.cc;l=229;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+5. In [WebsitePermissionsFetcherTest.java](https://source.chromium.org/chromium/chromium/src/+/main:chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java) update [assertion](https://source.chromium.org/chromium/chromium/src/+/main:chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java;l=516;drc=c08fa134ac65f3bec52794d30281c98d18c7aa0f).
+
+### UI-less ContentSettingType
+If you add a new [ContentSettingsType](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h;l=17;drc=0c2e6d2e27af976e1b28eebd7dacc7a0296bb1cc)
+which require no UI and no associated permission, then:
+
+1. In [site_settings_helper.cc](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/ui/webui/settings/site_settings_helper.cc) update
+[kContentSettingsTypeGroupNames](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/ui/webui/settings/site_settings_helper.cc;l=78;drc=a58357a4ec6a0ebc1630fe2504974273e44d2814).
+    * Add a new entry into the second part of the array.
+
+### PageInfo, Settings Page
+
+Some [ContentSettingsType](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/content_settings_types.h;l=17;drc=0c2e6d2e27af976e1b28eebd7dacc7a0296bb1cc) is displayed in `chrome://settings/content`. To be able to display it there, you need to do:
+
+1. In [site_settings_helper.cc](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/ui/webui/settings/site_settings_helper.cc) update [kContentSettingsTypeGroupNames](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/ui/webui/settings/site_settings_helper.cc;l=78;drc=a58357a4ec6a0ebc1630fe2504974273e44d2814).
+    * Add a new entry into the first part of the array as permissions are
+    available in the content settings page.
+2. Add new strings for the new permission. The strings should be reviewed by
+meggynwatkins@ and permissions-core@ in a design doc.
+3. In [page_info.cc](https://source.chromium.org/chromium/chromium/src/+/main:components/page_info/page_info.cc)
+update [kPermissionType](https://source.chromium.org/chromium/chromium/src/+/main:components/page_info/page_info.cc;l=89;drc=796b971e6e0d1b033bda58b31e9f24d397ad6178)
+. `IMPORTANT`: The order in the array is not random or organic. Please carefully
+read [the comment](https://source.chromium.org/chromium/chromium/src/+/main:components/page_info/page_info.cc;l=86-88;drc=796b971e6e0d1b033bda58b31e9f24d397ad6178).
+4. In [page_info_ui.cc](https://source.chromium.org/chromium/chromium/src/+/main:components/page_info/page_info_ui.cc)
+update methods:
+    * [GetContentSettingsUIInfo()](https://source.chromium.org/chromium/chromium/src/+/main:components/page_info/page_info_ui.cc;l=132;drc=0c2e6d2e27af976e1b28eebd7dacc7a0296bb1cc)
+    * [GetPermissionAskStateString()](https://source.chromium.org/chromium/chromium/src/+/main:components/page_info/page_info_ui.cc;l=299;drc=0c2e6d2e27af976e1b28eebd7dacc7a0296bb1cc)
+5. Add a new icon for the permission to be displayed in PageInfo
+6. In [page_info_view_factory.cc](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/ui/views/page_info/page_info_view_factory.cc) update
+    * [GetPermissionIcon()](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/ui/views/page_info/page_info_view_factory.cc;l=246;drc=497b76a1ed8d0ba3a870484cbd1f34a1392fedf6)
+
+### Permission request
+Most permissions allow sites to request a permission prompt where a user can grant or deny the permission.
+
+1. In [request_type.h](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/request_type.h)
+update enum [RequestType](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/request_type.h;l=22;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+2. In [request_type.cc](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/request_type.cc) update
+    * [GetIconId*()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/request_type.cc;l=269;drc=c970b8647281cc3fc7ffe1288ce7c5f2e5f7acf6) for Android and Desktop
+        * Reuse icons from the step above.
+    * [GetDialogMessageText()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_request.cc;l=44;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0) for Android
+    * [GetMessageTextFragment()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_request.cc;l=166;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0) for Desktop
+        * Permission prompt strings should be reviewed by meggynwatkins@ and permissions-core@ in a design doc.
+    * [PermissionKeyForRequestType()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/request_type.cc;l=288;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+    * [GetBlockedIconIdDesktop()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/request_type.cc;l=116;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+
+### Tracking
+1. In [tools/metrics/histograms/enums.xml](https://source.chromium.org/chromium/chromium/src/+/main:tools/metrics/histograms/enums.xml)
+update histograms:
+    * `name="PermissionType"`
+    * `name="ContentType"`
+    * `name="PermissionRequestType"`
+2. In  [tools/metrics/histograms/metadata/histogram_suffixes_list.xml](https://source.chromium.org/chromium/chromium/src/+/main:tools/metrics/histograms/metadata/histogram_suffixes_list.xml)
+update histograms
+    * `name="PermissionTypes"`
+    * `name="PermissionRequestTypes"`
+3. In [tools/metrics/histograms/metadata/content/histograms.xml](https://source.chromium.org/chromium/chromium/src/+/main:tools/metrics/histograms/metadata/content/histograms.xml) update `<token key="ContentSettingsType">`
+4. In [permission_uma_util.h](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_uma_util.h)
+updated enum
+[RequestTypeForUma](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_uma_util.h;l=41;drc=796b971e6e0d1b033bda58b31e9f24d397ad6178)
+5. In [permission_uma_util.cc](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_uma_util.cc)
+updated methods:
+    * [GetUmaValueForRequestType()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_uma_util.cc;l=55;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+    * [GetPermissionRequestString()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_uma_util.cc;l=117;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+    * [RecordPermissionAction()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_uma_util.cc;l=843-914;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+
+### Extend PermissionContextBase
+To extend [PermissionContextBase](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_context_base.h):
+
+1. Create a new class `<PermissionName>PermissionContext` and extend
+[permissions::PermissionContextBase](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_context_base.h).
+2. Put it in `components/permissions/contexts/` or in a feature folder.
+3. In [permission_manager_factory.cc](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/permissions/permission_manager_factory.cc) update [CreatePermissionContexts()](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/permissions/permission_manager_factory.cc;l=50;drc=c970b8647281cc3fc7ffe1288ce7c5f2e5f7acf6)
+4. In [permission_manager_factory.cc](https://source.chromium.org/chromium/chromium/src/+/main:weblayer/browser/permissions/permission_manager_factory.cc) update [CreatePermissionContexts()](https://source.chromium.org/chromium/chromium/src/+/main:weblayer/browser/permissions/permission_manager_factory.cc;l=61;drc=0e1f7e00e6ee851f977f5f37d711ee5d4e9b28eb)
+5. In [permission_test_util.cc](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/test/permission_test_util.cc) update [CreatePermissionContexts()](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/test/permission_test_util.cc;l=46;drc=0e1f7e00e6ee851f977f5f37d711ee5d4e9b28eb)
+
+### DevTools
+Add new permissions for browser automation (e2e testing).
+
+1. Update [third_party/blink/public/devtools_protocol/browser_protocol.pdl](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/devtools_protocol/browser_protocol.pdl)
+2. In [content/browser/devtools/protocol/browser_handler.cc](https://source.chromium.org/chromium/chromium/src/+/main:content/browser/devtools/protocol/browser_handler.cc)
+update
+    * [PermissionDescriptorToPermissionType()](https://source.chromium.org/chromium/chromium/src/+/main:content/browser/devtools/protocol/browser_handler.cc;l=152;drc=f7065e23ad878a5f85f9c43eff6c0381474db2fe)
+    * [FromProtocolPermissionType()](https://source.chromium.org/chromium/chromium/src/+/main:content/browser/devtools/protocol/browser_handler.cc;l=223;drc=f7065e23ad878a5f85f9c43eff6c0381474db2fe)
+
+
+### Optional: Add a permission policy
+If you need to add a permission policy:
+
+1. In [permissions_policy_feature.mojom](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom)
+update enum
+[PermissionsPolicyFeature](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom;l=16;drc=272becfe736870f18b79355d73475a5eb86c93b1)
+2. In [permissions_policy_features.json5](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/permissions_policy/permissions_policy_features.json5)
+update `data` array with the new policy.
+5. Update [feature-policy-features-expected.txt](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/webexposed/feature-policy-features-expected.txt)
+6. In the `<PermissionName>PermissionContext`, make sure to initialize the permission policy variable
+[permissions_policy_feature_](https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_context_base.h;l=223;drc=caa1747121ee9f14ba7d4e346ea2dc5e7a2e05c0)
+in the class ctor.
+
+### Optional: Enterprise policies
+Permissions infrastructure has its own provider for storing policies
+[PolicyProvider](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/browser/content_settings_policy_provider.h).
+If you plan on allowing enterprise admins to control your newly added
+permission:
+
+1. Follow that instructions [docs/enterprise/add_new_policy.md](https://source.chromium.org/chromium/chromium/src/+/main:docs/enterprise/add_new_policy.md#adding-a-new-policy)
+2. For the [step #6](https://source.chromium.org/chromium/chromium/src/+/main:docs/enterprise/add_new_policy.md;l=98-111;drc=cd66a348b90e5260b5ff0ac6da36ef99e9b328f9)
+you need to create and register variables in content settings policy providers.
+That allows automatically verifying policy values for a given permission.
+    * Create a new policy in
+    [components/content_settings/core/common/pref_names.(h/cc)](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/pref_names.h)
+    * In
+    [content_settings_policy_provider.cc](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/common/pref_names.cc)
+update
+        * [PrefsForManagedContentSettingsMapEntry](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/browser/content_settings_policy_provider.cc;l=35;drc=0c2e6d2e27af976e1b28eebd7dacc7a0296bb1cc)
+        * [kManagedPrefs](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/browser/content_settings_policy_provider.cc;l=112;drc=0c2e6d2e27af976e1b28eebd7dacc7a0296bb1cc)
+        * [kManagedDefaultPrefs](https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/browser/content_settings_policy_provider.cc;l=159;drc=0c2e6d2e27af976e1b28eebd7dacc7a0296bb1cc)
+    * In ​[configuration_policy_handler_list_factory.cc](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/policy/configuration_policy_handler_list_factory.cc)
+    register the newly created policies as well.
+3. In [tools/metrics/histograms/enums.xml](https://source.chromium.org/chromium/chromium/src/+/main:tools/metrics/histograms/enums.xml)
+add new policies in `enum name="EnterprisePolicies"`
diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/AndroidPermissionRequester.java b/components/permissions/android/java/src/org/chromium/components/permissions/AndroidPermissionRequester.java
index cc1e6fd..cc8f13e 100644
--- a/components/permissions/android/java/src/org/chromium/components/permissions/AndroidPermissionRequester.java
+++ b/components/permissions/android/java/src/org/chromium/components/permissions/AndroidPermissionRequester.java
@@ -13,7 +13,6 @@
 
 import org.chromium.base.BuildInfo;
 import org.chromium.base.CollectionUtil;
-import org.chromium.base.Consumer;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.components.content_settings.ContentSettingsType;
 import org.chromium.ui.base.WindowAndroid;
@@ -26,6 +25,7 @@
 
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Consumer;
 
 /**
  * Methods to handle requesting native permissions from Android when the user grants a website a
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index d803cf53..612976d 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -7453,12 +7453,6 @@
       Weitere Informationen dazu findest du unter https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
 <translation id="8424255554404582727">Standarddrehung des Bildschirms festlegen, die bei jedem Neustart erneut angewendet wird</translation>
 <translation id="8426231401662877819">Bildschirm um 90 Grad im Uhrzeigersinn drehen</translation>
-<translation id="8426819027631706846">Wie unter https://www.chromestatus.com/feature/5148698084376576 beschrieben, werden von <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> und <ph name="JS_PROMPT" /> ausgelöste modale JavaScript-Dialogfelder in <ph name="PRODUCT_NAME" /> blockiert, wenn sie von einem Subframe ausgelöst werden, dessen Quelle sich von der Quelle des Hauptframes unterscheidet.
-       Mit dieser Richtlinie kann diese Änderung überschrieben werden.
-       Ist die Richtlinie aktiviert oder nicht konfiguriert, werden JavaScript-Dialogfelder, die von einem anderen Quell-Subframe ausgelöst wurden, blockiert.
-       Ist die Richtlinie deaktiviert, werden JavaScript-Dialogfelder, die von einem anderen Quell-Subframe ausgelöst wurden, nicht blockiert.
-
-       Diese Richtlinie wird in Version 95 von <ph name="PRODUCT_NAME" /> entfernt.</translation>
 <translation id="8427466947904008809">Zulassen, dass CRD WebAuthn API-Anfragen ausführt, die von einem Remote-Host über einen Proxy weitergeleitet werden.</translation>
 <translation id="8428295225823548121">Melden der Informationen zum Arbeitsspeicher auf Geräten aktivieren</translation>
 <translation id="8428635849021776523">Android-Berichterstellung deaktivieren</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index 096aacf..d4316a2a 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -510,6 +510,7 @@
       Nota: Los nombres de los servidores se separan con comas. Se permite el uso de caracteres comodín (<ph name="WILDCARD_VALUE" />).</translation>
 <translation id="1488724823347505879">Habilitar el uso compartido de apps para Android a aplicaciones web</translation>
 <translation id="1494138678487405397">Inhabilitar el contraste alto en la pantalla de acceso</translation>
+<translation id="1499129134689253257">Controlar el comportamiento nuevo de <ph name="OFFSET_PARENT" /></translation>
 <translation id="1501644502684303995">Solo aplicar de manera forzosa accesos en línea a la pantalla de acceso</translation>
 <translation id="1502843533062797703">Habilitar el bloqueo de inserción de software de terceros</translation>
 <translation id="1503969899251962413">Si estableces la política, se especificará la clave de licencia <ph name="PLUGIN_VM_NAME" /> para este dispositivo.
@@ -2374,6 +2375,17 @@
 
       Si no estableces la política, <ph name="PRODUCT_NAME" /> cargará todos los hosts de mensajería nativa instalados.</translation>
 <translation id="3211426942294667684">Configuración de acceso en el navegador</translation>
+<translation id="3217774577897351942">La API de <ph name="OFFSET_PARENT" /> se modificará en <ph name="PRODUCT_NAME" /> a fin de cumplir con los cambios realizados en <ph name="FIREFOX_PRODUCT_NAME" /> y <ph name="SAFARI_PRODUCT_NAME" />. Esta política recupera el comportamiento anterior hasta la versión M120.
+
+El comportamiento nuevo puede generar fallas en algunos sitios web exclusivos de <ph name="PRODUCT_NAME" /> que usan <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> o <ph name="OFFSET_LEFT" /> junto con Shadow DOM.
+
+Estos son algunos polyfills que recuperan el comportamiento anterior para ayudarte a migrar https://github.com/josepharhar/offsetparent-polyfills
+
+Si se habilita esta política, se utilizará el comportamiento nuevo.
+
+Si se inhabilita, se utilizará el comportamiento anterior.
+
+Si no se establece, se usará el comportamiento nuevo al igual que en el resto de los usuarios de Chromium.</translation>
 <translation id="3219421230122020860">Modo incógnito disponible</translation>
 <translation id="3220624000494482595">Si la Aplicación de kiosko es una app de Android, esta no tendrá control sobre la versión de <ph name="PRODUCT_OS_NAME" />, incluso si esta política se establece como <ph name="TRUE" />.</translation>
 <translation id="3222088741899353813">El botón principal en la pantalla de acceso es el izquierdo</translation>
@@ -2778,6 +2790,7 @@
 <translation id="3589193811812796052">Impedir el envío de módulos de WebAssembly entre orígenes cruzados</translation>
 <translation id="3591527072193107424">Habilitar la función "Compatibilidad con navegadores heredados"</translation>
 <translation id="3591584750136265240">Configurar el comportamiento de autenticación en el acceso</translation>
+<translation id="3593905652755912452">Usar el comportamiento anterior de envío de eventos en los controles de formularios inhabilitados</translation>
 <translation id="3596112486106491038">Habilitar el acceso a la línea de comandos de la máquina virtual</translation>
 <translation id="3603469950773500315">Habilita las mitigaciones de comprobación de <ph name="CORS" /> en la nueva implementación de <ph name="CORS" />, lo que permite que las extensiones mantengan su compatibilidad y que <ph name="PRODUCT_NAME" /> envíe encabezados específicos sin las comprobaciones de <ph name="CORS" />.
 
@@ -3077,6 +3090,7 @@
 <translation id="3891357445869647828">Habilitar JavaScript</translation>
 <translation id="3891769546914233112">Imprimir PDF como imagen disponible</translation>
 <translation id="3897218615484393758">Limita el tiempo durante el cual un usuario que se autenticó mediante SAML puede acceder sin conexión a través de la pantalla de bloqueo</translation>
+<translation id="3897860452756794695">Usar el comportamiento nuevo de offsetParent</translation>
 <translation id="3898345958122666461">Desactivar NTLMv2</translation>
 <translation id="3898795800259311780">Permite o rechaza la captura de pantalla</translation>
 <translation id="3903313632842363082">Inhabilitar los informes de los usuarios del dispositivo</translation>
@@ -4888,6 +4902,7 @@
 
       Los usuarios no podrán cambiar esta configuración.</translation>
 <translation id="5838452040629810808">Habilitar la función para destacar el cursor</translation>
+<translation id="5842283830553218200">Usar el comportamiento nuevo de envío de eventos en los controles de formulario inhabilitados de forma predeterminada</translation>
 <translation id="5848438019586925019">El algoritmo para la generación del par de claves.</translation>
 <translation id="5851248808417680865">Usar el Tema oscuro</translation>
 <translation id="585270638818921943">Impide que el usuario use apps para Android de fuentes no confiables</translation>
@@ -5385,6 +5400,7 @@
       Si inhabilitas la política o no la estableces, los usuarios podrán elegir usar o no <ph name="CHROME_SYNC_NAME" />.
 
       Nota: No desactives esta política cuando está habilitada <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />, porque esa función comparte la misma funcionalidad del cliente. En ese caso, se desactivará por completo la sincronización alojada en Google.</translation>
+<translation id="6320935916601887506">Usar el comportamiento nuevo de offsetParent de forma predeterminada</translation>
 <translation id="6327643515544933974">Configuración de USB Web</translation>
 <translation id="6330882599388782338">Permite que los sitios accedan a los sensores</translation>
 <translation id="6331167725613770725">Ten en cuenta que esta política es obsoleta y se quitará en la versión 85 de <ph name="PRODUCT_OS_NAME" />. En su lugar, utiliza <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
@@ -5522,6 +5538,7 @@
 <translation id="6464074037294098618">Habilitar "Autocompletar" para las direcciones</translation>
 <translation id="6467613372414922590">Permite el uso de hosts de mensajería nativa en el nivel de usuario (instalados sin permisos de administrador).</translation>
 <translation id="6473623140202114570">Configura la lista de dominios donde la Navegación segura no activa advertencias.</translation>
+<translation id="6474194795370862403">Usar el comportamiento anterior de offsetParent</translation>
 <translation id="647645276885673708">Habilitar <ph name="LACROS_NAME" /> y seleccionarlo como navegador predeterminado</translation>
 <translation id="647698599569353771">Permite habilitar Compartir con Nearby.</translation>
 <translation id="6477685422297715670">Color verde para la retroiluminación del teclado</translation>
@@ -7533,17 +7550,12 @@
 <translation id="8417305981081876834">Establecer la longitud máxima del PIN de pantalla bloqueada</translation>
 <translation id="841977920223099909">Activador de advertencia de la protección de la contraseña</translation>
 <translation id="8420426128163801949">Permitir que los usuarios activen o desactiven la conexión Bluetooth</translation>
+<translation id="8422658829373743789">Controlar el comportamiento nuevo de envío de eventos en los controles de formularios inhabilitados</translation>
 <translation id="8422866312638683210">Si estableces la política, <ph name="PRODUCT_NAME" /> intentará registrarse con <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. El valor de esta política es un token de inscripción que puedes recuperar de la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.
 
       Para obtener más información, consulta https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
 <translation id="8424255554404582727">Establecer la rotación predeterminada de la pantalla que se volverá a aplicar en cada reinicio</translation>
 <translation id="8426231401662877819">Rotar la pantalla hacia la derecha 90 grados</translation>
-<translation id="8426819027631706846">Como se describe en https://www.chromestatus.com/feature/5148698084376576 , los diálogos modales de JavaScript, activados por <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> y <ph name="JS_PROMPT" />, se bloquearán en <ph name="PRODUCT_NAME" /> si se activan desde un submarco con un origen diferente al del marco principal.
-       Esta política permite anular ese cambio.
-       Si habilitas la política o no la estableces, se bloquearán los diálogos de JavaScript activados desde un submarco de origen diferente.
-       Si inhabilitas la política, no se bloquearán los diálogos de JavaScript activados desde un submarco de origen diferente.
-
-       En la versión 95 de <ph name="PRODUCT_NAME" />, se quitará esta política.</translation>
 <translation id="8427466947904008809">Permitir que CRD realice solicitudes a la API de WebAuthn que se envíen al proxy a través de un host remoto</translation>
 <translation id="8428295225823548121">Habilitar los informes de la memoria del dispositivo</translation>
 <translation id="8428635849021776523">Inhabilitar los informes de Android</translation>
@@ -8092,6 +8104,19 @@
 <translation id="8947415621777543415">Informar la ubicación del dispositivo</translation>
 <translation id="8948062138228904066">Lista de servidores de autenticación habilitados</translation>
 <translation id="8951350807133946005">Configurar el directorio de caché de disco</translation>
+<translation id="8952611478149810182">Se modificará el envío de eventos en los controles de formularios inhabilitados en Chromium a fin de mejorar la compatibilidad con otros navegadores y la experiencia de los desarrolladores.
+
+Este cambio hace que los MouseEvents se envíen en los elementos de control de formularios inhabilitados, excepto los clics, el mouseup y el mousedown. Los nuevos eventos incluirán mousemove, mouseenter y mouseleave, por ejemplo.
+
+Este cambio también trunca la ruta de acceso de los eventos de clic, mouseup y mousedown cuando se envían a elementos secundarios de los controles de formularios inhabilitados, de modo que no se envían al control de formularios inhabilitados ni a ninguno de sus elementos principales.
+
+El comportamiento nuevo puede hacer fallar algunos sitios web.
+
+Si se habilita esta política, se utilizará el comportamiento nuevo.
+
+Si se inhabilita, se utilizará el comportamiento anterior.
+
+Si no se establece, se usará el comportamiento nuevo al igual que en el resto de los usuarios de Chromium.</translation>
 <translation id="8955719471735800169">Volver al principio</translation>
 <translation id="8956312248048980644">Permitir el agrupamiento en clústeres de agentes con clave de origen de forma predeterminada</translation>
 <translation id="8970205333161758602">Elimina el mensaje de desactivación de <ph name="PRODUCT_FRAME_NAME" />.</translation>
@@ -8277,6 +8302,7 @@
 <translation id="9135033364005346124">Habilitar el proxy de <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">Inhabilitar la IU del cuadro de descarga</translation>
 <translation id="9136399279941091445">Intervalos de horas inactivas cuando se ejecutan las políticas de dispositivo especificadas</translation>
+<translation id="9142561920976791097">Usar el comportamiento nuevo de envío de eventos en los controles de formularios inhabilitados</translation>
 <translation id="9148720248753722892">No permitir los certificados firmados por SHA-1</translation>
 <translation id="9149678135092892302">Inhabilitar la generación de informes sobre la versión</translation>
 <translation id="9150416707757015439">Esta política no está aprobada. Usa IncognitoModeAvailability en su lugar. Esto habilita el modo incógnito en <ph name="PRODUCT_NAME" />. Si se habilita esta opción o si no se configura, los usuarios podrán abrir páginas web en modo incógnito. Si se inhabilita esta configuración, los usuarios no podrán abrir páginas web en modo incógnito. Si esta política no se configura, se habilitará esta opción y el usuario podrá usar el modo incógnito.</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 70065b9..27ef99c 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -7525,12 +7525,6 @@
       Para obtener más información, consulta https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
 <translation id="8424255554404582727">Establecer rotación de pantalla predeterminada y volver a aplicarla cada vez que se reinicie el dispositivo</translation>
 <translation id="8426231401662877819">Rotar la pantalla 90 grados hacia la derecha</translation>
-<translation id="8426819027631706846">Tal como se describe en la página https://www.chromestatus.com/feature/5148698084376576, los cuadros de diálogo modales de JavaScript, activados por <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> y <ph name="JS_PROMPT" />, se bloquearán en <ph name="PRODUCT_NAME" /> si se activan desde un submarco cuyo origen sea diferente al del marco principal.
-       Esta política permite anular ese cambio.
-       Si se habilita esta política o no se establece, se bloquearán los cuadros de diálogo de JavaScript activados desde un submarco de origen diferente.
-       Si se inhabilita esta política, no se bloquearán.
-
-       Esta política se eliminará en la versión 95 de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8427466947904008809">Permitir que CRD ejecute las solicitudes a la API WebAuthn mediante un proxy desde un host remoto.</translation>
 <translation id="8428295225823548121">Habilitar los informes sobre la memoria del dispositivo</translation>
 <translation id="8428635849021776523">Inhabilitar los informes de Android</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index 8834684..250e1814 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -7467,12 +7467,6 @@
       Pour en savoir plus, consultez la page https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
 <translation id="8424255554404582727">Définir la rotation de l'écran par défaut (réappliquée à chaque redémarrage)</translation>
 <translation id="8426231401662877819">Faire pivoter l'écran vers la droite de 90 degrés</translation>
-<translation id="8426819027631706846">Tel que décrit sur https://www.chromestatus.com/feature/5148698084376576, les boîtes de dialogue modales JavaScript déclenchées par <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> et <ph name="JS_PROMPT" /> seront bloquées sur <ph name="PRODUCT_NAME" /> si elles sont déclenchées depuis un sous-frame dont l'origine est différente de celle du frame principal.
-       Cette règle permet d'ignorer cette distinction.
-       Si la règle est activée ou n'est pas définie, les boîtes de dialogue JavaScript déclenchées depuis un sous-frame d'une origine différente seront bloquées.
-       Si elle est désactivée, les boîtes de dialogue JavaScript déclenchées depuis un sous-frame d'une origine différente ne seront pas bloquées.
-
-       Cette règle sera supprimée dans la version 95 de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8427466947904008809">Autoriser CRD à exécuter les requêtes API WebAuthn envoyées par un proxy à partir d'un hôte à distance.</translation>
 <translation id="8428295225823548121">Activer les rapports sur la mémoire de l'appareil</translation>
 <translation id="8428635849021776523">Désactiver la création de rapports Android</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index e82b7554..e40c474 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -509,6 +509,7 @@
       Catatan: Pisahkan beberapa nama server dengan koma. Karakter pengganti, <ph name="WILDCARD_VALUE" />, diizinkan.</translation>
 <translation id="1488724823347505879">Mengaktifkan berbagi dari aplikasi Android ke aplikasi Web</translation>
 <translation id="1494138678487405397">Nonaktifkan kontras tinggi di layar login</translation>
+<translation id="1499129134689253257">Mengontrol perilaku baru <ph name="OFFSET_PARENT" /></translation>
 <translation id="1501644502684303995">Hanya terapkan login online di layar login</translation>
 <translation id="1502843533062797703">Aktifkan pemblokiran injeksi software pihak ketiga</translation>
 <translation id="1503969899251962413">Menyetel kebijakan akan menentukan kunci lisensi <ph name="PLUGIN_VM_NAME" /> untuk perangkat ini.
@@ -2378,6 +2379,17 @@
 
       Jika kebijakan tidak disetel, <ph name="PRODUCT_NAME" /> akan memuat semua host pesan native yang terinstal.</translation>
 <translation id="3211426942294667684">Setelan login browser</translation>
+<translation id="3217774577897351942"><ph name="OFFSET_PARENT" /> API diubah di <ph name="PRODUCT_NAME" /> untuk mematuhi perubahan yang telah dibuat di <ph name="FIREFOX_PRODUCT_NAME" /> dan <ph name="SAFARI_PRODUCT_NAME" />. Kebijakan ini mengembalikan perilaku lama hingga M120.
+
+Perilaku baru dapat menyebabkan error pada beberapa situs khusus <ph name="PRODUCT_NAME" /> yang menggunakan <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" />, atau <ph name="OFFSET_LEFT" /> bersama Shadow DOM.
+
+Berikut adalah beberapa polyfill yang mengembalikan perilaku lama untuk membantu migrasi https://github.com/josepharhar/offsetparent-polyfills
+
+Jika kebijakan ini diaktifkan, perilaku baru akan digunakan.
+
+Jika kebijakan ini dinonaktifkan, perilaku lama akan digunakan.
+
+Jika kebijakan ini tidak disetel, perilaku baru akan digunakan seperti pengguna Chromium lainnya.</translation>
 <translation id="3219421230122020860">Mode samaran tersedia</translation>
 <translation id="3220624000494482595">Jika aplikasi kios adalah aplikasi Android, aplikasi tersebut tidak akan memiliki kontrol terhadap versi <ph name="PRODUCT_OS_NAME" />, meski kebijakan ini disetel ke <ph name="TRUE" />.</translation>
 <translation id="3222088741899353813">Tombol kiri menjadi tombol utama di layar login</translation>
@@ -2784,6 +2796,7 @@
 <translation id="3589193811812796052">Cegah modul WebAssembly dikirim lintas asal</translation>
 <translation id="3591527072193107424">Mengaktifkan fitur Dukungan Browser Lama.</translation>
 <translation id="3591584750136265240">Mengonfigurasi perilaku autentikasi proses masuk</translation>
+<translation id="3593905652755912452">Perilaku lama pengiriman peristiwa pada kontrol formulir yang dinonaktifkan akan digunakan.</translation>
 <translation id="3596112486106491038">Aktifkan akses command line mesin virtual</translation>
 <translation id="3603469950773500315">Mengaktifkan mitigasi pemeriksaan <ph name="CORS" /> dalam implementasi <ph name="CORS" /> baru, sehingga memungkinkan Ekstensi tetap kompatibel dan mengizinkan <ph name="PRODUCT_NAME" /> mengirim header tertentu tanpa pemeriksaan <ph name="CORS" />.
 
@@ -3084,6 +3097,7 @@
 <translation id="3891357445869647828">Mengaktifkan JavaScript</translation>
 <translation id="3891769546914233112">Mencetak PDF sebagai Gambar Tersedia</translation>
 <translation id="3897218615484393758">Membatasi waktu bagi pengguna yang diautentikasi melalui SAML untuk dapat login secara offline di layar kunci</translation>
+<translation id="3897860452756794695">Perilaku baru offsetParent akan digunakan.</translation>
 <translation id="3898345958122666461">Nonaktifkan NTLMv2</translation>
 <translation id="3898795800259311780">Mengizinkan atau menolak tangkapan layar</translation>
 <translation id="3903313632842363082">Nonaktifkan pelaporan pengguna perangkat</translation>
@@ -4900,6 +4914,7 @@
 
       Pengguna tidak dapat mengubah setelan ini.</translation>
 <translation id="5838452040629810808">Aktifkan sorotan kursor</translation>
+<translation id="5842283830553218200">Perilaku baru pengiriman peristiwa pada kontrol formulir yang dinonaktifkan akan digunakan secara default.</translation>
 <translation id="5848438019586925019">Algoritme untuk pembuatan pasangan kunci.</translation>
 <translation id="5851248808417680865">Gunakan Tema gelap</translation>
 <translation id="585270638818921943">Cegah pengguna menggunakan aplikasi Android dari sumber yang tidak tepercaya</translation>
@@ -5397,6 +5412,7 @@
       Jika kebijakan disetel ke Nonaktif atau tidak disetel, pengguna akan diizinkan memilih apakah akan menggunakan <ph name="CHROME_SYNC_NAME" />.
 
       Catatan: Jangan aktifkan kebijakan ini jika <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> disetel ke Aktif, karena fitur tersebut berbagi fungsi sisi klien yang sama. Dalam hal ini, sinkronisasi yang dihosting oleh Google akan nonaktif sepenuhnya.</translation>
+<translation id="6320935916601887506">Perilaku baru offsetParent akan digunakan secara default.</translation>
 <translation id="6327643515544933974">Setelan Web USB</translation>
 <translation id="6330882599388782338">Izinkan situs mengakses sensor</translation>
 <translation id="6331167725613770725">Perhatikan bahwa kebijakan ini sudah tidak digunakan lagi dan akan dihapus di <ph name="PRODUCT_OS_NAME" /> versi 85. Sebagai gantinya, gunakan <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
@@ -5534,6 +5550,7 @@
 <translation id="6464074037294098618">Mengaktifkan IsiOtomatis untuk alamat</translation>
 <translation id="6467613372414922590">Mengizinkan host Native Messaging level pengguna (diinstal tanpa izin admin)</translation>
 <translation id="6473623140202114570">Mengonfigurasi daftar domain tempat Safe Browsing tidak akan memicu peringatan.</translation>
+<translation id="6474194795370862403">Perilaku lama offsetParent akan digunakan.</translation>
 <translation id="647645276885673708">Aktifkan <ph name="LACROS_NAME" /> dan jadikan sebagai browser utama</translation>
 <translation id="647698599569353771">Mengizinkan pengaktifan Berbagi Langsung.</translation>
 <translation id="6477685422297715670">Warna lampu latar keyboard hijau</translation>
@@ -7537,17 +7554,12 @@
 <translation id="8417305981081876834">Setel panjang maksimal PIN layar kunci</translation>
 <translation id="841977920223099909">Pemicu peringatan perlindungan sandi</translation>
 <translation id="8420426128163801949">Izinkan pengguna mengaktifkan atau menonaktifkan Bluetooth</translation>
+<translation id="8422658829373743789">Mengontrol perilaku baru untuk pengiriman peristiwa pada kontrol formulir yang dinonaktifkan</translation>
 <translation id="8422866312638683210">Jika kebijakan disetel, <ph name="PRODUCT_NAME" /> akan mencoba mendaftarkan diri ke <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. Nilai kebijakan ini adalah token pendaftaran yang dapat Anda ambil dari <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.
 
       Lihat https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744 untuk detailnya.</translation>
 <translation id="8424255554404582727">Setel pemutaran layar default, diterapkan kembali setiap kali melakukan boot ulang</translation>
 <translation id="8426231401662877819">Putar layar searah jarum jam sebesar 90 derajat</translation>
-<translation id="8426819027631706846">Sebagaimana dijelaskan di https://www.chromestatus.com/feature/5148698084376576, dialog modal JavaScript, yang dipicu oleh <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" />, dan <ph name="JS_PROMPT" />, akan diblokir di <ph name="PRODUCT_NAME" /> jika dipicu dari subframe yang memiliki asal berbeda dari asal frame utama.
-       Kebijakan ini memungkinkan penggantian perubahan tersebut.
-       Jika kebijakan disetel ke aktif atau tidak disetel, dialog JavaScript yang dipicu dari subframe asal yang berbeda akan diblokir.
-       Jika kebijakan disetel ke nonaktif, dialog JavaScript yang dipicu dari subframe asal yang berbeda tidak akan diblokir.
-
-       Kebijakan ini akan dihapus dari <ph name="PRODUCT_NAME" /> versi 95.</translation>
 <translation id="8427466947904008809">Izinkan CRD mengeksekusi permintaan WebAuthn API yang di-proxy dari host jarak jauh.</translation>
 <translation id="8428295225823548121">Aktifkan pelaporan info memori perangkat</translation>
 <translation id="8428635849021776523">Nonaktifkan pelaporan Android</translation>
@@ -8084,6 +8096,19 @@
 <translation id="8947415621777543415">Laporkan lokasi perangkat</translation>
 <translation id="8948062138228904066">Daftar server autentikasi yang diizinkan</translation>
 <translation id="8951350807133946005">Setel direktori cache disk</translation>
+<translation id="8952611478149810182">Pengiriman peristiwa pada kontrol formulir yang dinonaktifkan akan diubah di Chromium untuk meningkatkan kompatibilitas dengan browser lain dan untuk meningkatkan pengalaman developer.
+
+Perubahan ini membuat MouseEvents dikirim pada elemen kontrol formulir yang dinonaktifkan, kecuali click, mouseup, dan mousedown. Misalnya, peristiwa baru akan menyertakan mousemove, mouseenter, dan mouseleave.
+
+Perubahan ini juga akan memotong jalur peristiwa click, mouseup, dan mousedown saat dikirim ke turunan kontrol formulir yang dinonaktifkan sehingga tidak dikirim pada kontrol formulir yang dinonaktifkan atau ancestornya.
+
+Perilaku baru dapat menyebabkan error pada beberapa situs.
+
+Jika kebijakan ini diaktifkan, perilaku baru akan digunakan.
+
+Jika kebijakan ini dinonaktifkan, perilaku lama akan digunakan.
+
+Jika kebijakan ini tidak disetel, perilaku baru akan digunakan seperti pengguna Chromium lainnya.</translation>
 <translation id="8955719471735800169">Kembali ke atas</translation>
 <translation id="8956312248048980644">Mengizinkan pengelompokan cluster agen dengan kunci asal secara default.</translation>
 <translation id="8970205333161758602">Tindas permintaan penghentian <ph name="PRODUCT_FRAME_NAME" /></translation>
@@ -8269,6 +8294,7 @@
 <translation id="9135033364005346124">Mengaktifkan proxy <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">Nonaktifkan UI balon download</translation>
 <translation id="9136399279941091445">Interval di luar jam kerja saat kebijakan perangkat yang ditentukan dirilis</translation>
+<translation id="9142561920976791097">Perilaku baru pengiriman peristiwa pada kontrol formulir yang dinonaktifkan akan digunakan.</translation>
 <translation id="9148720248753722892">Larang sertifikat yang ditandatangani SHA-1</translation>
 <translation id="9149678135092892302">Nonaktifkan pelaporan informasi versi</translation>
 <translation id="9150416707757015439">Kebijakan ini sudah tidak digunakan lagi. Gunakan IncognitoModeAvailability sebagai gantinya. Aktifkan mode Samaran di <ph name="PRODUCT_NAME" />. Jika setelan ini diaktifkan atau tidak dikonfigurasi, pengguna dapat membuka halaman web dalam mode samaran. Jika setelan ini dinonaktifkan, pengguna tidak dapat membuka halaman web dalam mode samaran. Jika kebijakan ini dibiarkan tanpa disetel, kebijakan ini akan diaktifkan dan pengguna akan dapat menggunakan mode samaran.</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 899eb4a..2107da5 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -508,6 +508,7 @@
       Nota: se ci sono più server, separane i nomi utilizzando virgole. I caratteri jolly (<ph name="WILDCARD_VALUE" />) sono consentiti.</translation>
 <translation id="1488724823347505879">Attiva la condivisione dalle app Android alle app web</translation>
 <translation id="1494138678487405397">Disattiva l'alto contrasto nella schermata di accesso</translation>
+<translation id="1499129134689253257">Gestisci il nuovo comportamento di <ph name="OFFSET_PARENT" /></translation>
 <translation id="1501644502684303995">Applica in modo forzato gli accessi online soltanto nella schermata di accesso</translation>
 <translation id="1502843533062797703">Attiva blocco inserimento da software di terze parti</translation>
 <translation id="1503969899251962413">La configurazione del criterio consente di specificare il codice licenza <ph name="PLUGIN_VM_NAME" /> per il dispositivo.
@@ -2336,6 +2337,17 @@
 
       Se il criterio non viene configurato, <ph name="PRODUCT_NAME" /> carica tutti gli host di messaggistica nativi installati.</translation>
 <translation id="3211426942294667684">Impostazioni di accesso al browser</translation>
+<translation id="3217774577897351942">L'API <ph name="OFFSET_PARENT" /> verrà modificata in <ph name="PRODUCT_NAME" /> per conformarla alle modifiche apportate in <ph name="FIREFOX_PRODUCT_NAME" /> e <ph name="SAFARI_PRODUCT_NAME" />. Questo criterio ripristina il comportamento precedente fino alla versione M120.
+
+Il nuovo comportamento potrebbe rendere inaccessibili alcuni siti web solo di <ph name="PRODUCT_NAME" /> che usano <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> o <ph name="OFFSET_LEFT" /> in combinazione con il DOM Shadow.
+
+All'indirizzo https://github.com/josepharhar/offsetparent-polyfills puoi trovare alcuni polyfill che ripristinano il comportamento precedente per facilitare la migrazione.
+
+Se questo criterio viene attivato, verrà utilizzato il nuovo comportamento.
+
+Se viene disattivato, verrà utilizzato il comportamento precedente.
+
+Se non viene configurato, verrà utilizzato il nuovo comportamento, esattamente come avviene per gli altri utenti di Chromium.</translation>
 <translation id="3219421230122020860">Modalità di navigazione in incognito disponibile</translation>
 <translation id="3220624000494482595">Se l'app kiosk è un'app Android, non avrà controllo sulla versione di <ph name="PRODUCT_OS_NAME" />, anche se la norma viene impostata su <ph name="TRUE" />.</translation>
 <translation id="3222088741899353813">Il pulsante sinistro è il principale nella schermata di accesso</translation>
@@ -2739,6 +2751,7 @@
 <translation id="3589193811812796052">Impedisci che i moduli WebAssembly vengano inviati tra origini</translation>
 <translation id="3591527072193107424">Attiva la funzionalità Supporto dei browser precedenti.</translation>
 <translation id="3591584750136265240">Configura il comportamento di autenticazione dell'accesso</translation>
+<translation id="3593905652755912452">Verrà utilizzato il comportamento precedente per l'esecuzione di eventi sui controlli dei moduli disattivati.</translation>
 <translation id="3596112486106491038">Attiva l'accesso alla riga di comando delle macchine virtuali</translation>
 <translation id="3603469950773500315">Consente di attivare le mitigazioni dei controlli <ph name="CORS" /> nella nuova implementazione <ph name="CORS" />, consentendo alle estensioni di mantenere un comportamento compatibile e a <ph name="PRODUCT_NAME" /> di inviare le intestazioni specificate senza controlli <ph name="CORS" />.
 
@@ -3038,6 +3051,7 @@
 <translation id="3891357445869647828">Abilita JavaScript</translation>
 <translation id="3891769546914233112">Stampa PDF come immagine disponibile</translation>
 <translation id="3897218615484393758">Limita il tempo per cui un utente autenticato tramite SAML può accedere offline nella schermata di blocco</translation>
+<translation id="3897860452756794695">Verrà utilizzato il nuovo comportamento offsetParent.</translation>
 <translation id="3898345958122666461">Disattiva NTLMv2</translation>
 <translation id="3898795800259311780">Consenti o nega acquisizione schermo</translation>
 <translation id="3903313632842363082">Disattiva i report sugli utenti del dispositivo</translation>
@@ -4820,6 +4834,7 @@
 
       Gli utenti non possono modificare questa impostazione.</translation>
 <translation id="5838452040629810808">Attiva l'evidenziazione del puntatore</translation>
+<translation id="5842283830553218200">Per impostazione predefinita verrà utilizzato il nuovo comportamento per l'esecuzione di eventi sui controlli dei moduli disattivati.</translation>
 <translation id="5848438019586925019">L'algoritmo per la generazione di coppie di chiavi.</translation>
 <translation id="5851248808417680865">Usa il tema scuro</translation>
 <translation id="585270638818921943">Impedisci all'utente di usare app Android di fonti non attendibili</translation>
@@ -5305,6 +5320,7 @@
       Se il criterio viene impostato su Disattivato o se non viene configurato, gli utenti potranno scegliere se usare o meno <ph name="CHROME_SYNC_NAME" />.
 
       Nota: non attivare questo criterio se il criterio <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> è impostato su Attivato perché quest'ultimo ha la stessa funzione lato client. La sincronizzazione ospitata su Google viene disattivata completamente in questo caso.</translation>
+<translation id="6320935916601887506">Per impostazione predefinita verrà utilizzato il nuovo comportamento offsetParent.</translation>
 <translation id="6327643515544933974">Impostazioni USB web</translation>
 <translation id="6330882599388782338">Consenti ai siti di accedere ai sensori</translation>
 <translation id="6331167725613770725">Tieni presente che questo criterio è obsoleto e verrà rimosso nella versione 85 di <ph name="PRODUCT_OS_NAME" />. Usa il criterio <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
@@ -5443,6 +5459,7 @@
 <translation id="6464074037294098618">Attiva la Compilazione automatica per gli indirizzi</translation>
 <translation id="6467613372414922590">Consenti host di messaggistica nativi a livello di utente (installati senza privilegi di amministratore)</translation>
 <translation id="6473623140202114570">Configura l'elenco di domini sui quali Navigazione sicura non attiverà avvisi.</translation>
+<translation id="6474194795370862403">Verrà utilizzato il comportamento offsetParent precedente.</translation>
 <translation id="647645276885673708">Attiva <ph name="LACROS_NAME" /> e impostalo come browser principale</translation>
 <translation id="647698599569353771">Consenti l'attivazione di Condivisione nelle vicinanze.</translation>
 <translation id="6477685422297715670">Colore della retroilluminazione della tastiera verde</translation>
@@ -7441,17 +7458,12 @@
 <translation id="8417305981081876834">Imposta la lunghezza massima del PIN per la schermata di blocco</translation>
 <translation id="841977920223099909">Attivazione dell'avviso di protezione tramite password</translation>
 <translation id="8420426128163801949">Consenti agli utenti di attivare o disattivare il Bluetooth</translation>
+<translation id="8422658829373743789">Gestisci il nuovo comportamento per l'esecuzione di eventi sui controlli dei moduli disattivati</translation>
 <translation id="8422866312638683210">La configurazione del criterio significa che <ph name="PRODUCT_NAME" /> cerca di registrarsi con <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. Il valore del criterio è un token di registrazione che puoi recuperare da <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.
 
       Per ulteriori informazioni, vai all'indirizzo https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
 <translation id="8424255554404582727">Imposta la rotazione predefinita dello schermo, riapplicata a ogni riavvio</translation>
 <translation id="8426231401662877819">Ruota lo schermo in senso orario di 90°</translation>
-<translation id="8426819027631706846">Come descritto all'indirizzo https://www.chromestatus.com/feature/5148698084376576, le finestre di dialogo modali JavaScript, attivate da <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> e <ph name="JS_PROMPT" />, saranno bloccate in <ph name="PRODUCT_NAME" /> se attivate da un frame secondario la cui origine è diversa dall'origine del frame principale.
-       Questo criterio consente di eseguire l'override di tale modifica.
-       Se il criterio viene impostato su Attivato o se non viene configurato, le finestre di dialogo JavaScript attivate da un frame secondario di origine diversa verranno bloccate.
-       Se il criterio viene impostato su Disattivato, le finestre di dialogo JavaScript attivate da un frame secondario di origine diversa non verranno bloccate.
-
-       Questo criterio verrà rimosso nella versione 95 di <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8427466947904008809">Consenti a CRD di eseguire richieste API WebAuthn trasferite al proxy da un host remoto.</translation>
 <translation id="8428295225823548121">Attiva i report sulle informazioni relative alla memoria del dispositivo</translation>
 <translation id="8428635849021776523">Disattiva la generazione di report Android</translation>
@@ -7986,6 +7998,19 @@
 <translation id="8947415621777543415">Segnala posizione del dispositivo</translation>
 <translation id="8948062138228904066">Lista consentita di server di autenticazione</translation>
 <translation id="8951350807133946005">Impostazione directory della cache su disco</translation>
+<translation id="8952611478149810182">L'esecuzione di eventi sui controlli dei moduli disattivati cambierà in Chromium per migliorare la compatibilità con altri browser e l'esperienza per gli sviluppatori.
+
+A causa di questa modifica, gli eventi MouseEvent vengono eseguiti sugli elementi di controllo dei moduli disattivati, ad eccezione di click, mouseup e mousedown. I nuovi eventi includeranno, ad esempio, mousemove, mouseenter e mouseleave.
+
+Questa modifica tronca anche il percorso degli eventi click, mouseup e mousedown quando vengono eseguiti su elementi secondari dei controlli dei moduli disattivati affinché non vengano eseguiti sul controllo del modulo disattivato o su uno qualsiasi dei predecessori.
+
+Il nuovo comportamento potrebbe rendere inaccessibili alcuni siti web.
+
+Se questo criterio viene attivato, verrà utilizzato il nuovo comportamento.
+
+Se viene disattivato, verrà utilizzato il comportamento precedente.
+
+Se non viene configurato, verrà utilizzato il nuovo comportamento, esattamente come avviene per gli altri utenti di Chromium.</translation>
 <translation id="8955719471735800169">Torna all'inizio</translation>
 <translation id="8956312248048980644">Consente per impostazione predefinita il clustering di agenti in base all'origine.</translation>
 <translation id="8970205333161758602">Eliminazione del messaggio di richiesta di turndown di <ph name="PRODUCT_FRAME_NAME" /></translation>
@@ -8171,6 +8196,7 @@
 <translation id="9135033364005346124">Attiva proxy <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">Disattiva l'UI del fumetto dei download</translation>
 <translation id="9136399279941091445">Intervalli di orari di minore attività quando vengono rilasciati i criteri del dispositivo specificati</translation>
+<translation id="9142561920976791097">Verrà utilizzato il nuovo comportamento per l'esecuzione di eventi sui controlli dei moduli disattivati.</translation>
 <translation id="9148720248753722892">Non consentire i certificati con firma SHA-1</translation>
 <translation id="9149678135092892302">Disattiva la generazione di report sulle informazioni di versione</translation>
 <translation id="9150416707757015439">Questa norma è obsoleta. Utilizza IncognitoModeAvailability. Consente di attivare la modalità di navigazione in incognito in <ph name="PRODUCT_NAME" />. Se questa impostazione viene attivata o non viene configurata, gli utenti potranno aprire le pagine web in modalità di navigazione in incognito. Se l'impostazione viene disattivata, gli utenti non potranno aprire le pagine web in modalità di navigazione in incognito. Se questa norma non viene impostata, l'impostazione verrà attivata e gli utenti potranno utilizzare la modalità di navigazione in incognito.</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 536e4fa..0f5cd6d4 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -7110,7 +7110,6 @@
       詳しくは、https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744 をご覧ください。</translation>
 <translation id="8424255554404582727">再起動のたびにデフォルトのディスプレイ回転方法を再適用する</translation>
 <translation id="8426231401662877819">画面を時計回りに 90 度回転</translation>
-<translation id="8426819027631706846"><ph name="JS_ALERT" />、<ph name="JS_CONFIRM" />、<ph name="JS_PROMPT" /> によってトリガーされた JavaScript モード ダイアログは、トリガーしたサブフレームの生成元がメインフレームの生成元とは異なる場合に <ph name="PRODUCT_NAME" /> でブロックされます(参照: https://www.chromestatus.com/feature/5148698084376576)。このポリシーは前述の変更を許可します。このポリシーが有効に設定されている、または未設定の場合、生成元が異なるサブフレームからトリガーされた JavaScript ダイアログはブロックされます。ポリシーが無効に設定されている場合、生成元が異なるサブフレームからトリガーされた JavaScript ダイアログはブロックされません。このポリシーは <ph name="PRODUCT_NAME" /> バージョン 95 で削除されます。</translation>
 <translation id="8427466947904008809">CRD にリモートホストからプロキシ送信される WebAuthn API リクエストの実行を許可する。</translation>
 <translation id="8428295225823548121">デバイスのメモリ情報レポートを有効にする</translation>
 <translation id="8428635849021776523">Android のレポート機能を無効にする</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 9695330..d98840aa 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -508,6 +508,7 @@
       참고: 서로 다른 서버 이름은 쉼표로 구분하세요. 와일드 카드(<ph name="WILDCARD_VALUE" />)를 사용할 수 있습니다.</translation>
 <translation id="1488724823347505879">Android 앱에서 웹 앱으로의 공유를 사용 설정합니다.</translation>
 <translation id="1494138678487405397">로그인 화면에서 고대비 사용 중지</translation>
+<translation id="1499129134689253257"><ph name="OFFSET_PARENT" />의 새 동작을 제어합니다.</translation>
 <translation id="1501644502684303995">로그인 화면에 온라인 로그인만 시행</translation>
 <translation id="1502843533062797703">타사 소프트웨어 삽입 차단 사용</translation>
 <translation id="1503969899251962413">정책을 설정하면 이 기기의 <ph name="PLUGIN_VM_NAME" /> 라이선스 키가 지정됩니다.
@@ -2364,6 +2365,17 @@
 
       정책을 설정하지 않으면 <ph name="PRODUCT_NAME" />에서 설치되어 있는 모든 기본 메시지 호스트를 로드합니다.</translation>
 <translation id="3211426942294667684">브라우저 로그인 설정</translation>
+<translation id="3217774577897351942"><ph name="FIREFOX_PRODUCT_NAME" /> 및 <ph name="SAFARI_PRODUCT_NAME" />의 변경사항을 준수하기 위해 <ph name="PRODUCT_NAME" />에서 <ph name="OFFSET_PARENT" /> API가 변경됩니다. 이 정책은 M120 버전까지의 이전 동작을 가져옵니다.
+
+새 동작으로 인해 Shadow DOM과 함께 <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> 또는 <ph name="OFFSET_LEFT" />를 사용하는 일부 <ph name="PRODUCT_NAME" /> 전용 웹사이트가 다운될 수 있습니다.
+
+다음 페이지에서 기존 동작을 가져오는 폴리필을 사용하면 이전하는 데 도움이 됩니다. https://github.com/josepharhar/offsetparent-polyfills
+
+정책을 사용 설정하면 새 동작이 사용됩니다.
+
+정책을 사용 중지하면 이전 동작이 사용됩니다.
+
+정책이 설정되지 않으면 다른 Chromium 사용자와 마찬가지로 새 동작이 사용됩니다.</translation>
 <translation id="3219421230122020860">시크릿 모드 사용 가능</translation>
 <translation id="3220624000494482595">키오스크 앱이 Android 앱인 경우 이 정책이 <ph name="TRUE" />로 설정되더라도 <ph name="PRODUCT_OS_NAME" /> 버전을 제어할 수 없습니다.</translation>
 <translation id="3222088741899353813">로그인 화면에서 마우스 왼쪽 버튼이 기본 버튼</translation>
@@ -2769,6 +2781,7 @@
 <translation id="3589193811812796052">WebAssembly 모듈이 출처 간에 전송되는 것을 방지</translation>
 <translation id="3591527072193107424">이전 브라우저 지원 기능을 사용 설정합니다.</translation>
 <translation id="3591584750136265240">로그인 인증 동작 설정</translation>
+<translation id="3593905652755912452">disabled 양식 컨트롤에서 기존 이벤트 전달 동작이 사용됩니다.</translation>
 <translation id="3596112486106491038">가상 머신 명령줄 액세스 권한 사용 설정</translation>
 <translation id="3603469950773500315">새로운 <ph name="CORS" /> 구현에서 <ph name="CORS" /> 확인 완화를 사용 설정하여 확장 프로그램이 호환되는 동작을 유지하도록 허용하고 <ph name="PRODUCT_NAME" />에서 <ph name="CORS" /> 확인 없이 지정된 헤더를 전송하도록 허용합니다.
 
@@ -3068,6 +3081,7 @@
 <translation id="3891357445869647828">자바스크립트 사용</translation>
 <translation id="3891769546914233112">PDF를 이미지로 인쇄 가능</translation>
 <translation id="3897218615484393758">SAML을 통해 인증된 사용자가 잠금 화면에서 오프라인으로 로그인할 수 있는 기간 제한</translation>
+<translation id="3897860452756794695">새 offsetParent 동작이 사용됩니다.</translation>
 <translation id="3898345958122666461">NTLMv2 사용 중지</translation>
 <translation id="3898795800259311780">화면 캡처 허용 또는 거부</translation>
 <translation id="3903313632842363082">기기 사용자 보고 사용 중지</translation>
@@ -4872,6 +4886,7 @@
 
       사용자가 이 설정을 변경할 수 없습니다.</translation>
 <translation id="5838452040629810808">커서 강조표시 사용 설정</translation>
+<translation id="5842283830553218200">disabled 양식 컨트롤에서 기본적으로 새 이벤트 전달 동작이 사용됩니다.</translation>
 <translation id="5848438019586925019">키 쌍 생성을 위한 알고리즘입니다.</translation>
 <translation id="5851248808417680865">어두운 테마 사용</translation>
 <translation id="585270638818921943">사용자가 신뢰할 수 없는 출처의 Android 앱을 사용하는 것을 방지</translation>
@@ -5357,6 +5372,7 @@
       정책을 사용 중지로 설정하거나 설정하지 않으면 사용자가 <ph name="CHROME_SYNC_NAME" /> 사용 여부를 선택할 수 있습니다.
 
       참고: 동일한 클라이언트 측 기능을 공유하는 <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />가 사용 설정되면 정책을 사용하지 마시기 바랍니다. 이 경우 Google에서 호스팅하는 동기화가 완전히 사용 중지됩니다.</translation>
+<translation id="6320935916601887506">기본적으로 새로운 offsetParent 동작이 사용됩니다.</translation>
 <translation id="6327643515544933974">웹 USB 설정</translation>
 <translation id="6330882599388782338">사이트에서 센서에 액세스하도록 허용</translation>
 <translation id="6331167725613770725">이 정책은 지원이 중단되었으며 <ph name="PRODUCT_OS_NAME" /> 버전 85에서 삭제될 예정입니다. 대신 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> 정책을 사용하세요.
@@ -5494,6 +5510,7 @@
 <translation id="6464074037294098618">주소 자동 완성 사용</translation>
 <translation id="6467613372414922590">관리자 권한 없이 설치된 사용자 수준의 기본 메시지 호스트를 허용합니다.</translation>
 <translation id="6473623140202114570">세이프 브라우징에서 경고를 표시하지 않는 도메인의 목록을 설정합니다.</translation>
+<translation id="6474194795370862403">이전 offsetParent 동작이 사용됩니다.</translation>
 <translation id="647645276885673708"><ph name="LACROS_NAME" />를 사용 설정하고 기본 브라우저로 지정</translation>
 <translation id="647698599569353771">Nearby Share를 사용 설정할 수 있도록 허용</translation>
 <translation id="6477685422297715670">키보드 백라이트 색상: 녹색</translation>
@@ -7498,17 +7515,12 @@
 <translation id="8417305981081876834">잠금 화면 PIN 최대 길이 설정</translation>
 <translation id="841977920223099909">비밀번호 보호 경고 실행</translation>
 <translation id="8420426128163801949">사용자가 블루투스를 사용 설정 또는 중지하도록 허용</translation>
+<translation id="8422658829373743789">disabled 양식 컨트롤에서 이벤트 전달을 위한 새 동작을 제어합니다.</translation>
 <translation id="8422866312638683210">정책을 설정하면 <ph name="PRODUCT_NAME" />에서 <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />에 자신을 등록하려 시도합니다. 정책의 값은 <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />에서 가져올 수 있는 등록 토큰입니다.
 
       자세한 내용은 https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744를 참고하세요.</translation>
 <translation id="8424255554404582727">기본 디스플레이 회전 설정, 재부팅할 때마다 다시 적용됨</translation>
 <translation id="8426231401662877819">화면을 시계 방향으로 90도 회전</translation>
-<translation id="8426819027631706846">https://www.chromestatus.com/feature/5148698084376576의 설명과 같이 <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> 및 <ph name="JS_PROMPT" />에 의해 실행된 자바스크립트 모달 대화상자는 출처가 메인프레임과 다른 서브프레임에서 실행된 경우 <ph name="PRODUCT_NAME" />에서 차단됩니다.
-       정책으로 이 변경사항을 무시할 수 있습니다.
-       정책을 사용으로 설정하거나 설정하지 않으면 다른 출처 서브프레임에서 실행된 자바스크립트 대화상자가 차단됩니다.
-       사용 중지로 설정하면 다른 출처 서브프레임에서 실행된 자바스크립트 대화상자가 차단되지 않습니다.
-
-       이 정책은 <ph name="PRODUCT_NAME" /> 버전 95에서 삭제됩니다.</translation>
 <translation id="8427466947904008809">CRD가 원격 호스트에서 프록시된 WebAuthn API 요청을 실행하도록 허용합니다.</translation>
 <translation id="8428295225823548121">기기 메모리 정보 보고 사용 설정</translation>
 <translation id="8428635849021776523">Android 보고서 사용 중지</translation>
@@ -8051,6 +8063,19 @@
 <translation id="8947415621777543415">기기 위치 신고</translation>
 <translation id="8948062138228904066">인증 서버 허용 목록</translation>
 <translation id="8951350807133946005">디스크 캐시 디렉터리 설정</translation>
+<translation id="8952611478149810182">다른 브라우저와의 호환성을 개선하고 개발자 환경을 개선하기 위해 Chromium의 disabled 양식 컨트롤의 이벤트 전달 동작이 변경됩니다.
+
+이 변경사항은 click, mouseup, mousedown을 제외한 disabled 양식 제어 요소에 MouseEvents를 전달하도록 합니다. 새 이벤트에는 mousemove, mouseenter, mouseleave 등이 포함됩니다.
+
+또한 disabled 양식 컨트롤의 하위 요소에 전달되면 click, mouseup, mousedown의 이벤트 경로가 잘립니다. 따라서 disabled 양식 컨트롤이나 그 상위 요소에는 전달되지 않습니다.
+
+새 동작으로 인해 일부 웹사이트가 다운될 수 있습니다.
+
+정책을 사용 설정하면 새 동작이 사용됩니다.
+
+정책을 사용 중지하면 이전 동작이 사용됩니다.
+
+정책이 설정되지 않으면 다른 Chromium 사용자와 마찬가지로 새 동작이 사용됩니다.</translation>
 <translation id="8955719471735800169">맨위로</translation>
 <translation id="8956312248048980644">기본적으로 출처 관련 에이전트 클러스터링을 허용합니다.</translation>
 <translation id="8970205333161758602"><ph name="PRODUCT_FRAME_NAME" /> 종료 프롬프트를 표시하지 않음</translation>
@@ -8236,6 +8261,7 @@
 <translation id="9135033364005346124"><ph name="CLOUD_PRINT_NAME" /> 프록시 사용</translation>
 <translation id="9136212796239682721">다운로드 도움말 풍선 UI 사용 중지</translation>
 <translation id="9136399279941091445">특정 기기 정책이 공개되었을 때 Off hours 간격</translation>
+<translation id="9142561920976791097">disabled 양식 컨트롤에서 새 이벤트 전달 동작이 사용됩니다.</translation>
 <translation id="9148720248753722892">SHA-1 서명 인증서 허용 안함</translation>
 <translation id="9149678135092892302">버전 정보 보고 사용 안함</translation>
 <translation id="9150416707757015439">이 정책은 사용되지 않습니다. 대신 IncognitoModeAvailability를 사용하세요.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 9861ab5..5cd171035 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -508,6 +508,7 @@
       Opmerking: Gebruik bij meerdere servernamen een komma als scheidingsteken. Jokertekens (<ph name="WILDCARD_VALUE" />) zijn toegestaan.</translation>
 <translation id="1488724823347505879">Delen van Android-apps naar web-apps aanzetten</translation>
 <translation id="1494138678487405397">Hoog contrast op het inlogscherm uitzetten</translation>
+<translation id="1499129134689253257">Het nieuwe <ph name="OFFSET_PARENT" />-gedrag beheren</translation>
 <translation id="1501644502684303995">Online inloggen alleen afdwingen op het inlogscherm</translation>
 <translation id="1502843533062797703">Injectie van software van derden blokkeren</translation>
 <translation id="1503969899251962413">Als je het beleid instelt, kun je de <ph name="PLUGIN_VM_NAME" />-licentiecode voor dit apparaat opgeven.
@@ -2336,6 +2337,17 @@
 
       Als je het beleid niet instelt, laadt <ph name="PRODUCT_NAME" /> alle geïnstalleerde hosts voor systeemeigen berichten.</translation>
 <translation id="3211426942294667684">Instellingen voor inloggen bij browser</translation>
+<translation id="3217774577897351942">De <ph name="OFFSET_PARENT" /> API wordt gewijzigd in <ph name="PRODUCT_NAME" /> om te voldoen aan wijzigingen die zijn aangebracht in <ph name="FIREFOX_PRODUCT_NAME" /> en <ph name="SAFARI_PRODUCT_NAME" />. Met dit beleid wordt het oude gedrag hersteld tot M120.
+
+Het nieuwe gedrag kan tot gevolg hebben dat sommige websites die alleen voor <ph name="PRODUCT_NAME" /> werken en die <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> of <ph name="OFFSET_LEFT" /> gebruiken in combinatie met Shadow DOM, niet meer werken.
+
+Hier volgen enkele polyfills die het oude gedrag terughalen om te helpen bij de migratie: https://github.com/josepharhar/offsetparent-polyfills.
+
+Als je dit beleid toepast, wordt het nieuwe gedrag gebruikt.
+
+Als je dit beleid niet toepast, wordt het oude gedrag gebruikt.
+
+Als je dit beleid niet instelt, wordt het nieuwe gedrag gebruikt, net als bij de rest van de Chromium-gebruikers.</translation>
 <translation id="3219421230122020860">Incognitomodus beschikbaar</translation>
 <translation id="3220624000494482595">Als de kiosk-app een Android-app is, heeft deze geen controle over de <ph name="PRODUCT_OS_NAME" />-versie, zelfs niet als het beleid is ingesteld op <ph name="TRUE" /> (Waar).</translation>
 <translation id="3222088741899353813">Linkerknop is primair op het inlogscherm</translation>
@@ -2735,6 +2747,7 @@
 <translation id="3589193811812796052">Voorkomen dat WebAssembly-modules cross-origin worden verstuurd</translation>
 <translation id="3591527072193107424">Zet de functie Ondersteuning voor oudere browsers aan.</translation>
 <translation id="3591584750136265240">Het verificatiegedrag voor inloggen configureren</translation>
+<translation id="3593905652755912452">Het oude gedrag voor de verzending van gebeurtenissen voor uitgezette bedieningselementen op formulieren wordt gebruikt.</translation>
 <translation id="3596112486106491038">Opdrachtregeltoegang tot virtuele machines aanzetten</translation>
 <translation id="3603469950773500315">Zet <ph name="CORS" />-controlebeperkingen voor de nieuwe <ph name="CORS" />-implementatie aan, waardoor extensies geschikt gedrag kunnen behouden en <ph name="PRODUCT_NAME" /> toestemming heeft om opgegeven headers te sturen zonder <ph name="CORS" />-controle.
 
@@ -3034,6 +3047,7 @@
 <translation id="3891357445869647828">JavaScript aanzetten</translation>
 <translation id="3891769546914233112">'Pdf afdrukken als afbeelding' beschikbaar</translation>
 <translation id="3897218615484393758">Beperken hoelang een gebruiker die via SAML is geverifieerd offline kan inloggen op het vergrendelscherm</translation>
+<translation id="3897860452756794695">Het nieuwe offsetParent-gedrag wordt gebruikt.</translation>
 <translation id="3898345958122666461">NTLMv2 uitzetten</translation>
 <translation id="3898795800259311780">Screenshots toestaan of weigeren</translation>
 <translation id="3903313632842363082">Rapportage voor gebruikers van apparaat uitzetten</translation>
@@ -4054,6 +4068,7 @@
 <translation id="5025239932007658691">Als je het beleid toepast of niet instelt, stuurt <ph name="PRODUCT_NAME" /> af en toe query's naar een Google-server om een nauwkeurig tijdstempel op te halen.
 
       Als je het beleid niet toepast, stopt <ph name="PRODUCT_NAME" /> met het sturen van deze query's.</translation>
+<translation id="5033070732967197381">WebAuthn API-verzoeken toestaan op sites met niet-werkende TLS-certificaten.</translation>
 <translation id="5034504101537897433">Rapportage voor informatie over crashrapporten van apparaat aanzetten</translation>
 <translation id="5039110755072335605">Ondersteuning voor CORS-verzoekheaders zonder jokertekens</translation>
 <translation id="504116558738617678">Waarschuwingen voor weinig schijfruimte alleen tonen als het apparaat onbeheerd is of er slechts 1 gebruiker is</translation>
@@ -4792,6 +4807,7 @@
 
 Gebruikers kunnen deze instelling niet wijzigen.</translation>
 <translation id="5838452040629810808">Cursormarkering aanzetten</translation>
+<translation id="5842283830553218200">Standaard wordt het nieuwe gedrag voor de verzending van gebeurtenissen voor uitgezette bedieningselementen op formulieren gebruikt.</translation>
 <translation id="5848438019586925019">Het algoritme voor het genereren van sleutelparen.</translation>
 <translation id="5851248808417680865">Donker thema gebruiken</translation>
 <translation id="585270638818921943">Voorkomen dat de gebruiker Android-apps van niet-vertrouwde bronnen gebruikt</translation>
@@ -5272,6 +5288,7 @@
       Als je het beleid niet toepast of niet instelt, kunnen gebruikers kiezen of ze gebruikmaken van <ph name="CHROME_SYNC_NAME" />.
 
       Opmerking: Pas dit beleid niet toe als <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> aanstaat, want die functie heeft dezelfde functionaliteit aan de clientzijde. In dit geval staat de door Google gehoste synchronisatie helemaal uit.</translation>
+<translation id="6320935916601887506">Standaard wordt het nieuwe offsetParent-gedrag gebruikt.</translation>
 <translation id="6327643515544933974">Web-USB-instellingen</translation>
 <translation id="6330882599388782338">Toestaan dat sites toegang hebben tot sensoren</translation>
 <translation id="6331167725613770725">Dit beleid is beëindigd en wordt verwijderd in <ph name="PRODUCT_OS_NAME" />-versie 85. Gebruik in plaats daarvan <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
@@ -5408,6 +5425,7 @@
 <translation id="6464074037294098618">Automatisch invullen voor adressen aanzetten</translation>
 <translation id="6467613372414922590">Hosts voor native berichten op gebruikersniveau toestaan (geïnstalleerd zonder beheerdersrechten)</translation>
 <translation id="6473623140202114570">Configureer de lijst met domeinen waar Safe Browsing geen waarschuwingen activeert.</translation>
+<translation id="6474194795370862403">Het oude offsetParent-gedrag wordt gebruikt.</translation>
 <translation id="647645276885673708"><ph name="LACROS_NAME" /> aanzetten en instellen als primaire browser</translation>
 <translation id="647698599569353771">Sta toe dat Dichtbij delen wordt aangezet.</translation>
 <translation id="6477685422297715670">Groene achtergrondverlichting van toetsenbord</translation>
@@ -5594,6 +5612,7 @@
       - Als je dit beleid niet toepast, moeten beheerders dit laten weten aan eindgebruikers van het apparaat.</translation>
 <translation id="6609867253856597039">Gebruikerservaring voor uitgezette functies instellen</translation>
 <translation id="6614557704487944013">Toestaan dat gebruikers de <ph name="LACROS_NAME" />-browser gebruiken</translation>
+<translation id="661610294649586421">WebAuthn API-verzoeken niet toestaan op sites met niet-werkende TLS-certificaten.</translation>
 <translation id="6617589895942747919">Begintijd van het interval (inclusief).</translation>
 <translation id="6621830999036927230">Als je dit beleid instelt, gebruikt de host voor externe toegang deze URL om verificatietokens van clients voor externe toegang te valideren om zo verbindingen te accepteren. De functie wordt uitgezet als je deze leeg laat of niet instelt.
 
@@ -5894,6 +5913,9 @@
 <translation id="6907778402784621686">Niet-beveiligde content op deze sites blokkeren</translation>
 <translation id="6908640907898649429">Hiermee wordt de standaard zoekprovider ingesteld. Je kunt de standaard zoekprovider opgeven die de gebruiker gaat gebruiken, of je kunt ervoor kiezen de standaard zoekfunctie uit te zetten.</translation>
 <translation id="6913068954484253496"><ph name="PRODUCT_NAME" /> toestaan om verbinding te maken met Cast-apparaten op alle IP-adressen.</translation>
+<translation id="6915493311660114995">Als je dit beleid toepast, staat <ph name="PRODUCT_NAME" /> verzoeken voor webverificatie toe op websites met TLS-certificaten met fouten (dat wil zeggen, websites die niet als beveiligd worden beschouwd).
+
+Als je het beleid niet toepast of niet instelt, is het standaardgedrag van toepassing, waarbij dergelijke verzoeken worden geblokkeerd.</translation>
 <translation id="6919819553978815392">Als dit beleid is ingesteld op True of niet is ingesteld, zetten <ph name="PRODUCT_NAME" /> en<ph name="LACROS_NAME" /> gastlogins aan. Gastlogins zijn <ph name="PRODUCT_NAME" />-profielen waarbij alle vensters in de incognitomodus zijn.
 
       Als dit beleid is ingesteld op False, staan <ph name="PRODUCT_NAME" /> en <ph name="LACROS_NAME" /> niet toe dat er gastprofielen worden gestart.
@@ -6804,6 +6826,7 @@
 <translation id="782661371433719637">Geen sites toestemming geven om leestoegang tot bestanden of directory's te vragen via de File System API</translation>
 <translation id="7827127381981620448">Platform-app</translation>
 <translation id="7829436838673974723">Toestaan dat pagina's synchrone XHR-verzoeken sturen tijdens het sluiten van pagina's</translation>
+<translation id="782978857350824974">Verzoeken voor webverificatie toestaan op sites met niet-werkende TLS-certificaten.</translation>
 <translation id="7832225468415136704">Chrome Cleanup niet toestaan om het systeem periodiek te scannen, en handmatige scans uitzetten</translation>
 <translation id="7833148823006528332">Android-app-ID, bijvoorbeeld 'com.google.android.gm' voor Gmail</translation>
 <translation id="7835218570504220753">Automatisch klikken uitzetten</translation>
@@ -7198,6 +7221,7 @@
 <translation id="8250048892729838843">Dit beleid is beëindigd. Als je dit beleid toepast of niet instelt, kan het apparaat opties voor gedetailleerde rapportage krijgen.
       Als je het beleid niet toepast, kunnen ingeschreven apparaten geen opties voor gedetailleerde rapportage krijgen.</translation>
 <translation id="82530263956734297">Extensie-ID's die zijn vrijgesteld van de blokkeringslijst</translation>
+<translation id="8256006033157034334">Dit beleid is beëindigd en wordt niet ondersteund. Gebruik in plaats daarvan <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />.</translation>
 <translation id="8256688113167012935">Hiermee wordt de weergave van de accountnaam in <ph name="PRODUCT_OS_NAME" /> op het aanmeldscherm beheerd voor het bijbehorende lokale account van het apparaat.
 
       Als dit beleid is ingesteld, gebruikt het aanmeldscherm de opgegeven tekenreeks in de afbeeldinggebaseerde aanmeldkiezer voor het bijbehorende lokale account van het apparaat.
@@ -7402,17 +7426,12 @@
 <translation id="8417305981081876834">De maximumlengte van de pincode voor het vergrendelscherm instellen</translation>
 <translation id="841977920223099909">Waarschuwingstrigger voor wachtwoordbeveiliging</translation>
 <translation id="8420426128163801949">Gebruikers toestaan bluetooth aan of uit te zetten</translation>
+<translation id="8422658829373743789">Het nieuwe gedrag beheren voor de verzending van gebeurtenissen voor uitgezette bedieningselementen op formulieren</translation>
 <translation id="8422866312638683210">Als je het beleid instelt, probeert <ph name="PRODUCT_NAME" /> zichzelf aan te melden bij <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. De waarde van dit beleid is een token voor inschrijving die je kunt ophalen uit de <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.
 
       Zie https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744 voor meer informatie.</translation>
 <translation id="8424255554404582727">Standaard displayrotatie instellen, wordt telkens toegepast na opnieuw opstarten</translation>
 <translation id="8426231401662877819">Scherm 90 graden met de klok mee draaien</translation>
-<translation id="8426819027631706846">Zoals wordt beschreven in https://www.chromestatus.com/feature/5148698084376576, worden modulaire JavaScript-dialoogvensters die worden geactiveerd door <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> en <ph name="JS_PROMPT" />, geblokkeerd in <ph name="PRODUCT_NAME" /> als ze worden geactiveerd vanuit een subframe waarvan de oorsprong verschilt van de oorsprong van de hoofdframe.
-       Met dit beleid kun je die wijziging overschrijven.
-       Als je het beleid toepast of niet instelt, worden JavaScript-dialoogvensters geblokkeerd als ze afkomstig zijn van een subframe met een andere oorsprong.
-       Als je het beleid niet toepast, worden JavaScript-dialoogvensters niet geblokkeerd, zelfs niet als ze afkomstig zijn van een subframe met een andere oorsprong.
-
-       Dit beleid wordt verwijderd in <ph name="PRODUCT_NAME" />-versie 95.</translation>
 <translation id="8427466947904008809">Toestaan dat CRD WebAuthn API-verzoeken uitvoert die afkomstig zijn van een externe host.</translation>
 <translation id="8428295225823548121">Rapportage van geheugeninformatie van apparaat aanzetten</translation>
 <translation id="8428635849021776523">Android-rapporten uitzetten</translation>
@@ -7946,6 +7965,19 @@
 <translation id="8947415621777543415">Apparaatlocatie rapporteren</translation>
 <translation id="8948062138228904066">Toelatingslijst voor verificatieserver</translation>
 <translation id="8951350807133946005">Directory voor schijfcache instellen</translation>
+<translation id="8952611478149810182">De verzending van gebeurtenissen voor uitgezette bedieningselementen op formulieren wordt gewijzigd in Chromium om de compatibiliteit met andere browsers en de functionaliteit voor ontwikkelaars te verbeteren.
+
+Deze wijziging zorgt ervoor dat muisgebeurtenissen (MouseEvents) worden verstuurd voor uitgezette bedieningselementen op formulieren, behalve click, mouseup en mousedown. De nieuwe gebeurtenissen omvatten bijvoorbeeld mousemove, mouseenter en mouseleave.
+
+Door deze wijziging wordt ook het gebeurtenispad van click, mouseup en mousedown afgekapt als ze worden verstuurd naar onderliggende elementen van uitgezette bedieningselementen op formulieren, zodat ze niet worden verstuurd naar het uitgezette bedieningselement van het formulier of naar een van de bovenliggende entiteiten.
+
+Het nieuwe gedrag kan tot gevolg hebben dat sommige websites niet meer werken.
+
+Als je dit beleid toepast, wordt het nieuwe gedrag gebruikt.
+
+Als je dit beleid niet toepast, wordt het oude gedrag gebruikt.
+
+Als je dit beleid niet instelt, wordt het nieuwe gedrag gebruikt, net als bij de rest van de Chromium-gebruikers.</translation>
 <translation id="8955719471735800169">Bovenkant pagina</translation>
 <translation id="8956312248048980644">Staat origin-keyed agentclustering standaard toe.</translation>
 <translation id="8970205333161758602">De prompt <ph name="PRODUCT_FRAME_NAME" /> negeren</translation>
@@ -8131,6 +8163,7 @@
 <translation id="9135033364005346124">Proxy voor <ph name="CLOUD_PRINT_NAME" /> gebruiken</translation>
 <translation id="9136212796239682721">Ballon-UI voor downloaden uitzetten</translation>
 <translation id="9136399279941091445">Intervallen buiten gebruikstijd wanneer het gespecificeerde apparaatbeleid wordt vrijgegeven</translation>
+<translation id="9142561920976791097">Het nieuwe gedrag voor de verzending van gebeurtenissen voor uitgezette bedieningselementen op formulieren wordt gebruikt.</translation>
 <translation id="9148720248753722892">SHA-1-ondertekende certificaten niet toestaan</translation>
 <translation id="9149678135092892302">Rapportage van versiegegevens uitzetten</translation>
 <translation id="9150416707757015439">Dit beleid is verouderd. Gebruik in plaats hiervan IncognitoModeAvailability.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index b6788a3f..1d6188ac 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -506,6 +506,7 @@
       Observação: separe vários nomes de servidor usando vírgulas. Caracteres curinga (<ph name="WILDCARD_VALUE" />) são permitidos.</translation>
 <translation id="1488724823347505879">Permitir o compartilhamento de apps Android para apps da Web</translation>
 <translation id="1494138678487405397">Desativar o alto contraste na tela de login</translation>
+<translation id="1499129134689253257">Controlar o novo comportamento de <ph name="OFFSET_PARENT" /></translation>
 <translation id="1501644502684303995">Usar logins on-line apenas na tela de login</translation>
 <translation id="1502843533062797703">Ativar bloqueio de injeção de software de terceiros</translation>
 <translation id="1503969899251962413">A definição da política especifica a chave de licença da <ph name="PLUGIN_VM_NAME" /> para este dispositivo.
@@ -2376,6 +2377,17 @@
 
       Se a política for deixada sem definição, o <ph name="PRODUCT_NAME" /> carregará todos os hosts de mensagens nativas instalados.</translation>
 <translation id="3211426942294667684">Configurações de login no navegador</translation>
+<translation id="3217774577897351942">A API <ph name="OFFSET_PARENT" /> está sendo modificada no <ph name="PRODUCT_NAME" /> para obedecer às mudanças que foram feitas no <ph name="FIREFOX_PRODUCT_NAME" /> e no <ph name="SAFARI_PRODUCT_NAME" />. Esta política retorna o comportamento antigo até a versão M120.
+
+O novo comportamento pode causar falhas em alguns sites exclusivos do <ph name="PRODUCT_NAME" /> que usam <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> ou <ph name="OFFSET_LEFT" /> com o Shadow DOM.
+
+Aqui estão alguns polyfills que trazem de volta o comportamento antigo para ajudar na migração https://github.com/josepharhar/offsetparent-polyfills (link em inglês).
+
+Se a política for ativada, o novo comportamento vai ser usado.
+
+Se ela for desativada, o comportamento antigo será usado.
+
+Quando a política é deixada sem definição, o novo comportamento é usado, assim como acontece com os demais usuários do Chromium.</translation>
 <translation id="3219421230122020860">Modo de navegação anônima disponível</translation>
 <translation id="3220624000494482595">Se o aplicativo de quiosque for um app Android, ele não terá nenhum controle sobre a versão do <ph name="PRODUCT_OS_NAME" />, mesmo se esta política estiver definida como <ph name="TRUE" />.</translation>
 <translation id="3222088741899353813">Botão esquerdo como principal na tela de login</translation>
@@ -2776,6 +2788,7 @@
 <translation id="3589193811812796052">Impedir módulos WebAssembly de serem enviados em origem cruzada</translation>
 <translation id="3591527072193107424">Ativa o recurso "Suporte a navegadores legados".</translation>
 <translation id="3591584750136265240">Configura o comportamento de autenticação de login</translation>
+<translation id="3593905652755912452">O comportamento antigo para envio de eventos em controles de formulário desativados vai ser usado.</translation>
 <translation id="3596112486106491038">Ativar o acesso à linha de comando de máquinas virtuais</translation>
 <translation id="3603469950773500315">Ative as mitigações de verificação de <ph name="CORS" /> na nova implementação de <ph name="CORS" />, permitindo que as extensões mantenham um comportamento compatível e permitindo que o <ph name="PRODUCT_NAME" /> envie cabeçalhos especificados sem verificações de <ph name="CORS" />.
 
@@ -3075,6 +3088,7 @@
 <translation id="3891357445869647828">Ativar o JavaScript</translation>
 <translation id="3891769546914233112">Imprimir PDF como imagem disponível</translation>
 <translation id="3897218615484393758">Limitar o tempo em que um usuário autenticado via SAML pode fazer login off-line na tela de bloqueio</translation>
+<translation id="3897860452756794695">Um novo comportamento de offsetParent vai ser usado.</translation>
 <translation id="3898345958122666461">Desativar NTLMv2</translation>
 <translation id="3898795800259311780">Permitir ou negar captura de tela</translation>
 <translation id="3903313632842363082">Desativar relatórios sobre os usuários do dispositivo</translation>
@@ -4885,6 +4899,7 @@
 
       Os usuários não poderão mudar essa configuração.</translation>
 <translation id="5838452040629810808">Ativar destaque do cursor</translation>
+<translation id="5842283830553218200">O novo comportamento para envio de eventos em controles de formulário desativados vai ser usado por padrão.</translation>
 <translation id="5848438019586925019">O algoritmo para gerar pares de chaves.</translation>
 <translation id="5851248808417680865">Usar o tema escuro</translation>
 <translation id="585270638818921943">Impede o uso de apps Android de fontes não confiáveis</translation>
@@ -5379,6 +5394,7 @@
       Se a política for desativada ou deixada sem definição, os usuários poderão escolher se vão ou não usar a <ph name="CHROME_SYNC_NAME" />.
 
       Observação: não ative esta política quando a <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> estiver ativada, porque esse recurso usa a mesma funcionalidade do lado do cliente. Nesse caso, a sincronização hospedada pelo Google será completamente desativada.</translation>
+<translation id="6320935916601887506">O novo comportamento de offsetParent vai ser usado por padrão.</translation>
 <translation id="6327643515544933974">Configurações de USB na Web</translation>
 <translation id="6330882599388782338">Permite que os sites acessem sensores</translation>
 <translation id="6331167725613770725">Esta política está obsoleta e será removida na versão 85 do <ph name="PRODUCT_OS_NAME" />. Por isso, passe a usar <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
@@ -5516,6 +5532,7 @@
 <translation id="6464074037294098618">Ativa o Preenchimento automático de endereços</translation>
 <translation id="6467613372414922590">Permitir hosts de mensagens nativas no nível do usuário (instalados sem permissão do administrador)</translation>
 <translation id="6473623140202114570">Configure a lista de domínios em que a política Navegação segura não acionará avisos.</translation>
+<translation id="6474194795370862403">O comportamento de offsetParent antigo vai ser usado.</translation>
 <translation id="647645276885673708">Ativar o <ph name="LACROS_NAME" /> e defini-lo como o navegador principal</translation>
 <translation id="647698599569353771">Permitir a ativação do recurso "Compartilhar por proximidade"</translation>
 <translation id="6477685422297715670">Luz de fundo verde do teclado</translation>
@@ -7510,17 +7527,12 @@
 <translation id="8417305981081876834">Definir o tamanho máximo do PIN da tela de bloqueio</translation>
 <translation id="841977920223099909">Acionamento de aviso de proteção de senha</translation>
 <translation id="8420426128163801949">Permitir que os usuários ativem ou desativem o Bluetooth</translation>
+<translation id="8422658829373743789">Controlar o novo comportamento para envio de eventos em controles de formulário desativados</translation>
 <translation id="8422866312638683210">Se a política for definida, o <ph name="PRODUCT_NAME" /> tentará se registrar como <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. O valor desta política é um token de inscrição que pode ser recuperado pelo <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.
 
       Veja mais detalhes em https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
 <translation id="8424255554404582727">Definir rotação padrão da tela, reaplicada em cada reinicialização</translation>
 <translation id="8426231401662877819">Girar tela no sentido horário em 90 graus</translation>
-<translation id="8426819027631706846">Como descrito em https://www.chromestatus.com/feature/5148698084376576, as caixas de diálogo modais de JavaScript, acionadas por <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" />, e <ph name="JS_PROMPT" />, serão bloqueadas no <ph name="PRODUCT_NAME" /> se forem acionadas por um subframe com a origem diferente do frame de origem principal.
-       Esta política permite substituir essa mudança.
-       Se a política for definida como "Enabled" ou deixada sem definição, as caixas de diálogo de JavaScript acionadas por um subframe de origem diferente serão bloqueadas.
-       Se ela for definida como "Disabled", as caixas de diálogo de JavaScript acionadas por um subframe de origem diferente não serão bloqueadas.
-
-       Esta política será removida na versão 95 do <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8427466947904008809">Permitir que a Área de trabalho remota do Google Chrome execute solicitações de API do WebAuthn transmitidas por proxy de um host remoto.</translation>
 <translation id="8428295225823548121">Ativar relatórios de informações da memória do dispositivo</translation>
 <translation id="8428635849021776523">Desativar os relatórios do Android</translation>
@@ -8062,6 +8074,19 @@
 <translation id="8947415621777543415">Informar a localização do dispositivo</translation>
 <translation id="8948062138228904066">Lista de permissões do servidor de autenticação</translation>
 <translation id="8951350807133946005">Definir o diretório de cache de disco</translation>
+<translation id="8952611478149810182">O envio de eventos em controles de formulário desativados está sendo modificado no Chromium para melhorar a compatibilidade com outros navegadores e a experiência do desenvolvedor.
+
+Essa mudança faz com que os MouseEvents sejam enviados em elementos de controle de formulário desativados, exceto cliques, mouseup e mousedown. Os novos eventos incluem mousemove, mouseenter e mouseleave, por exemplo.
+
+Essa mudança também trunca o caminho do evento de clique, mouseup e mousedown quando eles são enviados em filhos de controles de formulário desativados. Portanto, eles não são enviados nesses controles ou em qualquer um dos ancestrais.
+
+O novo comportamento pode causar falhas em alguns sites.
+
+Se esta política for ativada, o novo comportamento vai ser usado.
+
+Se ela for desativada, o comportamento antigo será usado.
+
+Quando a política é deixada sem definição, o novo comportamento é usado, assim como acontece com os demais usuários do Chromium.</translation>
 <translation id="8955719471735800169">Voltar ao início</translation>
 <translation id="8956312248048980644">Permite o clustering do agente com origin-key por padrão.</translation>
 <translation id="8970205333161758602">Remover a solicitação de recusa do <ph name="PRODUCT_FRAME_NAME" /></translation>
@@ -8247,6 +8272,7 @@
 <translation id="9135033364005346124">Ativar proxy do <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">Desativar a IU de download em balão</translation>
 <translation id="9136399279941091445">Intervalos de horas de inatividade quando as políticas do dispositivo específicas são lançadas</translation>
+<translation id="9142561920976791097">O novo comportamento para envio de eventos em controles de formulário desativados vai ser usado.</translation>
 <translation id="9148720248753722892">Não permitir certificados assinados SHA-1</translation>
 <translation id="9149678135092892302">Desativar relatórios sobre informações de versão</translation>
 <translation id="9150416707757015439">Esta política é obsoleta. Utilize IncognitoModeAvailability em seu lugar, que ativa o modo de navegação anônima em <ph name="PRODUCT_NAME" />. Caso esta configuração seja ativada ou não configurada, os usuários podem abrir páginas da Web no modo de navegação anônima. Se essa configuração for desativada, os usuários não podem abrir páginas da Web usando o modo de navegação anônima. Se esta política for deixada sem definição, esta opção será ativada e o usuário será capaz de usar o modo de navegação anônima.</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 060d87b1..0d2e18a3 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -505,6 +505,7 @@
       Примечание. Названия серверов нужно разделять запятыми. Допустимы подстановочные знаки (<ph name="WILDCARD_VALUE" />).</translation>
 <translation id="1488724823347505879">Включить отправку из приложений для Android в веб-приложения</translation>
 <translation id="1494138678487405397">Отключить режим высокой контрастности на экране входа</translation>
+<translation id="1499129134689253257">Управление новым поведением свойства <ph name="OFFSET_PARENT" /></translation>
 <translation id="1501644502684303995">Требовать выполнять вход онлайн только на экране входа</translation>
 <translation id="1502843533062797703">Запретить ПО независимых производителей передавать код</translation>
 <translation id="1503969899251962413">Позволяет указать лицензионный ключ <ph name="PLUGIN_VM_NAME" /> для этого устройства.
@@ -2366,6 +2367,17 @@
 
       Если это правило не настроено, <ph name="PRODUCT_NAME" /> загружает все установленные хосты обмена сообщениями с оригинальными приложениями.</translation>
 <translation id="3211426942294667684">Настройки входа в браузере</translation>
+<translation id="3217774577897351942">Мы обновляем <ph name="OFFSET_PARENT" /> API в <ph name="PRODUCT_NAME" />, чтобы он соответствовал изменениям в <ph name="FIREFOX_PRODUCT_NAME" /> и <ph name="SAFARI_PRODUCT_NAME" />. Это правило возвращает старый вариант поведения, который использовался до версии M120.
+
+Новое поведение может привести к неправильной работе сайтов, созданных специально для <ph name="PRODUCT_NAME" />, если они используют свойство <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> или <ph name="OFFSET_LEFT" /> совместно с Shadow DOM.
+
+Вот некоторые полифилы, возвращающие старое поведение: https://github.com/josepharhar/offsetparent-polyfills. Их можно использовать на переходном этапе.
+
+Если правило включено, будет использоваться новое поведение.
+
+Если правило отключено, будет использоваться старое поведение.
+
+Если правило не настроено, будет использоваться новое поведение, как и для всех остальных пользователей Chromium.</translation>
 <translation id="3219421230122020860">Режим инкогнито доступен</translation>
 <translation id="3220624000494482595">Если киоск-приложение является приложением Android, оно не сможет управлять версией <ph name="PRODUCT_OS_NAME" />, даже если для правила задано значение <ph name="TRUE" />.</translation>
 <translation id="3222088741899353813">Сделать основной левую кнопку мыши на экране входа</translation>
@@ -2770,6 +2782,7 @@
 <translation id="3589193811812796052">Запретить передачу модулей WebAssembly между разными источниками</translation>
 <translation id="3591527072193107424">Включить функцию "Поддержка альтернативного браузера".</translation>
 <translation id="3591584750136265240">Настройка способа аутентификации</translation>
+<translation id="3593905652755912452">Для отключенных элементов управления формой будет использоваться старое поведение диспетчеризации событий</translation>
 <translation id="3596112486106491038">Разрешить доступ к командной строке виртуальной машины</translation>
 <translation id="3603469950773500315">Это правило позволяет смягчить проверки <ph name="CORS" /> в новой реализации <ph name="CORS" />, благодаря чему расширения продолжают работать в совместимом режиме, а <ph name="PRODUCT_NAME" /> может отправлять указанные заголовки без проверок <ph name="CORS" />.
 
@@ -3070,6 +3083,7 @@
 <translation id="3891357445869647828">Включить JavaScript</translation>
 <translation id="3891769546914233112">Наличие параметра "Печатать как изображение" для PDF</translation>
 <translation id="3897218615484393758">Ограничить время, на протяжении которого пользователи, выполнившие аутентификацию по протоколу SAML, могут входить в аккаунт офлайн на заблокированном экране</translation>
+<translation id="3897860452756794695">Будет использоваться новое поведение свойства offsetParent</translation>
 <translation id="3898345958122666461">Отключить NTLMv2</translation>
 <translation id="3898795800259311780">Разрешить или запретить показ экрана</translation>
 <translation id="3903313632842363082">Отключить отправку данных о пользователях устройства</translation>
@@ -4858,6 +4872,7 @@
 
       Пользователи не могут изменить эту настройку.</translation>
 <translation id="5838452040629810808">Включить подсветку указателя мыши</translation>
+<translation id="5842283830553218200">Для отключенных элементов управления формой по умолчанию будет использоваться новое поведение диспетчеризации событий</translation>
 <translation id="5848438019586925019">Алгоритм генерации пары ключей.</translation>
 <translation id="5851248808417680865">Использовать тёмную тему</translation>
 <translation id="585270638818921943">Запретить использование приложений для Android из ненадежных источников</translation>
@@ -5352,6 +5367,7 @@
       Если правило отключено или не настроено, пользователи могут самостоятельно решать, использовать ли им сервис "<ph name="CHROME_SYNC_NAME" />".
 
       Примечание. Не включайте это правило, когда включено правило <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />, так как оно использует те же клиентские функции. В этом случае синхронизация через сервисы, размещенные в Google, полностью отключается.</translation>
+<translation id="6320935916601887506">Новое поведение свойства offsetParent будет использоваться по умолчанию</translation>
 <translation id="6327643515544933974">Настройки использования WebUSB</translation>
 <translation id="6330882599388782338">Разрешить сайтам доступ к датчикам</translation>
 <translation id="6331167725613770725">Правило больше не поддерживается и будет удалено из <ph name="PRODUCT_OS_NAME" /> 85. Вместо него используйте следующее: <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
@@ -5489,6 +5505,7 @@
 <translation id="6464074037294098618">Включить автозаполнение адресов</translation>
 <translation id="6467613372414922590">Разрешить установку хостов обмена сообщениями с оригинальными приложениями на уровне пользователей (без разрешения администратора)</translation>
 <translation id="6473623140202114570">Настроить список доменов, в которых Безопасный просмотр не будет показывать уведомления об угрозах.</translation>
+<translation id="6474194795370862403">Будет использоваться старое поведение свойства offsetParent</translation>
 <translation id="647645276885673708">Включить браузер <ph name="LACROS_NAME" /> и сделать его основным</translation>
 <translation id="647698599569353771">Разрешить включение функции "Обмен с окружением"</translation>
 <translation id="6477685422297715670">Зеленая подсветка клавиатуры</translation>
@@ -7487,17 +7504,12 @@
 <translation id="8417305981081876834">Установить максимальную длину PIN-кода для разблокировки экрана</translation>
 <translation id="841977920223099909">Триггер, при котором будет получено предупреждение от защиты паролем</translation>
 <translation id="8420426128163801949">Разрешить пользователям включать и отключать Bluetooth</translation>
+<translation id="8422658829373743789">Управление новым поведением диспетчеризации событий для отключенных элементов управления формой</translation>
 <translation id="8422866312638683210">Когда правило настроено, браузер <ph name="PRODUCT_NAME" /> пытается зарегистрироваться, используя <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. В качестве значения применяется токен регистрации, который можно получить через <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.
 
       Подробнее: https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
 <translation id="8424255554404582727">Поворот изображения на экране по умолчанию (применяется при каждой перезагрузке)</translation>
 <translation id="8426231401662877819">Повернуть экран на 90 градусов по часовой стрелке</translation>
-<translation id="8426819027631706846">Согласно https://www.chromestatus.com/feature/5148698084376576, <ph name="PRODUCT_NAME" /> заблокирует модальные диалоговые окна JavaScript, включенные <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> и <ph name="JS_PROMPT" />, если эти окна запущены субфреймом, не имеющим отношения к главному фрейму.
-       Это правило позволяет изменить такое поведение.
-       Если правило включено или не настроено, диалоговые окна JavaScript, запущенные из другого субфрейма, будут блокироваться.
-       Если правило отключено, блокировка диалоговых окон JavaScript, запущенных из другого субфрейма, не выполняется.
-
-       Это правило будет удалено в <ph name="PRODUCT_NAME" /> 95.</translation>
 <translation id="8427466947904008809">Разрешить Удаленному рабочему столу Chrome выполнять запросы к WebAuthn API из удаленных хостов.</translation>
 <translation id="8428295225823548121">Включить отправку данных о памяти устройства</translation>
 <translation id="8428635849021776523">Отключить создание отчетов о статусе Android</translation>
@@ -8042,6 +8054,19 @@
 <translation id="8947415621777543415">Сообщить местоположение устройства</translation>
 <translation id="8948062138228904066">Список разрешенных серверов для аутентификации</translation>
 <translation id="8951350807133946005">Установка каталога кеша на диске</translation>
+<translation id="8952611478149810182">В целях улучшения совместимости с другими браузерами и облегчения разработки в Chromium будут внесены изменения в отношении диспетчеризации событий для отключенных элементов управления формой.
+
+Теперь события MouseEvents, за исключением click, mouseup и mousedown, будут обрабатываться для отключенных элементов управления формой. Обновление затронет, в частности, такие события, как mousemove, mouseenter и mouseleave.
+
+Это изменение также сократит путь событий click, mouseup и mousedown, если они были созданы дочерними объектами отключенных элементов управления формой. Так они не будут обрабатываться отключенными элементами управления формой и их предками.
+
+Новое поведение может привести к неправильной работе некоторых сайтов.
+
+Если правило включено, будет использоваться новое поведение.
+
+Если правило отключено, будет использоваться старое поведение.
+
+Если правило не настроено, будет использоваться новое поведение, как и для всех остальных пользователей Chromium.</translation>
 <translation id="8955719471735800169">В начало</translation>
 <translation id="8956312248048980644">Разрешает кластеризацию агента с ключом источника</translation>
 <translation id="8970205333161758602">Скрытие подсказки <ph name="PRODUCT_FRAME_NAME" /></translation>
@@ -8227,6 +8252,7 @@
 <translation id="9135033364005346124">Включить прокси-сервер <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">Отключить всплывающую подсказку о скачиваемых файлах</translation>
 <translation id="9136399279941091445">Время, когда не действуют правила, заданные для устройства</translation>
+<translation id="9142561920976791097">Для отключенных элементов управления формой будет использоваться новое поведение диспетчеризации событий</translation>
 <translation id="9148720248753722892">Запретить сертификаты с подписью SHA-1</translation>
 <translation id="9149678135092892302">Не сообщать информацию о версиях</translation>
 <translation id="9150416707757015439">Это правило устарело, используйте вместо него правило IncognitoModeAvailability, активирующее режим инкогнито в <ph name="PRODUCT_NAME" />. Если оно включено или не настроено, просмотр веб-страниц в режиме инкогнито возможен, а если это правило отключено, режим инкогнито недоступен.</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 5e5b7dac..4e90760 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -508,6 +508,7 @@
       หมายเหตุ: คั่นชื่อเซิร์ฟเวอร์หลายรายการด้วยเครื่องหมายจุลภาค ใช้ไวลด์การ์ด (<ph name="WILDCARD_VALUE" />) ได้</translation>
 <translation id="1488724823347505879">เปิดใช้การแชร์จากแอป Android ไปยังเว็บแอป</translation>
 <translation id="1494138678487405397">ปิดใช้คอนทราสต์สูงในหน้าจอการเข้าสู่ระบบ</translation>
+<translation id="1499129134689253257">ควบคุมลักษณะการทํางานแบบใหม่ของ <ph name="OFFSET_PARENT" /></translation>
 <translation id="1501644502684303995">บังคับใช้การเข้าสู่ระบบออนไลน์ในหน้าจอล็อกเท่านั้น</translation>
 <translation id="1502843533062797703">เปิดใช้การบล็อกการแทรกซอฟต์แวร์ของบุคคลที่สาม</translation>
 <translation id="1503969899251962413">การตั้งค่านโยบายจะระบุรหัสสัญญาอนุญาต <ph name="PLUGIN_VM_NAME" /> สำหรับอุปกรณ์นี้
@@ -2338,6 +2339,17 @@
 
       การไม่ตั้งค่านโยบายจะทำให้ <ph name="PRODUCT_NAME" /> โหลดโฮสต์การรับส่งข้อความดั้งเดิมที่ติดตั้งไว้ทั้งหมด</translation>
 <translation id="3211426942294667684">การตั้งค่าการลงชื่อเข้าใช้เบราว์เซอร์</translation>
+<translation id="3217774577897351942">จะมีการเปลี่ยนแปลง <ph name="OFFSET_PARENT" /> API ใน <ph name="PRODUCT_NAME" /> เพื่อให้สอดคล้องกับการเปลี่ยนแปลงที่เกิดขึ้นใน <ph name="FIREFOX_PRODUCT_NAME" /> และ <ph name="SAFARI_PRODUCT_NAME" /> นโยบายนี้จะนำลักษณะการทํางานแบบเก่ากลับมาจนถึงเวอร์ชัน M120
+
+ลักษณะการทํางานแบบใหม่นี้อาจทําให้บางเว็บไซต์ (ซึ่งใช้แค่ "<ph name="PRODUCT_NAME" />" อย่างเดียว) ที่ใช้ <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> หรือ <ph name="OFFSET_LEFT" /> ร่วมกับ Shadow DOM เกิดความเสียหายได้
+
+โพลีฟิลล์บางส่วนที่นําลักษณะการทํางานแบบเก่ากลับมาเพื่อช่วยในการย้ายข้อมูลมีดังนี้ https://github.com/josepharhar/offsetparent-polyfills
+
+หากเปิดใช้นโยบายนี้ ระบบจะใช้ลักษณะการทำงานแบบใหม่
+
+หากปิดใช้นโยบายนี้ ระบบจะใช้ลักษณะการทํางานแบบเก่า
+
+หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะใช้ลักษณะการทํางานแบบใหม่เช่นเดียวกับผู้ใช้ Chromium ที่เหลือ</translation>
 <translation id="3219421230122020860">โหมดไม่ระบุตัวตนพร้อมใช้งาน</translation>
 <translation id="3220624000494482595">หากแอปคีออสก์เป็นแอป Android แอปจะไม่มีสิทธิ์ควบคุมเวอร์ชัน <ph name="PRODUCT_OS_NAME" /> แม้ว่าจะตั้งนโยบายนี้เป็น <ph name="TRUE" /> ก็ตาม</translation>
 <translation id="3222088741899353813">ปุ่มซ้ายคือปุ่มหลักในหน้าจอการเข้าสู่ระบบ</translation>
@@ -2736,6 +2748,7 @@
 <translation id="3589193811812796052">ป้องกันไม่ให้ส่งโมดูล WebAssembly แบบข้ามต้นทาง</translation>
 <translation id="3591527072193107424">เปิดใช้ฟีเจอร์การรองรับเบราว์เซอร์เวอร์ชันเก่า</translation>
 <translation id="3591584750136265240">กำหนดค่าลักษณะการตรวจสอบสิทธิ์ของการเข้าสู่ระบบ</translation>
+<translation id="3593905652755912452">ระบบจะใช้การส่งเหตุการณ์แบบเก่าในลักษณะการทํางานของตัวควบคุมแบบฟอร์มที่ปิดใช้</translation>
 <translation id="3596112486106491038">เปิดใช้การเข้าถึงบรรทัดคำสั่งของเครื่องเสมือน</translation>
 <translation id="3603469950773500315">เปิดใช้การลดการตรวจสอบ <ph name="CORS" /> ในการนำ <ph name="CORS" /> ใหม่ไปใช้ เพื่อให้ส่วนขยายยังคงทำงานร่วมกันได้ และให้ <ph name="PRODUCT_NAME" /> ส่งส่วนหัวที่ระบุโดยไม่ต้องตรวจสอบ <ph name="CORS" />
 
@@ -3035,6 +3048,7 @@
 <translation id="3891357445869647828">เปิดใช้งาน JavaScript</translation>
 <translation id="3891769546914233112">มีตัวเลือกในการพิมพ์ PDF เป็นรูปภาพ</translation>
 <translation id="3897218615484393758">จำกัดเวลาที่ผู้ใช้ซึ่งตรวจสอบสิทธิ์ผ่าน SAML จะเข้าสู่ระบบแบบออฟไลน์ได้ในหน้าจอล็อก</translation>
+<translation id="3897860452756794695">ระบบจะใช้ลักษณะการทํางานแบบใหม่ของ offsetParent</translation>
 <translation id="3898345958122666461">ปิด NTLMv2</translation>
 <translation id="3898795800259311780">อนุญาตหรือปฏิเสธการจับภาพหน้าจอ</translation>
 <translation id="3903313632842363082">ปิดใช้การรายงานผู้ใช้อุปกรณ์</translation>
@@ -4057,6 +4071,7 @@
 <translation id="5025239932007658691">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้ <ph name="PRODUCT_NAME" /> ส่งการค้นหาไปยังเซิร์ฟเวอร์ของ Google เป็นครั้งคราวเพื่อเรียกการประทับเวลาที่ถูกต้อง
 
       การตั้งค่านโยบายเป็น "ปิดใช้" จะหยุด <ph name="PRODUCT_NAME" /> ไม่ให้ส่งการค้นหาเหล่านี้</translation>
+<translation id="5033070732967197381">อนุญาตคำขอ WebAuthn API ในเว็บไซต์ที่มีใบรับรอง TLS ไม่ถูกต้อง</translation>
 <translation id="5034504101537897433">เปิดใช้การรายงานรายละเอียดข้อขัดข้องของอุปกรณ์</translation>
 <translation id="5039110755072335605">การรองรับส่วนหัวของคำขอที่ไม่มีไวลด์การ์ดสำหรับ CORS</translation>
 <translation id="504116558738617678">แสดงคำเตือนพื้นที่ในดิสก์เหลือน้อยเฉพาะในกรณีที่อุปกรณ์ไม่มีการจัดการหรือมีผู้ใช้เพียงคนเดียว</translation>
@@ -4793,6 +4808,7 @@
 
       ผู้ใช้จะเปลี่ยนการตั้งค่านี้ไม่ได้</translation>
 <translation id="5838452040629810808">เปิดใช้การไฮไลต์เคอร์เซอร์</translation>
+<translation id="5842283830553218200">โดยค่าเริ่มต้น ระบบจะใช้การส่งเหตุการณ์แบบใหม่ในลักษณะการทํางานของตัวควบคุมแบบฟอร์มที่ปิดใช้</translation>
 <translation id="5848438019586925019">อัลกอริทึมสำหรับการสร้างคู่คีย์</translation>
 <translation id="5851248808417680865">ใช้ธีมมืด</translation>
 <translation id="585270638818921943">ป้องกันไม่ให้ผู้ใช้ใช้แอป Android จากแหล่งที่มาที่ไม่น่าเชื่อถือ</translation>
@@ -5275,6 +5291,7 @@
       หากตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่า ผู้ใช้จะเลือกได้ว่าจะใช้<ph name="CHROME_SYNC_NAME" /> หรือไม่
 
       หมายเหตุ: อย่าเปิดใช้นโยบายนี้เมื่อเปิดใช้ <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> อยู่ เนื่องจากฟีเจอร์ดังกล่าวมีฟังก์ชันการทำงานฝั่งไคลเอ็นต์เหมือนกัน การซิงค์ที่โฮสต์ไว้ใน Google จะปิดโดยสมบูรณ์ในกรณีนี้</translation>
+<translation id="6320935916601887506">ระบบจะใช้ลักษณะการทํางานแบบใหม่ของ offsetParent โดยค่าเริ่มต้น</translation>
 <translation id="6327643515544933974">การตั้งค่า USB ของเว็บ</translation>
 <translation id="6330882599388782338">อนุญาตให้เว็บไซต์เข้าถึงเซ็นเซอร์</translation>
 <translation id="6331167725613770725">โปรดทราบว่าจะมีการเลิกใช้งานและนำนโยบายนี้ออกใน <ph name="PRODUCT_OS_NAME" /> เวอร์ชัน 85 โปรดใช้ <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> แทน
@@ -5411,6 +5428,7 @@
 <translation id="6464074037294098618">เปิดใช้ฟีเจอร์ป้อนข้อความอัตโนมัติสำหรับที่อยู่</translation>
 <translation id="6467613372414922590">อนุญาตให้ใช้โฮสต์การรับส่งข้อความดั้งเดิมระดับผู้ใช้ (ติดตั้งโดยไม่มีสิทธิ์ของผู้ดูแลระบบ)</translation>
 <translation id="6473623140202114570">กำหนดค่ารายการโดเมนที่ Safe Browsing จะไม่เรียกให้คำเตือนแสดง</translation>
+<translation id="6474194795370862403">ระบบจะใช้ลักษณะการทํางานแบบเก่าของ offsetParent</translation>
 <translation id="647645276885673708">เปิดใช้ <ph name="LACROS_NAME" /> และกำหนดให้เป็นเบราว์เซอร์หลัก</translation>
 <translation id="647698599569353771">อนุญาตให้เปิดใช้การแชร์ใกล้เคียง</translation>
 <translation id="6477685422297715670">ไฟแบ็กไลต์ของแป้นพิมพ์เป็นสีเขียว</translation>
@@ -5597,6 +5615,7 @@
       - หากตั้งค่านโยบายนี้เป็น "ปิดใช้" ผู้ดูแลระบบต้องแจ้งข้อมูลนี้กับผู้ใช้ปลายทางของอุปกรณ์</translation>
 <translation id="6609867253856597039">ตั้งค่าประสบการณ์ของผู้ใช้สำหรับฟีเจอร์ที่ปิดใช้</translation>
 <translation id="6614557704487944013">อนุญาตให้ผู้ใช้สามารถใช้เบราว์เซอร์ <ph name="LACROS_NAME" /> ได้</translation>
+<translation id="661610294649586421">ไม่อนุญาตคำขอ WebAuthn API ในเว็บไซต์ที่มีใบรับรอง TLS ไม่ถูกต้อง</translation>
 <translation id="6617589895942747919">เวลาเริ่มต้นของระยะเวลา (รวมวันที่เริ่มต้น)</translation>
 <translation id="6621830999036927230">การตั้งค่านโยบายจะทำให้โฮสต์การเข้าถึงระยะไกลใช้ URL นี้ในการตรวจสอบโทเค็นการตรวจสอบสิทธิ์จากไคลเอ็นต์การเข้าถึงระยะไกลเพื่อยอมรับการเชื่อมต่อ หากปล่อยว่างไว้หรือไม่ได้ตั้งค่า ระบบจะปิดใช้ฟีเจอร์นี้
 
@@ -5899,6 +5918,9 @@
 <translation id="6907778402784621686">บล็อกเนื้อหาที่ไม่ปลอดภัยในเว็บไซต์เหล่านี้</translation>
 <translation id="6908640907898649429">กำหนดค่าผู้ให้บริการการค้นหาเริ่มต้น คุณสามารถระบุผู้ให้บริการการค้นหาเริ่มต้นที่ผู้ใช้จะใช้หรือเลือกปิดใช้งานการค้นหาเริ่มต้น</translation>
 <translation id="6913068954484253496">อนุญาตให้ <ph name="PRODUCT_NAME" /> เชื่อมต่อกับอุปกรณ์แคสต์ในที่อยู่ IP ทั้งหมด</translation>
+<translation id="6915493311660114995">หากตั้งค่าเป็นเปิดใช้ "<ph name="PRODUCT_NAME" />" จะอนุญาตคำขอการตรวจสอบสิทธิ์ผ่านเว็บในเว็บไซต์ที่มีใบรับรอง TLS ว่ามีข้อผิดพลาด (เช่น เว็บไซต์ที่ถือว่าไม่ปลอดภัย)
+
+หากตั้งค่านโยบายเป็นปิดใช้ หรือไม่ได้ตั้งค่า ระบบจะใช้ลักษณะการทำงานเริ่มต้นของการบล็อกคำขอดังกล่าว</translation>
 <translation id="6919819553978815392">หากตั้งค่านโยบายนี้เป็น "จริง" หรือไม่ได้กำหนดค่า <ph name="PRODUCT_NAME" /> และ <ph name="LACROS_NAME" /> จะเปิดใช้การเข้าสู่ระบบแบบผู้มาเยือน การเข้าสู่ระบบแบบผู้มาเยือนคือโปรไฟล์ <ph name="PRODUCT_NAME" /> ที่หน้าต่างทั้งหมดจะอยู่ในโหมดไม่ระบุตัวตน
 
       หากตั้งค่านโยบายนี้เป็น "เท็จ" <ph name="PRODUCT_NAME" /> และ <ph name="LACROS_NAME" /> จะไม่อนุญาตให้เริ่มโปรไฟล์ผู้มาเยือน
@@ -6808,6 +6830,7 @@
 <translation id="782661371433719637">ไม่อนุญาตให้เว็บไซต์ใดๆ ขอสิทธิ์การเข้าถึงในการอ่านไฟล์และไดเรกทอรีผ่าน File System API</translation>
 <translation id="7827127381981620448">แอปแพลตฟอร์ม</translation>
 <translation id="7829436838673974723">อนุญาตให้หน้าเว็บส่งคําขอ XHR พร้อมกันในระหว่างการปิดหน้าเว็บ</translation>
+<translation id="782978857350824974">อนุญาตคำขอการตรวจสอบสิทธิ์ผ่านเว็บในเว็บไซต์ที่มีใบรับรอง TLS ไม่ถูกต้อง</translation>
 <translation id="7832225468415136704">ป้องกันไม่ให้ฟีเจอร์ทำความสะอาด Chrome สแกนระบบเป็นระยะและปิดใช้การสแกนด้วยตนเอง</translation>
 <translation id="7833148823006528332">ตัวระบุแอป Android เช่น "com.google.android.gm" สำหรับ Gmail</translation>
 <translation id="7835218570504220753">ปิดใช้การคลิกอัตโนมัติ</translation>
@@ -7398,17 +7421,12 @@
 <translation id="8417305981081876834">ตั้งค่าความยาวสูงสุดของ PIN หน้าจอล็อก</translation>
 <translation id="841977920223099909">ทริกเกอร์การแจ้งเตือนการป้องกันด้วยรหัสผ่าน</translation>
 <translation id="8420426128163801949">อนุญาตให้ผู้ใช้เปิดหรือปิดบลูทูธ</translation>
+<translation id="8422658829373743789">ควบคุมลักษณะการทํางานแบบใหม่สําหรับการส่งเหตุการณ์ในตัวควบคุมแบบฟอร์มที่ปิดใช้</translation>
 <translation id="8422866312638683210">การตั้งค่านโยบายจะทำให้ <ph name="PRODUCT_NAME" /> พยายามลงทะเบียนตนเองกับ <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> ค่าของนโยบายนี้จะเป็นโทเค็นการลงทะเบียนที่คุณเรียกมาจาก <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />
 
       ดูรายละเอียดที่ https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744</translation>
 <translation id="8424255554404582727">ตั้งค่าการหมุนหน้าจอเริ่มต้น ใช้การตั้งค่านี้ซ้ำทุกครั้งที่เริ่มระบบใหม่</translation>
 <translation id="8426231401662877819">หมุนหน้าจอตามเข็มนาฬิกา 90 องศา</translation>
-<translation id="8426819027631706846">ตามที่อธิบายไว้ใน https://www.chromestatus.com/feature/5148698084376576 กล่องโต้ตอบในโหมด JavaScript ที่เกิดจาก <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> และ <ph name="JS_PROMPT" /> จะถูกบล็อกใน <ph name="PRODUCT_NAME" /> เมื่อมีการเรียกใช้จากเฟรมย่อยที่มีต้นทางต่างจากต้นทางของเฟรมหลัก
-       นโยบายนี้อนุญาตให้ลบล้างการเปลี่ยนแปลงดังกล่าว
-       หากตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่า ระบบจะบล็อกกล่องโต้ตอบ JavaScript ซึ่งเกิดจากเฟรมย่อยที่เป็นต้นทางเฟรมอื่น
-       หากตั้งค่านโยบายเป็น "ปิดใช้" ระบบจะไม่บล็อกกล่องโต้ตอบ JavaScript ซึ่งเกิดจากเฟรมย่อยที่เป็นต้นทางเฟรมอื่น
-
-       เราจะนำนโยบายนี้ออกใน <ph name="PRODUCT_NAME" /> เวอร์ชัน 95</translation>
 <translation id="8427466947904008809">อนุญาตให้ CRD เรียกใช้คำขอ WebAuthn API ที่ทำพร็อกซีจากโฮสต์ระยะไกล</translation>
 <translation id="8428295225823548121">เปิดใช้การรายงานข้อมูลหน่วยความจำของอุปกรณ์</translation>
 <translation id="8428635849021776523">ปิดใช้การรายงานของ Android</translation>
@@ -7948,6 +7966,19 @@
 <translation id="8947415621777543415">รายงานตำแหน่งอุปกรณ์</translation>
 <translation id="8948062138228904066">รายการที่อนุญาตสำหรับเซิร์ฟเวอร์การตรวจสอบสิทธิ์</translation>
 <translation id="8951350807133946005">ตั้งค่าไดเรกทอรีสำหรับแคชของดิสก์</translation>
+<translation id="8952611478149810182">มีการเปลี่ยนแปลงการส่งเหตุการณ์ในตัวควบคุมแบบฟอร์มที่ปิดใช้ใน Chromium เพื่อปรับปรุงความเข้ากันได้กับเบราว์เซอร์อื่นๆ รวมถึงปรับปรุงการใช้งานสําหรับนักพัฒนาซอฟต์แวร์
+
+การเปลี่ยนแปลงนี้ทําให้มีการส่งเหตุการณ์ MouseEvents ไปยังองค์ประกอบของตัวควบคุมแบบฟอร์มที่ปิดใช้ ยกเว้นเหตุการณ์ click, mouseup และ mousedown โดยเหตุการณ์ใหม่จะรวมถึง mousemove, mouseenter และ mouseleave เป็นต้น
+
+การเปลี่ยนแปลงนี้ยังจะตัดทอนเส้นทางของเหตุการณ์ click, mouseup และ mousedown เมื่อมีการส่งไปยังองค์ประกอบย่อยของตัวควบคุมแบบฟอร์มที่ปิดใช้ ทั้งนี้เพื่อไม่ให้มีการส่งเหตุการณ์ดังกล่าวไปยังตัวควบคุมแบบฟอร์มที่ปิดใช้อยู่ หรือไปยังตัวควบคุมขององค์ประกอบระดับบนขององค์ประกอบย่อยนั้นๆ
+
+ลักษณะการทํางานแบบใหม่นี้อาจทำให้บางเว็บไซต์เสียหาย
+
+หากเปิดใช้นโยบายนี้ ระบบจะใช้ลักษณะการทํางานแบบใหม่
+
+หากปิดใช้นโยบายนี้ ระบบจะใช้ลักษณะการทํางานแบบเก่า
+
+หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะใช้ลักษณะการทํางานแบบใหม่เช่นเดียวกับผู้ใช้ Chromium ที่เหลือ</translation>
 <translation id="8955719471735800169">กลับไปด้านบน</translation>
 <translation id="8956312248048980644">อนุญาตการสร้างคลัสเตอร์ Agent ที่ผูกกับต้นทางโดยค่าเริ่มต้น</translation>
 <translation id="8970205333161758602">ระงับการแจ้งเตือนการปฏิเสธของ <ph name="PRODUCT_FRAME_NAME" /></translation>
@@ -8133,6 +8164,7 @@
 <translation id="9135033364005346124">เปิดใช้งานพร็อกซี <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">ปิดใช้ UI ลูกโป่งสำหรับดาวน์โหลด</translation>
 <translation id="9136399279941091445">ระยะเวลาปิดเครื่องเมื่อเผยแพร่นโยบายด้านอุปกรณ์ที่ระบุ</translation>
+<translation id="9142561920976791097">ระบบจะใช้การส่งเหตุการณ์แบบใหม่ในลักษณะการทํางานของตัวควบคุมแบบฟอร์มที่ปิดใช้</translation>
 <translation id="9148720248753722892">ไม่อนุญาตใบรับรองที่ลงนามโดยใช้ SHA-1</translation>
 <translation id="9149678135092892302">ปิดใช้การรายงานข้อมูลเวอร์ชัน</translation>
 <translation id="9150416707757015439">นโยบายนี้เลิกใช้แล้ว โปรดใช้ IncognitoModeAvailability แทน เปิดใช้งานโหมดไม่ระบุตัวตนใน <ph name="PRODUCT_NAME" /> หากการตั้งค่านี้ถูกเปิดใช้งานหรือไม่ได้กำหนดค่าไว้ ผู้ใช้จะสามารถเปิดหน้าเว็บในโหมดไม่ระบุตัวตนได้ หากการตั้งค่านี้ถูกปิดใช้งาน ผู้ใช้จะไม่สามารถเปิดหน้าเว็บในโหมดไม่ระบุตัวตน หากนโยบายนี้ไม่ได้มีการตั้งค่าไว้ จะมีการเปิดใช้งานและผู้ใช้จะสามารถใช้โหมดไม่ระบุตัวตนได้</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index e74986a..fe3eaf9b 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -7484,12 +7484,6 @@
       Ayrıntılar için https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744 adresine bakın.</translation>
 <translation id="8424255554404582727">Her yeniden başlatmada tekrar uygulanacak varsayılan ekran döndürmesini ayarla</translation>
 <translation id="8426231401662877819">Ekranı saat yönünde 90 derece döndür</translation>
-<translation id="8426819027631706846">https://www.chromestatus.com/feature/5148698084376576 adresinde açıklandığı üzere; kaynağı ana çerçevenin kaynağından farklı olan bir alt çerçeveden tetiklenmeleri halinde <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> ve <ph name="JS_PROMPT" /> tarafından tetiklenen JavaScript kalıcı iletişim kutuları <ph name="PRODUCT_NAME" /> içinde engellenir.
-       Bu politika söz konusu değişikliğin geçersiz kılınmasına izin verir.
-       Politika etkin olarak ayarlanır veya ayarlanmadan bırakılırsa farklı kaynaklı alt çerçevelerden tetiklenen JavaScript iletişim kutuları engellenir.
-       Politika devre dışı olarak ayarlanırsa farklı kaynaklı alt çerçevelerden tetiklenen JavaScript iletişim kutuları engellenmez.
-
-       Bu politika, <ph name="PRODUCT_NAME" /> 95 sürümünde kaldırılacaktır.</translation>
 <translation id="8427466947904008809">CRD'nin uzak bir ana makineden proxy kullanılarak gelen WebAuthn API isteklerini yürütmesine izin ver.</translation>
 <translation id="8428295225823548121">Cihazın bellek bilgileri raporlamasını etkinleştir</translation>
 <translation id="8428635849021776523">Android raporlamasını devre dışı bırak</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index a1017752..6064c35 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -507,6 +507,7 @@
       Примітка: назви серверів потрібно розділяти комами. Дозволяються символи підстановки (<ph name="WILDCARD_VALUE" />).</translation>
 <translation id="1488724823347505879">Увімкнути надсилання контенту з додатків Android у веб-додатки</translation>
 <translation id="1494138678487405397">Вимкнути високу контрастність на екрані входу</translation>
+<translation id="1499129134689253257">Керування новою поведінкою <ph name="OFFSET_PARENT" /></translation>
 <translation id="1501644502684303995">Вимагати ввійти через Інтернет лише на екрані входу</translation>
 <translation id="1502843533062797703">Блокувати вставляння ПЗ незалежних розробників</translation>
 <translation id="1503969899251962413">За допомогою параметрів цього правила можна вказати ключ ліцензії <ph name="PLUGIN_VM_NAME" /> для цього пристрою.
@@ -2363,6 +2364,17 @@
 
       Якщо це правило не налаштовано, <ph name="PRODUCT_NAME" /> завантажує всі встановлені хости для обміну повідомленнями з оригінальними додатками.</translation>
 <translation id="3211426942294667684">Налаштування входу в обліковий запис у веб-переглядачі</translation>
+<translation id="3217774577897351942">Ми оновлюємо <ph name="OFFSET_PARENT" /> API у <ph name="PRODUCT_NAME" /> відповідно до змін у <ph name="FIREFOX_PRODUCT_NAME" /> і <ph name="SAFARI_PRODUCT_NAME" />. Це правило повертає старий варіант поведінки, який застосовувався до версії M120.
+
+Нова поведінка може призвести до збоїв у роботі деяких веб-сайтів, які працюють лише в <ph name="PRODUCT_NAME" /> і використовують властивість <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> або <ph name="OFFSET_LEFT" /> разом із Shadow DOM.
+
+На сторінці https://github.com/josepharhar/offsetparent-polyfills наведено поліфіли, які повертають стару поведінку, що допоможе під час перенесення.
+
+Якщо це правило ввімкнути, застосовуватиметься нова поведінка,
+
+а якщо вимкнути – стара.
+
+Якщо це правило не налаштувати, застосовуватиметься нова поведінка, як і для всіх користувачів Chromium.</translation>
 <translation id="3219421230122020860">Режим анонімного перегляду доступний</translation>
 <translation id="3220624000494482595">Якщо додаток-термінал є додатком Android, він не зможе керувати версією <ph name="PRODUCT_OS_NAME" />, навіть якщо для правила встановлено значення "<ph name="TRUE" />".</translation>
 <translation id="3222088741899353813">Зробити ліву клавішу основною на екрані входу</translation>
@@ -2770,6 +2782,7 @@
 <translation id="3589193811812796052">Заборонити міждоменне надсилання модулів WebAssembly</translation>
 <translation id="3591527072193107424">Увімкнути функцію підтримки застарілих веб-переглядачів.</translation>
 <translation id="3591584750136265240">Налаштування автентифікації під час входу</translation>
+<translation id="3593905652755912452">Застосовуватиметься стара поведінка для диспетчеризації подій через вимкнені елементи керування формами.</translation>
 <translation id="3596112486106491038">Увімкнути доступ до командного рядка віртуальної машини</translation>
 <translation id="3603469950773500315">Увімкнути для <ph name="CORS" /> зменшення кількості перевірок у новій реалізації <ph name="CORS" />, що дає змогу розширенням надалі мати сумісну поведінку, а <ph name="PRODUCT_NAME" /> – надсилати вказані заголовки без перевірок <ph name="CORS" />.
 
@@ -3069,6 +3082,7 @@
 <translation id="3891357445869647828">Увімкнути JavaScript</translation>
 <translation id="3891769546914233112">Надати можливість друкувати файли PDF як зображення</translation>
 <translation id="3897218615484393758">Обмежити час, упродовж якого автентифікований через SAML користувач може входити в режимі офлайн на заблокованому екрані</translation>
+<translation id="3897860452756794695">Застосовуватиметься нова поведінка offsetParent.</translation>
 <translation id="3898345958122666461">Вимкнути NTLMv2</translation>
 <translation id="3898795800259311780">Дозволити або заборонити запис з екрана</translation>
 <translation id="3903313632842363082">Вимкнути звіти про користувачів пристрою</translation>
@@ -4114,6 +4128,7 @@
 <translation id="5025239932007658691">Якщо це правило ввімкнено або не налаштовано, <ph name="PRODUCT_NAME" /> час від часу надсилатиме на сервер Google запити, щоб отримати точну позначку часу.
 
       Якщо це правило вимкнено, <ph name="PRODUCT_NAME" /> не надсилатиме таких запитів.</translation>
+<translation id="5033070732967197381">Дозволити запити до WebAuthn API на сайтах, які мають пошкоджені сертифікати TLS.</translation>
 <translation id="5034504101537897433">Увімкнути звіти про збої в роботі пристрою</translation>
 <translation id="5039110755072335605">Підтримка заголовків запитів CORS без символів підстановки</translation>
 <translation id="504116558738617678">Показувати сповіщення про те, що на диску замало пам'яті, тільки коли пристроєм не керують або є лише один користувач</translation>
@@ -4863,6 +4878,7 @@
 
       Користувачі не можуть змінювати це налаштування.</translation>
 <translation id="5838452040629810808">Увімкнути виділення курсора</translation>
+<translation id="5842283830553218200">За умовчанням застосовуватиметься нова поведінка для диспетчеризації подій через вимкнені елементи керування формами.</translation>
 <translation id="5848438019586925019">Алгоритм створення пар ключів.</translation>
 <translation id="5851248808417680865">Застосувати темну тему</translation>
 <translation id="585270638818921943">Заборонити користувачеві завантажувати додатки для Android із ненадійних джерел</translation>
@@ -5357,6 +5373,7 @@
       Якщо це правило вимкнути або не налаштувати, користувачі зможуть вибирати, чи застосовувати сервіс <ph name="CHROME_SYNC_NAME" />.
 
       Примітка: не вмикайте це правило, коли ввімкнено правило <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />, оскільки воно використовує ті самі клієнтські функції. У такому разі синхронізацію через сервіси, розміщені в Google, буде повністю вимкнено.</translation>
+<translation id="6320935916601887506">За умовчанням застосовуватиметься нова поведінка offsetParent.</translation>
 <translation id="6327643515544933974">Налаштування Web USB</translation>
 <translation id="6330882599388782338">Надати сайтам доступ до датчиків</translation>
 <translation id="6331167725613770725">Зауважте, що це правило більше не підтримується та буде вилучене в <ph name="PRODUCT_OS_NAME" /> версії 85. Натомість використовуйте правило <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
@@ -5493,6 +5510,7 @@
 <translation id="6464074037294098618">Увімкнути функцію автозаповнення адрес</translation>
 <translation id="6467613372414922590">Дозволити хости на рівні користувача для обміну повідомленнями з оригінальними додатками (установлені без дозволів адміністратора)</translation>
 <translation id="6473623140202114570">Налаштувати список доменів, у яких Безпечний перегляд не показуватиме застережень.</translation>
+<translation id="6474194795370862403">Застосовуватиметься стара поведінка offsetParent.</translation>
 <translation id="647645276885673708">Увімкнути <ph name="LACROS_NAME" /> і зробити його основним веб-переглядачем</translation>
 <translation id="647698599569353771">Дозволити вмикати Передавання поблизу.</translation>
 <translation id="6477685422297715670">Підсвічування клавіатури зеленим кольором</translation>
@@ -5679,6 +5697,7 @@
       - Якщо це правило вимкнено, адміністратори повинні повідомити про це кінцевих користувачів пристрою.</translation>
 <translation id="6609867253856597039">Налаштувати взаємодію з користувачем для вимкнених функцій</translation>
 <translation id="6614557704487944013">Дозволити використовувати веб-переглядач <ph name="LACROS_NAME" /></translation>
+<translation id="661610294649586421">Заборонити запити до WebAuthn API на сайтах, які мають пошкоджені сертифікати TLS.</translation>
 <translation id="6617589895942747919">Час початку проміжку (включно).</translation>
 <translation id="6621830999036927230">Якщо налаштувати це правило, хост віддаленого доступу прийматиме підключення клієнтів, перевіряючи маркери автентифікації за вказаною URL-адресою. Якщо це правило не налаштовано або задано пустий рядок, відповідна функція вимикається.
 
@@ -5981,6 +6000,9 @@
 <translation id="6907778402784621686">Блокувати незахищений контент на цих сайтах</translation>
 <translation id="6908640907898649429">Налаштовує пошукову службу за умовчанням. Можна вказати пошукову службу за умовчанням, яку користувач використовуватиме, або вимкнути пошук за умовчанням.</translation>
 <translation id="6913068954484253496">Дозволити <ph name="PRODUCT_NAME" /> під’єднуватися до пристроїв Cast на всіх IP-адресах.</translation>
+<translation id="6915493311660114995">Якщо це правило ввімкнути, <ph name="PRODUCT_NAME" /> дозволятиме запити на веб-автентифікацію на сайтах, які мають сертифікати TLS із помилками (тобто на сайтах, які вважаються ненадійними).
+
+Якщо його вимкнути або не налаштувати, такі запити за умовчанням блокуватимуться.</translation>
 <translation id="6919819553978815392">Якщо правило не налаштувати або вибрати для нього значення true, у <ph name="PRODUCT_NAME" /> і <ph name="LACROS_NAME" /> буде ввімкнено вхід у режимі гостя. Увійшовши як гість, користувач бачить усі вікна в <ph name="PRODUCT_NAME" /> у режимі анонімного перегляду.
 
       Якщо для правила вибрати значення false, у <ph name="PRODUCT_NAME" /> і <ph name="LACROS_NAME" /> буде заборонений запуск гостьових профілів.
@@ -6897,6 +6919,7 @@
 <translation id="782661371433719637">Заборонити всім сайтам запитувати дозвіл на перегляд файлів і каталогів через File System API</translation>
 <translation id="7827127381981620448">Додаток платформи</translation>
 <translation id="7829436838673974723">Дозволити сторінкам надсилати синхронні запити XHR під час закриття</translation>
+<translation id="782978857350824974">Дозволити запити на веб-автентифікацію на сайтах, які мають пошкоджені сертифікати TLS.</translation>
 <translation id="7832225468415136704">Заборонити функції "Очищення Chrome" періодично сканувати систему й вимкнути ручне сканування</translation>
 <translation id="7833148823006528332">Ідентифікатор додатка Android, наприклад, "com.google.android.gm" для Gmail</translation>
 <translation id="7835218570504220753">Вимкнути автоматичне натискання</translation>
@@ -7496,17 +7519,12 @@
 <translation id="8417305981081876834">Установити максимальну довжину PIN-коду для блокування екрана</translation>
 <translation id="841977920223099909">Активатор застереження про захист паролем</translation>
 <translation id="8420426128163801949">Дозволити користувачам вмикати й вимикати Bluetooth</translation>
+<translation id="8422658829373743789">Керування новою поведінкою для диспетчеризації подій через вимкнені елементи керування формами</translation>
 <translation id="8422866312638683210">Якщо налаштувати це правило, <ph name="PRODUCT_NAME" /> намагатиметься зареєструватися в системі <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. Задайте як значення маркер реєстрації. Його можна отримати, перейшовши на <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.
 
       Докладніше читайте на сторінці https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
 <translation id="8424255554404582727">Указати значення обертання дисплея за умовчанням, яке відновлюватиметься під час кожного перезапуску</translation>
 <translation id="8426231401662877819">Обернути екран на 90 градусів за годинниковою стрілкою</translation>
-<translation id="8426819027631706846">Як описано на сторінці https://www.chromestatus.com/feature/5148698084376576, діалогові вікна JavaScript, активовані методами <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> і <ph name="JS_PROMPT" />, будуть блокуватися в <ph name="PRODUCT_NAME" />, якщо активатором буде додатковий фрейм, джерело якого відрізняється від джерела основного фрейму.
-       Це правило дає змогу перевизначити цю поведінку.
-       Якщо правило ввімкнено або не налаштовано, вікна JavaScript, активовані зі стороннього додаткового фрейму, блокуватимуться.
-       Якщо правило вимкнено, вікна JavaScript, активовані зі стороннього додаткового фрейму, не блокуватимуться.
-
-       У <ph name="PRODUCT_NAME" /> 95 це правило буде вилучено.</translation>
 <translation id="8427466947904008809">Дозволити Віддаленому керуванню Chrome виконувати запити до WebAuthn API, надіслані через проксі-сервер із віддаленого хосту.</translation>
 <translation id="8428295225823548121">Увімкнути звітування щодо інформації про пам’ять пристрою</translation>
 <translation id="8428635849021776523">Вимкнути звіти Android</translation>
@@ -8047,6 +8065,19 @@
 <translation id="8947415621777543415">Повідомляти місцезнаходження пристрою</translation>
 <translation id="8948062138228904066">Білий список серверів автентифікації</translation>
 <translation id="8951350807133946005">Налаштування каталогу кешу на диску</translation>
+<translation id="8952611478149810182">Щоб покращити сумісність з іншими веб-переглядачами й полегшити роботу розробникам, ми змінюємо поведінку для диспетчеризації подій через вимкнені елементи керування формами в Chromium.
+
+Тепер події MouseEvents, за винятком click, mouseup і mousedown, будуть диспетчеруватися через вимкнені елементи керування формами. Ця зміна також торкнеться таких подій, як mousemove, mouseenter і mouseleave.
+
+Також вона скоротить шлях подій click, mouseup і mousedown, якщо їх диспетчеризують дочірні вимкнені елементи керування формами. Завдяки цьому такі події не будуть диспетчеризуватися через вимкнені елементи керування формами та їх предки.
+
+Нова поведінка може призвести до збоїв у роботі деяких веб-сайтів.
+
+Якщо це правило ввімкнути, застосовуватиметься нова поведінка,
+
+а якщо вимкнути – стара.
+
+Якщо це правило не налаштувати, застосовуватиметься нова поведінка, як і для всіх користувачів Chromium.</translation>
 <translation id="8955719471735800169">На початок</translation>
 <translation id="8956312248048980644">За умовчанням дозволяє кластеризацію агентів за ключем джерела.</translation>
 <translation id="8970205333161758602">Заборонити запити <ph name="PRODUCT_FRAME_NAME" /> на вимкнення</translation>
@@ -8232,6 +8263,7 @@
 <translation id="9135033364005346124">Увімкнути проксі-сервер <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">Вимкнути інтерфейс зі спливаючою підказкою щодо завантаження</translation>
 <translation id="9136399279941091445">Інтервали неробочого часу, коли випускаються вказані правила для пристрою</translation>
+<translation id="9142561920976791097">Застосовуватиметься нова поведінка для диспетчеризації подій через вимкнені елементи керування формами.</translation>
 <translation id="9148720248753722892">Заборонити сертифікати з підписом SHA-1</translation>
 <translation id="9149678135092892302">Вимкнути звіти про версію</translation>
 <translation id="9150416707757015439">Це правило більше не використовується. Натомість використовуйте правило IncognitoModeAvailability. Вмикає режим анонімного перегляду в <ph name="PRODUCT_NAME" />. Якщо це налаштування ввімкнено чи не встановлено, користувачі можуть відкривати веб-сторінки в режимі анонімного перегляду. Якщо це налаштування вимкнено, користувачі не можуть відкривати веб-сторінки в режимі анонімного перегляду. Якщо це правило не встановлено, налаштування вмикається, і користувач може використовувати режим анонімного перегляду.</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 0472409..29647d4f 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -508,6 +508,7 @@
       Lưu ý: Hãy phân tách tên của các máy chủ bằng dấu phẩy. Cho phép sử dụng ký tự đại diện <ph name="WILDCARD_VALUE" />.</translation>
 <translation id="1488724823347505879">Bật tính năng chia sẻ dữ liệu của ứng dụng Android sang ứng dụng web</translation>
 <translation id="1494138678487405397">Tắt chế độ tương phản cao trên màn hình đăng nhập</translation>
+<translation id="1499129134689253257">Kiểm soát thao tác mới của <ph name="OFFSET_PARENT" /></translation>
 <translation id="1501644502684303995">Chỉ buộc đăng nhập trực tuyến trên màn hình đăng nhập</translation>
 <translation id="1502843533062797703">Cho phép chặn phần mềm bên thứ ba thêm mã thực thi</translation>
 <translation id="1503969899251962413">Việc đặt chính sách này sẽ chỉ định khóa cấp phép <ph name="PLUGIN_VM_NAME" /> cho thiết bị này.
@@ -2367,6 +2368,17 @@
 
       Nếu bạn không đặt chính sách này, <ph name="PRODUCT_NAME" /> sẽ tải tất cả máy chủ nhắn tin gốc đã cài đặt.</translation>
 <translation id="3211426942294667684">Cài đặt đăng nhập vào trình duyệt</translation>
+<translation id="3217774577897351942">API <ph name="OFFSET_PARENT" /> đang được thay đổi trong <ph name="PRODUCT_NAME" /> để tuân theo những thay đổi đã được thực hiện trong <ph name="FIREFOX_PRODUCT_NAME" /> và <ph name="SAFARI_PRODUCT_NAME" />. Chính sách này khôi phục thao tác cũ cho đến M120.
+
+Thao tác mới có thể làm hỏng một số trang web chỉ có trong <ph name="PRODUCT_NAME" /> sử dụng <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> hoặc <ph name="OFFSET_LEFT" /> kết hợp với DOM bóng.
+
+Sau đây là một số đoạn mã polyfill sẽ khôi phục thao tác cũ để giúp di chuyển https://github.com/josepharhar/offsetparent-polyfills
+
+Nếu chính sách này đang bật thì thao tác mới sẽ được sử dụng.
+
+Nếu chính sách này đang tắt thì thao tác cũ sẽ được sử dụng.
+
+Nếu bạn không đặt chính sách này, thì thao tác mới sẽ được sử dụng giống như thao tác của những người dùng Chromium còn lại.</translation>
 <translation id="3219421230122020860">Chế độ ẩn danh khả dụng</translation>
 <translation id="3220624000494482595">Nếu ứng dụng kiosk là một ứng dụng Android thì ứng dụng này không có quyền kiểm soát đối với phiên bản <ph name="PRODUCT_OS_NAME" /> ngay cả khi chính sách này được đặt thành <ph name="TRUE" />.</translation>
 <translation id="3222088741899353813">Nút bên trái là nút chính trên màn hình đăng nhập</translation>
@@ -2775,6 +2787,7 @@
 <translation id="3589193811812796052">Không cho phép hệ thống gửi các mô-đun WebAssembly trên nhiều nguồn gốc</translation>
 <translation id="3591527072193107424">Bật tính năng Hỗ trợ trình duyệt cũ.</translation>
 <translation id="3591584750136265240">Định cấu hình hành vi xác thực thông tin đăng nhập</translation>
+<translation id="3593905652755912452">Thao tác gửi sự kiện cũ trên các đối tượng kiểm soát biểu mẫu đã tắt sẽ được sử dụng.</translation>
 <translation id="3596112486106491038">Bật quyền truy cập vào dòng lệnh của máy ảo</translation>
 <translation id="3603469950773500315">Bật tùy chọn giảm thiểu kiểm tra <ph name="CORS" /> trong quy trình triển khai <ph name="CORS" /> mới, cho phép Tiện ích duy trì chế độ tương thích và cho phép <ph name="PRODUCT_NAME" /> gửi tiêu đề đã chỉ định mà không cần kiểm tra <ph name="CORS" />.
 
@@ -3074,6 +3087,7 @@
 <translation id="3891357445869647828">Bật JavaScript</translation>
 <translation id="3891769546914233112">Lựa chọn In tệp PDF dưới dạng hình ảnh có sẵn</translation>
 <translation id="3897218615484393758">Giới hạn thời gian mà người dùng đã xác thực qua SAML có thể đăng nhập ở chế độ ngoại tuyến trên màn hình khóa</translation>
+<translation id="3897860452756794695">Thao tác offsetParent mới sẽ được sử dụng.</translation>
 <translation id="3898345958122666461">Tắt NTLMv2</translation>
 <translation id="3898795800259311780">Cho phép hoặc từ chối chụp ảnh màn hình</translation>
 <translation id="3903313632842363082">Tắt tính năng báo cáo người dùng thiết bị</translation>
@@ -4862,6 +4876,7 @@
 
       Người dùng không thể quản lý tùy chọn cài đặt này.</translation>
 <translation id="5838452040629810808">Bật tính năng làm nổi bật con trỏ</translation>
+<translation id="5842283830553218200">Thao tác gửi sự kiện mới trên các đối tượng kiểm soát biểu mẫu đã tắt sẽ được sử dụng theo mặc định.</translation>
 <translation id="5848438019586925019">Thuật toán để tạo cặp khóa.</translation>
 <translation id="5851248808417680865">Sử dụng Giao diện tối</translation>
 <translation id="585270638818921943">Ngăn người dùng sử dụng các ứng dụng Android từ những nguồn không tin cậy</translation>
@@ -5346,6 +5361,7 @@
       Nếu bạn tắt hoặc không đặt chính sách, thì người dùng sẽ được phép chọn có dùng <ph name="CHROME_SYNC_NAME" /> hay không.
 
       Xin lưu ý: Không bật chính sách này khi bạn đã bật <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> vì tính năng đó có cùng một chức năng phía máy khách. Tính năng đồng bộ hóa do Google lưu trữ sẽ tắt hoàn toàn trong trường hợp này.</translation>
+<translation id="6320935916601887506">Thao tác offsetParent mới sẽ được sử dụng theo mặc định.</translation>
 <translation id="6327643515544933974">Cài đặt USB web</translation>
 <translation id="6330882599388782338">Cho phép trang web sử dụng cảm biến</translation>
 <translation id="6331167725613770725">Lưu ý rằng chúng tôi không dùng chính sách này nữa và sẽ xóa khỏi <ph name="PRODUCT_OS_NAME" /> phiên bản 85. Thay vào đó, vui lòng sử dụng <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
@@ -5482,6 +5498,7 @@
 <translation id="6464074037294098618">Bật tính năng Tự động điền cho địa chỉ</translation>
 <translation id="6467613372414922590">Cho phép các máy chủ Nhắn tin gốc ở cấp người dùng (cài đặt mà không cần có quyền quản trị).</translation>
 <translation id="6473623140202114570">Định cấu hình danh sách các miền mà Duyệt web an toàn sẽ không kích hoạt cảnh báo.</translation>
+<translation id="6474194795370862403">Thao tác offsetParent cũ sẽ được sử dụng.</translation>
 <translation id="647645276885673708">Bật <ph name="LACROS_NAME" /> và đặt trình duyệt này làm trình duyệt chính</translation>
 <translation id="647698599569353771">Cho phép bật tính năng Chia sẻ lân cận.</translation>
 <translation id="6477685422297715670">Đèn nền bàn phím màu xanh lục</translation>
@@ -7282,6 +7299,7 @@
 <translation id="8250048892729838843">Chính sách này không được dùng nữa. Nếu bạn đặt chính sách này thành bật hoặc không đặt, thì hệ thống sẽ cho phép thiết bị nhận các biện pháp kiểm soát báo cáo chi tiết.
       Nếu bạn đặt chính sách này thành Tắt thì các thiết bị đã đăng ký sẽ không nhận được các biện pháp kiểm soát báo cáo chi tiết.</translation>
 <translation id="82530263956734297">Các mã nhận dạng tiện ích sẽ được miễn trừ khỏi danh sách chặn</translation>
+<translation id="8256006033157034334">Chính sách này không còn được dùng nữa và không được hỗ trợ, vui lòng dùng <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />.</translation>
 <translation id="8256688113167012935">Kiểm soát tên tài khoản <ph name="PRODUCT_OS_NAME" /> hiển thị trên màn hình đăng nhập cho tài khoản trong thiết bị tương ứng.
 
       Nếu chính sách này được đặt, màn hình đăng nhập sẽ sử dụng chuỗi đã chỉ định trong trình chọn đăng nhập dựa trên hình ảnh cho tài khoản trong thiết bị tương ứng.
@@ -7492,17 +7510,12 @@
 <translation id="8417305981081876834">Đặt độ dài tối đa của mã PIN màn hình khóa</translation>
 <translation id="841977920223099909">Trình kích hoạt cảnh báo bảo vệ mật khẩu</translation>
 <translation id="8420426128163801949">Cho phép người dùng bật hoặc tắt Bluetooth</translation>
+<translation id="8422658829373743789">Kiểm soát thao tác mới cho việc gửi sự kiện trên các đối tượng kiểm soát biểu mẫu đã tắt</translation>
 <translation id="8422866312638683210">Nếu bạn đặt chính sách này, <ph name="PRODUCT_NAME" /> sẽ cố gắng tự đăng ký bằng <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. Giá trị của chính sách này là mã đăng ký mà bạn có thể truy xuất từ <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.
 
       Hãy xem https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744 để biết thông tin chi tiết.</translation>
 <translation id="8424255554404582727">Đặt chế độ xoay màn hình mặc định, được áp dụng lại mỗi lần khởi động lại</translation>
 <translation id="8426231401662877819">Xoay màn hình 90 độ theo chiều kim đồng hồ</translation>
-<translation id="8426819027631706846">Như mô tả tại https://www.chromestatus.com/feature/5148698084376576, các hộp thoại kiểu JavaScript, do <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> và <ph name="JS_PROMPT" /> kích hoạt, sẽ bị chặn trong <ph name="PRODUCT_NAME" /> nếu được kích hoạt từ một khung phụ có nguồn gốc khác với nguồn gốc của khung chính.
-       Chính sách này cho phép ghi đè sự thay đổi đó.
-       Nếu bạn đặt thành bật hoặc không đặt chính sách này, thì hộp thoại JavaScript kích hoạt từ một khung phụ có nguồn gốc khác sẽ bị chặn.
-       Nếu bạn đặt chính sách này thành tắt, thì hộp thoại JavaScript kích hoạt từ một khung phụ có nguồn gốc khác sẽ không bị chặn.
-
-       Chính sách này sẽ bị loại bỏ trong <ph name="PRODUCT_NAME" /> phiên bản 95.</translation>
 <translation id="8427466947904008809">Cho phép CRD thực thi các yêu cầu API WebAuthn được gửi qua proxy trên một máy chủ từ xa.</translation>
 <translation id="8428295225823548121">Bật tính năng báo cáo thông tin về bộ nhớ của thiết bị</translation>
 <translation id="8428635849021776523">Tắt tính năng báo cáo của Android</translation>
@@ -8047,6 +8060,19 @@
 <translation id="8947415621777543415">Báo cáo vị trí thiết bị</translation>
 <translation id="8948062138228904066">Danh sách cho phép máy chủ xác thực</translation>
 <translation id="8951350807133946005">Thiết lập thư mục bộ nhớ đệm trên đĩa</translation>
+<translation id="8952611478149810182">Chúng tôi đang thay đổi cách gửi sự kiện trên các đối tượng kiểm soát biểu mẫu đã tắt ở Chromium để cải thiện khả năng tương thích với các trình duyệt khác, cũng như cải thiện trải nghiệm của nhà phát triển.
+
+Thay đổi này giúp MouseEvents được gửi trên các phần tử đối tượng kiểm soát biểu mẫu đã tắt, ngoại trừ thao tác nhấp, nhả chuột và nhấn chuột. Ví dụ: các sự kiện mới sẽ bao gồm di chuột qua, di chuột vào và di chuột ra khỏi thành phần.
+
+Thay đổi này cũng cắt bớt đường dẫn đến sự kiện của thao tác nhấp, nhả chuột và nhấn chuột khi những thao tác này được gửi trên phần tử con của các đối tượng kiểm soát biểu mẫu đã tắt nhằm đảm bảo các sự kiện này không được gửi trên các đối tượng kiểm soát biểu mẫu đã tắt hoặc bất kỳ đối tượng nào thuộc đối tượng cấp trên.
+
+Thao tác mới này có thể làm hỏng một số trang web.
+
+Nếu chính sách này đang bật thì thao tác mới sẽ được sử dụng.
+
+Nếu chính sách này đang tắt thì thao tác cũ sẽ được sử dụng.
+
+Nếu bạn không đặt chính sách này, thì thao tác mới sẽ được sử dụng giống như thao tác của những người dùng Chromium còn lại.</translation>
 <translation id="8955719471735800169">Quay lại đầu trang</translation>
 <translation id="8956312248048980644">Cho phép phân nhóm tác nhân theo khoá nguồn gốc theo mặc định.</translation>
 <translation id="8970205333161758602">Loại bỏ lời nhắc từ chối <ph name="PRODUCT_FRAME_NAME" /></translation>
@@ -8232,6 +8258,7 @@
 <translation id="9135033364005346124">Bật proxy <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">Tắt giao diện người dùng bong bóng tải xuống</translation>
 <translation id="9136399279941091445">Khoảng thời gian tắt khi chính sách thiết bị đã chỉ định được phát hành</translation>
+<translation id="9142561920976791097">Thao tác gửi sự kiện mới trên các đối tượng kiểm soát biểu mẫu đã tắt sẽ được sử dụng.</translation>
 <translation id="9148720248753722892">Không cho phép các chứng chỉ có chữ ký SHA-1</translation>
 <translation id="9149678135092892302">Tắt chính sách báo cáo thông tin phiên bản</translation>
 <translation id="9150416707757015439">Chính sách này không được chấp thuận. Vui lòng sử dụng IncognitoModeAvailability.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 2c26106..21da714 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -7394,12 +7394,6 @@
       如需了解详情,请访问 https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744。</translation>
 <translation id="8424255554404582727">设置显示屏默认旋转角度,每次重新启动后都重新应用设置的角度</translation>
 <translation id="8426231401662877819">将屏幕顺时针旋转 90 度</translation>
-<translation id="8426819027631706846">如 https://www.chromestatus.com/feature/5148698084376576 中所述,倘若 JavaScript 模态对话框(由 <ph name="JS_ALERT" />、<ph name="JS_CONFIRM" /> 和 <ph name="JS_PROMPT" /> 触发)是从非主框架来源的子框架触发的,<ph name="PRODUCT_NAME" /> 会屏蔽这些对话框。
-       此政策让您可以覆盖这项变更。
-       如果此政策已启用或未设置,系统将会屏蔽从其他来源的子框架触发的 JavaScript 对话框。
-       如果此政策已停用,系统将不会屏蔽从其他来源的子框架触发的 JavaScript 对话框。
-
-       在 <ph name="PRODUCT_NAME" /> 95 版中,此政策将被移除。</translation>
 <translation id="8427466947904008809">允许 CRD 执行远程主机通过代理发送的 WebAuthn API 请求。</translation>
 <translation id="8428295225823548121">启用设备内存信息报告功能</translation>
 <translation id="8428635849021776523">停用 Android 报告</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index adff74d..240f945 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -501,6 +501,7 @@
       注意:請以半形逗號分隔伺服器名稱,可使用萬用字元 (<ph name="WILDCARD_VALUE" />)。</translation>
 <translation id="1488724823347505879">允許從 Android 應用程式分享內容到網頁應用程式</translation>
 <translation id="1494138678487405397">在登入畫面上停用高對比模式</translation>
+<translation id="1499129134689253257">控制 <ph name="OFFSET_PARENT" /> 的新行為</translation>
 <translation id="1501644502684303995">僅強制在登入畫面執行線上登入</translation>
 <translation id="1502843533062797703">啟用禁止第三方軟體置入可執行程式碼的政策</translation>
 <translation id="1503969899251962413">你可以透過這項政策,指定這部裝置的 <ph name="PLUGIN_VM_NAME" /> 授權金鑰。
@@ -2325,6 +2326,14 @@
 <translation id="3210408472559816322">你可以透過這項政策,指定拒絕載入的原生訊息傳遞主機。如果將拒絕清單的值設為 <ph name="WILDCARD_VALUE" />,系統會拒絕所有原生訊息傳遞主機,但政策明確允許使用的主機除外。
       如果不設定這項政策,<ph name="PRODUCT_NAME" /> 會載入所有已安裝的原生訊息傳遞主機。</translation>
 <translation id="3211426942294667684">瀏覽器登入設定</translation>
+<translation id="3217774577897351942">為符合 <ph name="FIREFOX_PRODUCT_NAME" /> 和 <ph name="SAFARI_PRODUCT_NAME" /> 中的變更,我們也正在變更 <ph name="PRODUCT_NAME" /> 中的 <ph name="OFFSET_PARENT" /> API。這項政策會恢復舊行為,直到 M120 版本推出為止。
+
+如果某些網站僅支援 <ph name="PRODUCT_NAME" /> 且將 <ph name="OFFSET_PARENT" />、<ph name="OFFSET_TOP" /> 或 <ph name="OFFSET_LEFT" /> 與 Shadow DOM 搭配使用,則新行為可能會導致這些網站無法正常運作。
+
+以下提供幾項可恢復舊行為的補充功能,以協助遷移作業:https://github.com/josepharhar/offsetparent-polyfills。
+如果停用這項政策,系統將使用舊行為。
+
+如果不設定這項政策,系統將如同其他 Chromium 使用者一樣使用新行為。</translation>
 <translation id="3219421230122020860">可使用無痕模式</translation>
 <translation id="3220624000494482595">如果資訊站應用程式是 Android 應用程式,即使將這項政策設為 <ph name="TRUE" />,仍無法控制 <ph name="PRODUCT_OS_NAME" />版本。</translation>
 <translation id="3222088741899353813">在登入畫面上使用左鍵做為主要按鈕</translation>
@@ -2714,6 +2723,7 @@
 <translation id="3589193811812796052">禁止跨來源傳送 WebAssembly 模組</translation>
 <translation id="3591527072193107424">啟用「舊版瀏覽器支援」功能。</translation>
 <translation id="3591584750136265240">設定登入驗證行為</translation>
+<translation id="3593905652755912452">系統將使用在已停用表單控制項上傳送事件的舊行為。</translation>
 <translation id="3596112486106491038">啟用虛擬機器指令列存取權</translation>
 <translation id="3603469950773500315">在新版 <ph name="CORS" /> 模式中啟用寬鬆檢查機制來放寬 <ph name="CORS" /> 檢查標準,讓擴充功能保持相容行為,並允許 <ph name="PRODUCT_NAME" /> 不需經過 <ph name="CORS" /> 檢查即可傳送指定標頭。
 
@@ -3012,6 +3022,7 @@
 <translation id="3891357445869647828">啟用 JavaScript</translation>
 <translation id="3891769546914233112">提供「以圖片形式列印 PDF」</translation>
 <translation id="3897218615484393758">限制透過 SAML 驗證的使用者可以在螢幕鎖定畫面離線登入的時間</translation>
+<translation id="3897860452756794695">系統將使用新的 offsetParent 行為。</translation>
 <translation id="3898345958122666461">停用 NTLMv2</translation>
 <translation id="3898795800259311780">允許或拒絕螢幕擷取</translation>
 <translation id="3903313632842363082">停用裝置使用者回報功能</translation>
@@ -4032,6 +4043,7 @@
 <translation id="5025239932007658691">如果將這項政策設為啟用或不設定,<ph name="PRODUCT_NAME" /> 會不定時向 Google 伺服器傳送查詢,以擷取準確的時間戳記。
 
       如果將這項政策設為停用,系統會禁止 <ph name="PRODUCT_NAME" /> 傳送這類查詢。</translation>
+<translation id="5033070732967197381">允許來自 TLS 憑證無效網站的 WebAuthn API 要求。</translation>
 <translation id="5034504101537897433">啟用裝置當機報告資訊回報功能</translation>
 <translation id="5039110755072335605">CORS 非萬用字元要求標頭支援</translation>
 <translation id="504116558738617678">只有在裝置未受管理或只有一位使用者時,才顯示磁碟空間不足的警告</translation>
@@ -4755,6 +4767,7 @@
 
       使用者無法變更這項設定。</translation>
 <translation id="5838452040629810808">啟用游標醒目顯示功能</translation>
+<translation id="5842283830553218200">根據預設,系統將使用在已停用的表單控制項上傳送事件的新行為。</translation>
 <translation id="5848438019586925019">用於產生金鑰組的演算法。</translation>
 <translation id="5851248808417680865">使用深色主題</translation>
 <translation id="585270638818921943">禁止使用者使用來源不受信任的 Android 應用程式</translation>
@@ -5236,6 +5249,7 @@
       如果停用這項政策或不去設定它,使用者就可以選擇是否要使用 <ph name="CHROME_SYNC_NAME" />。
 
       注意:若已啟用 <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />,請不要啟用這項政策,因為兩者具備相同的用戶端功能。如果發生這種情況,Google 代管的同步功能會完全關閉。</translation>
+<translation id="6320935916601887506">根據預設,系統會使用新的 offsetParent 行為。</translation>
 <translation id="6327643515544933974">網路 USB 設定</translation>
 <translation id="6330882599388782338">允許網站存取感應器</translation>
 <translation id="6331167725613770725">請注意,這項政策已遭淘汰,並將在 <ph name="PRODUCT_OS_NAME" />第 85 版中移除。請改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
@@ -5371,6 +5385,7 @@
 <translation id="6464074037294098618">啟用地址的自動填入功能</translation>
 <translation id="6467613372414922590">允許使用者層級的內建訊息傳遞主機 (在無管理員權限的情況下安裝)。</translation>
 <translation id="6473623140202114570">設定安全瀏覽功能在哪些網域中不會觸發警告。</translation>
+<translation id="6474194795370862403">系統將使用舊的 offsetParent 行為。</translation>
 <translation id="647645276885673708">啟用 <ph name="LACROS_NAME" /> 並設為主要瀏覽器</translation>
 <translation id="647698599569353771">允許啟用鄰近分享功能。</translation>
 <translation id="6477685422297715670">綠色鍵盤背光顏色</translation>
@@ -5556,6 +5571,7 @@
       - 如果停用這項政策,管理員必須告知裝置使用者。</translation>
 <translation id="6609867253856597039">設定已停用功能的使用者體驗</translation>
 <translation id="6614557704487944013">允許使用者使用 <ph name="LACROS_NAME" /> 瀏覽器</translation>
+<translation id="661610294649586421">不允許來自 TLS 憑證無效網站的 WebAuthn API 要求。</translation>
 <translation id="6617589895942747919">限制時段的開始時間 (包含在內)。</translation>
 <translation id="6621830999036927230">如果設定這項政策,遠端存取主機會使用這個網址驗證遠端存取用戶端提供的驗證權杖,據此決定是否要接受連線。如果設為空白或不設定,系統會停用這項功能。
 
@@ -5858,6 +5874,8 @@
 <translation id="6907778402784621686">封鎖這些網站上的不安全內容</translation>
 <translation id="6908640907898649429">設定預設搜尋引擎。你可以指定使用者要使用的預設搜尋引擎或選擇停用預設搜尋。</translation>
 <translation id="6913068954484253496">允許 <ph name="PRODUCT_NAME" /> 連線至所有 IP 位址上的 Cast 裝置。</translation>
+<translation id="6915493311660114995">如果設為啟用,即使網站的 TLS 憑證有問題 (即系統認定網站不安全),<ph name="PRODUCT_NAME" /> 仍允許來自這類網站的網路驗證要求。
+如果將這項政策設為停用或不設定,系統將套用封鎖這類要求的預設行為。</translation>
 <translation id="6919819553978815392">如果將這項政策設為 True 或不設定,<ph name="PRODUCT_NAME" /> 和 <ph name="LACROS_NAME" /> 將啟用訪客登入。訪客可以登入 <ph name="PRODUCT_NAME" /> 設定檔,登入後,所有視窗都會以無痕模式開啟。
 
       如果將這項政策設為 False,<ph name="PRODUCT_NAME" /> 和 <ph name="LACROS_NAME" /> 將不允許啟用訪客設定檔。
@@ -6761,6 +6779,7 @@
 <translation id="782661371433719637">不允許任何網站透過 File System API 要求讀取檔案及目錄</translation>
 <translation id="7827127381981620448">平台應用程式</translation>
 <translation id="7829436838673974723">允許網頁在關閉時傳送同步 XHR 要求</translation>
+<translation id="782978857350824974">允許來自 TLS 憑證無效網站的網路驗證要求。</translation>
 <translation id="7832225468415136704">禁止 Chrome 清理功能定期執行系統掃描,並停用手動掃描</translation>
 <translation id="7833148823006528332">Android 應用程式的 ID,例如 Gmail 的 ID 為「com.google.android.gm」</translation>
 <translation id="7835218570504220753">停用自動點擊功能</translation>
@@ -7148,6 +7167,7 @@
 <translation id="8250048892729838843">這項政策已淘汰。如果將這項政策設為 Enabled 或不設定,裝置就能取得精細回報控制項。
       如果將這項政策設為 Disabled,表示已註冊的裝置不會取得精細回報控制項。</translation>
 <translation id="82530263956734297">要從封鎖清單中排除的擴充功能 ID</translation>
+<translation id="8256006033157034334">這項政策已淘汰,因此系統不再支援,請改用 <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />。</translation>
 <translation id="8256688113167012935">控制 <ph name="PRODUCT_OS_NAME" /> 在登入畫面上顯示的帳戶名稱,以表示相對應的裝置本機帳戶。
 
       如果你設定這項政策,登入畫面就會使用指定的字串,在圖像化的登入選擇器中表示相對應的裝置本機帳戶。
@@ -7348,17 +7368,12 @@
 <translation id="8417305981081876834">設定螢幕鎖定 PIN 碼的長度上限</translation>
 <translation id="841977920223099909">密碼保護警告觸發條件</translation>
 <translation id="8420426128163801949">允許使用者開啟或關閉藍牙功能</translation>
+<translation id="8422658829373743789">控制在已停用的表單控制項上傳送事件的新行為</translation>
 <translation id="8422866312638683210">如果設定這項政策,<ph name="PRODUCT_NAME" /> 會嘗試註冊 <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />。這項政策的值是可從 <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />擷取的註冊權杖。
 
       詳情請參閱 https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744。</translation>
 <translation id="8424255554404582727">設定畫面旋轉預設值 (每次重新啟動皆重新套用)</translation>
 <translation id="8426231401662877819">將畫面以順時針方向旋轉 90 度</translation>
-<translation id="8426819027631706846">如 https://www.chromestatus.com/feature/5148698084376576 所述,<ph name="PRODUCT_NAME" /> 會封鎖 <ph name="JS_ALERT" />、<ph name="JS_CONFIRM" /> 和 <ph name="JS_PROMPT" /> 所觸發的 JavaScript 強制回應對話方塊 (如果是從與主頁框不同來源的子頁框觸發的話)。
-       這項政策可讓你覆寫此變更。
-       如果將這項政策設為啟用或不予設定,系統會封鎖從不同來源子頁框觸發的 JavaScript 對話方塊。
-       如果將這項政策設為停用,系統就不會封鎖從不同來源子頁框觸發的 JavaScript 對話方塊。
-
-       這項政策將在 <ph name="PRODUCT_NAME" /> 第 95 版中移除。</translation>
 <translation id="8427466947904008809">允許 CRD 執行遠端主機透過 Proxy 傳送的 WebAuthn API 要求。</translation>
 <translation id="8428295225823548121">啟用裝置記憶體資訊回報功能</translation>
 <translation id="8428635849021776523">停用 Android 報告功能</translation>
@@ -7886,6 +7901,19 @@
 <translation id="8947415621777543415">回報裝置位置</translation>
 <translation id="8948062138228904066">驗證伺服器許可清單</translation>
 <translation id="8951350807133946005">設定磁碟快取目錄</translation>
+<translation id="8952611478149810182">為了改善與其他瀏覽器的相容性及提升開發人員體驗,我們正著手變更 Chromium 中在已停用的表單控制項上傳送事件的行為。
+
+這項變更會讓系統傳送已停用的表單控制元素上的 MouseEvent,但 click、mouseup 和 mousedown 除外。這些新事件將包括滑鼠移動、滑鼠進入和滑鼠離開等。
+
+這項變更也會截斷在已停用的表單控制項子項上傳送的 click、mouseup 和 mousedown 的事件路徑,這樣一來,系統就不會在已停用表單控制項或其任何祖系上傳送這些事件。
+
+這個新行為可能會導致某些網站無法正常運作。
+
+如果啟用這項政策,系統將使用新行為。
+
+如果停用這項政策,系統將使用舊行為。
+
+如果不設定這項政策,系統將如同其他 Chromium 使用者一樣使用新行為。</translation>
 <translation id="8955719471735800169">返回頁首</translation>
 <translation id="8956312248048980644">在預設情況下,允許使用 origin-keyed 代理程式叢集。</translation>
 <translation id="8970205333161758602">隱藏停止支援 <ph name="PRODUCT_FRAME_NAME" />的提示</translation>
@@ -8070,6 +8098,7 @@
 <translation id="9135033364005346124">啟用 <ph name="CLOUD_PRINT_NAME" /> Proxy</translation>
 <translation id="9136212796239682721">停用下載對話框 UI</translation>
 <translation id="9136399279941091445">發布指定裝置政策時的停機時間間隔</translation>
+<translation id="9142561920976791097">系統將使用在已停用表單控制項上傳送事件的新行為。</translation>
 <translation id="9148720248753722892">停用 SHA-1 簽署的憑證</translation>
 <translation id="9149678135092892302">停用版本資訊報告功能</translation>
 <translation id="9150416707757015439">這項政策已被取代,請改用 IncognitoModeAvailability。在「<ph name="PRODUCT_NAME" />」中啟用無痕模式。如果這項設定已啟用或尚未設定,使用者皆可在無痕模式中開啟網頁。如果這項設定已停用,使用者就無法在無痕模式中開啟網頁。如果未設定這項政策,系統會啟用這項設定,且使用者可以使用無痕模式。</translation>
diff --git a/components/policy/resources/templates/policy_definitions/Miscellaneous/PrefixedStorageInfoEnabled.yaml b/components/policy/resources/templates/policy_definitions/Miscellaneous/PrefixedStorageInfoEnabled.yaml
index d549cba3..4485f7c 100644
--- a/components/policy/resources/templates/policy_definitions/Miscellaneous/PrefixedStorageInfoEnabled.yaml
+++ b/components/policy/resources/templates/policy_definitions/Miscellaneous/PrefixedStorageInfoEnabled.yaml
@@ -1,10 +1,9 @@
 caption: Re-enable the deprecated window.webkitStorageInfo API
 default: false
-desc: "Non-standard API window.webkitStorageInfo is deprecated and is planned for\
-  \ removal.\n      This policy re-enables the API.\n      If this policy is set to\
-  \ Enabled, the window.webkitStorageInfo API will be available.\n      If this policy\
-  \ is set to Disabled or not set, the window.webkitStorageInfo API will be unavailable.\n\
-  \      "
+desc: |-
+  Starting in M110, the non-standard API window.webkitStorageInfo will be removed. This policy re-enables the API.
+  If this policy is set to Enabled, the window.webkitStorageInfo API will be available.
+  If this policy is set to Disabled or not set, the window.webkitStorageInfo API will be unavailable.
 example_value: false
 features:
   dynamic_refresh: true
@@ -21,9 +20,10 @@
 - chrome-owp-storage@google.com
 schema:
   type: boolean
+# TODO(crbug/1384153): Cleanup policiy after M111.
 supported_on:
-- chrome.*:106-
-- chrome_os:106-
-- android:106-
+- chrome.*:106-111
+- chrome_os:106-111
+- android:106-111
 tags: []
 type: main
diff --git a/components/policy/resources/templates/policy_definitions/Miscellaneous/WebSQLNonSecureContextEnabled.yaml b/components/policy/resources/templates/policy_definitions/Miscellaneous/WebSQLNonSecureContextEnabled.yaml
index df214f5..4d047d58 100644
--- a/components/policy/resources/templates/policy_definitions/Miscellaneous/WebSQLNonSecureContextEnabled.yaml
+++ b/components/policy/resources/templates/policy_definitions/Miscellaneous/WebSQLNonSecureContextEnabled.yaml
@@ -1,9 +1,9 @@
 caption: Force WebSQL in non-secure contexts to be enabled.
 default: false
 desc: |-
-  WebSQL in non-secure contexts is on by default as of M105, but can be disabled via Chrome flag.
-            If this policy is set to false or unset, WebSQL in non-secure contexts can be disabled.
-            If this policy is set to true, WebSQL cannot be disabled.
+  WebSQL in non-secure contexts will be removed starting M110. This policy re-enables the API.
+            If this policy is set to true, WebSQL in non-secure contexts will be available.
+            If this policy is set to false or unset, WebSQL in non-secure contexts will remain available until M109, then unavailable starting M110.
 example_value: true
 features:
   dynamic_refresh: false
@@ -11,9 +11,9 @@
 future_on:
 - fuchsia
 items:
-- caption: Force WebSQL in non-secure contexts to be enabled.
+- caption: WebSQL in non-secure contexts will be available.
   value: true
-- caption: Disable WebSQL in non-secure contexts unless enabled by Chrome flag.
+- caption: WebSQL in non-secure contexts will remain available until M109, then unavailable starting M110.
   value: false
 owners:
 - ayui@chromium.org
@@ -21,8 +21,8 @@
 schema:
   type: boolean
 supported_on:
-- android:105-
-- chrome.*:105-
-- chrome_os:105-
+- android:105-111
+- chrome.*:105-111
+- chrome_os:105-111
 tags: []
 type: main
diff --git a/components/policy/test_support/BUILD.gn b/components/policy/test_support/BUILD.gn
index fa8e364..3c592cc3 100644
--- a/components/policy/test_support/BUILD.gn
+++ b/components/policy/test_support/BUILD.gn
@@ -64,6 +64,7 @@
   deps = [
     "//base",
     "//components/policy/core/common:common_constants",
+    "//components/policy/core/common:test_support",
     "//components/policy/proto",
     "//crypto",
     "//google_apis:google_apis",
diff --git a/components/policy/test_support/fake_dmserver.cc b/components/policy/test_support/fake_dmserver.cc
index 099473d..784d4ff3 100644
--- a/components/policy/test_support/fake_dmserver.cc
+++ b/components/policy/test_support/fake_dmserver.cc
@@ -39,6 +39,7 @@
 constexpr char kRequestErrorsKey[] = "request_errors";
 constexpr char kRobotApiAuthCodeKey[] = "robot_api_auth_code";
 constexpr char kAllowSetDeviceAttributesKey[] = "allow_set_device_attributes";
+constexpr char kUseUniversalSigningKeysKey[] = "use_universal_signing_keys";
 constexpr char kInitialEnrollmentStateKey[] = "initial_enrollment_state";
 constexpr char kManagementDomainKey[] = "management_domain";
 constexpr char kInitialEnrollmentModeKey[] = "initial_enrollment_mode";
@@ -298,6 +299,21 @@
         allow_set_device_attributes.value());
   }
 
+  base::Value* use_universal_signing_keys =
+      dict.Find(kUseUniversalSigningKeysKey);
+  if (use_universal_signing_keys) {
+    if (!use_universal_signing_keys->is_bool()) {
+      LOG(ERROR)
+          << "The use_universal_signing_keys key isn't a bool, found type "
+          << use_universal_signing_keys->type() << ", found value "
+          << *use_universal_signing_keys;
+      return false;
+    }
+    if (use_universal_signing_keys->GetBool()) {
+      policy_storage()->signature_provider()->SetUniversalSigningKeys();
+    }
+  }
+
   std::string* robot_api_auth_code = dict.FindString(kRobotApiAuthCodeKey);
   if (robot_api_auth_code) {
     LOG(INFO) << "Adding " << *robot_api_auth_code
diff --git a/components/policy/test_support/signature_provider.cc b/components/policy/test_support/signature_provider.cc
index 4c9816cc..f58310f 100644
--- a/components/policy/test_support/signature_provider.cc
+++ b/components/policy/test_support/signature_provider.cc
@@ -10,6 +10,7 @@
 #include "base/check.h"
 #include "base/containers/span.h"
 #include "base/hash/sha1.h"
+#include "components/policy/core/common/cloud/test/policy_builder.h"
 #include "crypto/rsa_private_key.h"
 #include "crypto/signature_creator.h"
 
@@ -83,6 +84,8 @@
     "H7WK7DzvKepDn06XjPG9lchi448U3HB3PRKtCzfO3nD9YXMKTuqRpKPF8PeK11CWh1"
     "DBvBYwi20vbQ==";
 
+constexpr char kWildCard[] = "*";
+
 std::unique_ptr<crypto::RSAPrivateKey> DecodePrivateKey(
     const char* const encoded) {
   std::string to_decrypt;
@@ -159,7 +162,7 @@
     return true;
   }
 
-  auto wildcard_signature = signatures_.find("*");
+  auto wildcard_signature = signatures_.find(kWildCard);
   if (wildcard_signature != signatures_.end()) {
     signature->assign(wildcard_signature->second);
     return true;
@@ -184,6 +187,14 @@
   return true;
 }
 
+void SignatureProvider::SetUniversalSigningKeys() {
+  std::vector<policy::SignatureProvider::SigningKey> universal_signing_keys;
+  universal_signing_keys.push_back(policy::SignatureProvider::SigningKey(
+      policy::PolicyBuilder::CreateTestSigningKey(),
+      {{kWildCard, policy::PolicyBuilder::GetTestSigningKeySignature()}}));
+  set_signing_keys(std::move(universal_signing_keys));
+}
+
 SignatureProvider::SignatureProvider() {
   InitSigningKeys(&signing_keys_);
 }
diff --git a/components/policy/test_support/signature_provider.h b/components/policy/test_support/signature_provider.h
index 82489c8..732eb00 100644
--- a/components/policy/test_support/signature_provider.h
+++ b/components/policy/test_support/signature_provider.h
@@ -82,6 +82,9 @@
   bool rotate_keys() const { return rotate_keys_; }
   void set_rotate_keys(bool rotate_keys) { rotate_keys_ = rotate_keys; }
 
+  // Sets universal signing keys that can sign any domain.
+  void SetUniversalSigningKeys();
+
  private:
   std::vector<SigningKey> signing_keys_;
 
diff --git a/components/reporting/util/test_support_callbacks.h b/components/reporting/util/test_support_callbacks.h
index 39f409c..0b65ac67 100644
--- a/components/reporting/util/test_support_callbacks.h
+++ b/components/reporting/util/test_support_callbacks.h
@@ -43,18 +43,21 @@
   TestMultiEvent(const TestMultiEvent& other) = delete;
   TestMultiEvent& operator=(const TestMultiEvent& other) = delete;
 
-  using TupleType = std::tuple<std::decay_t<ResType>...>;
+  using TupleType = std::tuple<ResType...>;
 
-  template <
-      typename = std::enable_if<!std::is_move_constructible<TupleType>::value>>
   [[nodiscard]] const TupleType& ref_result() {
+    static_assert(
+        !IsMovable<TupleType>(),
+        "std::tuple<ResType...> is not movable. Please use result().");
     RunUntilHasResult();
     return result_.value();
   }
 
-  template <
-      typename = std::enable_if<std::is_move_constructible<TupleType>::value>>
+  template <typename T = TupleType>
   [[nodiscard]] TupleType result() {
+    static_assert(
+        IsMovable<TupleType>(),
+        "std::tuple<ResType...> is movable. Please use ref_result().");
     RunUntilHasResult();
     return std::move(result_.value());
   }
@@ -80,6 +83,13 @@
                             weak_ptr_factory_.GetWeakPtr()));
   }
 
+ protected:
+  // Can type T be moved from, i.e., T is move constructible and assignable.
+  template <typename T>
+  static constexpr bool IsMovable() {
+    return std::is_move_constructible_v<T> && std::is_move_assignable_v<T>;
+  }
+
  private:
   void RunUntilHasResult() {
     base::RunLoop run_loop;
@@ -96,7 +106,7 @@
 
   void SetResult(ResType... res) {
     base::AutoLock auto_lock(lock_);
-    result_ = std::make_tuple(std::forward<ResType>(res)...);
+    result_.emplace(std::forward<ResType>(res)...);
   }
 
   base::Lock lock_;
@@ -123,15 +133,15 @@
   TestEvent(const TestEvent& other) = delete;
   TestEvent& operator=(const TestEvent& other) = delete;
 
-  template <std::enable_if_t<std::is_move_constructible<ResType>::value, bool> =
-                false>
   [[nodiscard]] const ResType& ref_result() {
+    static_assert(!TestMultiEvent<ResType>::template IsMovable<ResType>(),
+                  "ResType is movable. Plesae use result().");
     return std::get<0>(TestMultiEvent<ResType>::ref_result());
   }
 
-  template <
-      std::enable_if_t<std::is_move_constructible<ResType>::value, bool> = true>
   [[nodiscard]] ResType result() {
+    static_assert(TestMultiEvent<ResType>::template IsMovable<ResType>(),
+                  "ResType is not movable. Please use ref_result().");
     return std::get<0>(TestMultiEvent<ResType>::result());
   }
 };
diff --git a/components/safe_browsing/core/common/features.cc b/components/safe_browsing/core/common/features.cc
index 59a92b4..7756f83 100644
--- a/components/safe_browsing/core/common/features.cc
+++ b/components/safe_browsing/core/common/features.cc
@@ -215,7 +215,7 @@
 
 BASE_FEATURE(kVisualFeaturesForReusePings,
              "VisualFeaturesInReusePings",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 BASE_FEATURE(kVisualFeaturesSizes,
              "VisualFeaturesSizes",
diff --git a/components/signin/public/base/signin_switches.cc b/components/signin/public/base/signin_switches.cc
index 5e3b3cb2..a353ed9 100644
--- a/components/signin/public/base/signin_switches.cc
+++ b/components/signin/public/base/signin_switches.cc
@@ -34,7 +34,7 @@
 // redirects. The hypothesis is that this order of checks is faster to perform.
 BASE_FEATURE(kNewSigninRequestHeaderCheckOrder,
              "NewSigninRequestHeaderCheckOrder",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 // Clears the token service before using it. This allows simulating the
 // expiration of credentials during testing.
diff --git a/components/site_isolation/features.cc b/components/site_isolation/features.cc
index 2af253ac..c40b09df 100644
--- a/components/site_isolation/features.cc
+++ b/components/site_isolation/features.cc
@@ -11,7 +11,7 @@
 
 BASE_FEATURE(kCacheSiteIsolationMemoryThreshold,
              "CacheSiteIsolationMemoryThreshold",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 // Controls a mode for dynamically process-isolating sites where the user has
 // entered a password.  This is intended to be used primarily when full site
diff --git a/components/spellcheck/OWNERS b/components/spellcheck/OWNERS
index 820c6acd1..3921e33f 100644
--- a/components/spellcheck/OWNERS
+++ b/components/spellcheck/OWNERS
@@ -1,4 +1,3 @@
-jds@google.com
 
 # Windows
 gujen@google.com
diff --git a/components/strictmode/android/java/src/org/chromium/components/strictmode/ReflectiveThreadStrictModeInterceptor.java b/components/strictmode/android/java/src/org/chromium/components/strictmode/ReflectiveThreadStrictModeInterceptor.java
index 3939102..d66a89a 100644
--- a/components/strictmode/android/java/src/org/chromium/components/strictmode/ReflectiveThreadStrictModeInterceptor.java
+++ b/components/strictmode/android/java/src/org/chromium/components/strictmode/ReflectiveThreadStrictModeInterceptor.java
@@ -16,7 +16,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.Function;
 import org.chromium.base.Log;
 
@@ -25,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.function.Consumer;
 
 /**
  * StrictMode whitelist installer.
diff --git a/components/strictmode/android/java/src/org/chromium/components/strictmode/ThreadStrictModeInterceptor.java b/components/strictmode/android/java/src/org/chromium/components/strictmode/ThreadStrictModeInterceptor.java
index 29db6cce..8426e9e 100644
--- a/components/strictmode/android/java/src/org/chromium/components/strictmode/ThreadStrictModeInterceptor.java
+++ b/components/strictmode/android/java/src/org/chromium/components/strictmode/ThreadStrictModeInterceptor.java
@@ -10,11 +10,11 @@
 
 import androidx.annotation.Nullable;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.Function;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Consumer;
 
 /** Installs a whitelist configuration for StrictMode's ThreadPolicy feature. */
 public interface ThreadStrictModeInterceptor {
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index 32b9a23..3c2e7ea 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Vat my nou soontoe</translation>
 <translation id="4648262692072505866">Hutsmerk moet die formaat SHA-256 hê.</translation>
 <translation id="4652266463001779298">Nie toegelaat nie</translation>
+<translation id="4652440160515225514">Jou organisasie het hierdie werf geblokkeer omdat dit ’n beleid oortree.</translation>
 <translation id="4653167719759882810">Samesmeltings en oornames</translation>
 <translation id="4658638640878098064">Kram links bo</translation>
 <translation id="4660119392514473465">Jy kan nou privaat blaai en ander mense wat hierdie toestel gebruik, sal nie jou aktiwiteit sien nie. Aflaaie, boekmerke en leeslysitems sal egter gestoor word.</translation>
@@ -2920,6 +2921,7 @@
 <translation id="8437238597147034694">Ontdoen skuif</translation>
 <translation id="8438476240229491014">Onthou hierdie instelling</translation>
 <translation id="8438786541497918448">Gebruik kamera en mikrofoon?</translation>
+<translation id="8438923942245957911">Hierdie werf is deur jou organisasie gevlag</translation>
 <translation id="8443613539889492016">Rap en hip-hop</translation>
 <translation id="8444543005280733648">Rekenaarnetwerke</translation>
 <translation id="8446884382197647889">Kom meer te wete</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index 50b33d20..90d5d00f 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />፣ በGoogle መለያዎ ውስጥ የእርስዎን መረጃ፣ ግላዊነት እና ደህንነት ለማስተዳደር ትር ከዚያ አስገባን ይጫኑ</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />፣ ርካታ እርምጃዎች ይገኛሉ፣ በእነሱ ውስጥ ለማሰስ ትርን ይጫኑ</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">የምናባዊ ካርድ ዝርዝሮች</translation>
 <translation id="1803020234906945288">ጤነኛ አመጋገብ</translation>
 <translation id="1803264062614276815">የካርድ ያዢው ስም</translation>
 <translation id="1803351196216024260">ማይክሮፎንዎን ለመጠቀም መጠየቅ ይችላል</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 ኢንች</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 የአስተያየት ጥቆማ}one{# የአስተያየት ጥቆማዎች}other{# የአስተያየት ጥቆማዎች}}</translation>
 <translation id="2066915425250589881">ለመሰረዝ መጠየቅ</translation>
+<translation id="2066969741541525119">ከፊት ያለው ጣቢያ በድርጅትዎ ታግዷል</translation>
 <translation id="2068528718802935086">ጨቅላዎች እና ህጻናት</translation>
 <translation id="2071156619270205202">ይህ ካርድ ለምናባዊ ካርድ ቁጥር ብቁ አይደለም።</translation>
 <translation id="2071692954027939183">ማሳወቂያዎች ብዙውን ጊዜ ስለማይፈቅዱሏቸው በራስ-ሰር ታግደዋል</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">በርካታ ብስ ግርጌ</translation>
 <translation id="219906046732893612">የቤት ማሻሻል</translation>
 <translation id="2202020181578195191">ትክክለኛ የአገልግሎት ማብቂያ ዓመት ያስገቡ</translation>
+<translation id="2202627062836089804">የካርድዎ በስተጀርባ</translation>
 <translation id="22081806969704220">መሳቢያ 3</translation>
 <translation id="2210794033760923560">ሪፖርት ስቀል</translation>
 <translation id="2212735316055980242">መመሪያ አልተገኘም</translation>
@@ -984,6 +987,7 @@
 <translation id="350069200438440499">የፋይል ስም፦</translation>
 <translation id="3507936815618196901">የዙሪያዎ የ3ል ካርታ መፍጠር ወይም የካሜራ ቦታን መከታተል</translation>
 <translation id="3512163584740124171">ይህ መመሪያ ከተመሳሳይ የመመሪያ ቡድን የመጣ ሌላ መመሪያ ከፍተኛ ተቀዳሚነት ስላለው ችላ ተብሏል።</translation>
+<translation id="3515972145999192222">መመሪያን የሚጥስ በመሆኑ ምክንያት ድርጅትዎ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />ን አግዷል። <ph name="BEGIN_LEARN_MORE_LINK" />የበለጠ ለመረዳት<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">የአድራሻዎች አዝራርን ያቀናብሩ፣ በChrome ቅንብሮች ውስጥ አድራሻዎችን ለማከል እና ለማቀናበር አስገባን ይጫኑ</translation>
 <translation id="3518941727116570328">በርካታ ነገሮችን መያዝ</translation>
 <translation id="3525130752944427905">10 x 14 ኢንች</translation>
@@ -1058,6 +1062,7 @@
 <translation id="3678342917559046352">ልክ ያልኾነ ቅጥያ፦ ዋጋው ከሚከተሉት ቅጾች አንዱ እንደሚሆን ተጠብቆ ነበር፦ &lt;extension_id&gt; ወይም &lt;extension_id&gt;፤&lt;update_url&gt;።</translation>
 <translation id="3678529606614285348">ገጹን ማንነት በማያሳውቅ አዲስ መስኮት ውስጥ ይክፈቱ (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">የሰርቲፊኬት መረጃ</translation>
+<translation id="3693327506115126094">እርስዎ መሆንዎን እንዴት እንደሚያረጋግጡ ይምረጡ</translation>
 <translation id="3699374065820972102">TouchID የይለፍ ቃሎችን ለመሙላት በርቷል</translation>
 <translation id="3701427423622901115">ዳግም ማስጀመር እውቅና ተሰጥቶታል።</translation>
 <translation id="3704162925118123524">እየተጠቀሙ ያሉት አውታረ መረብ በመለያ መግቢያ ገጹን እንዲጎበኙ ሊጠይቅዎት ይችላል።</translation>
@@ -1142,6 +1147,7 @@
 <translation id="3906954721959377182">ጡባዊ</translation>
 <translation id="3909477809443608991"><ph name="URL" /> የተጠበቀ ይዘትን ማጫወት ይፈልጋል። የመሣሪያዎ ማንነት በGoogle የሚረጋገጥ ሲሆን በዚህ ጣቢያ ሊደረስበት ይችላል።</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">የደህንነት ኮድዎን ያስገቡ</translation>
 <translation id="3927932062596804919">ከልክል</translation>
 <translation id="393316646445601645">በይነመረብ እና ቴሌኮም</translation>
 <translation id="3939773374150895049">ከCVC ይልቅ WebAuthnን ይጠቀሙ?</translation>
@@ -1388,6 +1394,7 @@
 <translation id="4524805452350978254">ካርዶችን አቀናብር</translation>
 <translation id="4526465106919207193">ሰዎች እና ህብረተሰብ</translation>
 <translation id="4530347922939905757">የጽሑፍ መልዕክት</translation>
+<translation id="4531477351494678589">ምናባዊ የካርድ ቁጥር፦</translation>
 <translation id="4540780316273593836">የሆነ ችግር ተፈጥሯል</translation>
 <translation id="4541810033354695636">ትክክለኛ እውነታ</translation>
 <translation id="4542971377163063093">መሳቢያ 6</translation>
@@ -1397,6 +1404,7 @@
 <translation id="4567686777917670400">የእርስዎ አስተዳዳሪ በርቀት የአሳሽዎን ውቅረት መቀየር ይችላል። በዚህ መሣሪያ ላይ ያለ እንቅስቃሴ እንዲሁም ከChromium ውጭ ሊተዳደር ይችላል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">ማድረስ</translation>
 <translation id="4582204425268416675">ካርድ አስወግድ</translation>
+<translation id="4582595824823167856">ኤስኤምኤስ ያግኙ</translation>
 <translation id="4587425331216688090">አድራሻ ከChrome ይወገድ?</translation>
 <translation id="459089498662672729">ከ<ph name="ORIGIN_NAME" /> ወደዚህ አካባቢ መለጠፍ በአስተዳዳሪ መመሪያ አይመከርም</translation>
 <translation id="4592951414987517459">ወደ የእርስዎ <ph name="DOMAIN" /> ግንኙነት ዘመናዊ የምስጠራ ጥቅል በመጠቀም ተመስጥሯል።</translation>
@@ -1408,6 +1416,7 @@
 <translation id="4606870351894164739">ተጽዕኖ ፈጣሪ</translation>
 <translation id="4607603470419975064">የChrome ጠቃሚ ምክሮች አዝራር የልከቱ፣ ስለChrome ባህሪዎች ለማወቅ አስገባን ይጫኑ</translation>
 <translation id="4607608436550361748">የChrome ጠቃሚ ምክሮችን ይመልከቱ</translation>
+<translation id="460848736049414407">በአስተዳዳሪ ታግዷል</translation>
 <translation id="4610279718074907952">ይህ ጣቢያ እንቅስቃሴዎን ማየት በሚችል በ<ph name="SET_OWNER" /> በተገለጸ አንድ ቡድን ውስጥ ነው</translation>
 <translation id="4617273035598175554">የግራፊክስ እና የእነማ ሶፍትዌር</translation>
 <translation id="4622292761762557753">ቢሆንም አስተላልፍ</translation>
@@ -1874,6 +1883,7 @@
 <translation id="57689295674415555">ምናባዊ የካርድ ቁጥር አልተሞላም?</translation>
 <translation id="5772086939108830423">አንድ የይለፍ ቁልፍን በተለየ መሣሪያ ላይ ይጠቀሙ</translation>
 <translation id="5776313857861697733">ቅድሚያ</translation>
+<translation id="5776574724412881956">ምናባዊ ካርድ አልተሞላም? ወደ ቅንጥብ ሰሌዳ ለመቅዳት የምናባዊ ካርድ ዝርዝሮችን ጠቅ ያድርጉ። <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">ሙከራ ነቅቷል</translation>
 <translation id="578305955206182703">አምበር</translation>
 <translation id="57838592816432529">ድምፅ ይዝጉ</translation>
@@ -2003,6 +2013,7 @@
 <translation id="6116338172782435947">ወደ ቅንጥብ ሰሌዳው የተቀዱ ጽሁፍ እና ምስሎችን ይመልከቱ</translation>
 <translation id="6118782133429281336">መነሻ ዝርዝር ባዶ ነው።</translation>
 <translation id="6120179357481664955">የእርስዎን UPI መታወቂያ ያስታውሳሉ?</translation>
+<translation id="6122181661879998141">የካርድዎ ፊት ለፊት</translation>
 <translation id="6124432979022149706">Chrome Enterprise አያያዦች</translation>
 <translation id="6126565365696310362">#2 የቻይና ፖስታ</translation>
 <translation id="6127379762771434464">ንጥል ተወግዷል</translation>
@@ -2369,6 +2380,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> ካሜራዎን መጠቀም ይፈልጋል</translation>
 <translation id="7108819624672055576">በቅጥያ የተፈቀደ</translation>
 <translation id="7111012039238467737">(የሚሰራ)</translation>
+<translation id="7112327784801341716">የአሁን መረጃዎን እየተመለከቱ አይደለም? እሱን ለማዘመን ባንክዎን ያነጋግሩ።</translation>
 <translation id="7118618213916969306">የቅንጥብ ሰሌዳ ዩአርኤል <ph name="SHORT_URL" /> ይፈልጉ</translation>
 <translation id="7119414471315195487">ሌሎች ትሮችን ወይም ፕሮግራሞችን ይዝጉ</translation>
 <translation id="7129355289156517987">ሁሉንም የChromium ማንነት የማያሳውቁ ትሮች ሲዘጉ በእነዚህ ትሮች ውስጥ ያለዎት እንቅስቃሴ ከዚህ መሣሪያ ይጸዳል፦
@@ -2672,6 +2684,7 @@
 <translation id="7798389633136518089">መመሪያው በደመና ምንጭ ስላልተቀናበረ ችላ ተብሏል።</translation>
 <translation id="7800304661137206267"><ph name="MAC" /> ለመልዕክት ማረጋገጥ እና ደግሞ <ph name="KX" /> ለቁልፍ መቀያየሪያ ስልቶች በማድረግ ግንኙነቱ <ph name="CIPHER" />ን በመጠቀም የተመሰጠረ ነው።</translation>
 <translation id="7802523362929240268">ጣቢያው ህጋዊ ነው</translation>
+<translation id="7802989406998618639">ባንክዎ እርስዎ መሆንዎን ማረጋገጥ እንዲችል በ<ph name="SIDE_OF_CARD" /> ላይ ያለውን ባለ <ph name="NUMBER_OF_DIGITS" />-አሃዝ የደህንነት ኮድ ያስገቡ</translation>
 <translation id="780301667611848630">አይ፣ አመሰግናለሁ</translation>
 <translation id="7805571567667010077">በእርስዎ ድርጅት የሚተዳደር</translation>
 <translation id="7805768142964895445">ሁኔታ</translation>
@@ -3000,6 +3013,7 @@
 <translation id="8725066075913043281">እንደገና ይሞክሩ</translation>
 <translation id="8726549941689275341">የገጽ መጠን፦</translation>
 <translation id="8730621377337864115">ተከናውኗል</translation>
+<translation id="8731268612289859741">የደህንነት ኮድ</translation>
 <translation id="8731544501227493793">የይለፍ ቃላት አዝራርን ያቀናብሩ፣ የእርስዎን የይለፍ ቃላት በChrome ቅንብሮች ውስጥ ለማየት እና ለማቀናበር አስገባን ይጫኑ</translation>
 <translation id="8734529307927223492">የእርስዎ <ph name="DEVICE_TYPE" /> በ<ph name="MANAGER" /> የሚተዳደር ነው</translation>
 <translation id="8736059027199600831">30 x 40 ኢንች</translation>
@@ -3105,6 +3119,7 @@
 <translation id="9005998258318286617">የፒዲኤፍ ሰነድ መጫን አልተሳካም።</translation>
 <translation id="9008178007718859630">የቤት እና የውስጥ ማስጌጫ</translation>
 <translation id="9008201768610948239">ችላ በል</translation>
+<translation id="9018120810758822233">ለ<ph name="CREDIT_CARD" /> የይለፍ ኮድዎን ያስገቡ</translation>
 <translation id="901834265349196618">ኢሜይል</translation>
 <translation id="9020200922353704812">የካርድ ማስከፈያ አድራሻ ያስፈልጋል</translation>
 <translation id="9020542370529661692">ይህ ገጽ ወደ <ph name="TARGET_LANGUAGE" /> ተተርጉሟል</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb
index 871fa317..1e59f698 100644
--- a/components/strings/components_strings_as.xtb
+++ b/components/strings/components_strings_as.xtb
@@ -1428,6 +1428,7 @@
 <translation id="4646534391647090355">মোক এতিয়াই তালৈ নিয়ক</translation>
 <translation id="4648262692072505866">হেশ্বৰ ফৰ্মেট SHA-256 হ’বই লাগিব।</translation>
 <translation id="4652266463001779298">অনুমতি নাই</translation>
+<translation id="4652440160515225514">আপোনাৰ প্ৰতিষ্ঠানে এই ছাইটটো অৱৰোধ কৰিছে কাৰণ ই এটা নীতি উলংঘন কৰিছে।</translation>
 <translation id="4653167719759882810">একত্ৰিকৰণ</translation>
 <translation id="4658638640878098064">ওপৰৰ বাওঁফালে ষ্টে'পল কৰক</translation>
 <translation id="4660119392514473465">এতিয়া আপুনি ব্যক্তিগতভাৱে ব্ৰাউজ কৰিব পাৰিব আৰু এই ডিভাইচটো ব্যৱহাৰ কৰা অন্য লোকসকলে আপোনাৰ কাৰ্যকলাপ দেখা নাপাব। অৱশ্যে, ডাউনল’ড, বুকমাৰ্ক আৰু পঢ়াৰ সূচীৰ বস্তুবোৰ ছেভ কৰা হ’ব।</translation>
@@ -2915,6 +2916,7 @@
 <translation id="8437238597147034694">স্থানান্তৰ কৰা কার্যটো &amp;আনডু কৰক</translation>
 <translation id="8438476240229491014">এই ছেটিংটো মনত ৰাখিব</translation>
 <translation id="8438786541497918448">কেমেৰা আৰু মাইক্ৰ’ফ’ন ব্যৱহাৰ কৰিবনে?</translation>
+<translation id="8438923942245957911">আপোনাৰ প্ৰতিষ্ঠানে এই ছাইটটো ফ্লেগ কৰিছে</translation>
 <translation id="8443613539889492016">ৰেপ আৰু হিপ-হপ</translation>
 <translation id="8444543005280733648">কম্পিউটাৰ নেটৱৰ্ক</translation>
 <translation id="8446884382197647889">অধিক জানক</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb
index 0b6a919..e54efa3 100644
--- a/components/strings/components_strings_az.xtb
+++ b/components/strings/components_strings_az.xtb
@@ -1428,6 +1428,7 @@
 <translation id="4646534391647090355">İndi giriş edilsin</translation>
 <translation id="4648262692072505866">Heş SHA-256 formatında olmalıdır.</translation>
 <translation id="4652266463001779298">İcazə verilmir</translation>
+<translation id="4652440160515225514">Siyasəti pozduğuna görə təşkilatınız bu saytı bloklayıb.</translation>
 <translation id="4653167719759882810">Birləşmə və alış</translation>
 <translation id="4658638640878098064">Yuxarı soldan ştapel vurun</translation>
 <translation id="4660119392514473465">İndi şəxsi axtarış edə bilərsiniz və bu cihazı istifadə edən digər şəxslər fəaliyyətinizi görməyəcək. Lakin endirmələr, əlfəcinlər və oxu siyahısı elementləri yadda saxlanacaq.</translation>
@@ -2916,6 +2917,7 @@
 <translation id="8437238597147034694">&amp;Daşınmanı ləğv edin</translation>
 <translation id="8438476240229491014">Bu ayarı yadda saxlayın</translation>
 <translation id="8438786541497918448">Kamera və mikrofon istifadə edilsin?</translation>
+<translation id="8438923942245957911">Bu sayt təşkilatınız tərəfindən işarələnib</translation>
 <translation id="8443613539889492016">Rep və hip-hop</translation>
 <translation id="8444543005280733648">Kompüter şəbəkələri</translation>
 <translation id="8446884382197647889">Ətraflı Məlumat</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index 5588cf5..77a7116 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Odvedi me tamo sada</translation>
 <translation id="4648262692072505866">Hash mora biti u formatu SHA-256.</translation>
 <translation id="4652266463001779298">Nije dozvoljeno</translation>
+<translation id="4652440160515225514">Vaša organizacija je blokirala ovu web lokaciju zbog kršenja pravila.</translation>
 <translation id="4653167719759882810">Spajanja i preuzimanja</translation>
 <translation id="4658638640878098064">Spajanje u gornjem lijevom uglu</translation>
 <translation id="4660119392514473465">Sada možete pregledati privatno, a drugi korisnici ovog uređaja neće vidjeti vašu aktivnost. Međutim, preuzimanja, oznake i stavke s liste za čitanje će se sačuvati.</translation>
@@ -2920,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;Poništi premještanje</translation>
 <translation id="8438476240229491014">Zapamti ovu postavku</translation>
 <translation id="8438786541497918448">Koristiti kameru i mikrofon?</translation>
+<translation id="8438923942245957911">Vaša organizacija je prijavila ovu web lokaciju</translation>
 <translation id="8443613539889492016">Rap i hip-hop muzika</translation>
 <translation id="8444543005280733648">Računarske mreže</translation>
 <translation id="8446884382197647889">Saznajte više</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index c1ee55d..0111f61 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, stisknutím klávesy Tab a poté Enter můžete spravovat své údaje, ochranu soukromí a zabezpečení v účtu Google</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, je k dispozici několik akcí, můžete je procházet stisknutím klávesy Tab</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Podrobnosti virtuální karty</translation>
 <translation id="1803020234906945288">Zdravá výživa</translation>
 <translation id="1803264062614276815">Jméno držitele karty</translation>
 <translation id="1803351196216024260">Může žádat o použití mikrofonu</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 × 34 palců</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 návrh}few{# návrhy}many{# návrhu}other{# návrhů}}</translation>
 <translation id="2066915425250589881">požádat o jejich smazání</translation>
+<translation id="2066969741541525119">Web, na který se pokoušíte přejít, je vaší organizací blokován</translation>
 <translation id="2068528718802935086">Děti a batolata</translation>
 <translation id="2071156619270205202">Tato karta není pro číslo virtuální karty vhodná.</translation>
 <translation id="2071692954027939183">Oznámení byla automaticky zablokována, protože je obvykle nepovolujete</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Několik děr dole</translation>
 <translation id="219906046732893612">Vylepšování domácnosti</translation>
 <translation id="2202020181578195191">Zadejte platný rok vypršení platnosti</translation>
+<translation id="2202627062836089804">zadní strana karty</translation>
 <translation id="22081806969704220">Přihrádka 3</translation>
 <translation id="2210794033760923560">Nahrát přehled</translation>
 <translation id="2212735316055980242">Zásada nebyla nalezena</translation>
@@ -982,6 +985,7 @@
 <translation id="350069200438440499">Název souboru:</translation>
 <translation id="3507936815618196901">Vytvářet 3D mapu vašeho okolí a sledovat polohu kamery</translation>
 <translation id="3512163584740124171">Tato zásada se ignoruje, protože jiná zásada ze stejné skupiny zásad má vyšší prioritu.</translation>
+<translation id="3515972145999192222">Vaše organizace doménu <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> zablokovala, protože porušuje zásady. <ph name="BEGIN_LEARN_MORE_LINK" />Další informace<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">Tlačítko Spravovat adresy, stisknutím klávesy Enter můžete přidávat a spravovat adresy v nastavení Chromu</translation>
 <translation id="3518941727116570328">Zpracování více objektů</translation>
 <translation id="3525130752944427905">10 × 14″</translation>
@@ -1055,6 +1059,7 @@
 <translation id="3678342917559046352">Neplatné rozšíření: Očekávána hodnota v některém z těchto formátů: &lt;extension_id&gt; nebo &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Otevřete stránku v novém anonymním okně (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">Informace o certifikátu</translation>
+<translation id="3693327506115126094">Vyberte způsob ověření totožnosti</translation>
 <translation id="3699374065820972102">Pro vyplňování hesel je zapnutá funkce TouchID</translation>
 <translation id="3701427423622901115">Resetování bylo potvrzeno.</translation>
 <translation id="3704162925118123524">Síť, kterou používáte, může vyžadovat, abyste navštívili její stránku přihlášení.</translation>
@@ -1139,6 +1144,7 @@
 <translation id="3906954721959377182">Tablet</translation>
 <translation id="3909477809443608991"><ph name="URL" /> chce přehrávat chráněný obsah. Google ověří identitu vašeho zařízení a tento web k ní může získat přístup.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Zadat bezpečnostní kód</translation>
 <translation id="3927932062596804919">Odmítnout</translation>
 <translation id="393316646445601645">Internet a telekomunikace</translation>
 <translation id="3939773374150895049">Použít WebAuthn namísto CVC?</translation>
@@ -1385,6 +1391,7 @@
 <translation id="4524805452350978254">Spravovat karty</translation>
 <translation id="4526465106919207193">Lidé a společnost</translation>
 <translation id="4530347922939905757">Textová zpráva</translation>
+<translation id="4531477351494678589">Číslo virtuální karty:</translation>
 <translation id="4540780316273593836">Něco se pokazilo</translation>
 <translation id="4541810033354695636">rozšířená realita</translation>
 <translation id="4542971377163063093">Přihrádka 6</translation>
@@ -1394,6 +1401,7 @@
 <translation id="4567686777917670400">Administrátor může nastavení prohlížeče vzdáleně změnit. Aktivita na tomto zařízení může být spravována také mimo Chromium. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Doručení</translation>
 <translation id="4582204425268416675">Odebrat kartu</translation>
+<translation id="4582595824823167856">Zaslat textovou zprávu</translation>
 <translation id="4587425331216688090">Odstranit adresu z Chromu?</translation>
 <translation id="459089498662672729">Vkládání ze zdroje <ph name="ORIGIN_NAME" /> do tohoto umístění zásady administrátora nedoporučují</translation>
 <translation id="4592951414987517459">Vaše připojení k doméně <ph name="DOMAIN" /> je šifrováno za použití moderní šifrovací sady.</translation>
@@ -1405,6 +1413,7 @@
 <translation id="4606870351894164739">Působivé</translation>
 <translation id="4607603470419975064">Tlačítko Zobrazit tipy k Chromu, stisknutím klávesy Enter zobrazíte další informace o funkcích Chromu</translation>
 <translation id="4607608436550361748">Zobrazit tipy k Chromu</translation>
+<translation id="460848736049414407">Blokováno administrátorem</translation>
 <translation id="4610279718074907952">Tento web je ve skupině definované vlastníkem <ph name="SET_OWNER" />, která může sledovat vaši aktivitu</translation>
 <translation id="4617273035598175554">Grafika a animační software</translation>
 <translation id="4622292761762557753">Přesto přenést</translation>
@@ -1871,6 +1880,7 @@
 <translation id="57689295674415555">Číslo virtuální karty není vyplněno?</translation>
 <translation id="5772086939108830423">Použít přístupový klíč na jiném zařízení</translation>
 <translation id="5776313857861697733">Priorita</translation>
+<translation id="5776574724412881956">Virtuální karta se nevyplnila? Kliknutím na podrobnosti o virtuální kartě je můžete zkopírovat do schránky. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Je zapnutý experiment</translation>
 <translation id="578305955206182703">Žlutohnědá</translation>
 <translation id="57838592816432529">Ztlumit</translation>
@@ -2000,6 +2010,7 @@
 <translation id="6116338172782435947">Přístup k textu a obrázkům zkopírovaným do schránky</translation>
 <translation id="6118782133429281336">Seznam zdrojů je prázdný.</translation>
 <translation id="6120179357481664955">Uložit vaše UPI ID?</translation>
+<translation id="6122181661879998141">přední strana karty</translation>
 <translation id="6124432979022149706">Konektory Chrome Enterprise</translation>
 <translation id="6126565365696310362">Obálka čínská č. 2</translation>
 <translation id="6127379762771434464">Položka byla odstraněna</translation>
@@ -2365,6 +2376,7 @@
 <translation id="7108634116785509031">Webová stránka <ph name="HOST" /> chce použít vaši kameru</translation>
 <translation id="7108819624672055576">Povoleno rozšířením</translation>
 <translation id="7111012039238467737">(platný)</translation>
+<translation id="7112327784801341716">Pokud údaje nejsou aktuální, požádejte banku o aktualizaci.</translation>
 <translation id="7118618213916969306">Vyhledat adresu URL ve schránce, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">Zavřete ostatní karty nebo programy</translation>
 <translation id="7129355289156517987">Když zavřete všechny anonymní karty prohlížeče Chromium, vaše aktivita na těchto kartách bude ze zařízení vymazána:
@@ -2667,6 +2679,7 @@
 <translation id="7798389633136518089">Ignorováno, protože tuto zásadu nenastavil cloudový zdroj.</translation>
 <translation id="7800304661137206267">Připojení je šifrováno pomocí standardu <ph name="CIPHER" /> s algoritmem <ph name="MAC" /> pro ověřování zpráv a mechanizmem výměny klíčů <ph name="KX" />.</translation>
 <translation id="7802523362929240268">Web je důvěryhodný</translation>
+<translation id="7802989406998618639">Zadejte <ph name="NUMBER_OF_DIGITS" />místný bezpečnostní kód na kartě <ph name="SIDE_OF_CARD" />, aby banka mohla ověřit vaši totožnost</translation>
 <translation id="780301667611848630">Ne, děkuji</translation>
 <translation id="7805571567667010077">Spravováno vaší organizací</translation>
 <translation id="7805768142964895445">Stav</translation>
@@ -2995,6 +3008,7 @@
 <translation id="8725066075913043281">Zkusit znovu</translation>
 <translation id="8726549941689275341">Velikost stránky:</translation>
 <translation id="8730621377337864115">Hotovo</translation>
+<translation id="8731268612289859741">Bezpečnostní kód</translation>
 <translation id="8731544501227493793">Tlačítko Spravovat hesla, stisknutím klávesy Enter můžete zobrazit a spravovat hesla v nastavení Chromu</translation>
 <translation id="8734529307927223492">Váš <ph name="DEVICE_TYPE" /> spravuje doména <ph name="MANAGER" /></translation>
 <translation id="8736059027199600831">30 × 40″</translation>
@@ -3100,6 +3114,7 @@
 <translation id="9005998258318286617">Načtení dokumentu PDF se nezdařilo.</translation>
 <translation id="9008178007718859630">Domácí a interiérové dekorace</translation>
 <translation id="9008201768610948239">Ignorovat</translation>
+<translation id="9018120810758822233">Zadejte bezpečnostní kód pro kartu <ph name="CREDIT_CARD" /></translation>
 <translation id="901834265349196618">e-mail</translation>
 <translation id="9020200922353704812">Fakturační adresa karty je povinná</translation>
 <translation id="9020542370529661692">Stránka byla přeložena do jazyka <ph name="TARGET_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 877fb8db..1bc1126f 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Camera</translation>
 <translation id="1622571349153632031">Vegetarian cuisine</translation>
 <translation id="1623104350909869708">Prevent this page from creating additional dialogues</translation>
+<translation id="1633137413609266904">{0,plural, =1{Opening this file is blocked by administrator policy}other{Opening # files is blocked by administrator policy}}</translation>
 <translation id="1634828734222219955">Total</translation>
 <translation id="163669211644121865">Tax preparation and planning</translation>
 <translation id="1638780421120290329">Can't save card</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;Undo Reorder</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> wants to connect</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Administrator policy doesn’t recommend opening this file in <ph name="DESTINATION_NAME" />}other{Administrator policy doesn’t recommend opening these files in <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Your organisation, <ph name="ENROLLMENT_DOMAIN" />, has sent some info to the following websites, like settings or policies.</translation>
 <translation id="3282497668470633863">Add name on card</translation>
 <translation id="3286372614333682499">portrait</translation>
@@ -1295,6 +1297,7 @@
 <translation id="4275830172053184480">Restart your device</translation>
 <translation id="4277028893293644418">Reset password</translation>
 <translation id="4278390842282768270">Allowed</translation>
+<translation id="4281998142035485137">{0,plural, =1{Open confidential file?}other{Open confidential files?}}</translation>
 <translation id="4282346679996504092">Alerts for this product have been turned off and the bookmark removed</translation>
 <translation id="4285498937028063278">Unpin</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{This card has been saved in your Google Account}other{These cards have been saved in your Google Account}}</translation>
@@ -1929,6 +1932,7 @@
 <translation id="5903264686717710770">Title:</translation>
 <translation id="5904360430676679685">Family and relationships</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synced)</translation>
+<translation id="5911110632211230665">Blocked open</translation>
 <translation id="59174027418879706">Enabled</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 in use}other{# in use}}</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index af22b86..459cf96 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, presiona Tab y, luego, Intro para administrar la información, privacidad y seguridad de tu Cuenta de Google</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />: hay varias acciones disponibles; presiona Tab para elegir una</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Detalles de la tarjeta virtual</translation>
 <translation id="1803020234906945288">Nutrición saludable</translation>
 <translation id="1803264062614276815">Nombre del titular de la tarjeta</translation>
 <translation id="1803351196216024260">Puede solicitar permiso para usar el micrófono</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">55.88 × 86.36 cm</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 sugerencia}other{# sugerencias}}</translation>
 <translation id="2066915425250589881">solicitar que se borre</translation>
+<translation id="2066969741541525119">Tu organización bloqueó el sitio que intentas abrir</translation>
 <translation id="2068528718802935086">Bebés y niños pequeños</translation>
 <translation id="2071156619270205202">Esta tarjeta no admite un número de tarjeta virtual.</translation>
 <translation id="2071692954027939183">Se bloquearon las notificaciones de forma automática porque no sueles permitirlas.</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Perforaciones múltiples en la parte inferior</translation>
 <translation id="219906046732893612">Mejora del hogar</translation>
 <translation id="2202020181578195191">Ingresa un año de vencimiento válido</translation>
+<translation id="2202627062836089804">dorso de tu tarjeta</translation>
 <translation id="22081806969704220">Bandeja 3</translation>
 <translation id="2210794033760923560">Subir informe</translation>
 <translation id="2212735316055980242">No se encontró la política.</translation>
@@ -986,6 +989,7 @@
 <translation id="350069200438440499">Nombre de archivo:</translation>
 <translation id="3507936815618196901">Crear un mapa 3D de tu entorno y hacer un seguimiento de la posición de la cámara</translation>
 <translation id="3512163584740124171">Se ignora esta política porque otra del mismo grupo tiene prioridad.</translation>
+<translation id="3515972145999192222">Tu organización bloqueó <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> porque infringe una política. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">Botón Administrar direcciones: presiona Intro para agregar y administrar direcciones en la configuración de Chrome</translation>
 <translation id="3518941727116570328">Control de varios objetos</translation>
 <translation id="3525130752944427905">25.4 × 35.6 cm (10 × 14 in)</translation>
@@ -1060,6 +1064,7 @@
 <translation id="3678342917559046352">La extensión no es válida: Se esperaba que el valor fuera uno de los siguientes formatos: &lt;extension_id&gt; o &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Abre la página en una nueva ventana de incógnito (Ctrl-mayúscula-N).</translation>
 <translation id="3681007416295224113">Información sobre el certificado</translation>
+<translation id="3693327506115126094">Elige cómo verificar tu identidad</translation>
 <translation id="3699374065820972102">Se activó TouchID para completar contraseñas</translation>
 <translation id="3701427423622901115">Se detectó el restablecimiento.</translation>
 <translation id="3704162925118123524">Es posible que la red que estás usando requiera que visites la página de acceso.</translation>
@@ -1144,6 +1149,7 @@
 <translation id="3906954721959377182">Tablet</translation>
 <translation id="3909477809443608991"><ph name="URL" /> quiere reproducir contenido protegido. Google verificará la identidad de tu dispositivo, y es posible que este sitio acceda a ella.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Ingresa el código de seguridad</translation>
 <translation id="3927932062596804919">Rechazar</translation>
 <translation id="393316646445601645">Internet y telecomunicaciones</translation>
 <translation id="3939773374150895049">¿Deseas usar WebAuthn en lugar de CVC?</translation>
@@ -1390,6 +1396,7 @@
 <translation id="4524805452350978254">Administrar tarjetas</translation>
 <translation id="4526465106919207193">Personas y sociedad</translation>
 <translation id="4530347922939905757">Mensaje de texto</translation>
+<translation id="4531477351494678589">Número de tarjeta virtual:</translation>
 <translation id="4540780316273593836">Se produjo un error</translation>
 <translation id="4541810033354695636">realidad aumentada</translation>
 <translation id="4542971377163063093">Bandeja 6</translation>
@@ -1399,6 +1406,7 @@
 <translation id="4567686777917670400">El administrador puede cambiar la configuración de tu navegador de forma remota. Es posible que la actividad correspondiente a este dispositivo también se administre fuera de Chromium. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Entrega</translation>
 <translation id="4582204425268416675">Quitar tarjeta</translation>
+<translation id="4582595824823167856">Recibir un mensaje de texto</translation>
 <translation id="4587425331216688090">¿Confirmas que quieres quitar la dirección de Chrome?</translation>
 <translation id="459089498662672729">La política del administrador no recomienda pegar contenido de <ph name="ORIGIN_NAME" /> en esta ubicación</translation>
 <translation id="4592951414987517459">Tu conexión a <ph name="DOMAIN" /> está encriptada con un conjunto de cifrado moderno.</translation>
@@ -1410,6 +1418,7 @@
 <translation id="4606870351894164739">Impactful</translation>
 <translation id="4607603470419975064">Botón para ver sugerencias de Chrome, presiona Intro para conocer las funciones de Chrome</translation>
 <translation id="4607608436550361748">Ver sugerencias para Chrome</translation>
+<translation id="460848736049414407">Bloqueada por el administrador</translation>
 <translation id="4610279718074907952">Este sitio está en un grupo, definido por <ph name="SET_OWNER" />, que puede ver tu actividad</translation>
 <translation id="4617273035598175554">Software de gráficos y animación</translation>
 <translation id="4622292761762557753">Transferir de todos modos</translation>
@@ -1876,6 +1885,7 @@
 <translation id="57689295674415555">¿No se completó el número de la tarjeta virtual?</translation>
 <translation id="5772086939108830423">Usar una clave de acceso en otro dispositivo</translation>
 <translation id="5776313857861697733">Prioridad</translation>
+<translation id="5776574724412881956">¿No se completaron los datos de la tarjeta virtual? Haz clic en los detalles de la tarjeta virtual para copiarlos en el portapapeles. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Se habilitó un experimento</translation>
 <translation id="578305955206182703">Ámbar</translation>
 <translation id="57838592816432529">Silenciar</translation>
@@ -2005,6 +2015,7 @@
 <translation id="6116338172782435947">Ver el texto y las imágenes copiados en el portapapeles</translation>
 <translation id="6118782133429281336">La lista de origen está vacía.</translation>
 <translation id="6120179357481664955">¿Recuerdas tu ID de IUP?</translation>
+<translation id="6122181661879998141">frente de la tarjeta</translation>
 <translation id="6124432979022149706">Conectores de Chrome Enterprise</translation>
 <translation id="6126565365696310362">Sobre chino n.º 2</translation>
 <translation id="6127379762771434464">Se eliminó el elemento</translation>
@@ -2371,6 +2382,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> desea usar tu cámara</translation>
 <translation id="7108819624672055576">Permitido por una extensión</translation>
 <translation id="7111012039238467737">(Válido)</translation>
+<translation id="7112327784801341716">Si no aparece tu información actual, comunícate con tu banco para actualizarla.</translation>
 <translation id="7118618213916969306">Buscar la URL <ph name="SHORT_URL" /> del portapapeles</translation>
 <translation id="7119414471315195487">Cierra las demás pestañas o programas.</translation>
 <translation id="7129355289156517987">Cuando cierras todas las pestañas de incógnito en Chromium, tu actividad en ellas se borra del dispositivo:
@@ -2674,6 +2686,7 @@
 <translation id="7798389633136518089">Se ignoró porque la política no se estableció desde un origen de la nube.</translation>
 <translation id="7800304661137206267">La conexión está encriptada mediante <ph name="CIPHER" />, con <ph name="MAC" /> para la autenticación de mensajes y <ph name="KX" /> como mecanismo de intercambio clave.</translation>
 <translation id="7802523362929240268">El sitio es legítimo</translation>
+<translation id="7802989406998618639">Ingresa el código de seguridad de <ph name="NUMBER_OF_DIGITS" /> dígitos en el <ph name="SIDE_OF_CARD" /> para que el banco pueda verificar tu identidad</translation>
 <translation id="780301667611848630">No, gracias</translation>
 <translation id="7805571567667010077">Administrado por tu organización</translation>
 <translation id="7805768142964895445">Estado</translation>
@@ -3002,6 +3015,7 @@
 <translation id="8725066075913043281">Intentar nuevamente</translation>
 <translation id="8726549941689275341">Tamaño de la página:</translation>
 <translation id="8730621377337864115">Listo</translation>
+<translation id="8731268612289859741">Código de seguridad</translation>
 <translation id="8731544501227493793">Botón Administrar contraseñas: presiona Intro para ver y administrar tus contraseñas en la configuración de Chrome</translation>
 <translation id="8734529307927223492"><ph name="MANAGER" /> administra tu dispositivo <ph name="DEVICE_TYPE" /></translation>
 <translation id="8736059027199600831">76.2 × 101.6 cm (30 × 40 in)</translation>
@@ -3107,6 +3121,7 @@
 <translation id="9005998258318286617">No se pudo cargar el documento PDF.</translation>
 <translation id="9008178007718859630">Decoración del hogar y de interiores</translation>
 <translation id="9008201768610948239">Ignorar</translation>
+<translation id="9018120810758822233">Ingresa el código de seguridad de <ph name="CREDIT_CARD" /></translation>
 <translation id="901834265349196618">Correo electrónico</translation>
 <translation id="9020200922353704812">Se requiere una dirección de facturación de la tarjeta</translation>
 <translation id="9020542370529661692">Esta página se tradujo al <ph name="TARGET_LANGUAGE" />.</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index fb0a8744..26818b5d 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />: sakatu tabuladorea eta, ondoren, "Sartu" Google-ko kontuko informazioa, pribatutasuna eta segurtasuna kudeatzeko</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />: hainbat ekintza dituzu eskuragarri. Sakatu tabuladorea batetik bestera joateko.</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Txartel birtualaren xehetasunak</translation>
 <translation id="1803020234906945288">Elikadura osasungarria</translation>
 <translation id="1803264062614276815">Txartelaren titularraren izena</translation>
 <translation id="1803351196216024260">Mikrofonoa erabiltzea eska dezake</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">55,88 × 86,36 cm (22 × 34 in)</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 iradokizun}other{# iradokizun}}</translation>
 <translation id="2066915425250589881">hura ezabatzea eska dezakezu</translation>
+<translation id="2066969741541525119">Webgune hori blokeatuta dauka zure erakundeak</translation>
 <translation id="2068528718802935086">Haurtxoak eta ume txikiak</translation>
 <translation id="2071156619270205202">Txartela ez da egokia txartel birtualaren zenbaki bat izateko.</translation>
 <translation id="2071692954027939183">Automatikoki blokeatu dira jakinarazpenak, normalean ez dituzulako onartzen</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Hainbat zulo behean</translation>
 <translation id="219906046732893612">Etxeko hobekuntzak</translation>
 <translation id="2202020181578195191">Idatzi balio duen iraungitze-urte bat</translation>
+<translation id="2202627062836089804">txartelaren atzealdean</translation>
 <translation id="22081806969704220">3. erretilua</translation>
 <translation id="2210794033760923560">Kargatu txostena</translation>
 <translation id="2212735316055980242">Ez da gidalerroa aurkitu</translation>
@@ -981,6 +984,7 @@
 <translation id="350069200438440499">Fitxategiaren izena:</translation>
 <translation id="3507936815618196901">Inguruaren 3D-ko mapa bat sortu eta kameraren posizioaren jarraipena egin.</translation>
 <translation id="3512163584740124171">Ez ikusi egin zaio gidalerro honi, gidalerro-talde bereko beste gidalerro batek lehentasun handiagoa duelako.</translation>
+<translation id="3515972145999192222">Zure erakundeak <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> blokeatu du, gidalerroetako bat urratzen duelako. <ph name="BEGIN_LEARN_MORE_LINK" />Lortu informazio gehiago<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">Helbideak kudeatzeko botoia, sakatu Sartu Chrome-ren ezarpenetara joan, eta helbideak gehitzeko eta kudeatzeko</translation>
 <translation id="3518941727116570328">Objektu bat baino gehiago kudeatzea</translation>
 <translation id="3525130752944427905">25,4 × 35,56 cm (10 × 14 in)</translation>
@@ -1055,6 +1059,7 @@
 <translation id="3678342917559046352">Luzapenak ez du balio: balioak formatu hauetako bat izatea espero zen: &lt;extension_id&gt; edo &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Ireki orria ezkutuko moduko leiho berri batean (Ktrl-Maius-N)</translation>
 <translation id="3681007416295224113">Ziurtagiriaren informazioa</translation>
+<translation id="3693327506115126094">Aukeratu nola egiaztatuko dugun zeu zarela</translation>
 <translation id="3699374065820972102">Touch ID aktibatuta dago pasahitzen eremuak betetzeko</translation>
 <translation id="3701427423622901115">Berrezarri dira balio lehenetsiak.</translation>
 <translation id="3704162925118123524">Baliteke darabilzun sarean saioa hasteko orrira joan behar izatea hura erabili ahal izateko.</translation>
@@ -1139,6 +1144,7 @@
 <translation id="3906954721959377182">Tableta</translation>
 <translation id="3909477809443608991"><ph name="URL" /> webguneak eduki babestua erreproduzitu nahi du. Gailuaren identitatea egiaztatuko du Google-k eta baliteke webgune honek atzitzea.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Idatzi segurtasun-kodea</translation>
 <translation id="3927932062596804919">Ukatu</translation>
 <translation id="393316646445601645">Internet eta telekomunikazioak</translation>
 <translation id="3939773374150895049">WebAuthn erabili nahi duzu CVC kodearen ordez?</translation>
@@ -1385,6 +1391,7 @@
 <translation id="4524805452350978254">Kudeatu txartelak</translation>
 <translation id="4526465106919207193">Jendea eta gizartea</translation>
 <translation id="4530347922939905757">Testu-mezua</translation>
+<translation id="4531477351494678589">Txartel birtualaren zenbakia:</translation>
 <translation id="4540780316273593836">Arazo bat izan da</translation>
 <translation id="4541810033354695636">errealitate areagotua</translation>
 <translation id="4542971377163063093">6. erretilua</translation>
@@ -1394,6 +1401,7 @@
 <translation id="4567686777917670400">Administratzaileak urrunetik alda dezake arakatzailearen konfigurazioa. Baliteke gailu honetako jarduerak Chromium-etik kanpo ere kudeatzea. <ph name="BEGIN_LINK" />Lortu informazio gehiago<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Entrega</translation>
 <translation id="4582204425268416675">Kendu txartela</translation>
+<translation id="4582595824823167856">Jaso testu-mezu bat</translation>
 <translation id="4587425331216688090">Helbidea Chrome-tik kendu nahi duzu?</translation>
 <translation id="459089498662672729">Administratzailearen gidalerroek ez dute gomendatzen <ph name="ORIGIN_NAME" /> domeinuko edukia kokapen honetan itsastea</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" /> domeinurako konexioa enkriptatze multzo moderno bat erabilita enkriptatu da.</translation>
@@ -1405,6 +1413,7 @@
 <translation id="4606870351894164739">Txundigarria</translation>
 <translation id="4607603470419975064">Chrome-ri buruzko aholkuak ikusteko botoia: sakatu "Sartu" Chrome-ren eginbideei buruzko informazioa lortzeko</translation>
 <translation id="4607608436550361748">Ikusi Chrome-ri buruzko aholkuak</translation>
+<translation id="460848736049414407">Administratzaileak blokeatu du</translation>
 <translation id="4610279718074907952">Egiten dituzun jarduerak ikus ditzakeen talde batean (<ph name="SET_OWNER" /> domeinuak definitutakoa) dago webgunea</translation>
 <translation id="4617273035598175554">Grafikoak eta animazio-softwareak</translation>
 <translation id="4622292761762557753">Transferitu halere</translation>
@@ -1871,6 +1880,7 @@
 <translation id="57689295674415555">Txartel birtualaren zenbakia ez dago beteta?</translation>
 <translation id="5772086939108830423">Erabili sarbide-gako bat beste gailu batean</translation>
 <translation id="5776313857861697733">Lehentasuna</translation>
+<translation id="5776574724412881956">Ez da bete txartel birtuala? Arbelean kopiatzeko, sakatu txartel birtualaren xehetasunak. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Proba gaituta dago</translation>
 <translation id="578305955206182703">Horixka</translation>
 <translation id="57838592816432529">Desaktibatu audioa</translation>
@@ -2000,6 +2010,7 @@
 <translation id="6116338172782435947">Arbelean kopiatzen ditudan testuak eta irudiak ikusi.</translation>
 <translation id="6118782133429281336">Jatorrizko zerrenda hutsik dago.</translation>
 <translation id="6120179357481664955">Gogoan al duzu UPIko IDa?</translation>
+<translation id="6122181661879998141">txartelaren aurrealdean</translation>
 <translation id="6124432979022149706">Chrome Enterprise Connectors</translation>
 <translation id="6126565365696310362">Gutun-azal txinatarra 2</translation>
 <translation id="6127379762771434464">Kendu egin da elementua</translation>
@@ -2365,6 +2376,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> webguneak kamera erabili nahi du</translation>
 <translation id="7108819624672055576">Luzapen batek baimendu du</translation>
 <translation id="7111012039238467737">(balio du)</translation>
+<translation id="7112327784801341716">Informazioa ez dago eguneratuta? Jarri bankuarekin harremanetan egunera dezaten.</translation>
 <translation id="7118618213916969306">Bilatu arbeleko URLa (<ph name="SHORT_URL" />)</translation>
 <translation id="7119414471315195487">Itxi beste fitxa edo programa batzuk</translation>
 <translation id="7129355289156517987">Chromium-eko ezkutuko moduko fitxa guztiak ixten dituzunean, fitxa horietan egindako jarduerak gailutik ezabatuko dira:
@@ -2668,6 +2680,7 @@
 <translation id="7798389633136518089">Gidalerroari ez ikusi egin zaio ez duelako hodeiko iturri batek ezarri.</translation>
 <translation id="7800304661137206267">Konexioa <ph name="CIPHER" /> bidez enkriptatuta dago, <ph name="MAC" /> erabiltzen du mezu-autentifikaziorako eta <ph name="KX" /> du gako-trukaketarako mekanismo gisa.</translation>
 <translation id="7802523362929240268">Fidagarria da webgunea</translation>
+<translation id="7802989406998618639">Idatzi <ph name="SIDE_OF_CARD" /> dagoen <ph name="NUMBER_OF_DIGITS" /> digituko segurtasun-kodea, bankuak zeu zarela egiaztatu ahal izan dezan</translation>
 <translation id="780301667611848630">Ez, eskerrik asko</translation>
 <translation id="7805571567667010077">Erakundeak kudeatzen du</translation>
 <translation id="7805768142964895445">Egoera</translation>
@@ -2995,6 +3008,7 @@
 <translation id="8725066075913043281">Saiatu berriro</translation>
 <translation id="8726549941689275341">Orriaren tamaina:</translation>
 <translation id="8730621377337864115">Eginda</translation>
+<translation id="8731268612289859741">Segurtasun-kodea</translation>
 <translation id="8731544501227493793">"Kudeatu pasahitzak" botoia: sakatu "Sartu"·pasahitzak ikusi eta kudeatzeko Chrome-ren ezarpenetan</translation>
 <translation id="8734529307927223492"><ph name="MANAGER" /> domeinuak kudeatzen du <ph name="DEVICE_TYPE" /> gailua</translation>
 <translation id="8736059027199600831">76,2 × 101,6 cm (30 × 40 in)</translation>
@@ -3100,6 +3114,7 @@
 <translation id="9005998258318286617">Ezin izan da kargatu PDF dokumentua.</translation>
 <translation id="9008178007718859630">Etxeko eta barrualdeko dekorazioa</translation>
 <translation id="9008201768610948239">Egin ez ikusi</translation>
+<translation id="9018120810758822233">Idatzi <ph name="CREDIT_CARD" /> kreditu-txartelaren segurtasun-kodea</translation>
 <translation id="901834265349196618">helbide elektronikoa</translation>
 <translation id="9020200922353704812">Txartelaren fakturazio-helbidea behar da</translation>
 <translation id="9020542370529661692">Orria <ph name="TARGET_LANGUAGE" /> hizkuntzara itzuli da</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 89807df..82f140b 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">اکنون من را به آنجا ببر</translation>
 <translation id="4648262692072505866">‏درهم‌سازی باید در قالب SHA-256 باشد.</translation>
 <translation id="4652266463001779298">غیرمجاز</translation>
+<translation id="4652440160515225514">سازمانتان این سایت را مسدود کرده است زیرا خط‌مشی‌ای را نقض می‌کند.</translation>
 <translation id="4653167719759882810">ادغام و تملک</translation>
 <translation id="4658638640878098064">منگنه در بالا سمت چپ</translation>
 <translation id="4660119392514473465">اکنون می‌توانید به‌طور خصوصی مرور کنید و افراد دیگری که از این دستگاه استفاده می‌کنند فعالیت شما را نخواهند دید. باوجوداین، بارگیری‌ها، نشانک‌ها، و موارد فهرست خواندن ذخیره خواهند شد.</translation>
@@ -2920,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;واگرد انتقال</translation>
 <translation id="8438476240229491014">این تنظیم به‌خاطر سپرده شود</translation>
 <translation id="8438786541497918448">از دوربین و میکروفون استفاده شود؟</translation>
+<translation id="8438923942245957911">سازمانتان این سایت را پرچم‌گذاری کرده است</translation>
 <translation id="8443613539889492016">رپ و هیپ‌هاپ</translation>
 <translation id="8444543005280733648">شبکه رایانه‌ای</translation>
 <translation id="8446884382197647889">بیشتر بدانید</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index b520b6477..235c2b1 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Dalhin na ako roon</translation>
 <translation id="4648262692072505866">SHA-256 dapat ang format ng hash.</translation>
 <translation id="4652266463001779298">Hindi pinapayagan</translation>
+<translation id="4652440160515225514">Na-block ng iyong organisasyon ang site na ito dahil lumalabag ito sa isang patakaran.</translation>
 <translation id="4653167719759882810">Mga merger at acquisition</translation>
 <translation id="4658638640878098064">Staple top left</translation>
 <translation id="4660119392514473465">Pribado ka nang makakapag-browse ngayon, at hindi makikita ng ibang taong gumagamit sa device na ito ang iyong aktibidad. Gayunpaman, mase-save ang mga download, bookmark, at item sa listahan ng babasahin.</translation>
@@ -2920,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;I-undo ang paglilipat</translation>
 <translation id="8438476240229491014">Tandaan ang setting na ito</translation>
 <translation id="8438786541497918448">Gamitin ang camera at mikropono?</translation>
+<translation id="8438923942245957911">Na-flag ng iyong organisasyon ang site na ito</translation>
 <translation id="8443613539889492016">Rap at hip-hop</translation>
 <translation id="8444543005280733648">Mga Ccomputer network</translation>
 <translation id="8446884382197647889">Matuto Pa</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 7f291d9f..6ddec4f 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, appuyez sur Tabulation, puis sur Entrée pour gérer vos infos, votre vie privée et votre sécurité dans votre compte Google</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, plusieurs actions disponibles, appuyez sur Tabulation pour passer de l'une à l'autre</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Informations relatives à la carte virtuelle</translation>
 <translation id="1803020234906945288">Alimentation saine</translation>
 <translation id="1803264062614276815">Nom du titulaire de la carte</translation>
 <translation id="1803351196216024260">Peut demander à utiliser votre micro</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 pouces</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 suggestion}one{# suggestion}other{# suggestions}}</translation>
 <translation id="2066915425250589881">en demander la suppression</translation>
+<translation id="2066969741541525119">Le site que vous essayez d'ouvrir est bloqué par votre organisation</translation>
 <translation id="2068528718802935086">Bébés et tout-petits</translation>
 <translation id="2071156619270205202">Cette carte n'est pas éligible pour le numéro de carte virtuelle.</translation>
 <translation id="2071692954027939183">Notifications bloquées automatiquement, car vous les refusez d'habitude</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Multiple perforation en bas</translation>
 <translation id="219906046732893612">Travaux d'intérieur</translation>
 <translation id="2202020181578195191">Saisissez une année d'expiration valide</translation>
+<translation id="2202627062836089804">avant de votre carte</translation>
 <translation id="22081806969704220">Bac 3</translation>
 <translation id="2210794033760923560">Importer le rapport</translation>
 <translation id="2212735316055980242">Règle introuvable.</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">Nom du fichier :</translation>
 <translation id="3507936815618196901">Créer un plan 3D de votre environnement et suivre la position de la caméra</translation>
 <translation id="3512163584740124171">Cette règle est ignorée, car une autre issue du même groupe de règles présente une priorité plus élevée.</translation>
+<translation id="3515972145999192222">Votre organisation a bloqué <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, car il enfreint une règle. <ph name="BEGIN_LEARN_MORE_LINK" />En savoir plus<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">Bouton "Gérer les adresses" : appuyez sur Entrée pour gérer les adresses et en ajouter dans les paramètres Chrome</translation>
 <translation id="3518941727116570328">Gestion d'objets multiples</translation>
 <translation id="3525130752944427905">10 x 14 pouces</translation>
@@ -1059,6 +1063,7 @@
 <translation id="3678342917559046352">Extension non valide : la valeur doit respecter l'un des formats suivants : &lt;extension_id&gt; ou &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Ouvrir la page dans une nouvelle fenêtre de navigation privée (Ctrl+Maj+N)</translation>
 <translation id="3681007416295224113">Informations relatives au certificat</translation>
+<translation id="3693327506115126094">Choisir comment confirmer votre identité</translation>
 <translation id="3699374065820972102">Touch ID est activé pour la saisie des mots de passe</translation>
 <translation id="3701427423622901115">Réinitialisation appliquée.</translation>
 <translation id="3704162925118123524">Pour utiliser ce réseau, il est possible que vous deviez vous rendre sur la page de connexion correspondante.</translation>
@@ -1143,6 +1148,7 @@
 <translation id="3906954721959377182">Tablette</translation>
 <translation id="3909477809443608991"><ph name="URL" /> souhaite lire un contenu protégé. L'identité de votre appareil sera validée par Google et peut être accessible à ce site.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Saisir votre code de sécurité</translation>
 <translation id="3927932062596804919">Refuser</translation>
 <translation id="393316646445601645">Internet et télécoms</translation>
 <translation id="3939773374150895049">Utiliser WebAuthn au lieu du code CVC ?</translation>
@@ -1389,6 +1395,7 @@
 <translation id="4524805452350978254">Gérer les cartes</translation>
 <translation id="4526465106919207193">Individus et société</translation>
 <translation id="4530347922939905757">SMS</translation>
+<translation id="4531477351494678589">Numéro de carte virtuelle :</translation>
 <translation id="4540780316273593836">Un problème est survenu</translation>
 <translation id="4541810033354695636">réalité augmentée</translation>
 <translation id="4542971377163063093">Bac 6</translation>
@@ -1398,6 +1405,7 @@
 <translation id="4567686777917670400">Votre administrateur peut modifier à distance la configuration de votre navigateur. Il se peut que l'activité sur cet appareil soit gérée en dehors de Chromium. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Livraison</translation>
 <translation id="4582204425268416675">Supprimer la carte</translation>
+<translation id="4582595824823167856">Recevoir un SMS</translation>
 <translation id="4587425331216688090">Supprimer l'adresse de Chrome ?</translation>
 <translation id="459089498662672729">Une règle définie par l'administrateur interdit de coller du contenu provenant de "<ph name="ORIGIN_NAME" />" à cet endroit</translation>
 <translation id="4592951414987517459">Votre connexion à <ph name="DOMAIN" /> est chiffrée à l'aide d'une méthode de chiffrement récente.</translation>
@@ -1409,6 +1417,7 @@
 <translation id="4606870351894164739">Percutant</translation>
 <translation id="4607603470419975064">Bouton "Voir les astuces Chrome", appuyez sur Entrée pour en savoir plus sur les fonctionnalités de Chrome</translation>
 <translation id="4607608436550361748">Voir les astuces Chrome</translation>
+<translation id="460848736049414407">Bloqué par l'administrateur</translation>
 <translation id="4610279718074907952">Ce site fait partie d'un groupe, défini par <ph name="SET_OWNER" />, qui peut voir votre activité</translation>
 <translation id="4617273035598175554">Logiciels de graphisme et d'animation</translation>
 <translation id="4622292761762557753">Transférer quand même</translation>
@@ -1875,6 +1884,7 @@
 <translation id="57689295674415555">Le numéro de carte virtuelle n'est pas renseigné ?</translation>
 <translation id="5772086939108830423">Utiliser une clé d'accès sur un autre appareil</translation>
 <translation id="5776313857861697733">Priorité</translation>
+<translation id="5776574724412881956">Carte virtuelle non remplie ? Cliquez sur les informations relatives à la carte virtuelle pour les copier dans le presse-papiers. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Test activé</translation>
 <translation id="578305955206182703">Ambre</translation>
 <translation id="57838592816432529">Couper le son</translation>
@@ -2004,6 +2014,7 @@
 <translation id="6116338172782435947">Voir le texte et les images copiés dans le presse-papiers</translation>
 <translation id="6118782133429281336">La liste d'origine est vide.</translation>
 <translation id="6120179357481664955">Souhaitez-vous mémoriser votre ID UPI ?</translation>
+<translation id="6122181661879998141">arrière de votre carte</translation>
 <translation id="6124432979022149706">Connecteurs Chrome Enterprise</translation>
 <translation id="6126565365696310362">Enveloppe chinoise n°2</translation>
 <translation id="6127379762771434464">Élément supprimé</translation>
@@ -2370,6 +2381,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> souhaite utiliser votre appareil photo</translation>
 <translation id="7108819624672055576">Autorisé par une extension</translation>
 <translation id="7111012039238467737">(Valide)</translation>
+<translation id="7112327784801341716">Vos informations ne sont pas à jour ? Contactez votre banque pour les modifier.</translation>
 <translation id="7118618213916969306">Rechercher l'URL du presse-papier, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">Fermez les autres onglets ou programmes</translation>
 <translation id="7129355289156517987">Lorsque vous fermez tous les onglets de navigation privée de Chromium, les activités effectuées dans ces onglets sont effacées de cet appareil :
@@ -2674,6 +2686,7 @@
 <translation id="7798389633136518089">Règle ignorée, car non configurée par une source cloud.</translation>
 <translation id="7800304661137206267">La connexion est chiffrée au moyen de <ph name="CIPHER" />, avec <ph name="MAC" /> pour l'authentification des messages et <ph name="KX" /> pour la méthode d'échange de clés.</translation>
 <translation id="7802523362929240268">Ce site est légitime</translation>
+<translation id="7802989406998618639">Saisissez le code de sécurité à <ph name="NUMBER_OF_DIGITS" /> chiffres à l'<ph name="SIDE_OF_CARD" /> afin que votre banque puisse confirmer votre identité</translation>
 <translation id="780301667611848630">Non merci</translation>
 <translation id="7805571567667010077">Gérée par votre organisation</translation>
 <translation id="7805768142964895445">État</translation>
@@ -3001,6 +3014,7 @@
 <translation id="8725066075913043281">Réessayer</translation>
 <translation id="8726549941689275341">Format de page :</translation>
 <translation id="8730621377337864115">OK</translation>
+<translation id="8731268612289859741">Code de sécurité</translation>
 <translation id="8731544501227493793">Bouton "Gérer les mots de passe" : appuyer sur Entrée pour consulter et gérer vos mots de passe dans les paramètres Chrome</translation>
 <translation id="8734529307927223492">Votre <ph name="DEVICE_TYPE" /> est géré par <ph name="MANAGER" /></translation>
 <translation id="8736059027199600831">30 x 40 pouces</translation>
@@ -3106,6 +3120,7 @@
 <translation id="9005998258318286617">Échec de chargement du document PDF.</translation>
 <translation id="9008178007718859630">Décoration de maisons et décoration d'intérieur</translation>
 <translation id="9008201768610948239">Ignorer</translation>
+<translation id="9018120810758822233">Saisir votre code de sécurité pour <ph name="CREDIT_CARD" /></translation>
 <translation id="901834265349196618">e-mail</translation>
 <translation id="9020200922353704812">Adresse de facturation de la carte obligatoire</translation>
 <translation id="9020542370529661692">Cette page a été traduite en <ph name="TARGET_LANGUAGE" />.</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 48d5669..8a9fa06 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, તમારા Google એકાઉન્ટમાં તમારી માહિતી, પ્રાઇવસી અને સુરક્ષા મેનેજ કરવા માટે, પહેલાં Tab અને પછી Enter કી દબાવો</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, એકથી વધારે ક્રિયાઓ ઉપલબ્ધ છે, એ બધી પર નજર કરવા માટે Tab કી દબાવો</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">વર્ચ્યુઅલ કાર્ડની વિગતો</translation>
 <translation id="1803020234906945288">આરોગ્યપ્રદ આહાર</translation>
 <translation id="1803264062614276815">કાર્ડધારકનું નામ</translation>
 <translation id="1803351196216024260">તમારા માઇક્રોફોનનો ઉપયોગ કરવાનું પૂછી શકે છે</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 ઇંચ</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 સૂચન}one{# સૂચન}other{# સૂચન}}</translation>
 <translation id="2066915425250589881">ડિલીટ કરવાની વિનંતી</translation>
+<translation id="2066969741541525119">આગળની સાઇટ તમારી સંસ્થા દ્વારા બ્લૉક કરવામાં આવી છે</translation>
 <translation id="2068528718802935086">શિશુઓ અને બાળકો</translation>
 <translation id="2071156619270205202">આ કાર્ડનો નંબર, વર્ચ્યુઅલ કાર્ડ નંબર તરીકે ઉપયોગ માટેની યોગ્યતા ધરાવતો નથી.</translation>
 <translation id="2071692954027939183">નોટિફિકેશન ઑટોમૅટિક રીતે બ્લૉક કરવામાં આવ્યા હતા કારણ કે તમે સામાન્ય રીતે તેમને મંજૂરી આપતા નથી</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">નીચેની બાજુએ એકથી વધુ કાણાં પાડો</translation>
 <translation id="219906046732893612">ઘરનું સમારકામ</translation>
 <translation id="2202020181578195191">એક માન્ય સમાપ્તિ વર્ષ દાખલ કરો</translation>
+<translation id="2202627062836089804">તમારા કાર્ડની પાછળનો ભાગ</translation>
 <translation id="22081806969704220">ટ્રે 3</translation>
 <translation id="2210794033760923560">રિપોર્ટ અપલોડ કરો</translation>
 <translation id="2212735316055980242">પૉલિસી મળી નથી</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">ફાઇલનું નામ:</translation>
 <translation id="3507936815618196901">તમારી આજુબાજુનો 3D નકશો બનાવો અને કૅમેરાનું સ્ટેટસ ટ્રૅક કરો</translation>
 <translation id="3512163584740124171">આ પૉલિસીને અવગણવામાં આવે છે કારણ કે સમાન પૉલિસી ગ્રૂપની બીજી પૉલિસી ઉચ્ચ પ્રાથમિકતા ધરાવે છે.</translation>
+<translation id="3515972145999192222">તમારી સંસ્થાએ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />ને બ્લૉક કર્યું છે, કારણ કે તે કોઈ પૉલિસીનું ઉલ્લંઘન કરે છે. <ph name="BEGIN_LEARN_MORE_LINK" />વધુ જાણો<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">ઍડ્રેસના બટન મેનેજ કરો, તેમજ Chrome સેટિંગમાં ઍડ્રેસ ઉમેરવા અને તેને મેનેજ કરવા માટે Enter કી દબાવો</translation>
 <translation id="3518941727116570328">એકથી વધુ ઑબ્જેક્ટ હૅન્ડલ કરવા</translation>
 <translation id="3525130752944427905">10 x 14 ઇંચ</translation>
@@ -1059,6 +1063,7 @@
 <translation id="3678342917559046352">અમાન્ય એક્સ્ટેન્શન: મૂલ્ય નીચેનામાંથી કોઈ એક સ્વરૂપમાં હોવું અપેક્ષિત છે: &lt;extension_id&gt; અથવા &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">એક નવી છુપી વિંડોમાં પેજ ખોલો (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">પ્રમાણપત્ર માહિતી</translation>
+<translation id="3693327506115126094">આ તમે જ છો, તે તમે કેવી રીતે ચકાસશો, તે પસંદ કરો</translation>
 <translation id="3699374065820972102">પાસવર્ડ ભરવા માટે TouchID ચાલુ છે</translation>
 <translation id="3701427423622901115">રીસેટ કરવાનું સ્વીકાર્યું હતું.</translation>
 <translation id="3704162925118123524">તમે ઉપયોગમાં લઈ રહ્યાં છો તે નેટવર્ક માટે, તમારે તેના લૉગ ઇન પેજની મુલાકાત લેવાની જરૂર હોઈ શકે છે.</translation>
@@ -1143,6 +1148,7 @@
 <translation id="3906954721959377182">ટૅબ્લેટ</translation>
 <translation id="3909477809443608991"><ph name="URL" /> સુરક્ષિત કન્ટેન્ટ ચલાવવા માગે છે. Google દ્વારા તમારા ડિવાઇસની ઓળખ ચકાસવામાં આવશે અને તે આ સાઇટ દ્વારા ઍક્સેસ કરવામાં આવી શકે છે.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">તમારો સિક્યુરિટી કોડ દાખલ કરો</translation>
 <translation id="3927932062596804919">નકારો</translation>
 <translation id="393316646445601645">ઇન્ટરનેટ અને ટેલિકોમ</translation>
 <translation id="3939773374150895049">CVCને બદલે WebAuthnનો ઉપયોગ કરીએ?</translation>
@@ -1389,6 +1395,7 @@
 <translation id="4524805452350978254">કાર્ડ મેનેજ કરો</translation>
 <translation id="4526465106919207193">લોકો અને સમાજ</translation>
 <translation id="4530347922939905757">ટેક્સ્ટ મેસેજ</translation>
+<translation id="4531477351494678589">વર્ચ્યુઅલ કાર્ડ નંબર:</translation>
 <translation id="4540780316273593836">કંઈક ખોટું થયું હતું</translation>
 <translation id="4541810033354695636">ઑગ્મેન્ટેડ રિયાલિટી</translation>
 <translation id="4542971377163063093">ટ્રે 6</translation>
@@ -1398,6 +1405,7 @@
 <translation id="4567686777917670400">તમારા વ્યવસ્થાપક તમારા બ્રાઉઝરનું સેટઅપ રિમોટલી બદલી શકે છે. આ ડિવાઇસ પરની પ્રવૃત્તિ Chromiumની બહારથી પણ મેનેજ કરી શકાય છે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">ડિલિવરી</translation>
 <translation id="4582204425268416675">કાર્ડ કાઢી નાખો</translation>
+<translation id="4582595824823167856">ટેક્સ્ટ મેસેજ મેળવો</translation>
 <translation id="4587425331216688090">Chrome માંથી સરનામું દૂર કરીએ?</translation>
 <translation id="459089498662672729">વ્યવસ્થાપકની પૉલિસી <ph name="ORIGIN_NAME" /> પરથી આ સ્થાન પર પેસ્ટ કરવાનો સુઝાવ આપતી નથી</translation>
 <translation id="4592951414987517459">આધુનિક સાઇફર સ્યૂટનો ઉપયોગ કરીને <ph name="DOMAIN" /> સાથેનું તમારું કનેક્શન એન્ક્રિપ્ટ કરાયું છે.</translation>
@@ -1409,6 +1417,7 @@
 <translation id="4606870351894164739">અસરકારક</translation>
 <translation id="4607603470419975064">'Chrome ટિપ જુઓ' બટન, Chromeની સુવિધાઓ વિશે જાણવા માટે, Enter કી દબાવો</translation>
 <translation id="4607608436550361748">Chrome વિશે ટિપ જુઓ</translation>
+<translation id="460848736049414407">ઍડમિન દ્વારા બ્લૉક કરવામાં આવ્યું છે</translation>
 <translation id="4610279718074907952">આ સાઇટ <ph name="SET_OWNER" /> દ્વારા નિર્ધારિત ગ્રૂપમાં છે, જે તમારી પ્રવૃત્તિ જોઈ શકે છે</translation>
 <translation id="4617273035598175554">ગ્રાફિક અને ઍનિમેશન સૉફ્ટવેર</translation>
 <translation id="4622292761762557753">તેમ છતાં ટ્રાન્સફર કરો</translation>
@@ -1875,6 +1884,7 @@
 <translation id="57689295674415555">શું તમારો વર્ચ્યુઅલ કાર્ડ નંબર ભરવામાં આવ્યો નથી?</translation>
 <translation id="5772086939108830423">કોઈ અલગ ડિવાઇસ પર પાસકીનો ઉપયોગ કરો</translation>
 <translation id="5776313857861697733">પ્રાધાન્યતા</translation>
+<translation id="5776574724412881956">શું વર્ચ્યુઅલ કાર્ડ સંબંધિત વિગતો ભરી નથી? ક્લિપબોર્ડ પર કૉપિ કરવા માટે, વર્ચ્યુઅલ કાર્ડની વિગતો પર ક્લિક કરો. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">પ્રયોગ ચાલુ કર્યો</translation>
 <translation id="578305955206182703">પીળાશ પડતો નારંગી</translation>
 <translation id="57838592816432529">અવાજ બંધ કરો</translation>
@@ -2004,6 +2014,7 @@
 <translation id="6116338172782435947">ક્લિપબોર્ડ પર કૉપિ કરેલી ટેક્સ્ટ અને છબીઓને જુઓ</translation>
 <translation id="6118782133429281336">મૂળ સૂચિ ખાલી છે.</translation>
 <translation id="6120179357481664955">તમારું UPI ID યાદ રાખીએ?</translation>
+<translation id="6122181661879998141">તમારા કાર્ડની આગળનો ભાગ</translation>
 <translation id="6124432979022149706">Chrome એન્ટરપ્રાઇઝ કનેક્ટર</translation>
 <translation id="6126565365696310362">એન્વલપ ચાઇનીઝ #2</translation>
 <translation id="6127379762771434464">આઇટમ દૂર કરી</translation>
@@ -2370,6 +2381,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> તમારા કૅમેરાનો ઉપયોગ કરવા માગે છે</translation>
 <translation id="7108819624672055576">એક્સટેન્શન દ્વારા મંજૂર</translation>
 <translation id="7111012039238467737">(માન્ય)</translation>
+<translation id="7112327784801341716">શું તમારી હાલની માહિતી દેખાઈ રહી નથી? તેને અપડેટ કરવા માટે તમારી બેંકનો સંપર્ક કરો.</translation>
 <translation id="7118618213916969306">ક્લિપબોર્ડ URL શોધો, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">અન્ય ટૅબ અથવા પ્રોગ્રામ બંધ કરો</translation>
 <translation id="7129355289156517987">તમે Chromiumની બધી છૂપી ટૅબ બંધ કરી દો ત્યારે તે ટૅબની તમારી પ્રવૃત્તિ આ ડિવાઇસમાંથી સાફ કરી દેવાય છે:
@@ -2673,6 +2685,7 @@
 <translation id="7798389633136518089">ક્લાઉડ સૉર્સ દ્વારા પૉલિસીને સેટ કરવામાં ન આવી હોવાથી અવગણવામાં આવી.</translation>
 <translation id="7800304661137206267">કનેક્શન <ph name="CIPHER" />નો ઉપયોગ કરીને, સંદેશ પ્રમાણીકરણ મેમરીન માટે <ph name="MAC" /> સાથે અને કી એક્સ્ચેંજ તંત્ર તરીકે <ph name="KX" /> એન્ક્રિપ્ટ કરેલુંં છે.</translation>
 <translation id="7802523362929240268">સાઇટ કાયદેસર છે</translation>
+<translation id="7802989406998618639"><ph name="SIDE_OF_CARD" />નો <ph name="NUMBER_OF_DIGITS" />-અંકનો સિક્યુરિટી કોડ દાખલ કરો, જેથી તમારી બેંક ચકાસી શકે કે આ તમે જ છો</translation>
 <translation id="780301667611848630">નહીં, આભાર</translation>
 <translation id="7805571567667010077">તમારી સંસ્થા દ્વારા મેનેજ કરવામાં આવે છે</translation>
 <translation id="7805768142964895445">સ્થિતિ</translation>
@@ -3000,6 +3013,7 @@
 <translation id="8725066075913043281">ફરી પ્રયાસ કરો</translation>
 <translation id="8726549941689275341">પેજનું કદ:</translation>
 <translation id="8730621377337864115">થઈ ગયું</translation>
+<translation id="8731268612289859741">સિક્યુરિટી કોડ</translation>
 <translation id="8731544501227493793">પાસવર્ડ મેનેજ કરો બટન, Chrome સેટિંગમાં તમારા પાસવર્ડ જોવા અને તેમને મેનેજ કરવા માટે Enter દબાવો</translation>
 <translation id="8734529307927223492"><ph name="MANAGER" /> દ્વારા તમારા <ph name="DEVICE_TYPE" />ને મેનેજ કરવામાં આવે છે</translation>
 <translation id="8736059027199600831">30 x 40 ઇંચ</translation>
@@ -3105,6 +3119,7 @@
 <translation id="9005998258318286617">PDF દસ્તાવેજ લોડ કરવામાં નિષ્ફળ થયાં.</translation>
 <translation id="9008178007718859630">ઘર અને તેને સંબંધિત ઇન્ટિરિયર ડેકોરેશન</translation>
 <translation id="9008201768610948239">અવગણો</translation>
+<translation id="9018120810758822233"><ph name="CREDIT_CARD" /> માટે તમારો સિક્યુરિટી કોડ દાખલ કરો</translation>
 <translation id="901834265349196618">ઇમેઇલ</translation>
 <translation id="9020200922353704812">કાર્ડનું બિલિંગ સરનામું આવશ્યક છે</translation>
 <translation id="9020542370529661692">આ પેજનો <ph name="TARGET_LANGUAGE" />માં અનુવાદ કરવામાં આવ્યો છે</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 6942818..875b70f 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -355,6 +355,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google खाते में अपनी जानकारी, निजता, और सुरक्षा को मैनेज करने के लिए, पहले Tab दबाएं और फिर Enter दबाएं</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, एक से ज़्यादा कार्रवाइयां उपलब्ध हैं, एक-एक करके उन पर जाने के लिए Tab दबाएं</translation>
 <translation id="1800473098294731951">बी9</translation>
+<translation id="1801812870656502108">वर्चुअल कार्ड की जानकारी</translation>
 <translation id="1803020234906945288">पौष्टिक खाना</translation>
 <translation id="1803264062614276815">कार्ड के मालिक का नाम</translation>
 <translation id="1803351196216024260">साइट, आपके माइक्रोफ़ोन का इस्तेमाल करने की अनुमति मांग सकती है</translation>
@@ -448,6 +449,7 @@
 <translation id="2059202684901022309">22 x 34 इंच</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 सुझाव}one{# सुझाव}other{# सुझाव}}</translation>
 <translation id="2066915425250589881">मिटाने का अनुरोध</translation>
+<translation id="2066969741541525119">आपको जिस साइट पर जाना है उसे आपके संगठन ने ब्लॉक किया है</translation>
 <translation id="2068528718802935086">शिशु और छोटे बच्चे</translation>
 <translation id="2071156619270205202">इस कार्ड को वर्चुअल कार्ड के तौर पर इस्तेमाल नहीं किया जा सकता.</translation>
 <translation id="2071692954027939183">सूचनाओं को अपने-आप ब्लॉक कर दिया गया, क्योंकि आम तौर पर आप उन्हें अनुमति नहीं देते हैं</translation>
@@ -502,6 +504,7 @@
 <translation id="2188375229972301266">नीचे की ओर एक से ज़्यादा पंच</translation>
 <translation id="219906046732893612">घर की मरम्मत</translation>
 <translation id="2202020181578195191">खत्म होने का मान्य वर्ष डालें</translation>
+<translation id="2202627062836089804">अपने कार्ड के पिछले हिस्से</translation>
 <translation id="22081806969704220">ट्रे 3</translation>
 <translation id="2210794033760923560">रिपोर्ट अपलोड करें</translation>
 <translation id="2212735316055980242">नीति नहीं मिली</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">फ़ाइल नाम:</translation>
 <translation id="3507936815618196901">आपके आस-पास की जगह का 3D मैप बनाना और कैमरे की स्थिति ट्रैक करना चाहती है</translation>
 <translation id="3512163584740124171">इस नीति को अनदेखा कर दिया गया है, क्योंकि इसी नीति समूह की दूसरी नीति को ज़्यादा प्राथमिकता दी गई है.</translation>
+<translation id="3515972145999192222">किसी नीति का उल्लंघन करने की वजह से, आपके संगठन ने <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> को ब्लॉक कर दिया है. <ph name="BEGIN_LEARN_MORE_LINK" />ज़्यादा जानें<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">वेब पते का बटन मैनेज करें, Chrome की सेटिंग में पते जोड़ने और मैनेज करने के लिए Enter दबाएं</translation>
 <translation id="3518941727116570328">कई ऑब्जेक्ट को हैंडल करना</translation>
 <translation id="3525130752944427905">10 x 14 इंच</translation>
@@ -1059,6 +1063,7 @@
 <translation id="3678342917559046352">अमान्य एक्सटेंशन: वैल्यू को इनमें से किसी एक फ़ॉर्म में होना चाहिए: &lt;extension_id&gt; या &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">पेज को नई गुप्त विंडो में खोलें (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">प्रमाणपत्र जानकारी</translation>
+<translation id="3693327506115126094">अपनी पहचान की पुष्टि करने का तरीका चुनें</translation>
 <translation id="3699374065820972102">TouchID चालू है, पासवर्ड डाला जा सकता है</translation>
 <translation id="3701427423622901115">रीसेट स्वीकार किया गया.</translation>
 <translation id="3704162925118123524">आप जिस नेटवर्क का उपयोग कर रहे हैं उसके लिए आपको लॉगिन पेज पर जाने की ज़रूरत हो सकती है.</translation>
@@ -1143,6 +1148,7 @@
 <translation id="3906954721959377182">टैबलेट</translation>
 <translation id="3909477809443608991"><ph name="URL" /> सुरक्षित सामग्री चलाना चाहता है . Google आपके डिवाइस की पहचान की पुष्टि कर सकता है और यह साइट उसे ऐक्सेस कर सकती है.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">अपना सुरक्षा कोड डालें</translation>
 <translation id="3927932062596804919">अस्वीकार करें</translation>
 <translation id="393316646445601645">इंटरनेट और टेलिकॉम</translation>
 <translation id="3939773374150895049">क्या आप कार्ड वेरीफ़िकेशन कोड (सीवीसी) के बजाय WebAuthn का इस्तेमाल करना चाहते हैं?</translation>
@@ -1389,6 +1395,7 @@
 <translation id="4524805452350978254">कार्ड प्रबंधित करें</translation>
 <translation id="4526465106919207193">लोग और समाज</translation>
 <translation id="4530347922939905757">मैसेज</translation>
+<translation id="4531477351494678589">वर्चुअल कार्ड नंबर:</translation>
 <translation id="4540780316273593836">कोई गड़बड़ी हुई</translation>
 <translation id="4541810033354695636">ऑगमेंटेड रिएलिटी (एआर)</translation>
 <translation id="4542971377163063093">ट्रे 6</translation>
@@ -1398,6 +1405,7 @@
 <translation id="4567686777917670400">आपका एडमिन किसी दूसरे डिवाइस से आपके ब्राउज़र का सेट अप बदल सकता है. इस डिवाइस की गतिविधि को Chromium के बाहर भी मैनेज किया जा सकता है. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">वितरण</translation>
 <translation id="4582204425268416675">कार्ड हटाएं</translation>
+<translation id="4582595824823167856">मैसेज पाएं</translation>
 <translation id="4587425331216688090">Chrome से पता निकालें?</translation>
 <translation id="459089498662672729">एडमिन की नीति के हिसाब से, टेक्स्ट को <ph name="ORIGIN_NAME" /> से इस जगह पर नहीं चिपकाना चाहिए</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" /> से आपके कनेक्शन को किसी आधुनिक सिफ़र सुइट का उपयोग करके सुरक्षित किया गया है.</translation>
@@ -1409,6 +1417,7 @@
 <translation id="4606870351894164739">असरदार</translation>
 <translation id="4607603470419975064">Chrome की सलाह देखने के लिए बटन, Chrome की सुविधाओं के बारे में जानने के लिए Enter दबाएं</translation>
 <translation id="4607608436550361748">Chrome की सलाह देखें</translation>
+<translation id="460848736049414407">एडमिन ने ब्लॉक किया है</translation>
 <translation id="4610279718074907952">यह साइट, <ph name="SET_OWNER" /> के तय किए गए ग्रुप में है. यह आपकी गतिविधि देख सकती है</translation>
 <translation id="4617273035598175554">ग्राफ़िक और ऐनिमेशन के लिए सॉफ़्टवेयर</translation>
 <translation id="4622292761762557753">फिर भी ट्रांसफ़र करें</translation>
@@ -1423,6 +1432,7 @@
 <translation id="4646534391647090355">मुझे अभी वहां ले जाएं</translation>
 <translation id="4648262692072505866">हैश का फ़ॉर्मैट SHA-256 होना चाहिए.</translation>
 <translation id="4652266463001779298">अनुमति नहीं है</translation>
+<translation id="4652440160515225514">आपके संगठन ने इस साइट को ब्लॉक कर दिया है, क्योंकि यह किसी नीति का उल्लंघन करती है.</translation>
 <translation id="4653167719759882810">विलय और अधिग्रहण</translation>
 <translation id="4658638640878098064">सबसे ऊपर बाईं ओर स्टेपल</translation>
 <translation id="4660119392514473465">अब आप निजी तौर पर ब्राउज़ कर सकते हैं. इस डिवाइस का इस्तेमाल करने वाले अन्य लोगों को आपकी गतिविधि नहीं दिखेगी. हालांकि, आपके डाउनलोड, बुकमार्क, और रीडिंग लिस्ट के आइटम सेव होंगे.</translation>
@@ -1875,6 +1885,7 @@
 <translation id="57689295674415555">वर्चुअल कार्ड नंबर नहीं भरा गया?</translation>
 <translation id="5772086939108830423">पासकी का इस्तेमाल दूसरे डिवाइस पर करें</translation>
 <translation id="5776313857861697733">प्राथमिकता</translation>
+<translation id="5776574724412881956">वर्चुअल कार्ड भरा नहीं है? क्लिपबोर्ड पर कॉपी करने के लिए, वर्चुअल कार्ड की जानकारी पर क्लिक करें. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">परफ़ॉर्मेंस जांचना चालू है</translation>
 <translation id="578305955206182703">ऐंबर</translation>
 <translation id="57838592816432529">म्यूट करें</translation>
@@ -2004,6 +2015,7 @@
 <translation id="6116338172782435947">क्लिपबोर्ड पर कॉपी किए गए लेख और इमेज देखें</translation>
 <translation id="6118782133429281336">मूल सूची खाली है.</translation>
 <translation id="6120179357481664955">क्या आप चाहते हैं कि हम आपका UPI आईडी रखें?</translation>
+<translation id="6122181661879998141">अपने कार्ड के आगे के हिस्से</translation>
 <translation id="6124432979022149706">Chrome Enterprise Connectors</translation>
 <translation id="6126565365696310362">चाइनीज़ #2 साइज़ का लिफ़ाफ़ा</translation>
 <translation id="6127379762771434464">आइटम निकाला गया</translation>
@@ -2370,6 +2382,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> आपके कैमरे का उपयोग करना चाहता है</translation>
 <translation id="7108819624672055576">किसी एक्सटेंशन ने अनुमति दी है</translation>
 <translation id="7111012039238467737">(मान्य)</translation>
+<translation id="7112327784801341716">क्या आपको अपनी मौजूदा जानकारी नहीं दिख रही है? इसे अपडेट करने के लिए अपने बैंक से संपर्क करें.</translation>
 <translation id="7118618213916969306">क्लिपबोर्ड यूआरएल, <ph name="SHORT_URL" /> खोजें</translation>
 <translation id="7119414471315195487">दूसरे टैब या प्रोग्राम बंद करें</translation>
 <translation id="7129355289156517987">Chromium में खोले गए सभी गुप्त टैब बंद करने पर, इन टैब में हुई आपकी गतिविधि का डेटा इस डिवाइस से हटा दिया जाता है:
@@ -2673,6 +2686,7 @@
 <translation id="7798389633136518089">नीति को किसी क्लाउड स्रोत के ज़रिए सेट नहीं किया गया है। इसलिए, इसे स्वीकार नहीं किया गया.</translation>
 <translation id="7800304661137206267">कनेक्शन को <ph name="MAC" /> का इस्तेमाल करके मैसेज की पुष्टि के लिए <ph name="KX" /> के साथ सुरक्षित किया गया है और यह मुख्य एक्सचेंज तकनीक के तौर पर <ph name="CIPHER" /> का इस्तेमाल करता है.</translation>
 <translation id="7802523362929240268">साइट वैध है</translation>
+<translation id="7802989406998618639"><ph name="SIDE_OF_CARD" /> पर <ph name="NUMBER_OF_DIGITS" /> अंकों का सुरक्षा कोड डालें, ताकि बैंक आपकी पहचान की पुष्टि कर सके</translation>
 <translation id="780301667611848630">नहीं, रहने दें</translation>
 <translation id="7805571567667010077">इसे आपका संगठन मैनेज करता है</translation>
 <translation id="7805768142964895445">स्थिति</translation>
@@ -2907,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;ले जाना वापस लाएं</translation>
 <translation id="8438476240229491014">यह सेटिंग याद रखें</translation>
 <translation id="8438786541497918448">क्या आप कैमरे और माइक्रोफ़ोन का इस्तेमाल करना चाहते हैं?</translation>
+<translation id="8438923942245957911">इस साइट को आपके संगठन ने फ़्लैग किया है</translation>
 <translation id="8443613539889492016">रैप और हिप-हॉप</translation>
 <translation id="8444543005280733648">कंप्यूटर नेटवर्क</translation>
 <translation id="8446884382197647889">ज़्यादा जानें</translation>
@@ -3001,6 +3016,7 @@
 <translation id="8725066075913043281">फिर से कोशिश करें</translation>
 <translation id="8726549941689275341">पेज का साइज़:</translation>
 <translation id="8730621377337864115">हो गया</translation>
+<translation id="8731268612289859741">सुरक्षा कोड</translation>
 <translation id="8731544501227493793">'पासवर्ड प्रबंधित करें' बटन, Chrome की सेटिंग में अपने पासवर्ड देखने और प्रबंधित करने के लिए Enter दबाएं</translation>
 <translation id="8734529307927223492">आपके <ph name="DEVICE_TYPE" /> को <ph name="MANAGER" /> प्रबंधित करता है</translation>
 <translation id="8736059027199600831">30 x 40 इंच</translation>
@@ -3106,6 +3122,7 @@
 <translation id="9005998258318286617">PDF दस्तावेज़ लोड नहीं किया जा सका.</translation>
 <translation id="9008178007718859630">होम और इंटीरियर डेकोरेशन</translation>
 <translation id="9008201768610948239">ध्यान न दें</translation>
+<translation id="9018120810758822233">अपने <ph name="CREDIT_CARD" /> का सुरक्षा कोड डालें</translation>
 <translation id="901834265349196618">ईमेल</translation>
 <translation id="9020200922353704812">कार्ड बिलिंग पता ज़रूरी है</translation>
 <translation id="9020542370529661692">इस पेज का <ph name="TARGET_LANGUAGE" /> में अनुवाद कर दिया गया है</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index 6fb8ccb..e93ee1d 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -1431,6 +1431,7 @@
 <translation id="4646534391647090355">Buka Download sekarang</translation>
 <translation id="4648262692072505866">Hash harus dalam format SHA-256.</translation>
 <translation id="4652266463001779298">Tidak diizinkan</translation>
+<translation id="4652440160515225514">Organisasi Anda telah memblokir situs ini karena melanggar kebijakan.</translation>
 <translation id="4653167719759882810">Merger &amp; akuisisi</translation>
 <translation id="4658638640878098064">Jepretan di kiri atas</translation>
 <translation id="4660119392514473465">Anda kini dapat menjelajah secara pribadi, dan orang lain yang menggunakan perangkat ini tidak akan melihat aktivitas Anda. Namun, download, bookmark, dan item daftar bacaan akan disimpan.</translation>
@@ -2915,6 +2916,7 @@
 <translation id="8437238597147034694">&amp;Urungkan pemindahan</translation>
 <translation id="8438476240229491014">Ingat setelan ini</translation>
 <translation id="8438786541497918448">Gunakan kamera &amp; mikrofon?</translation>
+<translation id="8438923942245957911">Situs ini ditandai oleh organisasi Anda</translation>
 <translation id="8443613539889492016">Musik rap &amp; hip-hop</translation>
 <translation id="8444543005280733648">Jaringan komputer</translation>
 <translation id="8446884382197647889">Pelajari Lebih Lanjut</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb
index 86cf96af..9f11c03 100644
--- a/components/strings/components_strings_is.xtb
+++ b/components/strings/components_strings_is.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Fara þangað núna</translation>
 <translation id="4648262692072505866">Tætigildi verður að vera á sniðinu SHA-256.</translation>
 <translation id="4652266463001779298">Ekki heimilað</translation>
+<translation id="4652440160515225514">Fyrirtækið þitt setti þetta vefsvæði á bannlista þar sem það brýtur gegn reglum.</translation>
 <translation id="4653167719759882810">Samruni og yfirtökur</translation>
 <translation id="4658638640878098064">Hefti efst til vinstri</translation>
 <translation id="4660119392514473465">Nú geturðu vafrað í næði og aðrir notendur tækisins geta ekki séð það sem þú gerir. Niðurhal, bókamerki og atriði á leslista verða þó vistuð.</translation>
@@ -2920,6 +2921,7 @@
 <translation id="8437238597147034694">Aft&amp;urkalla flutning</translation>
 <translation id="8438476240229491014">Muna þessa stillingu</translation>
 <translation id="8438786541497918448">Nota myndavél og hljóðnema?</translation>
+<translation id="8438923942245957911">Fyrirtækið þitt flaggaði þetta vefsvæði</translation>
 <translation id="8443613539889492016">Rapp og hipphopp</translation>
 <translation id="8444543005280733648">Tölvukerfi</translation>
 <translation id="8446884382197647889">Frekari upplýsingar</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 818dfdb..994a1eb 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507">‏<ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, צריך להקיש על Tab ואז על Enter כדי לנהל את המידע, הפרטיות והאבטחה בחשבון Google</translation>
 <translation id="1798447301915465742">‏<ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, ניתן לבצע כמה פעולות, יש להקיש על Tab כדי לעבור ביניהן</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">פרטי הכרטיס הווירטואלי</translation>
 <translation id="1803020234906945288">תזונה בריאה</translation>
 <translation id="1803264062614276815">שם בעל הכרטיס</translation>
 <translation id="1803351196216024260">האתר יכול לבקש הרשאה להשתמש במיקרופון</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">‏22x34 אינץ'</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{הצעה אחת}two{שתי הצעות}many{# הצעות}other{# הצעות}}</translation>
 <translation id="2066915425250589881">לבקש למחוק</translation>
+<translation id="2066969741541525119">האתר שבכתובת הזו נחסם על ידי הארגון שלך</translation>
 <translation id="2068528718802935086">תינוקות ופעוטות</translation>
 <translation id="2071156619270205202">הכרטיס הזה לא עומד בדרישות לקבלת מספר כרטיס וירטואלי.</translation>
 <translation id="2071692954027939183">ההתראות נחסמו באופן אוטומטי כי ברוב המקרים לא נתת הרשאה להציג אותן</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">ניקובים מרובים בחלק התחתון</translation>
 <translation id="219906046732893612">שיפוץ הבית</translation>
 <translation id="2202020181578195191">עליך להזין שנת תפוגה חוקית</translation>
+<translation id="2202627062836089804">גב הכרטיס</translation>
 <translation id="22081806969704220">מגש 3</translation>
 <translation id="2210794033760923560">העלאת הדוח</translation>
 <translation id="2212735316055980242">לא נמצאה מדיניות</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">שם הקובץ:</translation>
 <translation id="3507936815618196901">ליצור מפה בתלת ממד של הסביבה שלך ולעקוב אחר מיקום המצלמה</translation>
 <translation id="3512163584740124171">המערכת מתעלמת מהמדיניות הזו כי יש מדיניות אחרת מאותה קבוצה של הגדרות מדיניות שקיבלה עדיפות גבוהה יותר.</translation>
+<translation id="3515972145999192222">הכתובת <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> נחסמה על ידי הארגון שלך עקב הפרת מדיניות. <ph name="BEGIN_LEARN_MORE_LINK" />מידע נוסף<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">‏הלחצן 'ניהול כתובות', יש להקיש על Enter כדי להוסיף ולנהל כתובות בהגדרות Chrome</translation>
 <translation id="3518941727116570328">טיפול באובייקטים מרובים</translation>
 <translation id="3525130752944427905">‏10x14 אינץ'</translation>
@@ -1059,6 +1063,7 @@
 <translation id="3678342917559046352">‏התוסף לא תקין: הערך אמור להיות אחת מהצורות הבאות: &lt;extension_id&gt; או &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">‏פתיחת הדף בחלון אנונימי חדש (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">פרטי אישור</translation>
+<translation id="3693327506115126094">עליך לבחור שיטה לאימות הזהות שלך</translation>
 <translation id="3699374065820972102">‏התכונה TouchID מופעלת לצורך מילוי סיסמאות</translation>
 <translation id="3701427423622901115">האיפוס אושר.</translation>
 <translation id="3704162925118123524">ייתכן שתוצג דרישה להיכנס לדף ההתחברות של הרשת שבה בחרת להשתמש.</translation>
@@ -1143,6 +1148,7 @@
 <translation id="3906954721959377182">טאבלט</translation>
 <translation id="3909477809443608991">‏<ph name="URL" /> רוצה להציג תוכן מוגן. הזהות של המכשיר שלך תאומת על ידי Google ולאתר תהיה גישה אליה.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">יש להזין את קוד האבטחה</translation>
 <translation id="3927932062596804919">דחייה</translation>
 <translation id="393316646445601645">אינטרנט וטלקום</translation>
 <translation id="3939773374150895049">‏האם להשתמש ב-WebAuthn במקום ב-CVC?</translation>
@@ -1389,6 +1395,7 @@
 <translation id="4524805452350978254">ניהול כרטיסים</translation>
 <translation id="4526465106919207193">אנשים וחברה</translation>
 <translation id="4530347922939905757">הודעת טקסט</translation>
+<translation id="4531477351494678589">מספר הכרטיס הווירטואלי:</translation>
 <translation id="4540780316273593836">משהו השתבש</translation>
 <translation id="4541810033354695636">מציאות רבודה</translation>
 <translation id="4542971377163063093">מגש 6</translation>
@@ -1398,6 +1405,7 @@
 <translation id="4567686777917670400">‏מנהל המערכת יכול לשנות את הגדרת הדפדפן שלך מרחוק. ניהול הפעילות במכשיר הזה אפשרי גם מחוץ ל-Chromium. <ph name="BEGIN_LINK" />למידע נוסף<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">משלוח</translation>
 <translation id="4582204425268416675">הסרת הכרטיס</translation>
+<translation id="4582595824823167856">קבלה של הודעת טקסט</translation>
 <translation id="4587425331216688090">‏האם להסיר את הכתובת מ-Chrome?</translation>
 <translation id="459089498662672729">אפשרות ההדבקה מ-<ph name="ORIGIN_NAME" /> אל מיקום זה אינה מומלצת לפי המדיניות של מנהל המערכת</translation>
 <translation id="4592951414987517459">החיבור שלך אל <ph name="DOMAIN" /> מוצפן באמצעות חבילת צופן מתקדמת.</translation>
@@ -1409,6 +1417,8 @@
 <translation id="4606870351894164739">מרשים</translation>
 <translation id="4607603470419975064">‏לחצן להצגת טיפים של Chrome, מקישים על Enter כדי לקבל מידע על התכונות של Chrome</translation>
 <translation id="4607608436550361748">‏הצגת טיפים לשימוש ב-Chrome</translation>
+<translation id="460848736049414407">הכתובת נחסמה על ידי האדמין</translation>
+<translation id="4610279718074907952">האתר הזה שייך לקבוצת אתרים שיש להם הרשאה לראות את הפעילות שלך. הקבוצה הוגדרה על ידי <ph name="SET_OWNER" /></translation>
 <translation id="4617273035598175554">תוכנות גרפיקה ואנימציה</translation>
 <translation id="4622292761762557753">אעביר בכל זאת</translation>
 <translation id="4627675673814409125">‏לא ניתן להגדיר את המדיניות הזאת ברמה של פרופיל Chrome. המערכת תתעלם מהמדיניות.</translation>
@@ -1422,6 +1432,7 @@
 <translation id="4646534391647090355">אני רוצה לעבור לשם עכשיו</translation>
 <translation id="4648262692072505866">‏הגיבוב חייב להיות בפורמט SHA-256.</translation>
 <translation id="4652266463001779298">אין הרשאה</translation>
+<translation id="4652440160515225514">האתר הזה נחסם על ידי הארגון שלך עקב הפרת מדיניות.</translation>
 <translation id="4653167719759882810">מיזוגים ורכישות</translation>
 <translation id="4658638640878098064">סיכת הידוק בפינה השמאלית העליונה</translation>
 <translation id="4660119392514473465">עכשיו אפשר לגלוש באופן פרטי, ואנשים אחרים שמשתמשים במכשיר הזה לא יראו את הפעילות שלך. עם זאת, עדיין תתבצע שמירה של הורדות, סימניות ופריטים מרשימת הקריאה.</translation>
@@ -1879,6 +1890,7 @@
 <translation id="57689295674415555">מספר הכרטיס הווירטואלי לא הוזן?</translation>
 <translation id="5772086939108830423">שימוש במפתח גישה במכשיר אחר</translation>
 <translation id="5776313857861697733">עדיפות</translation>
+<translation id="5776574724412881956">האם הכרטיס הווירטואלי לא מולא? יש ללחוץ על פרטי הכרטיס הווירטואלי כדי להעתיק אותו ללוח. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">הניסוי מופעל</translation>
 <translation id="578305955206182703">ענבר</translation>
 <translation id="57838592816432529">השתקה</translation>
@@ -2008,6 +2020,7 @@
 <translation id="6116338172782435947">גישה אל טקסט ותמונות שהועתקו ללוח</translation>
 <translation id="6118782133429281336">רשימת המקורות ריקה.</translation>
 <translation id="6120179357481664955">‏מזהה UPI שלך זכור לך?</translation>
+<translation id="6122181661879998141">החלק הקדמי של הכרטיס</translation>
 <translation id="6124432979022149706">‏מחברים של Chrome Enterprise</translation>
 <translation id="6126565365696310362">מעטפה – סינית 2</translation>
 <translation id="6127379762771434464">הפריט הוסר</translation>
@@ -2374,6 +2387,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> רוצה להשתמש במצלמה שלך</translation>
 <translation id="7108819624672055576">אושרה על-ידי תוסף</translation>
 <translation id="7111012039238467737">(חוקי)</translation>
+<translation id="7112327784801341716">הפרטים המוצגים לא עדכניים? עליך לפנות לבנק שלך כדי לעדכן אותם.</translation>
 <translation id="7118618213916969306">‏חיפוש כתובת ה-URL שהועתקה ללוח, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">סגירת כרטיסיות או תוכניות אחרות</translation>
 <translation id="7129355289156517987">‏עם הסגירה של כל הכרטיסיות הפרטיות ב-Chromium, הפעילות שלך בכרטיסיות הבאות נמחקת מהמכשיר הזה:
@@ -2387,6 +2401,7 @@
 <translation id="7130775116821607281">ההעלאה חסומה</translation>
 <translation id="7132939140423847331">מנהל המערכת שלך אסר על העתקת הנתונים האלה.</translation>
 <translation id="7135130955892390533">הצגת סטטוס</translation>
+<translation id="7136009930065337683">מידע נוסף על המצב הפרטי</translation>
 <translation id="7138472120740807366">שיטת מסירה</translation>
 <translation id="7139892792842608322">המגש הראשי</translation>
 <translation id="714064300541049402">‏הזזה של תמונה בצד 2 על ציר X</translation>
@@ -2676,6 +2691,7 @@
 <translation id="7798389633136518089">המדיניות לא הובאה בחשבון מפני שלא הוגדרה על-ידי מקור בענן.</translation>
 <translation id="7800304661137206267">החיבור מוצפן באמצעות <ph name="CIPHER" /> עם <ph name="MAC" /> לאימות הודעות ועם <ph name="KX" /> בתור מנגנון להחלפת מפתחות.</translation>
 <translation id="7802523362929240268">האתר חוקי</translation>
+<translation id="7802989406998618639">יש להזין את קוד האבטחה בן <ph name="NUMBER_OF_DIGITS" /> הספרות שמופיע על <ph name="SIDE_OF_CARD" /> כדי שהבנק יוכל לאמת את זהותך</translation>
 <translation id="780301667611848630">לא תודה</translation>
 <translation id="7805571567667010077">מנוהלת על ידי הארגון שלך</translation>
 <translation id="7805768142964895445">סטטוס</translation>
@@ -2910,6 +2926,7 @@
 <translation id="8437238597147034694">&amp;ביטול העברה</translation>
 <translation id="8438476240229491014">יש לזכור הגדרה זו</translation>
 <translation id="8438786541497918448">להשתמש במצלמה ובמיקרופון?</translation>
+<translation id="8438923942245957911">האתר הזה סומן על ידי הארגון שלך</translation>
 <translation id="8443613539889492016">ראפ והיפ-הופ</translation>
 <translation id="8444543005280733648">רשתות מחשבים</translation>
 <translation id="8446884382197647889">למידע נוסף</translation>
@@ -3003,6 +3020,7 @@
 <translation id="8725066075913043281">ניסיון חוזר</translation>
 <translation id="8726549941689275341">גודל דף:</translation>
 <translation id="8730621377337864115">בוצע</translation>
+<translation id="8731268612289859741">קוד האבטחה</translation>
 <translation id="8731544501227493793">‏הלחצן 'ניהול סיסמאות', יש להקיש על Enter כדי להציג ולנהל את הסיסמאות בהגדרות Chrome</translation>
 <translation id="8734529307927223492">ה-<ph name="DEVICE_TYPE" /> מנוהל על-ידי <ph name="MANAGER" /></translation>
 <translation id="8736059027199600831">‏30x40 אינץ'</translation>
@@ -3108,6 +3126,7 @@
 <translation id="9005998258318286617">‏הטעינה של מסמך ה-PDF נכשלה.</translation>
 <translation id="9008178007718859630">עיצוב הבית ועיצוב פנים</translation>
 <translation id="9008201768610948239">סגירה</translation>
+<translation id="9018120810758822233">עליך להזין את קוד האבטחה של <ph name="CREDIT_CARD" /></translation>
 <translation id="901834265349196618">אימייל</translation>
 <translation id="9020200922353704812">יש להזין את הכתובת לחיוב של הכרטיס</translation>
 <translation id="9020542370529661692">הדף הזה תורגם ל<ph name="TARGET_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb
index bcce827..f2f7e94 100644
--- a/components/strings/components_strings_km.xtb
+++ b/components/strings/components_strings_km.xtb
@@ -1436,6 +1436,7 @@
 <translation id="4646534391647090355">នាំខ្ញុំទៅទីនោះឥឡូវនេះ</translation>
 <translation id="4648262692072505866">កូដតំណាង​ត្រូវតែ​មាន​ទម្រង់ SHA-256។</translation>
 <translation id="4652266463001779298">មិន​អនុញ្ញាត</translation>
+<translation id="4652440160515225514">ស្ថាប័ន​របស់អ្នក​បានទប់ស្កាត់​គេហទំព័រ​នេះ ដោយសារ​វា​បំពាន​គោលការណ៍។</translation>
 <translation id="4653167719759882810">ការទិញលក់ និង​ការរួមបញ្ចូលក្រុមហ៊ុន</translation>
 <translation id="4658638640878098064">កិប​ខាងលើ​ផ្នែកខាងឆ្វេង</translation>
 <translation id="4660119392514473465">ឥឡូវនេះ អ្នក​អាច​រុករក​ជាលក្ខណៈ​ឯកជន​បានហើយ ដូច្នេះ​អ្នកផ្សេងទៀត​ដែល​ប្រើ​ឧបករណ៍​នេះ​នឹង​មើលមិនឃើញ​សកម្មភាព​របស់អ្នក​ទេ។ ទោះបីជា​យ៉ាងនេះក្តី ការទាញយក ​ចំណាំ​ និងធាតុនៃបញ្ជីអាននឹងត្រូវបានរក្សាទុក។</translation>
@@ -2926,6 +2927,7 @@
 <translation id="8437238597147034694">បកក្រោយការផ្លាស់ទី</translation>
 <translation id="8438476240229491014">ចងចាំ​ការកំណត់​នេះ</translation>
 <translation id="8438786541497918448">ប្រើកាមេរ៉ា និងមីក្រូហ្វូនឬ?</translation>
+<translation id="8438923942245957911">គេហទំព័រ​នេះ​ត្រូវបាន​សម្គាល់​ដោយ​ស្ថាប័ន​របស់អ្នក</translation>
 <translation id="8443613539889492016">រ៉េប និង​ហ៊ីបហប</translation>
 <translation id="8444543005280733648">បណ្ដាញ​កុំព្យូទ័រ</translation>
 <translation id="8446884382197647889">ស្វែងយល់បន្ថែម</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index 01eb271b..f8579bd1 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -1428,6 +1428,7 @@
 <translation id="4646534391647090355">ನನ್ನನ್ನು ಈಗ ಅಲ್ಲಿಗೆ ಕರೆದೊಯ್ಯಿರಿ</translation>
 <translation id="4648262692072505866">ಹ್ಯಾಶ್ ಮೌಲ್ಯವು SHA-256 ಫಾರ್ಮ್ಯಾಟ್‌ನಲ್ಲಿರಬೇಕು.</translation>
 <translation id="4652266463001779298">ಅನುಮತಿ ಇಲ್ಲ</translation>
+<translation id="4652440160515225514">ನೀತಿಯನ್ನು ಉಲ್ಲಂಘಿಸುವ ಕಾರಣ ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಈ ಸೈಟ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಿದೆ</translation>
 <translation id="4653167719759882810">ವಿಲೀನಗಳು ಮತ್ತು ಸ್ವಾಧೀನಗಳು</translation>
 <translation id="4658638640878098064">ಮೇಲಿನ ಎಡಭಾಗದಲ್ಲಿ ಸ್ಟೇಪಲ್ ಹಾಕಿ</translation>
 <translation id="4660119392514473465">ನೀವು ಈಗ ಖಾಸಗಿಯಾಗಿ ಬ್ರೌಸ್ ಮಾಡಬಹುದು ಮತ್ತು ಈ ಸಾಧನವನ್ನು ಬಳಸುವ ಇತರರಿಗೆ ನಿಮ್ಮ ಚಟುವಟಿಕೆ ಕಾಣಿಸುವುದಿಲ್ಲ. ಆದರೆ, ಡೌನ್‌ಲೋಡ್‌ಗಳು, ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು ಮತ್ತು ಓದುವ ಪಟ್ಟಿ ಐಟಂಗಳನ್ನು ಉಳಿಸಲಾಗುತ್ತದೆ.</translation>
@@ -2914,6 +2915,7 @@
 <translation id="8437238597147034694">&amp;ಸರಿಸುವುದನ್ನು ರದ್ದುಗೊಳಿಸಿ</translation>
 <translation id="8438476240229491014">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನೆನಪಿನಲ್ಲಿರಿಸಿಕೊಳ್ಳಿ</translation>
 <translation id="8438786541497918448">ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ಬಳಸುವುದೇ?</translation>
+<translation id="8438923942245957911">ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಈ ಸೈಟ್ ಅನ್ನು ಫ್ಲ್ಯಾಗ್ ಮಾಡಿದೆ</translation>
 <translation id="8443613539889492016">ರ್‍ಯಾಪ್ ಮತ್ತು ಹಿಪ್-ಹಾಪ್</translation>
 <translation id="8444543005280733648">ಕಂಪ್ಯೂಟರ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು</translation>
 <translation id="8446884382197647889">ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 3f49f90d..28d3fe1 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, Tab을 누른 다음 Enter를 눌러 Google 계정에서 정보, 개인 정보 보호 및 보안 설정 관리</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, 여러 작업 이용 가능, Tab을 눌러 작업 둘러보기</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">가상 카드 세부정보</translation>
 <translation id="1803020234906945288">건강한 식생활</translation>
 <translation id="1803264062614276815">카드 소유자 이름</translation>
 <translation id="1803351196216024260">마이크 사용을 요청할 수 있음</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22x34인치</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{제안 1개}other{제안 #개}}</translation>
 <translation id="2066915425250589881">삭제를 요청</translation>
+<translation id="2066969741541525119">조직에서 차단한 사이트입니다</translation>
 <translation id="2068528718802935086">영유아</translation>
 <translation id="2071156619270205202">이 카드로는 가상 카드 번호를 사용할 수 없습니다.</translation>
 <translation id="2071692954027939183">알림을 평소에 허용하지 않았기 때문에 알림이 자동으로 차단되었습니다.</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">하단 다공 펀칭</translation>
 <translation id="219906046732893612">주택 개조</translation>
 <translation id="2202020181578195191">올바른 만료 연도를 입력하세요.</translation>
+<translation id="2202627062836089804">카드 뒷면</translation>
 <translation id="22081806969704220">트레이 3</translation>
 <translation id="2210794033760923560">보고서 업로드</translation>
 <translation id="2212735316055980242">정책을 찾을 수 없음</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">파일 이름:</translation>
 <translation id="3507936815618196901">주변 환경의 3D 지도를 생성하고 카메라 위치를 추적</translation>
 <translation id="3512163584740124171">동일한 정책 그룹에 있는 다른 정책이 우선순위가 높기 때문에 이 정책은 무시됩니다.</translation>
+<translation id="3515972145999192222"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />이(가) 정책을 위반하여 조직에서 차단했습니다. <ph name="BEGIN_LEARN_MORE_LINK" />자세히 알아보기<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">주소 관리 버튼, Enter를 눌러 Chrome 설정에서 주소 추가 및 관리</translation>
 <translation id="3518941727116570328">다중 객체 처리</translation>
 <translation id="3525130752944427905">10x14인치</translation>
@@ -1059,6 +1063,7 @@
 <translation id="3678342917559046352">잘못된 확장 프로그램: 값이 &lt;extension_id&gt; 또는 &lt;extension_id&gt;;&lt;update_url&gt; 형식이어야 합니다.</translation>
 <translation id="3678529606614285348">새 시크릿 창에서 페이지 열기(Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">인증서 정보</translation>
+<translation id="3693327506115126094">본인 인증 방법 선택</translation>
 <translation id="3699374065820972102">비밀번호 입력 시 TouchID 사용</translation>
 <translation id="3701427423622901115">재설정이 확인되었습니다.</translation>
 <translation id="3704162925118123524">사용 중인 네트워크에서 로그인 페이지 방문을 요청할 수 있습니다.</translation>
@@ -1143,6 +1148,7 @@
 <translation id="3906954721959377182">태블릿</translation>
 <translation id="3909477809443608991"><ph name="URL" />에서 보호된 콘텐츠를 재생하려고 합니다. Google에서 이 기기의 신원을 확인하며 이 사이트에서 이 기기에 액세스할 수 있습니다.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">보안 코드 입력</translation>
 <translation id="3927932062596804919">거부</translation>
 <translation id="393316646445601645">인터넷 및 전기 통신</translation>
 <translation id="3939773374150895049">CVC 대신 WebAuthn을 사용하시겠습니까?</translation>
@@ -1389,6 +1395,7 @@
 <translation id="4524805452350978254">카드 관리</translation>
 <translation id="4526465106919207193">인물 및 사회</translation>
 <translation id="4530347922939905757">SMS</translation>
+<translation id="4531477351494678589">가상 카드 번호:</translation>
 <translation id="4540780316273593836">문제 발생</translation>
 <translation id="4541810033354695636">증강 현실</translation>
 <translation id="4542971377163063093">트레이 6</translation>
@@ -1398,6 +1405,7 @@
 <translation id="4567686777917670400">관리자가 원격으로 브라우저 설정을 변경할 수 있습니다. 이 기기의 활동은 Chromium 외부에서도 관리할 수 있습니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">배송</translation>
 <translation id="4582204425268416675">카드 삭제</translation>
+<translation id="4582595824823167856">문자 메시지 받기</translation>
 <translation id="4587425331216688090">Chrome에서 주소를 삭제하시겠습니까?</translation>
 <translation id="459089498662672729"><ph name="ORIGIN_NAME" />에서 이 위치로 붙여넣기는 관리자 정책에 따라 권장되지 않습니다.</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" />에 대한 연결은 최신 암호화 기술을 사용하여 암호화됩니다.</translation>
@@ -1409,6 +1417,7 @@
 <translation id="4606870351894164739">강렬함</translation>
 <translation id="4607603470419975064">Chrome 도움말 보기 버튼, Enter를 눌러 Chrome 기능 자세히 알아보기</translation>
 <translation id="4607608436550361748">Chrome 도움말 보기</translation>
+<translation id="460848736049414407">관리자가 차단함</translation>
 <translation id="4610279718074907952"><ph name="SET_OWNER" />에서 정의한 그룹(내 활동을 볼 수 있음)에 속하는 사이트입니다.</translation>
 <translation id="4617273035598175554">그래픽 및 애니메이션 소프트웨어</translation>
 <translation id="4622292761762557753">무시하고 전송</translation>
@@ -1423,6 +1432,7 @@
 <translation id="4646534391647090355">지금 이동</translation>
 <translation id="4648262692072505866">해시는 SHA-256 형식이어야 합니다.</translation>
 <translation id="4652266463001779298">허용되지 않음</translation>
+<translation id="4652440160515225514">정책을 위반하여 조직에서 차단한 사이트입니다.</translation>
 <translation id="4653167719759882810">합병 및 인수</translation>
 <translation id="4658638640878098064">왼쪽 상단 스테이플</translation>
 <translation id="4660119392514473465">이제 비공개로 인터넷을 탐색할 수 있으며, 이 기기를 사용하는 다른 사용자가 내 활동을 볼 수 없습니다. 하지만 다운로드, 북마크, 읽기 목록 항목은 계속해서 저장됩니다.</translation>
@@ -1875,6 +1885,7 @@
 <translation id="57689295674415555">가상 카드 번호가 자동 완성되지 않았나요?</translation>
 <translation id="5772086939108830423">다른 기기의 패스키 사용</translation>
 <translation id="5776313857861697733">우선순위</translation>
+<translation id="5776574724412881956">가상 카드가 입력되지 않았나요? 가상 카드 세부정보를 클릭하여 클립보드에 복사합니다. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">실험 기능 사용 설정됨</translation>
 <translation id="578305955206182703">황색</translation>
 <translation id="57838592816432529">음소거</translation>
@@ -2004,6 +2015,7 @@
 <translation id="6116338172782435947">클립보드에 복사된 텍스트 및 이미지를 확인합니다.</translation>
 <translation id="6118782133429281336">원본 목록이 비어 있습니다.</translation>
 <translation id="6120179357481664955">UPI ID를 저장하시겠습니까?</translation>
+<translation id="6122181661879998141">카드 앞면</translation>
 <translation id="6124432979022149706">Chrome Enterprise Connectors</translation>
 <translation id="6126565365696310362">봉투 Chinese @2</translation>
 <translation id="6127379762771434464">항목 삭제됨</translation>
@@ -2370,6 +2382,7 @@
 <translation id="7108634116785509031"><ph name="HOST" />에서 카메라에 액세스하려고 합니다</translation>
 <translation id="7108819624672055576">확장 프로그램에서 허용</translation>
 <translation id="7111012039238467737">(유효)</translation>
+<translation id="7112327784801341716">최신 정보가 표시되지 않나요? 은행에 문의하여 업데이트하세요.</translation>
 <translation id="7118618213916969306">클립보드 URL <ph name="SHORT_URL" /> 검색</translation>
 <translation id="7119414471315195487">다른 탭 또는 프로그램 닫기</translation>
 <translation id="7129355289156517987">Chromium 시크릿 탭을 모두 닫으면 기기에서 다음 탭의 활동이 삭제됩니다.
@@ -2672,6 +2685,7 @@
 <translation id="7798389633136518089">클라우드 소스에서 정책을 설정하지 않아 무시되었습니다.</translation>
 <translation id="7800304661137206267">메시지 인증(<ph name="MAC" />)과 키 교환 메커니즘(<ph name="KX" />)을 설정하고 <ph name="CIPHER" />을(를) 사용하여 연결이 암호화되어 있습니다.</translation>
 <translation id="7802523362929240268">정상적인 사이트</translation>
+<translation id="7802989406998618639">은행에서 본인 인증을 할 수 있도록 <ph name="SIDE_OF_CARD" />에 <ph name="NUMBER_OF_DIGITS" />자리 보안 코드를 입력하세요.</translation>
 <translation id="780301667611848630">취소</translation>
 <translation id="7805571567667010077">조직에서 관리함</translation>
 <translation id="7805768142964895445">상태</translation>
@@ -2906,6 +2920,7 @@
 <translation id="8437238597147034694">이동 실행 취소(&amp;U)</translation>
 <translation id="8438476240229491014">이 설정 저장</translation>
 <translation id="8438786541497918448">카메라 및 마이크를 사용하시겠습니까?</translation>
+<translation id="8438923942245957911">조직에서 신고한 사이트입니다.</translation>
 <translation id="8443613539889492016">랩 및 힙합</translation>
 <translation id="8444543005280733648">컴퓨터 네트워크</translation>
 <translation id="8446884382197647889">자세히 알아보기</translation>
@@ -2999,6 +3014,7 @@
 <translation id="8725066075913043281">다시 시도하세요</translation>
 <translation id="8726549941689275341">페이지 크기:</translation>
 <translation id="8730621377337864115">완료</translation>
+<translation id="8731268612289859741">보안 코드</translation>
 <translation id="8731544501227493793">비밀번호 관리 버튼, Chrome 설정에서 비밀번호를 확인하고 관리하려면 Enter 누르기</translation>
 <translation id="8734529307927223492">내 <ph name="DEVICE_TYPE" />은(는) <ph name="MANAGER" />에서 관리합니다</translation>
 <translation id="8736059027199600831">30x40인치</translation>
@@ -3104,6 +3120,7 @@
 <translation id="9005998258318286617">PDF 문서를 로드하지 못했습니다.</translation>
 <translation id="9008178007718859630">홈데코 및 인테리어</translation>
 <translation id="9008201768610948239">무시</translation>
+<translation id="9018120810758822233"><ph name="CREDIT_CARD" />의 보안 코드 입력</translation>
 <translation id="901834265349196618">이메일</translation>
 <translation id="9020200922353704812">카드 청구서 수신 주소가 필요함</translation>
 <translation id="9020542370529661692">이 페이지는 <ph name="TARGET_LANGUAGE" />로 번역되었습니다.</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index 1ee9c02..d780ed0 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, Маалыматты, купуялыкты жана коопсуздукту Google аккаунтуңузда башкаруу үчүн Tab, андан кийин Enter баскычын басыңыз</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, бир нече аракет жеткиликтүү, Tab баскычын басып, аларды карап чыгыңыз</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Виртуалдык картанын чоо-жайы</translation>
 <translation id="1803020234906945288">Пайдалуу тамактар</translation>
 <translation id="1803264062614276815">Карта ээсинин аты-жөнү</translation>
 <translation id="1803351196216024260">Микрофонуңузду колдонууга уруксат сурай алат</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 дюйм</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 сунуш}other{# сунуш}}</translation>
 <translation id="2066915425250589881">өчүрүүнү сурансаңыз болот</translation>
+<translation id="2066969741541525119">Ачыла турган сайт уюмуңуз тарабынан бөгөттөлгөн</translation>
 <translation id="2068528718802935086">Ымыркайлар жана наристелер</translation>
 <translation id="2071156619270205202">Бул карта виртуалдык картанын номери катары жарамдуу эмес.</translation>
 <translation id="2071692954027939183">Билдирмелер автоматтык түрдө бөгөттөлдү, анткени, адатта, аларга уруксат бербейсиз</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Төмөнкү жагын бир нече жолу тешүү</translation>
 <translation id="219906046732893612">Үйдү жакшыртуу</translation>
 <translation id="2202020181578195191">Мөөнөтү аяктоочу жылды туура киргизиңиз</translation>
+<translation id="2202627062836089804">картаңыздын аркасы</translation>
 <translation id="22081806969704220">3-түпкүч</translation>
 <translation id="2210794033760923560">Отчётту жүктөп берүү</translation>
 <translation id="2212735316055980242">Саясат табылган жок</translation>
@@ -984,6 +987,7 @@
 <translation id="350069200438440499">Файлдын аталышы:</translation>
 <translation id="3507936815618196901">Айланаңыздын 3D картасын түзүү же камераңыздын абалына көз салуу</translation>
 <translation id="3512163584740124171">Ушул эле саясаттар тобундагы башка саясаттын мааниси артыкчылыктуу болгондуктан, бул саясат этибарга алынбайт.</translation>
+<translation id="3515972145999192222">Саясатты бузгандыктан <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> сайтын уюмуңуз бөгөттөп койгон. <ph name="BEGIN_LEARN_MORE_LINK" />Кеңири маалымат<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">Даректерди башкаруу баскычы, Chrome жөндөөлөрүнөн даректерди кошуу жана башкаруу үчүн Enter баскычын басыңыз</translation>
 <translation id="3518941727116570328">Бир нече объектти тейлөө</translation>
 <translation id="3525130752944427905">10 x 14 дюйм</translation>
@@ -1058,6 +1062,7 @@
 <translation id="3678342917559046352">Жараксыз кеңейтүү: Маанинин күтүлгөн форматы төмөнкү формада болушу керек: &lt;extension_id&gt; же &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Баракчаны жаңы жашыруун терезеде ачуу (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">Тастыктама маалыматы</translation>
+<translation id="3693327506115126094">Сиз экениңизди кантип ырастай турганыңызды тандаңыз</translation>
 <translation id="3699374065820972102">Сырсөздөрдү толтуруу үчүн TouchID күйгүзүлдү</translation>
 <translation id="3701427423622901115">Баштапкы абалга келтирүү аракети ырасталды.</translation>
 <translation id="3704162925118123524">Сиз колдонуп жаткан тармак, анын кирүү барагына баш багууңузду талап кылышы мүмкүн.</translation>
@@ -1142,6 +1147,7 @@
 <translation id="3906954721959377182">Планшет</translation>
 <translation id="3909477809443608991"><ph name="URL" /> сайтында корголгон мазмун ойнотулганы жатат. Түзмөгүңүздүн аныктыгы Google аркылуу текшерилет жана ага ушул сайт кире алат.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Коопсуздук кодуңузду киргизиңиз</translation>
 <translation id="3927932062596804919">Четке кагуу</translation>
 <translation id="393316646445601645">Интернет жана телекоммуникация</translation>
 <translation id="3939773374150895049">CVC'нин ордуна WebAuthn колдонулсунбу?</translation>
@@ -1388,6 +1394,7 @@
 <translation id="4524805452350978254">Карталарды башкаруу</translation>
 <translation id="4526465106919207193">Адам жана коом</translation>
 <translation id="4530347922939905757">SMS билдирүү</translation>
+<translation id="4531477351494678589">Виртуалдык картанын номери:</translation>
 <translation id="4540780316273593836">Бир жерден ката кетти</translation>
 <translation id="4541810033354695636">кошумчаланган чындык</translation>
 <translation id="4542971377163063093">6-түпкүч</translation>
@@ -1397,6 +1404,7 @@
 <translation id="4567686777917670400">Администраторуңуз серепчини алыстан жөндөй алат. Бул түзмөктө аткарылган аракеттер Chromium'дан тышкары да башкарылышы мүмкүн. <ph name="BEGIN_LINK" />Кеңири маалымат<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Жеткирүү</translation>
 <translation id="4582204425268416675">Картаны алып салуу</translation>
+<translation id="4582595824823167856">SMS алуу</translation>
 <translation id="4587425331216688090">Дарек Chrome'дон алынып салынсынбы?</translation>
 <translation id="459089498662672729">Администратор <ph name="ORIGIN_NAME" /> сайтынан бул жерге чаптоону сунуштабайт</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" /> менен туташууңуз заманбап шифр топтому менен шифрленген.</translation>
@@ -1408,6 +1416,7 @@
 <translation id="4606870351894164739">Таасирлүү</translation>
 <translation id="4607603470419975064">Chrome'догу кеңештерди көрүү баскычы. Chrome'догу функциялар жөнүндө толук маалымат алуу үчүн Enter баскычтарын басыңыз</translation>
 <translation id="4607608436550361748">Chrome'дун кеңештерин көрүү</translation>
+<translation id="460848736049414407">Админ бөгөттөп койгон</translation>
 <translation id="4610279718074907952">Бул сайт <ph name="SET_OWNER" /> аныктаган топко кирип, ал аракеттериңизди көрүп турат</translation>
 <translation id="4617273035598175554">Графика жана анимация программасы</translation>
 <translation id="4622292761762557753">Баары бир өткөрүлсүн</translation>
@@ -1874,6 +1883,7 @@
 <translation id="57689295674415555">Виртуалдык картанын номери киргизилген жокпу?</translation>
 <translation id="5772086939108830423">Мүмкүндүк алуу ачкычын башка түзмөктө колдонуу</translation>
 <translation id="5776313857861697733">Маанилүүлүгү</translation>
+<translation id="5776574724412881956">Виртуалдык карта толтурулган жокпу? Алмашуу буферине көчүрүү үчүн виртуалдык картанын чоо-жайын чыкылдатыңыз. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Тажрыйба иштетилди</translation>
 <translation id="578305955206182703">Кочкул сары</translation>
 <translation id="57838592816432529">Үнсүз</translation>
@@ -2003,6 +2013,7 @@
 <translation id="6116338172782435947">Алмашуу буферине көчүрүлгөн текстти жана сүрөттөрдү көрүү</translation>
 <translation id="6118782133429281336">Түпнуска тизме бош.</translation>
 <translation id="6120179357481664955">UPI идентификаторуңуз сакталсынбы?</translation>
+<translation id="6122181661879998141">картаңыздын алдыңкы бети</translation>
 <translation id="6124432979022149706">Chrome Enterprise туташтыргычтары</translation>
 <translation id="6126565365696310362">Конверт Кытайча #2</translation>
 <translation id="6127379762771434464">Нерсе өчүрүлдү</translation>
@@ -2369,6 +2380,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> камераңызды колдонгону жатат</translation>
 <translation id="7108819624672055576">Кеңейтүү тарабынан уруксат берилген</translation>
 <translation id="7111012039238467737">(Жарактуу)</translation>
+<translation id="7112327784801341716">Учурдагы маалыматыңызды көрбөй турасызбы? Аны жаңыртуу үчүн банкка кайрылыңыз.</translation>
 <translation id="7118618213916969306">Алмашуу буферинин URL'ин издөө, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">Башка өтмөктөрдү жана программаларды жабыңыз</translation>
 <translation id="7129355289156517987">Chromium'дагы бардык жашыруун өтмөктөр жабылса, ал өтмөктөрдөгү аракеттериңиз бул түзмөктөн өчүрүлөт:
@@ -2672,6 +2684,7 @@
 <translation id="7798389633136518089">Этибарга алынган жок, анткени саясат булут булагынан коюлган жок.</translation>
 <translation id="7800304661137206267">Туташуу <ph name="CIPHER" /> аркылуу, билдирүүнүн аныктыгын текшерүү үчүн <ph name="MAC" /> жана ачкыч алмашуу механизми катары <ph name="KX" /> менен шифрленген.</translation>
 <translation id="7802523362929240268">Бул сайт коопсуз</translation>
+<translation id="7802989406998618639">Банк сиз экениңизди текшериши үчүн, <ph name="SIDE_OF_CARD" /> картаңыздагы <ph name="NUMBER_OF_DIGITS" /> орундуу коопсуздук кодун киргизиңиз</translation>
 <translation id="780301667611848630">Жок, рахмат</translation>
 <translation id="7805571567667010077">Уюмуңуз башкарат</translation>
 <translation id="7805768142964895445">Статусу</translation>
@@ -2999,6 +3012,7 @@
 <translation id="8725066075913043281">Кайра аракет кылып көрүү</translation>
 <translation id="8726549941689275341">Барактын өлчөмү:</translation>
 <translation id="8730621377337864115">Бүттү</translation>
+<translation id="8731268612289859741">Коопсуздук коду</translation>
 <translation id="8731544501227493793">Сырсөздөрдү башкаруу баскычы. Chrome'дун жөндөөлөрүнө өтүп, сырсөздөрдү көрүү жана башкаруу үчүн, Enter баскычын басыңыз</translation>
 <translation id="8734529307927223492"><ph name="DEVICE_TYPE" /> түзмөгүңүз <ph name="MANAGER" /> тарабынан башкарылууда</translation>
 <translation id="8736059027199600831">30 x 40 дюйм</translation>
@@ -3104,6 +3118,7 @@
 <translation id="9005998258318286617">PDF документи жүктөлбөй калды.</translation>
 <translation id="9008178007718859630">Үй жана ички жасалгалар</translation>
 <translation id="9008201768610948239">Этибарга албоо</translation>
+<translation id="9018120810758822233"><ph name="CREDIT_CARD" /> картаңыз үчүн коопсуздук кодун киргизиңиз</translation>
 <translation id="901834265349196618">электрондук почта</translation>
 <translation id="9020200922353704812">Карточканын төлөм дареги талап кылынат</translation>
 <translation id="9020542370529661692">Бул бет <ph name="TARGET_LANGUAGE" /> тилине которулду</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index efc35785..5b57dc31 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />. Lai pārvaldītu savu informāciju, konfidencialitāti un drošību savā Google kontā, nospiediet tabulēšanas taustiņu un pēc tam — taustiņu Enter.</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, ir pieejamas vairākas darbības. Lai pēc kārtas pārietu starp šīm darbībām, nospiediet tabulēšanas taustiņu.</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Virtuālās kartes informācija</translation>
 <translation id="1803020234906945288">Veselīgs uzturs</translation>
 <translation id="1803264062614276815">Kartes īpašnieka vārds, uzvārds</translation>
 <translation id="1803351196216024260">Var pieprasīt atļauju izmantot jūsu mikrofonu</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 collas</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 ieteikums}zero{# ieteikumi}one{# ieteikums}other{# ieteikumi}}</translation>
 <translation id="2066915425250589881">pieprasīt tās dzēšanu</translation>
+<translation id="2066969741541525119">Šo vietni ir bloķējusi jūsu organizācija</translation>
 <translation id="2068528718802935086">Zīdaiņi un mazi bērni</translation>
 <translation id="2071156619270205202">Šī karte neatbilst virtuālās kartes numuram.</translation>
 <translation id="2071692954027939183">Paziņojumi tika automātiski bloķēti, jo jūs tos parasti neatļaujat.</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Vairāki caurumi apakšdaļā</translation>
 <translation id="219906046732893612">Mājas labiekārtošana</translation>
 <translation id="2202020181578195191">Ievadiet derīgu gadu</translation>
+<translation id="2202627062836089804">kartes aizmugurē</translation>
 <translation id="22081806969704220">3. paplāte</translation>
 <translation id="2210794033760923560">Augšupielādēt pārskatu</translation>
 <translation id="2212735316055980242">Politika netika atrasta.</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">Faila vārds:</translation>
 <translation id="3507936815618196901">Izveidot jūsu apkārtnes 3D karti un izsekot kameras pozīciju</translation>
 <translation id="3512163584740124171">Šī politika tiek ignorēta, jo citai tās pašas politiku grupas politikai ir augstāka prioritāte.</translation>
+<translation id="3515972145999192222">Jūsu organizācija ir bloķējusi vietni <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, jo ar to tiek pārkāpta politika. <ph name="BEGIN_LEARN_MORE_LINK" />Uzziniet vairāk<ph name="END_LEARN_MORE_LINK" />.</translation>
 <translation id="35172538073169599">Poga “Pārvaldīt adreses”: nospiediet ievadīšanas taustiņu, lai Chrome iestatījumos pievienotu un pārvaldītu adreses.</translation>
 <translation id="3518941727116570328">Vairāku objektu apstrāde</translation>
 <translation id="3525130752944427905">10 x 14 collas</translation>
@@ -1058,6 +1062,7 @@
 <translation id="3678342917559046352">Nederīgs paplašinājums. Vērtībai ir jābūt kādai no šīm veidlapām: &lt;extension_id&gt; vai &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Atvērt lapu jaunā inkognito režīma logā (Ctrl+Shift+N)</translation>
 <translation id="3681007416295224113">Sertifikāta informācija</translation>
+<translation id="3693327506115126094">Identitātes apstiprināšanas veida izvēle</translation>
 <translation id="3699374065820972102">Paroļu aizpildei ir ieslēgta funkcija Touch ID.</translation>
 <translation id="3701427423622901115">Atiestatīšana apstiprināta.</translation>
 <translation id="3704162925118123524">Iespējams, izmantotajā tīklā tiks pieprasīts apmeklēt pieteikšanās lapu.</translation>
@@ -1142,6 +1147,7 @@
 <translation id="3906954721959377182">Planšetdators</translation>
 <translation id="3909477809443608991">Vietne <ph name="URL" /> vēlas atskaņot aizsargātu saturu. Jūsu ierīces identitāti pārbaudīs Google, un tai var piekļūt šī vietne.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Ievadīt drošības kodu</translation>
 <translation id="3927932062596804919">Neatļaut</translation>
 <translation id="393316646445601645">Internets un telekomunikācijas</translation>
 <translation id="3939773374150895049">Vai vēlaties izmantot WebAuthn, nevis CVC?</translation>
@@ -1388,6 +1394,7 @@
 <translation id="4524805452350978254">Pārvaldīt kartītes</translation>
 <translation id="4526465106919207193">Cilvēki un sabiedrība</translation>
 <translation id="4530347922939905757">Īsziņa</translation>
+<translation id="4531477351494678589">Virtuālās kartes numurs:</translation>
 <translation id="4540780316273593836">Radās problēma</translation>
 <translation id="4541810033354695636">papildinātā realitāte</translation>
 <translation id="4542971377163063093">6. paplāte</translation>
@@ -1397,6 +1404,7 @@
 <translation id="4567686777917670400">Jūsu administrators var attālināti mainīt jūsu pārlūka iestatījumus. Darbības šajā ierīcē var pārvaldīt arī ārpus pārlūka Chromium. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" />.</translation>
 <translation id="457875822857220463">Piegāde</translation>
 <translation id="4582204425268416675">Noņemt karti</translation>
+<translation id="4582595824823167856">Saņemt īsziņu</translation>
 <translation id="4587425331216688090">Vai noņemt adresi no pārlūka Chrome?</translation>
 <translation id="459089498662672729">Administratora politikā ir ieteikts neveikt ielīmēšanu no <ph name="ORIGIN_NAME" /> šajā atrašanās vietā</translation>
 <translation id="4592951414987517459">Savienojums ar domēnu <ph name="DOMAIN" /> ir šifrēts, izmantojot mūsdienīgu šifra komplektu.</translation>
@@ -1408,6 +1416,7 @@
 <translation id="4606870351894164739">Pamanāma</translation>
 <translation id="4607603470419975064">Chrome padomu skatīšanas poga. Lai uzzinātu vairāk par Chrome funkcijām, nospiediet taustiņu Enter.</translation>
 <translation id="4607608436550361748">Skatīt Chrome padomus</translation>
+<translation id="460848736049414407">Bloķējis administrators</translation>
 <translation id="4610279718074907952">Šī vietne ir uzņēmuma <ph name="SET_OWNER" /> definētā grupā, un jūsu darbības ir redzamas visai grupai.</translation>
 <translation id="4617273035598175554">Grafikas un animācijas programmatūra</translation>
 <translation id="4622292761762557753">Tomēr pārsūtīt</translation>
@@ -1422,6 +1431,7 @@
 <translation id="4646534391647090355">Doties uz turieni tagad</translation>
 <translation id="4648262692072505866">Jaucējvērtības formātam ir jābūt SHA-256.</translation>
 <translation id="4652266463001779298">Atļauja nav piešķirta</translation>
+<translation id="4652440160515225514">Jūsu organizācija bloķēja šo vietni, jo vietnē ir pārkāpta politika.</translation>
 <translation id="4653167719759882810">Apvienošanās un iegāde</translation>
 <translation id="4658638640878098064">Skavojums augšējā kreisajā malā</translation>
 <translation id="4660119392514473465">Tagad varat privāti pārlūkot saturu, un citas personas, kas izmanto šo ierīci, neredzēs jūsu darbības. Tomēr lejupielādes, grāmatzīmes un lasīšanas saraksta vienumi tiks saglabāti.</translation>
@@ -1874,6 +1884,7 @@
 <translation id="57689295674415555">Vai nav ievadīts virtuālās kartes numurs?</translation>
 <translation id="5772086939108830423">Izmantot piekļuves atslēgu citā ierīcē</translation>
 <translation id="5776313857861697733">Prioritārs</translation>
+<translation id="5776574724412881956">Virtuālā karte nav aizpildīta? Noklikšķiniet uz virtuālās kartes informācijas, lai to kopētu starpliktuvē. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Eksperiments iespējots</translation>
 <translation id="578305955206182703">Dzintarkrāsa</translation>
 <translation id="57838592816432529">Izslēgt skaņu</translation>
@@ -2003,6 +2014,7 @@
 <translation id="6116338172782435947">Skatīt starpliktuvē kopēto tekstu un attēlus</translation>
 <translation id="6118782133429281336">Avotu saraksts ir tukšs.</translation>
 <translation id="6120179357481664955">Vai iegaumēt jūsu UPI ID?</translation>
+<translation id="6122181661879998141">kartes priekšpusē</translation>
 <translation id="6124432979022149706">Chrome Enterprise savienotāji</translation>
 <translation id="6126565365696310362">Ķīniešu aploksne 2</translation>
 <translation id="6127379762771434464">Vienums ir noņemts</translation>
@@ -2369,6 +2381,7 @@
 <translation id="7108634116785509031">Vietnē <ph name="HOST" /> tiek pieprasīta atļauja lietot jūsu kameru.</translation>
 <translation id="7108819624672055576">Atļāva paplašinājums</translation>
 <translation id="7111012039238467737">(derīgs)</translation>
+<translation id="7112327784801341716">Vai neredzat pašreizējo informāciju? Sazinieties ar banku, lai to atjauninātu.</translation>
 <translation id="7118618213916969306">Meklēt starpliktuves URL, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">Aizveriet citas cilnes vai programmas</translation>
 <translation id="7129355289156517987">Kad aizvērsiet visas Chromium inkognito cilnes, no šīs ierīces tiks notīrītas šajās cilnēs veiktās darbības:
@@ -2672,6 +2685,7 @@
 <translation id="7798389633136518089">Ignorēta, jo politika nav iestatīta mākoņa avotā.</translation>
 <translation id="7800304661137206267">Savienojums ir šifrēts, izmantojot <ph name="CIPHER" />, ar <ph name="MAC" /> ziņojumu autentifikācijai un <ph name="KX" /> kā atslēgu apmaiņas mehānismu.</translation>
 <translation id="7802523362929240268">Vietne ir uzticama</translation>
+<translation id="7802989406998618639">Ievadiet <ph name="NUMBER_OF_DIGITS" /> ciparu drošības kodu, kas ir norādīts <ph name="SIDE_OF_CARD" />, lai banka varētu apstiprināt jūsu identitāti.</translation>
 <translation id="780301667611848630">Nē, paldies</translation>
 <translation id="7805571567667010077">Pārvalda jūsu organizācija</translation>
 <translation id="7805768142964895445">Statuss</translation>
@@ -2906,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Atsaukt pārvietošanu</translation>
 <translation id="8438476240229491014">Atcerēties šo iestatījumu</translation>
 <translation id="8438786541497918448">Vai lietot kameru un mikrofonu?</translation>
+<translation id="8438923942245957911">Jūsu organizācija atzīmēja šo vietni kā nepiemērotu</translation>
 <translation id="8443613539889492016">Reps un hiphops</translation>
 <translation id="8444543005280733648">Datortīkli</translation>
 <translation id="8446884382197647889">Uzziniet vairāk</translation>
@@ -3000,6 +3015,7 @@
 <translation id="8725066075913043281">Mēģināt vēlreiz</translation>
 <translation id="8726549941689275341">Lapas lielums:</translation>
 <translation id="8730621377337864115">Gatavs</translation>
+<translation id="8731268612289859741">Drošības kods</translation>
 <translation id="8731544501227493793">Poga “Pārvaldīt paroles”. Lai skatītu un pārvaldītu paroles Chrome iestatījumos, nospiediet ievadīšanas taustiņu.</translation>
 <translation id="8734529307927223492">Jūsu <ph name="DEVICE_TYPE" /> ierīci pārvalda <ph name="MANAGER" /></translation>
 <translation id="8736059027199600831">30 x 40 collas</translation>
@@ -3105,6 +3121,7 @@
 <translation id="9005998258318286617">Neizdevās ielādēt PDF dokumentu.</translation>
 <translation id="9008178007718859630">Mājokļa un interjera dizains</translation>
 <translation id="9008201768610948239">Ignorēt</translation>
+<translation id="9018120810758822233">Ievadiet kartes <ph name="CREDIT_CARD" /> drošības kodu</translation>
 <translation id="901834265349196618">e-pasts</translation>
 <translation id="9020200922353704812">Jānorāda kartes norēķinu adrese</translation>
 <translation id="9020542370529661692">Šī lapa ir tulkota <ph name="TARGET_LANGUAGE" /> valodā.</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb
index 6e4cca08..2e173d6 100644
--- a/components/strings/components_strings_mk.xtb
+++ b/components/strings/components_strings_mk.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Камера</translation>
 <translation id="1622571349153632031">Вегетаријанска кујна</translation>
 <translation id="1623104350909869708">Спречете ја страницата да направи дополнителни дијалози</translation>
+<translation id="1633137413609266904">{0,plural, =1{Отворањето на датотекава е блокирано со правило на администраторот}one{Отворањето на # датотека е блокирано со правило на администраторот}other{Отворањето на # датотеки е блокирано со правило на администраторот}}</translation>
 <translation id="1634828734222219955">Вкупно</translation>
 <translation id="163669211644121865">Подготовка и планирање даноци</translation>
 <translation id="1638780421120290329">Не може да се зачува картичката</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;Врати Преуредување</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> сака да се поврзе</translation>
 <translation id="3272091146646336650">Супер Б</translation>
+<translation id="3281350579597955952">{0,plural, =1{Администраторското правило не препорачува да се отвори датотекава во <ph name="DESTINATION_NAME" />}one{Администраторското правило не препорачува да се отворат датотекиве во <ph name="DESTINATION_NAME" />}other{Администраторското правило не препорачува да се отворат датотекиве во <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Вашата организација, <ph name="ENROLLMENT_DOMAIN" />, испратила одредени информации на следниве веб-сајтови, како поставки или правила.</translation>
 <translation id="3282497668470633863">Додајте име на картичка</translation>
 <translation id="3286372614333682499">портрет</translation>
@@ -1295,6 +1297,7 @@
 <translation id="4275830172053184480">Рестартирај го уредот</translation>
 <translation id="4277028893293644418">Ресетирај ја лозинката</translation>
 <translation id="4278390842282768270">Дозволено</translation>
+<translation id="4281998142035485137">{0,plural, =1{Да се отвори доверливата датотека?}one{Да се отворат доверливите датотеки?}other{Да се отворат доверливите датотеки?}}</translation>
 <translation id="4282346679996504092">Известувањата за овој производ се исклучени, а обележувачот е отстранет</translation>
 <translation id="4285498937028063278">Откачи</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Картичкава е зачувана во вашата сметка на Google}one{Картичкиве се зачувани во вашата сметка на Google}other{Картичкиве се зачувани во вашата сметка на Google}}</translation>
@@ -1929,6 +1932,7 @@
 <translation id="5903264686717710770">Наслов:</translation>
 <translation id="5904360430676679685">Семејство и односи</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (синхронизирани)</translation>
+<translation id="5911110632211230665">Отворањето е блокирано</translation>
 <translation id="59174027418879706">Овозможено</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 е во употреба}one{# е во употреба}other{# се во употреба}}</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index a8e02084..549c8ab 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, നിങ്ങളുടെ Google അക്കൗണ്ടിലെ വിവരങ്ങളും സ്വകാര്യതയും സുരക്ഷയും മാനേജ് ചെയ്യാൻ Tab അമർത്തുക, തുടർന്ന് Enter അമർത്തുക</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, ഒന്നിലധികം പ്രവർത്തനങ്ങൾ ലഭ്യമാണ്, ഒന്നിൽ നിന്ന് മറ്റൊന്നിലേക്ക് മാറാൻ 'Tab' അമർത്തുക</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">വെർച്വൽ കാർഡിന്റെ വിശദാംശങ്ങൾ</translation>
 <translation id="1803020234906945288">ആരോഗ്യകരമായ ഭക്ഷണശീലം</translation>
 <translation id="1803264062614276815">കാർഡ് ഉടമയുടെ പേര്</translation>
 <translation id="1803351196216024260">നിങ്ങളുടെ മൈക്രോഫോൺ ഉപയോഗിക്കാൻ ആവശ്യപ്പെടാം</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 ഇഞ്ച്</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{ഒരു നിർദ്ദേശം}other{# നിർദ്ദേശങ്ങൾ}}</translation>
 <translation id="2066915425250589881">ഇല്ലാതാക്കാൻ അഭ്യർത്ഥിക്കാവുന്നതാണ്</translation>
+<translation id="2066969741541525119">സന്ദർശിക്കാൻ ഉദ്ദേശിക്കുന്ന സൈറ്റ് നിങ്ങളുടെ സ്ഥാപനം ബ്ലോക്ക് ചെയ്‌തതാണ്</translation>
 <translation id="2068528718802935086">ശിശുക്കളും പിച്ചവയ്ക്കുന്ന കുട്ടികളും</translation>
 <translation id="2071156619270205202">ഈ കാർഡ് വെർച്വൽ കാർഡ് നമ്പറിന് യോഗ്യമല്ല.</translation>
 <translation id="2071692954027939183">നിങ്ങൾ സാധാരണയായി അറിയിപ്പുകൾ അനുവദിക്കാത്തതിനാൽ അവ സ്വയമേവ ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">താഴെ ഒന്നിലധികം പഞ്ച് ചെയ്യുക</translation>
 <translation id="219906046732893612">വീട് നവീകരണം</translation>
 <translation id="2202020181578195191">കാലഹരണപ്പെടുന്ന ശരിയായ വർഷം നല്‍കുക</translation>
+<translation id="2202627062836089804">നിങ്ങളുടെ കാർഡിന്റെ പുറകിൽ</translation>
 <translation id="22081806969704220">ട്രേ 3</translation>
 <translation id="2210794033760923560">റിപ്പോർട്ട് അപ്‌ലോഡ് ചെയ്യുക</translation>
 <translation id="2212735316055980242">നയം കണ്ടെത്തിയില്ല</translation>
@@ -984,6 +987,7 @@
 <translation id="350069200438440499">ഫയല്‍ നാമം:</translation>
 <translation id="3507936815618196901">നിങ്ങളുടെ ചുറ്റുപാടുകളുടെ 3D മാപ്പ് സൃഷ്ടിക്കാനും ക്യാമറയുടെ സ്ഥാനം ട്രാക്ക് ചെയ്യാനും</translation>
 <translation id="3512163584740124171">ഇതേ നയ ഗ്രൂപ്പിൽ നിന്നുള്ള മറ്റൊരു നയത്തിന് ഉയർന്ന മുൻഗണനയുള്ളതിനാൽ ഈ നയം അവഗണിച്ചു.</translation>
+<translation id="3515972145999192222">ഒരു നയം ലംഘിക്കുന്നതിനാൽ നിങ്ങളുടെ ഓർഗനൈസേഷൻ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു. <ph name="BEGIN_LEARN_MORE_LINK" />കൂടുതലറിയുക<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">വിലാസങ്ങളുടെ ബട്ടൺ മാനേജ് ചെയ്യുക, Chrome ക്രമീകരണത്തിൽ വിലാസങ്ങൾ ചേർക്കാനും മാനേജ് ചെയ്യാനും 'Enter' അമർത്തുക</translation>
 <translation id="3518941727116570328">ഒന്നിലധികം ഒബ്‌ജക്റ്റുകൾ കൈകാര്യം ചെയ്യൽ</translation>
 <translation id="3525130752944427905">10 x 14 ഇഞ്ച്</translation>
@@ -1058,6 +1062,7 @@
 <translation id="3678342917559046352">വിപുലീകരണം അസാധുവാണ്: ഈ ഫോർമാറ്റുകളിൽ ഒരെണ്ണം ഉപയോഗിച്ചാണ് മൂല്യം ചേർക്കേണ്ടത് : &lt;extension_id&gt; അല്ലെങ്കിൽ &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">പുതിയ അദൃശ്യ വിൻഡോയിൽ പേജ് തുറക്കുക (കൺട്രോൾ-ഷിഫ്റ്റ്-N)</translation>
 <translation id="3681007416295224113">സര്‍‌ട്ടിഫിക്കറ്റ് വിവരങ്ങള്‍‌</translation>
+<translation id="3693327506115126094">ഇത് നിങ്ങൾ തന്നെയാണെന്ന് എങ്ങനെ പരിശോധിച്ചുറപ്പിക്കുമെന്ന് തിരഞ്ഞെടുക്കുക</translation>
 <translation id="3699374065820972102">പാസ്‌വേഡുകൾ പൂരിപ്പിക്കുന്നതിന് TouchID ഓണാണ്</translation>
 <translation id="3701427423622901115">റീസെറ്റ് അംഗീകരിച്ചിരിക്കുന്നു</translation>
 <translation id="3704162925118123524">നിങ്ങൾ ഉപയോഗിക്കുന്ന നെറ്റ്‌വർക്കിനായി, ഇതിന്റെ ലോഗിൻ പേജ് സന്ദർശിക്കേണ്ടിവരാം.</translation>
@@ -1142,6 +1147,7 @@
 <translation id="3906954721959377182">ടാബ്‌ലെറ്റ്</translation>
 <translation id="3909477809443608991">പരിരക്ഷിത ഉള്ളടക്കം പ്ലേ ചെയ്യാൻ <ph name="URL" /> താൽപ്പര്യപ്പെടുന്നു. നിങ്ങളുടെ ഉപകരണത്തിന്‍റെ ഐഡന്‍റിറ്റി Google പരിശോധിച്ചുറപ്പിക്കും, ഈ സൈറ്റ് ആക്‌സസ് ചെയ്യാനായേക്കാം.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">നിങ്ങളുടെ സുരക്ഷാ കോഡ് നൽകുക</translation>
 <translation id="3927932062596804919">നിരസിക്കൂ</translation>
 <translation id="393316646445601645">ഇന്റർനെറ്റും ടെലികോമും</translation>
 <translation id="3939773374150895049">CVC-യ്ക്ക് പകരം WebAuthn ഉപയോഗിക്കണോ?</translation>
@@ -1388,6 +1394,7 @@
 <translation id="4524805452350978254">കാർഡുകൾ മാനേജ് ചെയ്യുക</translation>
 <translation id="4526465106919207193">ആളുകളും സമൂഹവും</translation>
 <translation id="4530347922939905757">ടെക്സ്റ്റ് മെസേജ്</translation>
+<translation id="4531477351494678589">വെർച്വൽ കാർഡ് നമ്പർ:</translation>
 <translation id="4540780316273593836">എന്തോ കുഴപ്പമുണ്ടായി</translation>
 <translation id="4541810033354695636">അനുബന്ധയാഥാർത്ഥ്യം</translation>
 <translation id="4542971377163063093">ട്രേ 6</translation>
@@ -1397,6 +1404,7 @@
 <translation id="4567686777917670400">നിങ്ങളുടെ അഡ്‌മിന് വിദൂരമായി ബ്രൗസർ സജ്ജീകരണം മാറ്റാനാകും. ഈ ഉപകരണത്തിലെ ആക്‌റ്റിവിറ്റി Chromium-ന് പുറത്തും മാനേജ് ചെയ്തേക്കാം. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">ഡെലിവറി വിവരങ്ങൾ</translation>
 <translation id="4582204425268416675">കാർഡ് നീക്കം ചെയ്യുക</translation>
+<translation id="4582595824823167856">ടെക്സ്റ്റ് മെസേജ് നേടുക</translation>
 <translation id="4587425331216688090">Chrome-ൽ നിന്ന് വിലാസം നീക്കംചെയ്യണോ?</translation>
 <translation id="459089498662672729"><ph name="ORIGIN_NAME" /> എന്നതിൽ നിന്ന് ഈ ലൊക്കേഷനിലേക്ക് ഒട്ടിക്കുന്നത് അഡ്‌മിൻ നയം ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" /> എന്നതിലേക്കുള്ള നിങ്ങളുടെ കണക്ഷനെ ആധുനിക സൈഫർ സ്യൂട്ട് ഉപയോഗിച്ച് എൻക്രിപ്റ്റുചെയ്‌തിരിക്കുന്നു.</translation>
@@ -1408,6 +1416,7 @@
 <translation id="4606870351894164739">ഫലപ്രദമായത്</translation>
 <translation id="4607603470419975064">'Chrome നുറുങ്ങുകൾ കാണുക' ബട്ടൺ, Chrome ഫീച്ചറുകളെ കുറിച്ച് അറിയാൻ Enter അമർത്തുക</translation>
 <translation id="4607608436550361748">Chrome നുറുങ്ങുകൾ കാണുക</translation>
+<translation id="460848736049414407">അഡ്‌മിൻ ബ്ലോക്ക് ചെയ്‌തിരിക്കുന്നു</translation>
 <translation id="4610279718074907952"><ph name="SET_OWNER" /> നിർവചിച്ചിരിക്കുന്ന ഗ്രൂപ്പിലാണ് ഈ സൈറ്റുള്ളത്, അതിന് നിങ്ങളുടെ ആക്റ്റിവിറ്റി കാണാം</translation>
 <translation id="4617273035598175554">ഗ്രാഫിക്സും ആനിമേഷൻ സോഫ്റ്റ്‌വെയറും</translation>
 <translation id="4622292761762557753">എന്തായാലും കൈമാറുക</translation>
@@ -1875,6 +1884,7 @@
 <translation id="57689295674415555">വെർച്വൽ കാർഡ് നമ്പർ പൂരിപ്പിച്ചിട്ടില്ലേ?</translation>
 <translation id="5772086939108830423">മറ്റൊരു ഉപകരണത്തിൽ പാസ്‌കീ ഉപയോഗിക്കുക</translation>
 <translation id="5776313857861697733">മുൻഗണന</translation>
+<translation id="5776574724412881956">വെർച്വൽ കാർഡ് പൂരിപ്പിച്ചില്ലേ? ക്ലിപ്പ്‌ബോർഡിലേക്ക് പകർത്താൻ വെർച്വൽ കാർഡ് വിശദാംശങ്ങൾ ക്ലിക്ക് ചെയ്യുക. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">പരീക്ഷണം പ്രവർത്തനക്ഷമമാക്കി</translation>
 <translation id="578305955206182703">ആംബർ</translation>
 <translation id="57838592816432529">മ്യൂട്ട് ചെയ്യുക</translation>
@@ -2004,6 +2014,7 @@
 <translation id="6116338172782435947">ക്ലിപ്പ്‌ബോർഡിലേക്ക് പകർത്തിയിട്ടുള്ള ടെക്‌സ്റ്റും ചിത്രങ്ങളും കാണുക</translation>
 <translation id="6118782133429281336">ഒറിജിൻ ലിസ്റ്റ് ശൂന്യമാണ്.</translation>
 <translation id="6120179357481664955">നിങ്ങളുടെ UPI ഐഡി ഓർമ്മയുണ്ടോ?</translation>
+<translation id="6122181661879998141">നിങ്ങളുടെ കാർഡിന്റെ മുൻവശത്ത്</translation>
 <translation id="6124432979022149706">Chrome എന്റർപ്രൈസ് കണക്റ്ററുകൾ</translation>
 <translation id="6126565365696310362">Envelope Chinese #2</translation>
 <translation id="6127379762771434464">ഇനം നീക്കംചെയ്‌തു</translation>
@@ -2370,6 +2381,7 @@
 <translation id="7108634116785509031">നിങ്ങളുടെ ക്യാമറ ഉപയോഗിക്കാൻ <ph name="HOST" /> ആഗ്രഹിക്കുന്നു</translation>
 <translation id="7108819624672055576">ഒരു വിപുലീകരണം മുഖേന അവദിച്ചിരിക്കുന്നു</translation>
 <translation id="7111012039238467737">(സാധുതയുള്ളത്)</translation>
+<translation id="7112327784801341716">നിങ്ങളുടെ നിലവിലെ വിവരങ്ങൾ കാണുന്നില്ലേ? ഇത് അപ്ഡേറ്റ് ചെയ്യാൻ നിങ്ങളുടെ ബാങ്കുമായി ബന്ധപ്പെടുക.</translation>
 <translation id="7118618213916969306">ക്ലിപ്പ്ബോർഡ് URL-നുള്ള തിരയൽ, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">മറ്റ് ടാബുകളോ പ്രോഗ്രാമുകളോ അടയ്‌ക്കുക</translation>
 <translation id="7129355289156517987">Chromium-ലുള്ള മുഴുവൻ അദൃശ്യ ടാബുകളും നിങ്ങൾ അടയ്ക്കുമ്പോൾ ആ ടാബുകളിലെ നിങ്ങളുടെ ആക്റ്റിവിറ്റി ഈ ഉപകരണത്തിൽ നിന്ന് മായ്ക്കുന്നു:
@@ -2671,6 +2683,7 @@
 <translation id="7798389633136518089">നയം സജ്ജീകരിച്ചത് ക്ലൗഡിൽ നിന്ന് അല്ലാത്തതിനാൽ അവഗണിച്ചു.</translation>
 <translation id="7800304661137206267">സന്ദേശ പരിശോധിച്ചുറപ്പിക്കലിനായി <ph name="KX" /> കീ എക്സേഞ്ച് മെക്കാനിസമായി <ph name="CIPHER" /> ഉപയോഗിച്ച് ഈ കണക്ഷനെ <ph name="MAC" /> എന്നതുമായി എന്‍‌ക്രിപ്റ്റ് ചെയ്തിരിക്കുന്നു.</translation>
 <translation id="7802523362929240268">സൈറ്റ് നിയമാനുസൃതമാണ്</translation>
+<translation id="7802989406998618639"><ph name="SIDE_OF_CARD" /> കാണുന്ന <ph name="NUMBER_OF_DIGITS" />-അക്ക സുരക്ഷാ കോഡ് നൽകുക, അതുവഴി ഇത് നിങ്ങൾ തന്നെയാണെന്ന് പരിശോധിച്ചുറപ്പിക്കാൻ നിങ്ങളുടെ ബാങ്കിന് കഴിയും</translation>
 <translation id="780301667611848630">വേണ്ട നന്ദി</translation>
 <translation id="7805571567667010077">നിങ്ങളുടെ സ്ഥാപനം മാനേജ് ചെയ്യുന്നത്</translation>
 <translation id="7805768142964895445">നില</translation>
@@ -2999,6 +3012,7 @@
 <translation id="8725066075913043281">വീണ്ടും ശ്രമിക്കുക</translation>
 <translation id="8726549941689275341">പേജിന്റെ വലുപ്പം:</translation>
 <translation id="8730621377337864115">പൂർത്തിയാക്കി</translation>
+<translation id="8731268612289859741">സുരക്ഷാ കോഡ്</translation>
 <translation id="8731544501227493793">'പാസ്‌വേഡുകൾ മാനേജ് ചെയ്യുക' ബട്ടൺ, Chrome ക്രമീകരണത്തിൽ നിങ്ങളുടെ പാസ്‌വേഡുകൾ കാണാനും മാനേജ് ചെയ്യാനും 'Enter' അമർത്തുക</translation>
 <translation id="8734529307927223492">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> മാനേജ് ചെയ്യുന്നത് <ph name="MANAGER" /> ആണ്</translation>
 <translation id="8736059027199600831">30 x 40 ഇഞ്ച്</translation>
@@ -3104,6 +3118,7 @@
 <translation id="9005998258318286617">PDF ഡോക്യുമെന്റ് ലോഡ് ചെയ്യാനായില്ല.</translation>
 <translation id="9008178007718859630">വീട്, ഇന്റീരിയർ ഡെക്കറേഷൻ</translation>
 <translation id="9008201768610948239">അവഗണിക്കുക</translation>
+<translation id="9018120810758822233"><ph name="CREDIT_CARD" /> എന്നതിനുള്ള നിങ്ങളുടെ സുരക്ഷാ കോഡ് നൽകുക</translation>
 <translation id="901834265349196618">ഇമെയില്‍</translation>
 <translation id="9020200922353704812">കാർഡ് ബില്ലിംഗ് വിലാസം ആവശ്യമാണ്</translation>
 <translation id="9020542370529661692">ഈ പേജ് <ph name="TARGET_LANGUAGE" />-ലേക്ക് വിവർത്തനം ചെയ്‌തു</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index 70d1096..93165c07 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -1433,6 +1433,7 @@
 <translation id="4646534391647090355">Одоо намайг тийшээ аваач</translation>
 <translation id="4648262692072505866">Хэш нь SHA-256 форматтай байх ёстой.</translation>
 <translation id="4652266463001779298">Зөвшөөрөөгүй</translation>
+<translation id="4652440160515225514">Энэ сайт бодлого зөрчиж байгаа тул танай байгууллага үүнийг блоклосон.</translation>
 <translation id="4653167719759882810">Нэгтгэх, худалдан авах</translation>
 <translation id="4658638640878098064">Зүүн дээд буланд үдэх</translation>
 <translation id="4660119392514473465">Ta одоо хөтчөөр нууцлалтай үзэх боломжтой бөгөөд энэ төхөөрөмжийг ашигладаг бусад хүн таны үйл ажиллагааг харахгүй. Гэсэн хэдий ч татаж авсан файл, хавчуурга болон унших жагсаалтын зүйлсийг хадгална.</translation>
@@ -2920,6 +2921,7 @@
 <translation id="8437238597147034694">&amp; Зөөвөрлөх үйлдлийг буцаах</translation>
 <translation id="8438476240229491014">Энэ тохиргоог сануулах</translation>
 <translation id="8438786541497918448">Камер, микрофон ашиглах уу?</translation>
+<translation id="8438923942245957911">Энэ сайтыг танай байгууллагаас дарцагласан</translation>
 <translation id="8443613539889492016">Рэп, хип хоп</translation>
 <translation id="8444543005280733648">Компьютерын сүлжээ</translation>
 <translation id="8446884382197647889">Дэлгэрэнгүй мэдээлэл</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index 7a09ccd..b55674e 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, तुमच्या Google खाते मध्ये तुमची माहिती, गोपनीयता आणि सुरक्षा व्यवस्थापित करण्यासाठी टॅब व त्यानंतर एंटर दाबा</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, एकाहून अधिक कृती उपलब्ध आहेत, प्रत्येकावर जाण्यासाठी टॅब दाबा</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">व्हर्च्युअल कार्डचे तपशील</translation>
 <translation id="1803020234906945288">सकस आहार</translation>
 <translation id="1803264062614276815">कार्डधारकाचे नाव</translation>
 <translation id="1803351196216024260">तुमचा मायक्रोफोन वापरण्याची विनंती करू शकते</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 in</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 सूचना}other{# सूचना}}</translation>
 <translation id="2066915425250589881">हटवण्याची विनंती</translation>
+<translation id="2066969741541525119">पुढील साइट तुमच्या संस्थेद्वारे ब्लॉक केलेली आहे</translation>
 <translation id="2068528718802935086">बाळ आणि रांगती मुले</translation>
 <translation id="2071156619270205202">हे कार्ड व्हर्च्युअल कार्ड नंबरसाठी पात्र नाही.</translation>
 <translation id="2071692954027939183">सूचना आपोआप ब्लॉक केल्या होत्या कारण तुम्ही सहसा त्यांना अनुमती देत नाही</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">मल्टिपल पंच बॉटम</translation>
 <translation id="219906046732893612">घराच्या सजावटीशी संबंधित सेवा</translation>
 <translation id="2202020181578195191">वैध समाप्ती वर्ष एंटर करा</translation>
+<translation id="2202627062836089804">तुमच्या कार्डची मागील बाजू</translation>
 <translation id="22081806969704220">ट्रे ३</translation>
 <translation id="2210794033760923560">अहवाल अपलोड करा</translation>
 <translation id="2212735316055980242">धोरण आढळले नाही</translation>
@@ -984,6 +987,7 @@
 <translation id="350069200438440499">फाइल नाव:</translation>
 <translation id="3507936815618196901">तुमच्या आसपासच्या परिसराचा 3D नकाशा तयार करा आणि कॅमेर्‍याचे स्थान ट्रॅक करा</translation>
 <translation id="3512163584740124171">या धोरणाकडे दुर्लक्ष केले कारण त्याच धोरण गटातील दुसऱ्या धोरणाला उच्च प्राधान्य आहे.</translation>
+<translation id="3515972145999192222">धोरणाचे उल्लंघन करत असल्यामुळे, तुमच्या संस्थेने <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ला ब्लॉक केले आहे. <ph name="BEGIN_LEARN_MORE_LINK" />अधिक जाणून घ्या<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">ॲड्रेस व्यवस्थापित करा बटण, Chrome सेटिंग्जमध्ये ॲड्रेस जोडण्यासाठी आणि व्यवस्थापित करण्यासाठी एंटर दाबा</translation>
 <translation id="3518941727116570328">एकापेक्षा अधिक ऑब्जेक्ट हाताळणी</translation>
 <translation id="3525130752944427905">१० x १४ इं</translation>
@@ -1058,6 +1062,7 @@
 <translation id="3678342917559046352">एक्स्टेंशन चुकीचे आहे: मूल्य हे पुढीलपैकी एका स्वरूपात असणे अपेक्षित आहे: &lt;extension_id&gt; किंवा &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">पेज एका नवीन गुप्त विंडोमध्ये उघडा (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">सर्टिफिकेट माहिती</translation>
+<translation id="3693327506115126094">हे तुम्हीच आहात याची पडताळणी कशी कराल ते निवडा</translation>
 <translation id="3699374065820972102">पासवर्ड एंटर करण्यासाठी TouchID सुरू आहे</translation>
 <translation id="3701427423622901115">रीसेट करण्याची नोंद घेतली आहे.</translation>
 <translation id="3704162925118123524">तुम्ही वापरत असलेल्या नेटवर्कला तुम्ही त्याच्या लॉग इन पेजला भेट देण्याची आवश्यकता असू शकते.</translation>
@@ -1142,6 +1147,7 @@
 <translation id="3906954721959377182">टॅबलेट</translation>
 <translation id="3909477809443608991"><ph name="URL" /> ला संरक्षित आशय प्ले करायचा आहे. तुमच्या डिव्हाइसच्या ओळखीची Google कडून पडताळणी केली जाईल आणि कदाचित या साइटकडून अ‍ॅक्सेस केली जाईल.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">तुमचा सुरक्षा कोड एंटर करा</translation>
 <translation id="3927932062596804919">नकार द्या</translation>
 <translation id="393316646445601645">इंटरनेट आणि टेलिकॉम</translation>
 <translation id="3939773374150895049">CVC ऐवजी WebAuthn वापरायचे का?</translation>
@@ -1388,6 +1394,7 @@
 <translation id="4524805452350978254">कार्डे व्यवस्थापित करा</translation>
 <translation id="4526465106919207193">लोक आणि समाज</translation>
 <translation id="4530347922939905757">एसएमएस</translation>
+<translation id="4531477351494678589">व्हर्च्युअल कार्ड नंबर:</translation>
 <translation id="4540780316273593836">काहीतरी चूक झाली</translation>
 <translation id="4541810033354695636">ऑगमेंटेड रीअ‍ॅलिटी</translation>
 <translation id="4542971377163063093">ट्रे ६</translation>
@@ -1397,6 +1404,7 @@
 <translation id="4567686777917670400">तुमचा अ‍ॅडमिनिस्ट्रेटर तुमच्या ब्राउझरचा सेटअप रिमोट पद्धतीने बदलू शकतो. या डिव्हाइसवरील अ‍ॅक्टिव्हिटी Chromium च्या बाहेरदेखील व्यवस्थापित केली जाऊ शकते. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">वितरण</translation>
 <translation id="4582204425268416675">कार्ड काढून टाका</translation>
+<translation id="4582595824823167856">एसएमएस मिळवा</translation>
 <translation id="4587425331216688090">Chrome मधून पत्ता काढून टाकायचा?</translation>
 <translation id="459089498662672729">अ‍ॅडमिनिस्ट्रेटर धोरणाने <ph name="ORIGIN_NAME" /> वरून या स्थानावर पेस्ट करण्याची शिफारस केलेली नाही</translation>
 <translation id="4592951414987517459">तुमचे <ph name="DOMAIN" /> वरील कनेक्शन आधुनिक सायफर सूट वापरून एंक्रिप्ट केलेले आहे.</translation>
@@ -1408,6 +1416,7 @@
 <translation id="4606870351894164739">परिणामकारक</translation>
 <translation id="4607603470419975064">Chrome शी संबंधित टिपा पहा बटण, Chrome च्या वैशिष्‍ट्यांविषयी जाणून घेण्यासाठी एंटर दाबा</translation>
 <translation id="4607608436550361748">Chrome शी संबंधित टिपा पहा</translation>
+<translation id="460848736049414407">अ‍ॅडमिनने ब्लॉक केलेली</translation>
 <translation id="4610279718074907952">ही साइट <ph name="SET_OWNER" /> द्वारे परिभाषित केलेल्या गटामध्ये आहे, जी तुमच्या अ‍ॅक्टिव्हिटी पाहू शकते</translation>
 <translation id="4617273035598175554">ग्राफिक आणि अ‍ॅनिमेशन सॉफ्टवेअर</translation>
 <translation id="4622292761762557753">तरीही ट्रान्सफर करा</translation>
@@ -1422,6 +1431,7 @@
 <translation id="4646534391647090355">आता मला तेथे घेऊन जा</translation>
 <translation id="4648262692072505866">हॅशचा फॉरमॅट SHA-256 असा असावा.</translation>
 <translation id="4652266463001779298">अनुमती नाही</translation>
+<translation id="4652440160515225514">ही साइट धोरणाचे उल्लंघन करत असल्यामुळे, तुमच्या संस्थेने ती ब्लॉक केली आहे.</translation>
 <translation id="4653167719759882810">विलीनीकरण आणि संपादने</translation>
 <translation id="4658638640878098064">स्टेपल टॉप लेफ्ट</translation>
 <translation id="4660119392514473465">आता तुम्ही खाजगीरीत्या ब्राउझ करू शकता आणि हे डिव्हाइस वापरणाऱ्या इतर लोकांना तुमची अ‍ॅक्टिव्हिटी पाहता येणार नाही. तरीही, डाउनलोड, बुकमार्क आणि वाचन सूची आयटम सेव्ह केले जातील.</translation>
@@ -1874,6 +1884,7 @@
 <translation id="57689295674415555">व्हर्च्युअल कार्ड नंबर भरला नाही का?</translation>
 <translation id="5772086939108830423">वेगळ्या डिव्हाइसवर पासकी वापरा</translation>
 <translation id="5776313857861697733">प्राधान्य</translation>
+<translation id="5776574724412881956">व्हर्च्युअल कार्ड भरलेले नाही का? क्लिपबोर्डवर कॉपी करण्यासाठी व्हर्च्युअल कार्डच्या तपशिलांवर क्लिक करा. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">प्रयोग सुरू केला आहे</translation>
 <translation id="578305955206182703">अंबर</translation>
 <translation id="57838592816432529">म्यूट करा</translation>
@@ -2003,6 +2014,7 @@
 <translation id="6116338172782435947">क्लिपबोर्डवर कॉपी केलेला मजकूर आणि इमेज पहा</translation>
 <translation id="6118782133429281336">ओरिजिनसंबंधित सूची रिकामी आहे.</translation>
 <translation id="6120179357481664955">तुमचा UPI आयडी लक्षात ठेवायचा आहे का?</translation>
+<translation id="6122181661879998141">तुमच्या कार्डची समोरची बाजू</translation>
 <translation id="6124432979022149706">Chrome एंटरप्राइझ कनेक्टर</translation>
 <translation id="6126565365696310362">एन्व्हलप चायनीज #२</translation>
 <translation id="6127379762771434464">आयटम काढला</translation>
@@ -2370,6 +2382,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> ला तुमचा कॅमेरा वापरायचा आहे</translation>
 <translation id="7108819624672055576">एका एक्स्टेंशनने परवानगी दिलेले</translation>
 <translation id="7111012039238467737">(वैध)</translation>
+<translation id="7112327784801341716">तुमची सध्याची माहिती दिसत नाही का? ती अपडेट करण्यासाठी तुमच्या बँकशी संपर्क साधा.</translation>
 <translation id="7118618213916969306">क्लिपबोर्ड URL, <ph name="SHORT_URL" /> शोधा</translation>
 <translation id="7119414471315195487">अन्य टॅब आणि प्रोग्राम बंद करा</translation>
 <translation id="7129355289156517987">तुम्ही Chromium मधील सर्व गुप्त टॅब बंद करता, तेव्हा त्या टॅबमधील तुमची अ‍ॅक्टिव्हिटी ही या डिव्हाइसवरून साफ केली जाते:
@@ -2673,6 +2686,7 @@
 <translation id="7798389633136518089">धोरण क्लाउड स्रोतावरून सेट केलेले नसल्यामुळे दुर्लक्षित केले.</translation>
 <translation id="7800304661137206267">मेसेज ऑथेंटिकेशनसाठी <ph name="MAC" />  आणि की विनिमय तंत्र महणून <ph name="KX" /> सह <ph name="CIPHER" /> वापरून कनेक्शन कूटबद्ध केले आहे.</translation>
 <translation id="7802523362929240268">साइट कायदेशीर आहे</translation>
+<translation id="7802989406998618639"><ph name="SIDE_OF_CARD" /> बाजूस असलेला <ph name="NUMBER_OF_DIGITS" />-अंकी सुरक्षा कोड एंटर करा, जेणेकरून तुमची बॅक हे तुम्ही असल्याची पडताळणी करू शकेल</translation>
 <translation id="780301667611848630">नाही, नको</translation>
 <translation id="7805571567667010077">तुमच्या संस्थेने व्यवस्थापित केलेले</translation>
 <translation id="7805768142964895445">स्थिती</translation>
@@ -2907,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;हलवा पूर्ववत करा</translation>
 <translation id="8438476240229491014">हे सेटिंग लक्षात ठेवा</translation>
 <translation id="8438786541497918448">कॅमेरा आणि मायक्रोफोन वापरायचा का?</translation>
+<translation id="8438923942245957911">तुमच्या संस्थेने ही साइट फ्लॅग केली आहे</translation>
 <translation id="8443613539889492016">रॅप आणि हिप-हॉप</translation>
 <translation id="8444543005280733648">कॉंप्युटर नेटवर्क</translation>
 <translation id="8446884382197647889">अधिक जाणून घ्या</translation>
@@ -3000,6 +3015,7 @@
 <translation id="8725066075913043281">पुन्हा प्रयत्न करा</translation>
 <translation id="8726549941689275341">पेजचा आकार:</translation>
 <translation id="8730621377337864115">पूर्ण झाले</translation>
+<translation id="8731268612289859741">सुरक्षितता कोड</translation>
 <translation id="8731544501227493793">पासवर्ड व्यवस्थापित करा बटण, पाहण्यासाठी Enter दाबा आणि Chrome सेटिंग्जमध्ये तुमचे पासवर्ड व्यवस्थापित करा</translation>
 <translation id="8734529307927223492">तुमचे <ph name="DEVICE_TYPE" /> <ph name="MANAGER" /> द्वारे व्यवस्थापित केले आहे</translation>
 <translation id="8736059027199600831">३० x ४० इं</translation>
@@ -3105,6 +3121,7 @@
 <translation id="9005998258318286617">पीडीएफ दस्तऐवज लोड करण्यात अपयश आले.</translation>
 <translation id="9008178007718859630">घर आणि त्यासंबंधित इंटिरीयर डेकोरेशन</translation>
 <translation id="9008201768610948239">दुर्लक्ष करा</translation>
+<translation id="9018120810758822233"><ph name="CREDIT_CARD" /> साठी तुमचा सुरक्षा कोड एंटर करा</translation>
 <translation id="901834265349196618">ईमेल</translation>
 <translation id="9020200922353704812">कार्ड बिलिंग पत्ता आवश्यक आहे</translation>
 <translation id="9020542370529661692">हे पृष्ठ <ph name="TARGET_LANGUAGE" /> मध्ये भाषांतरित केले गेले आहे.</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 310bca5..17f83eb 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, tekan kekunci Tab kemudian Enter untuk mengurus maklumat, privasi dan keselamatan anda dalam Google Account anda</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, pelbagai tindakan tersedia, tekan Tab untuk pergi ke setiap tindakan</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Butiran kad maya</translation>
 <translation id="1803020234906945288">Pemakanan sihat</translation>
 <translation id="1803264062614276815">Nama Pemegang Kad</translation>
 <translation id="1803351196216024260">Boleh meminta untuk menggunakan mikrofon anda</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 in</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 cadangan}other{# cadangan}}</translation>
 <translation id="2066915425250589881">permintaan untuk dipadamkan</translation>
+<translation id="2066969741541525119">Laman berikutnya disekat oleh organisasi anda</translation>
 <translation id="2068528718802935086">Bayi &amp; kanak-kanak kecil</translation>
 <translation id="2071156619270205202">Kad ini tidak layak untuk nombor kad maya.</translation>
 <translation id="2071692954027939183">Pemberitahuan disekat secara automatik kerana biasanya anda tidak membenarkan pemberitahuan</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Berbilang tebukan bawah</translation>
 <translation id="219906046732893612">Penambahbaikan kediaman</translation>
 <translation id="2202020181578195191">Masukkan tahun tamat tempoh yang sah</translation>
+<translation id="2202627062836089804">bahagian belakang kad anda</translation>
 <translation id="22081806969704220">Dulang 3</translation>
 <translation id="2210794033760923560">Muat Naik Laporan</translation>
 <translation id="2212735316055980242">Dasar tidak dijumpai</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">Nama fail:</translation>
 <translation id="3507936815618196901">Buat peta 3D bagi persekitaran anda dan jejaki kedudukan kamera</translation>
 <translation id="3512163584740124171">Dasar ini diabaikan kerana dasar lain daripada kumpulan dasar yang sama mempunyai keutamaan yang lebih tinggi.</translation>
+<translation id="3515972145999192222">Organisasi anda telah menyekat <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> atas sebab pelanggaran dasar. <ph name="BEGIN_LEARN_MORE_LINK" />Ketahui lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">Butang urus alamat, tekan Enter untuk menambah dan mengurus alamat dalam tetapan Chrome</translation>
 <translation id="3518941727116570328">Pengendalian berbilang objek</translation>
 <translation id="3525130752944427905">10 x 14 in</translation>
@@ -1060,6 +1064,7 @@
 <translation id="3678342917559046352">Sambungan Tidak Sah: Menjangkakan nilai dalam salah satu bentuk berikut: &lt;extension_id&gt; atau &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Buka halaman dalam tetingkap Inkognito baharu (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">Maklumat sijil</translation>
+<translation id="3693327506115126094">Pilih cara anda akan mengesahkan itu anda</translation>
 <translation id="3699374065820972102">TouchID dihidupkan untuk mengisikan kata laluan</translation>
 <translation id="3701427423622901115">Tetap semula diakui.</translation>
 <translation id="3704162925118123524">Rangkaian yang anda gunakan mungkin memerlukan anda untuk melawat halaman log masuknya.</translation>
@@ -1144,6 +1149,7 @@
 <translation id="3906954721959377182">Tablet</translation>
 <translation id="3909477809443608991"><ph name="URL" /> mahu memainkan kandungan yang dilindungi. Identiti peranti anda akan disahkan oleh Google dan mungkin diakses oleh tapak ini.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Masukkan kod keselamatan anda</translation>
 <translation id="3927932062596804919">Nafikan</translation>
 <translation id="393316646445601645">Internet &amp; telekom</translation>
 <translation id="3939773374150895049">Gunakan WebAuthn dan bukan CVC?</translation>
@@ -1390,6 +1396,7 @@
 <translation id="4524805452350978254">Urus kad</translation>
 <translation id="4526465106919207193">Orang &amp; masyarakat</translation>
 <translation id="4530347922939905757">Mesej teks</translation>
+<translation id="4531477351494678589">Nombor kad maya:</translation>
 <translation id="4540780316273593836">Kesilapan Telah Berlaku</translation>
 <translation id="4541810033354695636">realiti tambahan</translation>
 <translation id="4542971377163063093">Dulang 6</translation>
@@ -1399,6 +1406,7 @@
 <translation id="4567686777917670400">Pentadbir anda boleh menukar persediaan penyemak imbas anda dari jauh. Aktiviti pada peranti ini juga mungkin diurus di luar Chromium. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Penghantaran</translation>
 <translation id="4582204425268416675">Alih keluar kad</translation>
+<translation id="4582595824823167856">Dapatkan mesej teks</translation>
 <translation id="4587425331216688090">Alih keluar alamat daripada Chrome?</translation>
 <translation id="459089498662672729">Penampalan daripada <ph name="ORIGIN_NAME" /> pada lokasi ini tidak disyorkan oleh dasar pentadbir</translation>
 <translation id="4592951414987517459">Sambungan anda ke <ph name="DOMAIN" /> disulitkan menggunakan suit sifer moden.</translation>
@@ -1410,6 +1418,7 @@
 <translation id="4606870351894164739">Memberi kesan</translation>
 <translation id="4607603470419975064">Butang lihat petua Chrome, tekan kekunci Enter untuk mengetahui tentang ciri Chrome</translation>
 <translation id="4607608436550361748">Lihat petua Chrome</translation>
+<translation id="460848736049414407">Disekat oleh Pentadbir</translation>
 <translation id="4610279718074907952">Laman ini berada dalam kumpulan, ditakrifkan oleh <ph name="SET_OWNER" />, yang boleh melihat aktiviti anda</translation>
 <translation id="4617273035598175554">Grafik &amp; perisian animasi</translation>
 <translation id="4622292761762557753">Pindahkan juga</translation>
@@ -1424,6 +1433,7 @@
 <translation id="4646534391647090355">Bawa saya ke sana sekarang</translation>
 <translation id="4648262692072505866">Cincangan mestilah dalam format SHA-256.</translation>
 <translation id="4652266463001779298">Tidak dibenarkan</translation>
+<translation id="4652440160515225514">Organisasi anda telah menyekat laman ini kerana telah melanggar dasar.</translation>
 <translation id="4653167719759882810">Penggabungan &amp; pemerolehan</translation>
 <translation id="4658638640878098064">Kokot atas sebelah kiri</translation>
 <translation id="4660119392514473465">Kini anda boleh menyemak imbas secara sulit dan orang lain yang menggunakan peranti ini tidak akan dapat melihat aktiviti anda. Namun begitu, muat turun, penanda halaman dan item senarai bacaan akan disimpan.</translation>
@@ -1876,6 +1886,7 @@
 <translation id="57689295674415555">Nombor kad maya tidak diisikan?</translation>
 <translation id="5772086939108830423">Gunakan Kunci Laluan pada Peranti Lain</translation>
 <translation id="5776313857861697733">Keutamaan</translation>
+<translation id="5776574724412881956">Kad maya tidak diisi? Klik butiran kad maya untuk disalin ke papan keratan. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Percubaan didayakan</translation>
 <translation id="578305955206182703">Kuning jingga</translation>
 <translation id="57838592816432529">Redam</translation>
@@ -2005,6 +2016,7 @@
 <translation id="6116338172782435947">Lihat teks dan imej yang disalin ke papan keratan</translation>
 <translation id="6118782133429281336">Senarai asalan kosong.</translation>
 <translation id="6120179357481664955">Ingat ID UPI anda?</translation>
+<translation id="6122181661879998141">bahagian hadapan kad anda</translation>
 <translation id="6124432979022149706">Chrome Enterprise Connectors</translation>
 <translation id="6126565365696310362">Sampul Cina #2</translation>
 <translation id="6127379762771434464">Item dialih keluar</translation>
@@ -2371,6 +2383,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> mahu menggunakan kamera anda</translation>
 <translation id="7108819624672055576">Dibenarkan oleh sambungan</translation>
 <translation id="7111012039238467737">(Sah)</translation>
+<translation id="7112327784801341716">Maklumat yang dipaparkan telah lapuk? Hubungi bank anda untuk mengemas kini maklumat.</translation>
 <translation id="7118618213916969306">Cari URL papan keratan, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">Tutup tab atau atur cara lain</translation>
 <translation id="7129355289156517987">Apabila anda menutup semua tab Inkognito Chromium, aktiviti anda dalam tab tersebut dikosongkan daripada peranti ini:
@@ -2674,6 +2687,7 @@
 <translation id="7798389633136518089">Diabaikan kerana dasar itu tidak ditetapkan oleh sumber awan.</translation>
 <translation id="7800304661137206267">Sambungan disulitkan menggunakan <ph name="CIPHER" />, dengan <ph name="MAC" /> untuk pengesahan mesej dan <ph name="KX" /> sebagai mekanisme pertukaran kunci.</translation>
 <translation id="7802523362929240268">Tapak ini sah</translation>
+<translation id="7802989406998618639">Masukkan kod keselamatan <ph name="NUMBER_OF_DIGITS" /> digit pada <ph name="SIDE_OF_CARD" /> supaya bank anda boleh mengesahkan itu anda</translation>
 <translation id="780301667611848630">Tidak, terima kasih</translation>
 <translation id="7805571567667010077">Diurus oleh organisasi anda</translation>
 <translation id="7805768142964895445">Status</translation>
@@ -2908,6 +2922,7 @@
 <translation id="8437238597147034694">&amp;Buat asal pindahkan</translation>
 <translation id="8438476240229491014">Ingat tetapan ini</translation>
 <translation id="8438786541497918448">Gunakan kamera &amp; mikrofon?</translation>
+<translation id="8438923942245957911">Laman ini dibenderakan oleh organisasi anda</translation>
 <translation id="8443613539889492016">Rap &amp; hip-hop</translation>
 <translation id="8444543005280733648">Rangkaian komputer</translation>
 <translation id="8446884382197647889">Ketahui Lebih Lanjut</translation>
@@ -3002,6 +3017,7 @@
 <translation id="8725066075913043281">Cuba lagi</translation>
 <translation id="8726549941689275341">Saiz halaman:</translation>
 <translation id="8730621377337864115">Selesai</translation>
+<translation id="8731268612289859741">Kod keselamatan</translation>
 <translation id="8731544501227493793">Urus butang kata laluan, tekan Enter untuk melihat dan mengurus kata laluan anda dalam tetapan Chrome</translation>
 <translation id="8734529307927223492"><ph name="DEVICE_TYPE" /> anda diurus oleh <ph name="MANAGER" /></translation>
 <translation id="8736059027199600831">30 x 40 in</translation>
@@ -3107,6 +3123,7 @@
 <translation id="9005998258318286617">Gagal memuatkan dokumen PDF.</translation>
 <translation id="9008178007718859630">Rumah &amp; hiasan dalaman</translation>
 <translation id="9008201768610948239">Abaikan</translation>
+<translation id="9018120810758822233">Masukkan kod keselamatan anda untuk <ph name="CREDIT_CARD" /></translation>
 <translation id="901834265349196618">e-mel</translation>
 <translation id="9020200922353704812">Alamat pengebilan kad diperlukan</translation>
 <translation id="9020542370529661692">Halaman ini telah diterjemahkan kepada <ph name="TARGET_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index 76c32cb..111e960 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -1433,6 +1433,7 @@
 <translation id="4646534391647090355">ထိုနေရာသို့ ယခုသွားရန်</translation>
 <translation id="4648262692072505866">ဟက်ရှ်ကုဒ်က SHA-256 ဖော်မက်ဖြစ်ရမည်။</translation>
 <translation id="4652266463001779298">ခွင့်ပြုမထားပါ</translation>
+<translation id="4652440160515225514">ဤဝဘ်ဆိုက်သည် မူဝါဒချိုးဖောက်သဖြင့် သင့်အဖွဲ့အစည်းက ပိတ်ထားသည်။</translation>
 <translation id="4653167719759882810">ပေါင်းစည်းမှုနှင့် ရှာမှီးရရှိမှုများ</translation>
 <translation id="4658638640878098064">ညာဘက်ထိပ်တွင် ချုပ်စက်ဖြင့် ချုပ်ရန်</translation>
 <translation id="4660119392514473465">ယခုအခါ သီးသန့်ဖွင့်ကြည့်နိုင်ပြီဖြစ်ပြီး ဤစက်ကိုသုံးသော အခြားသူများက သင်၏လုပ်ဆောင်ချက်ကို မမြင်ရတော့ပါ။ သို့သော် ဒေါင်းလုဒ်၊ လိပ်စာနှင့် ဖတ်ရန်စာရင်းများကိုမူ သိမ်းထားပါမည်။</translation>
@@ -2922,6 +2923,7 @@
 <translation id="8437238597147034694">&amp;ရွေ့ရှားမှုကို တစ်ဆင့်နောက်ပြန်ရန်</translation>
 <translation id="8438476240229491014">ဤဆက်တင်ကို မှတ်ထားရန်</translation>
 <translation id="8438786541497918448">ကင်မရာနှင့် မိုက်ခရိုဖုန်း အသုံးပြုမလား။</translation>
+<translation id="8438923942245957911">ဤဝဘ်ဆိုက်ကို သင့်အဖွဲ့အစည်းက အလံပြထားသည်</translation>
 <translation id="8443613539889492016">ရက်ပ်နှင့် ဟစ်ဟော့</translation>
 <translation id="8444543005280733648">ကွန်ပျူတာ ကွန်ရက်များ</translation>
 <translation id="8446884382197647889">ပိုမို လေ့လာရန်</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index f9c88e4f..bc5b539e 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -1429,6 +1429,7 @@
 <translation id="4646534391647090355">मलाई अहिले नै त्यहाँ लैजानुहोस्</translation>
 <translation id="4648262692072505866">ह्यास अनिवार्य रूपमा SHA-256 फर्म्याटमा हुनु पर्छ।</translation>
 <translation id="4652266463001779298">अनुमति दिइएको छैन</translation>
+<translation id="4652440160515225514">यो साइटले कुनै नीतिको उल्लङ्घन गरेको हुनाले तपाईंको सङ्गठनले यो साइट ब्लक गरेको छ।</translation>
 <translation id="4653167719759882810">एक आपसमा गाभ्ने गाभिने तथा प्राप्ति गर्ने कार्य</translation>
 <translation id="4658638640878098064">सिरानको बायाँपट्टि स्टिच</translation>
 <translation id="4660119392514473465">तपाईं अब गोप्य रूपमा ब्राउज गर्न सक्नुहुन्छ र यो डिभाइस चलाउने अन्य मान्छेहरू तपाईंका गतिविधि देख्ने छैनन्। तर डाउनलोड गरिएका सामग्री, बुकमार्क र पछि पढ्न सुरक्षित गरिएका वेबपेजको सूचीमा हालिएका वस्तुहरू भने सुरक्षित गरिने छन्।</translation>
@@ -2917,6 +2918,7 @@
 <translation id="8437238597147034694">सार्ने कार्यलाई &amp;पूर्ववत गर्नुहोस्</translation>
 <translation id="8438476240229491014">यो सेटिङ याद राखियोस्</translation>
 <translation id="8438786541497918448">क्यामेरा र माइक्रोफोन प्रयोग गर्ने हो?</translation>
+<translation id="8438923942245957911">तपाईंको सङ्गठनले यो साइट फ्ल्याग गरेको छ</translation>
 <translation id="8443613539889492016">र्‍याप तथा हिप-हप</translation>
 <translation id="8444543005280733648">कम्प्युटर नेटवर्कहरू</translation>
 <translation id="8446884382197647889">थप जान्नुहोस्</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 36e7553..27531cb4 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Gå dit nå</translation>
 <translation id="4648262692072505866">Hash-verdien må være i formatet SHA-256.</translation>
 <translation id="4652266463001779298">Ikke tillatt</translation>
+<translation id="4652440160515225514">Organisasjonen din har blokkert dette nettstedet fordi det bryter en regel.</translation>
 <translation id="4653167719759882810">Sammenslåinger og oppkjøp</translation>
 <translation id="4658638640878098064">Stift oppe til venstre</translation>
 <translation id="4660119392514473465">Nå kan du surfe privat. Andre som bruker denne enheten, ser ikke aktiviteten din. Derimot blir nedlastinger, bokmerker og elementer på leselisten lagret.</translation>
@@ -2919,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Angre flyttingen</translation>
 <translation id="8438476240229491014">Husk denne innstillingen</translation>
 <translation id="8438786541497918448">Vil du bruke kameraet og mikrofonen?</translation>
+<translation id="8438923942245957911">Dette nettstedet er merket av organisasjonen din</translation>
 <translation id="8443613539889492016">Rap og hiphop</translation>
 <translation id="8444543005280733648">Datamaskinnettverk</translation>
 <translation id="8446884382197647889">Les mer</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index caba2e28..0878d585 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Acessar agora</translation>
 <translation id="4648262692072505866">O hash precisa estar no formato SHA-256.</translation>
 <translation id="4652266463001779298">Sem permissão</translation>
+<translation id="4652440160515225514">Sua organização bloqueou este site porque ele viola uma política.</translation>
 <translation id="4653167719759882810">Fusões e aquisições</translation>
 <translation id="4658638640878098064">Grampo na parte superior direita</translation>
 <translation id="4660119392514473465">Agora você pode navegar com privacidade, e as outras pessoas que usarem este dispositivo não verão suas atividades. No entanto, os downloads, favoritos e itens da Lista de leitura ainda serão salvos.</translation>
@@ -2920,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;Desfazer mover</translation>
 <translation id="8438476240229491014">Lembrar esta configuração</translation>
 <translation id="8438786541497918448">Usar a câmera e o microfone?</translation>
+<translation id="8438923942245957911">Este site foi sinalizado pela sua organização</translation>
 <translation id="8443613539889492016">Rap e hip-hop</translation>
 <translation id="8444543005280733648">Redes de computadores</translation>
 <translation id="8446884382197647889">Saiba mais</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 006c363..5df2507 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Accesez acum</translation>
 <translation id="4648262692072505866">Valoarea hash trebuie să fie în formatul SHA-256.</translation>
 <translation id="4652266463001779298">Nepermisă</translation>
+<translation id="4652440160515225514">Organizația ta a blocat site-ul deoarece încalcă o politică.</translation>
 <translation id="4653167719759882810">Fuziuni și achiziții</translation>
 <translation id="4658638640878098064">Capsare în stânga sus</translation>
 <translation id="4660119392514473465">Acum poți naviga în mod privat, iar celelalte persoane care folosesc acest dispozitiv nu îți vor vedea activitatea. Totuși, descărcările, marcajele și elementele din lista de lecturi vor fi salvate.</translation>
@@ -2920,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;Anulați mutarea</translation>
 <translation id="8438476240229491014">Reține setarea</translation>
 <translation id="8438786541497918448">Folosești camera foto și microfonul?</translation>
+<translation id="8438923942245957911">Site-ul este semnalat de organizația ta</translation>
 <translation id="8443613539889492016">Rap și hip-hop</translation>
 <translation id="8444543005280733648">Rețele de calculatoare</translation>
 <translation id="8446884382197647889">Află mai multe</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 42048c2..4f0bb88 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />. Чтобы управлять своими данными, конфиденциальностью и безопасностью в аккаунте Google, нажмите Tab, а затем Ввод.</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />. Возможны разные действия. Нажимайте Tab для переключения между ними.</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Реквизиты виртуальной карты</translation>
 <translation id="1803020234906945288">Здоровое питание</translation>
 <translation id="1803264062614276815">Владелец карты</translation>
 <translation id="1803351196216024260">Разрешено отправлять запрос на использование микрофона</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 дюйма</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 вариант}one{# вариант}few{# варианта}many{# вариантов}other{# варианта}}</translation>
 <translation id="2066915425250589881">запросить ее удаление</translation>
+<translation id="2066969741541525119">Сайт, который вы хотите открыть, заблокирован вашей организацией</translation>
 <translation id="2068528718802935086">Младенцы и маленькие дети</translation>
 <translation id="2071156619270205202">Указанный номер нельзя использовать для виртуальной карты.</translation>
 <translation id="2071692954027939183">Уведомления заблокированы автоматически, потому что вы обычно запрещаете их показ.</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Несколько отверстий снизу</translation>
 <translation id="219906046732893612">Ремонт дома</translation>
 <translation id="2202020181578195191">Недопустимый формат года.</translation>
+<translation id="2202627062836089804">на задней стороне карты</translation>
 <translation id="22081806969704220">Лоток 3</translation>
 <translation id="2210794033760923560">Загрузить отчет</translation>
 <translation id="2212735316055980242">Политика для устройства не найдена</translation>
@@ -984,6 +987,7 @@
 <translation id="350069200438440499">Имя файла:</translation>
 <translation id="3507936815618196901">Создание 3D-карты места, в котором вы находитесь, и отслеживание положения камеры</translation>
 <translation id="3512163584740124171">Действует правило с более высоким приоритетом.</translation>
+<translation id="3515972145999192222">Домен <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> был заблокирован вашей организацией, так как нарушает правила. <ph name="BEGIN_LEARN_MORE_LINK" />Подробнее…<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">Кнопка "Управление адресами". Нажмите Ввод, чтобы добавить и изменить адреса в настройках Chrome.</translation>
 <translation id="3518941727116570328">Обработка нескольких объектов</translation>
 <translation id="3525130752944427905">10 x 14 дюймов</translation>
@@ -1058,6 +1062,7 @@
 <translation id="3678342917559046352">Недействительное расширение. Допускается одно из следующих значений: &lt;extension_id&gt; или &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Открыть страницу в новом окне в режиме инкогнито (Ctrl + Shift + N)</translation>
 <translation id="3681007416295224113">Данные сертификата</translation>
+<translation id="3693327506115126094">Выберите способ подтверждения личности</translation>
 <translation id="3699374065820972102">Touch ID используется, чтобы указывать пароли</translation>
 <translation id="3701427423622901115">Сброс подтвержден.</translation>
 <translation id="3704162925118123524">Возможно, вам нужно перейти на страницу входа используемой сети.</translation>
@@ -1142,6 +1147,7 @@
 <translation id="3906954721959377182">Планшет</translation>
 <translation id="3909477809443608991">Сайт <ph name="URL" /> собирается воспроизвести защищенный контент. Ваше устройство пройдет проверку в Google, и этот сайт сможет получать к нему доступ.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" />. <ph name="ERROR" />.</translation>
+<translation id="3921869355029467742">Ввести защитный код</translation>
 <translation id="3927932062596804919">Запретить</translation>
 <translation id="393316646445601645">Интернет и телекоммуникации</translation>
 <translation id="3939773374150895049">Использовать WebAuthn вместо CVC-кода?</translation>
@@ -1388,6 +1394,7 @@
 <translation id="4524805452350978254">Изменить</translation>
 <translation id="4526465106919207193">Люди и общество</translation>
 <translation id="4530347922939905757">SMS</translation>
+<translation id="4531477351494678589">Номер виртуальной карты:</translation>
 <translation id="4540780316273593836">Ошибка</translation>
 <translation id="4541810033354695636">Дополненная реальность</translation>
 <translation id="4542971377163063093">Лоток 6</translation>
@@ -1397,6 +1404,7 @@
 <translation id="4567686777917670400">Администратор может удаленно менять настройки браузера и управлять действиями вне браузера Chromium на этом устройстве. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Доставка</translation>
 <translation id="4582204425268416675">Удалить карту</translation>
+<translation id="4582595824823167856">Получить SMS</translation>
 <translation id="4587425331216688090">Удалить адрес из Chrome?</translation>
 <translation id="459089498662672729">Администратор не рекомендует вставлять сюда контент со страницы <ph name="ORIGIN_NAME" />.</translation>
 <translation id="4592951414987517459">Соединение с <ph name="DOMAIN" /> зашифровано с помощью современных наборов шифров.</translation>
@@ -1408,6 +1416,7 @@
 <translation id="4606870351894164739">Эффектный</translation>
 <translation id="4607603470419975064">Кнопка "Посмотреть советы по работе с Chrome". Чтобы узнать больше о функциях Chrome, нажмите Ввод.</translation>
 <translation id="4607608436550361748">Посмотреть советы по работе с Chrome</translation>
+<translation id="460848736049414407">Заблокировано администратором</translation>
 <translation id="4610279718074907952">Этот сайт входит в группу <ph name="SET_OWNER" /> и может отслеживать ваши действия</translation>
 <translation id="4617273035598175554">ПО для графики и анимации</translation>
 <translation id="4622292761762557753">Все равно передать</translation>
@@ -1422,6 +1431,7 @@
 <translation id="4646534391647090355">Перейти сейчас</translation>
 <translation id="4648262692072505866">Хеш должен быть в формате SHA-256.</translation>
 <translation id="4652266463001779298">Запрещено</translation>
+<translation id="4652440160515225514">Этот сайт был заблокирован вашей организацией, так как нарушает правила.</translation>
 <translation id="4653167719759882810">Слияния и приобретения</translation>
 <translation id="4658638640878098064">Скоба в левом верхнем углу</translation>
 <translation id="4660119392514473465">Ваши действия в режиме инкогнито будут недоступны другим пользователям этого устройства. Однако закладки, скачанные файлы и объекты из списка для чтения сохранятся.</translation>
@@ -1874,6 +1884,7 @@
 <translation id="57689295674415555">Номер виртуальной карты не указан?</translation>
 <translation id="5772086939108830423">Использовать ключ доступа на другом устройстве</translation>
 <translation id="5776313857861697733">Приоритет</translation>
+<translation id="5776574724412881956">Виртуальная карта не указана? Нажмите на ее реквизиты, чтобы скопировать их в буфер обмена. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Эксперимент включен</translation>
 <translation id="578305955206182703">Янтарный</translation>
 <translation id="57838592816432529">Отключить звук</translation>
@@ -2003,6 +2014,7 @@
 <translation id="6116338172782435947">Просмотр текста и изображений, скопированных в буфер обмена</translation>
 <translation id="6118782133429281336">Список источников пуст.</translation>
 <translation id="6120179357481664955">Запомнить идентификатор UPI?</translation>
+<translation id="6122181661879998141">на передней стороне карты</translation>
 <translation id="6124432979022149706">Коннекторы Chrome Enterprise</translation>
 <translation id="6126565365696310362">Конверт Chinese 2</translation>
 <translation id="6127379762771434464">Быстрая ссылка удалена.</translation>
@@ -2369,6 +2381,7 @@
 <translation id="7108634116785509031">Сайт <ph name="HOST" /> запрашивает доступ к камере.</translation>
 <translation id="7108819624672055576">Разрешено расширением</translation>
 <translation id="7111012039238467737">(действительный)</translation>
+<translation id="7112327784801341716">Если вы видите устаревшие данные, обратитесь в свой банк.</translation>
 <translation id="7118618213916969306">Поиск по адресу <ph name="SHORT_URL" /> из буфера обмена</translation>
 <translation id="7119414471315195487">Закройте другие вкладки и программы.</translation>
 <translation id="7129355289156517987">Когда вы закроете все вкладки инкогнито в Chromium, с этого устройства будет удалена связанная с ними информация:
@@ -2672,6 +2685,7 @@
 <translation id="7798389633136518089">Правило игнорируется, так как оно задано не из облачного источника.</translation>
 <translation id="7800304661137206267">Соединение зашифровано с помощью <ph name="CIPHER" />, для аутентификации сообщений используется <ph name="MAC" />, для обмена ключами используется <ph name="KX" />.</translation>
 <translation id="7802523362929240268">Сайт безопасен</translation>
+<translation id="7802989406998618639">Введите <ph name="NUMBER_OF_DIGITS" />-значный защитный код (его можно найти <ph name="SIDE_OF_CARD" />), чтобы банк подтвердил вашу личность.</translation>
 <translation id="780301667611848630">Спасибо, не надо</translation>
 <translation id="7805571567667010077">Управляется вашей организацией</translation>
 <translation id="7805768142964895445">Состояние</translation>
@@ -2906,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Отменить перемещение</translation>
 <translation id="8438476240229491014">Запомнить настройку</translation>
 <translation id="8438786541497918448">Использовать камеру и микрофон?</translation>
+<translation id="8438923942245957911">Этот сайт помечен вашей организацией</translation>
 <translation id="8443613539889492016">Рэп и хип-хоп</translation>
 <translation id="8444543005280733648">Компьютерные сети</translation>
 <translation id="8446884382197647889">Подробнее...</translation>
@@ -2999,6 +3014,7 @@
 <translation id="8725066075913043281">Повторить попытку</translation>
 <translation id="8726549941689275341">Размер страницы:</translation>
 <translation id="8730621377337864115">Готово</translation>
+<translation id="8731268612289859741">Защитный код</translation>
 <translation id="8731544501227493793">Кнопка "Управление паролями". Нажмите Ввод, чтобы перейти к управлению паролями в настройках Chrome.</translation>
 <translation id="8734529307927223492">Вашим устройством <ph name="DEVICE_TYPE" /> управляет <ph name="MANAGER" /></translation>
 <translation id="8736059027199600831">30 x 40 дюймов</translation>
@@ -3104,6 +3120,7 @@
 <translation id="9005998258318286617">Не удалось загрузить PDF-документ.</translation>
 <translation id="9008178007718859630">Обустройство дома и отделка помещений</translation>
 <translation id="9008201768610948239">Пропустить</translation>
+<translation id="9018120810758822233">Введите защитный код для карты "<ph name="CREDIT_CARD" />"</translation>
 <translation id="901834265349196618">электронная почта</translation>
 <translation id="9020200922353704812">Необходимо указать платежный адрес карты</translation>
 <translation id="9020542370529661692">Эта страница переведена на <ph name="TARGET_LANGUAGE" />.</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb
index 7133b6f5..cf88f7b 100644
--- a/components/strings/components_strings_si.xtb
+++ b/components/strings/components_strings_si.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, ඔබගේ Google ගිණුමේ ඔබගේ තොරතුරු, පෞද්ගලිකත්වය සහ ආරක්ෂාව කළමනාකරණය කිරීමට Tab ඔබා අනතුරුව Enter ඔබන්න</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, බහුවිධ ක්‍රියාමාර්ග ලබා ගත හැකිය, ඒවා හරහා චක්‍රීය කිරීමට Tab ඔබන්න</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">අතථ්‍ය කාඩ්පත් විස්තර</translation>
 <translation id="1803020234906945288">සෞඛ්‍ය සම්පන්න ආහාර ගැනීම</translation>
 <translation id="1803264062614276815">කාඩ්පත් හිමිකරුගේ නම</translation>
 <translation id="1803351196216024260">ඔබගේ මයික්‍රෆෝනය භාවිත කිරීමට ඉල්ලිය හැකිය</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">අඟ 22 x 34</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{යෝජනා 1}one{යෝජනා #}other{යෝජනා #}}</translation>
 <translation id="2066915425250589881">මැකීමට ඉල්ලීම</translation>
+<translation id="2066969741541525119">ඉදිරි අඩවිය ඔබේ සංවිධානය විසින් අවහිර කර ඇත</translation>
 <translation id="2068528718802935086">ළදරුවන් සහ සිඟිත්තන්</translation>
 <translation id="2071156619270205202">මෙම කාඩ්පත අතථ්‍ය කාඩ්පත් අංකයකට සුදුසුකම් නොලබයි.</translation>
 <translation id="2071692954027939183">ඔබ සාමාන්‍යයෙන් ඒවාට ඉඩ නොදෙන නිසා දැනුම්දීම් ස්වයංක්‍රියව අවහිර කරන ලදි</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">පහළට ඇනීම් බොහොමයක්</translation>
 <translation id="219906046732893612">නිවාස වැඩි දියුණු කිරීම</translation>
 <translation id="2202020181578195191">වලංගු කල් ඉකුත් වීමේ වසරක් ඇතුළු කරන්න</translation>
+<translation id="2202627062836089804">ඔබේ කාඩ්පතෙහි පිටුපස</translation>
 <translation id="22081806969704220">බඳුන 3</translation>
 <translation id="2210794033760923560">වාර්තාව උඩුගත කරන්න</translation>
 <translation id="2212735316055980242">ප්‍රතිපත්තිය නොමැත</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">ගොනුවේ නම:</translation>
 <translation id="3507936815618196901">ඔබේ වටපිටාවේ ත්‍රිමාන සිතියමක් සාදන්න සහ කැමරා ස්ථානය හඹා යන්න</translation>
 <translation id="3512163584740124171">එකම ප්‍රතිපත්ති කණ්ඩායමෙන් තවත් ප්‍රතිපත්තියක් ඉහළ ප්‍රමුඛත්වය දරන බැවින් මෙම ප්‍රතිපත්තිය නොසලකා හරිනු ලැබේ.</translation>
+<translation id="3515972145999192222">එය ප්‍රතිපත්තියක් උල්ලංඝනය කරන නිසා ඔබේ සංවිධානය <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> අවහිර කර ඇත. <ph name="BEGIN_LEARN_MORE_LINK" />තව දැන ගන්න<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">ලිපින කළමනාකරණය කරන්න බොත්තම, Chrome සැකසීම් තුළ ලිපින එක් කිරීමට සහ කළමනාකරණය කිරීමට Enter ඔබන්න</translation>
 <translation id="3518941727116570328">බහුවිධ වස්තු පරිහරණය</translation>
 <translation id="3525130752944427905">අඟ 10 x 14</translation>
@@ -1059,6 +1063,7 @@
 <translation id="3678342917559046352">අවලංගු දිගුවක්: අගය පහත පෝරමවලින් එකක් වීමට අපේක්ෂා කරයි: &lt;extension_id&gt; හෝ &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">පිටුව නව අප්‍රසිද්ධ කවුළුවක විවෘත කරන්න (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">සහතික තොරතුරු</translation>
+<translation id="3693327506115126094">ඔබ ඒ ඔබ බව සත්‍යාපනය කරන ආකාරය තෝරා ගන්න</translation>
 <translation id="3699374065820972102">මුරපද පිරවීම සඳහා TouchID ක්‍රියාත්මකයි</translation>
 <translation id="3701427423622901115">යළි සැකසීම පිළිගැනිණි.</translation>
 <translation id="3704162925118123524">ඔබ භාවිතකරන ජාලයේ පිවිසුම් පිටුවට පිවිසීම අවශ්‍ය විය හැක.</translation>
@@ -1143,6 +1148,7 @@
 <translation id="3906954721959377182">ටැබ්ලට්</translation>
 <translation id="3909477809443608991"><ph name="URL" /> ආරක්‍ෂිත අන්තර්ගතය ධාවන කිරීමට කැමතියි. ඔබේ උපාංගයේ අනන්‍යතාව Google විසින් සත්‍යාපන කරනු ලබන අතර මෙම වෙබ් අඩවිය විසින් ප්‍රවේශ වනු ලැබිය හැක.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">ඔබේ ආරක්ෂක කේතය ඇතුළු කරන්න</translation>
 <translation id="3927932062596804919">ප්‍රතික්ෂේප කරන්න</translation>
 <translation id="393316646445601645">අන්තර්ජාලය සහ විදුලි සන්නිවේදන</translation>
 <translation id="3939773374150895049">CVC වෙනුවට WebAuthn භාවිත කරන්නද?</translation>
@@ -1389,6 +1395,7 @@
 <translation id="4524805452350978254">කාඩ්පත් කළමනාකරණය කරන්න</translation>
 <translation id="4526465106919207193">පුද්ගලයින් සහ සමාජය</translation>
 <translation id="4530347922939905757">පෙළ පණිවිඩය</translation>
+<translation id="4531477351494678589">අතථ්‍ය කාඩ්පත් අංකය:</translation>
 <translation id="4540780316273593836">යම් දෙයක් වැරදිණි</translation>
 <translation id="4541810033354695636">ආවර්ධිත යථාර්තය</translation>
 <translation id="4542971377163063093">බඳුන 6</translation>
@@ -1398,6 +1405,7 @@
 <translation id="4567686777917670400">ඔබගේ පරිපාලකට දුරස්ථව ඔබගේ බ්‍රවුසර සැකසීම වෙනස් කළ හැකිය. මෙම උපාංගයේ ක්‍රියාකාරකම් Chromium වෙතින් බැහැරවද කළමනාකරණය කිරීමට හැකිය. <ph name="BEGIN_LINK" />තව දැන ගන්න<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">බෙදා හැරීම</translation>
 <translation id="4582204425268416675">කාඩ්පත ඉවත් කරන්න</translation>
+<translation id="4582595824823167856">කෙටි පණිවිඩයක් ලබා ගන්න</translation>
 <translation id="4587425331216688090">Chrome වෙතින් ලිපිනය ඉවත් කරන්නද?</translation>
 <translation id="459089498662672729"><ph name="ORIGIN_NAME" /> සිට මෙම ස්ථානයට පිටපත් කිරීමට පරිපාලක ප්‍රතිපත්තිය මගින් නිර්දේශ නොකෙරේ</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" /> වෙත ඔබේ සබැඳුම සංකේතනය කර ඇත්තේ නවීන cipher suite භාවිතයෙනි.</translation>
@@ -1409,6 +1417,7 @@
 <translation id="4606870351894164739">බලපෑමක් ඇති කරන</translation>
 <translation id="4607603470419975064">Chrome ඉඟි බොත්තම බලන්න, Chrome විශේෂාංග ගැන දැන ගැනීමට Enter ඔබන්න</translation>
 <translation id="4607608436550361748">Chrome ඉඟි බලන්න</translation>
+<translation id="460848736049414407">පරිපාලක විසින් අවහිර කරන ලදි</translation>
 <translation id="4610279718074907952">මෙම වෙබ් අඩවිය <ph name="SET_OWNER" /> විසින් නිර්වචනය කරන ලද සමූහයක පවතී, එයට ඔබේ ක්‍රියාකාරකම් දැකිය හැක</translation>
 <translation id="4617273035598175554">චිත්‍රක සහ සජීවිකරණ මෘදුකාංග</translation>
 <translation id="4622292761762557753">කෙසේ හෝ මාරු කරන්න</translation>
@@ -1875,6 +1884,7 @@
 <translation id="57689295674415555">අථත්‍ය කාඩ්පත් අංකය පුරවා නැතිද?</translation>
 <translation id="5772086939108830423">වෙනස් උපාංගයක මුරයතුරක් භාවිතා කරන්න</translation>
 <translation id="5776313857861697733">ප්‍රමුඛතාව</translation>
+<translation id="5776574724412881956">අතථ්‍ය කාඩ්පත පුරවා නැති ද? පසුරු පුවරුවට පිටපත් කිරීමට අතථ්‍ය කාඩ්පත් විස්තර ක්ලික් කරන්න. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">පරීක්‍ෂණය සබල කළා</translation>
 <translation id="578305955206182703">ඇම්බර්</translation>
 <translation id="57838592816432529">නිහඬ කරන්න</translation>
@@ -2004,6 +2014,7 @@
 <translation id="6116338172782435947">පසුරු පුවරුවට පිටපත් කළ පෙළ සහ රූප බලන්න</translation>
 <translation id="6118782133429281336">මූලාරම්භ ලැයිස්තුව හිස් වේ.</translation>
 <translation id="6120179357481664955">ඔබේ UPI හැඳුනුම මතකද?</translation>
+<translation id="6122181661879998141">ඔබේ කාඩ්පත ඉදිරිපිට</translation>
 <translation id="6124432979022149706">Chrome ව්‍යවසාය සම්බන්ධක</translation>
 <translation id="6126565365696310362">ලියුම් කවරය චීන #2</translation>
 <translation id="6127379762771434464">අයිතමය ඉවත් කරන ලදී</translation>
@@ -2370,6 +2381,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> හට ඔබේ කැමරාව භාවිතා කිරීමට අවශ්‍යයි</translation>
 <translation id="7108819624672055576">දිගුවකින් ඉඩ දෙයි</translation>
 <translation id="7111012039238467737">(වලංගුයි)</translation>
+<translation id="7112327784801341716">ඔබ දකින්නේ ඔබේ වත්මන් තතු නොවේ ද? එය යාවත්කාලීන කිරීමට ඔබේ බැංකුව සම්බන්ධ කර ගන්න.</translation>
 <translation id="7118618213916969306">පසුරු පුවරු URL එක සොයන්න, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">අනෙකුත් පටිති හෝ වැඩසටහන් වසන්න</translation>
 <translation id="7129355289156517987">ඔබ Chromium අප්‍රසිද්ධ ටැබ සියල්ල වැසූ විට, එම ටැබවල ඔබගේ ක්‍රියාකාරකම් මෙම උපාංගයෙන් හිස් වේ:
@@ -2673,6 +2685,7 @@
 <translation id="7798389633136518089">ක්ලවුඩ් සේවයකින් ප්‍රතිපත්තිය සකසා නැති බැවින් නොසලකා හැරිණි.</translation>
 <translation id="7800304661137206267"><ph name="CIPHER" /> පණිවිඩ සහතික කිරීම සඳහා  සහ <ph name="MAC" /> යතුරු  ලෙස සහිතව <ph name="KX" /> භාවිතයෙන් සබැඳුම සංකේතනය කර ඇත.</translation>
 <translation id="7802523362929240268">අඩවිය නිත්‍යානුකූලයි</translation>
+<translation id="7802989406998618639">ඔබේ බැංකුවට ඒ ඔබ බව සත්‍යාපනය කර ගත හැකි පරිදි <ph name="SIDE_OF_CARD" /> හි සංඛ්‍යා <ph name="NUMBER_OF_DIGITS" />ක ආරක්ෂක කේතය ඇතුළු කරන්න</translation>
 <translation id="780301667611848630">එපා, ස්තූතියි</translation>
 <translation id="7805571567667010077">ඔබේ සංවිධානය විසින් කළමනාකරණය කරනු ලැබේ</translation>
 <translation id="7805768142964895445">තත්වය</translation>
@@ -3000,6 +3013,7 @@
 <translation id="8725066075913043281">නැවත උත්සහ කරන්න</translation>
 <translation id="8726549941689275341">පිටු තරම:</translation>
 <translation id="8730621377337864115">අවසන්</translation>
+<translation id="8731268612289859741">ආරක්ෂක කේතය</translation>
 <translation id="8731544501227493793">මුරපද කළමනාකරණය කරන්න බොත්තම, ඔබගේ මුරපද Chrome සැකසීම් තුළ බැලීමට සහ කළමනාකරණය කිරීමට Enter ඔබන්න</translation>
 <translation id="8734529307927223492">ඔබගේ <ph name="DEVICE_TYPE" /> <ph name="MANAGER" /> විසින් කළමනාකරණය කෙරේ</translation>
 <translation id="8736059027199600831">අඟ 30 x 40</translation>
@@ -3105,6 +3119,7 @@
 <translation id="9005998258318286617">PDF ගොනුව පූරණය කිරීමට අසමත් විය.</translation>
 <translation id="9008178007718859630">නිවස සහ අභ්‍යන්තර අලංකරණය</translation>
 <translation id="9008201768610948239">මඟහරින්න</translation>
+<translation id="9018120810758822233"><ph name="CREDIT_CARD" /> සඳහා ඔබේ ආරක්ෂක කේතය ඇතුළු කරන්න</translation>
 <translation id="901834265349196618">ඊතැපෑල</translation>
 <translation id="9020200922353704812">කාඩ්පතේ බිල්පත් ලිපිනය අවශ්‍යයි</translation>
 <translation id="9020542370529661692">මෙම පිටුව <ph name="TARGET_LANGUAGE" /> ට පරිවර්තනය වී ඇත</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb
index 07613fa..a2b80f66 100644
--- a/components/strings/components_strings_sq.xtb
+++ b/components/strings/components_strings_sq.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, shtyp butonin Tab pastaj Enter për të menaxhuar informacionin, privatësinë dhe sigurinë tënde në "Llogarinë tënde të Google</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, ofrohen shumë veprime, shtyp "Tab" për të kaluar në cikël mes tyre</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Detajet e kartës virtuale</translation>
 <translation id="1803020234906945288">Ushqyerja e shëndetshme</translation>
 <translation id="1803264062614276815">Emri i mbajtësit të kartës</translation>
 <translation id="1803351196216024260">Mund të kërkojë të përdorë mikrofonin tënd</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 inç</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 sugjerim}other{# sugjerime}}</translation>
 <translation id="2066915425250589881">të kërkosh që të fshihen</translation>
+<translation id="2066969741541525119">Sajti ku je drejtuar është bllokuar nga organizata jote</translation>
 <translation id="2068528718802935086">Foshnjat dhe fëmijët e vegjël</translation>
 <translation id="2071156619270205202">Kjo kartë nuk është e përshtatshme për numrin e kartës virtuale.</translation>
 <translation id="2071692954027939183">Njoftimet bllokohen automatikisht sepse ti zakonisht nuk i lejon ato</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Shumë shpime poshtë</translation>
 <translation id="219906046732893612">Përmirësimi i shtëpisë</translation>
 <translation id="2202020181578195191">Fut një vit të vlefshëm skadimi</translation>
+<translation id="2202627062836089804">pjesën e pasme e kartës</translation>
 <translation id="22081806969704220">Tabakaja 3</translation>
 <translation id="2210794033760923560">Ngarko raportin</translation>
 <translation id="2212735316055980242">Politika nuk u gjet</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">Emri i dosjes:</translation>
 <translation id="3507936815618196901">Të krijojë një hartë 3D të ambientit tënd rrethues dhe të gjurmojë pozicionin e kamerës</translation>
 <translation id="3512163584740124171">Kjo politikë shpërfillet pasi një politikë tjetër nga i njëjti grup politikash ka përparësi më të lartë.</translation>
+<translation id="3515972145999192222">Organizata jote e ka bllokuar <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> sepse ai shkel një politikë. <ph name="BEGIN_LEARN_MORE_LINK" />Mëso më shumë<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">Butoni "Menaxho adresat". Shtyp "Enter" për të shtuar dhe menaxhuar adresat te cilësimet e Chrome</translation>
 <translation id="3518941727116570328">Menaxhimi i shumë objekteve</translation>
 <translation id="3525130752944427905">10 x 14 inç</translation>
@@ -1059,6 +1063,7 @@
 <translation id="3678342917559046352">Shtesë e pavlefshme: Pritej që vlera të ishte në një nga format e mëposhtme: &lt;extension_id&gt; ose &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Hape faqen në një dritare të re "të fshehtë" (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">Informacioni i certifikatës</translation>
+<translation id="3693327506115126094">Zgjidh se si do të verifikosh që je ti</translation>
 <translation id="3699374065820972102">TouchID është aktiv për plotësimin e fjalëkalimeve</translation>
 <translation id="3701427423622901115">Rivendosja u pranua.</translation>
 <translation id="3704162925118123524">Rrjeti që po përdor mund të kërkojë që të vizitosh faqen e tij të lidhjes.</translation>
@@ -1143,6 +1148,7 @@
 <translation id="3906954721959377182">Tablet</translation>
 <translation id="3909477809443608991"><ph name="URL" /> dëshiron të luajë përmbajtjen e mbrojtur. Identiteti i pajisjes sate do të verifikohet nga Google dhe mund të qaset nga ky sajt.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Fut kodin e sigurisë</translation>
 <translation id="3927932062596804919">Refuzo</translation>
 <translation id="393316646445601645">Interneti dhe telekomunikacioni</translation>
 <translation id="3939773374150895049">Të përdoret WebAuthn në vend të CVC?</translation>
@@ -1389,6 +1395,7 @@
 <translation id="4524805452350978254">Menaxho kartat</translation>
 <translation id="4526465106919207193">Njerëzit dhe shoqëria</translation>
 <translation id="4530347922939905757">Mesazhi me tekst</translation>
+<translation id="4531477351494678589">Numri i kartës virtuale:</translation>
 <translation id="4540780316273593836">Ndodhi një gabim</translation>
 <translation id="4541810033354695636">realiteti i zgjeruar</translation>
 <translation id="4542971377163063093">Tabakaja 6</translation>
@@ -1398,6 +1405,7 @@
 <translation id="4567686777917670400">Administratori yt mund të ndryshojë konfigurimin e shfletuesit në distancë. Aktiviteti në këtë pajisje mund të menaxhohet edhe jashtë Chromium. <ph name="BEGIN_LINK" />Mëso më shumë<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Dorëzimi</translation>
 <translation id="4582204425268416675">Hiq kartën</translation>
+<translation id="4582595824823167856">Merr një mesazh me tekst</translation>
 <translation id="4587425331216688090">Të hiqet adresa nga Chrome?</translation>
 <translation id="459089498662672729">Ngjitja nga <ph name="ORIGIN_NAME" /> në këtë vendndodhje nuk rekomandohet nga politika e administratorit</translation>
 <translation id="4592951414987517459">Lidhja jote me <ph name="DOMAIN" /> është enkriptuar duke përdorur një paketë moderne shifrimi.</translation>
@@ -1409,6 +1417,7 @@
 <translation id="4606870351894164739">Me impakt</translation>
 <translation id="4607603470419975064">Butoni "Shiko këshilla për Chrome", shtyp Enter për të mësuar për veçoritë e Chrome</translation>
 <translation id="4607608436550361748">Shiko këshillat për Chrome</translation>
+<translation id="460848736049414407">Bllokuar nga administratori</translation>
 <translation id="4610279718074907952">Ky sajt është në një grup, i përcaktuar nga <ph name="SET_OWNER" />, që mund ta shikojë aktivitetin tënd</translation>
 <translation id="4617273035598175554">Softuerët për grafika dhe animim</translation>
 <translation id="4622292761762557753">Transfero gjithsesi</translation>
@@ -1875,6 +1884,7 @@
 <translation id="57689295674415555">Nuk është plotësuar numri i kartës virtuale?</translation>
 <translation id="5772086939108830423">Përdor një çelës kalimi në një pajisje tjetër</translation>
 <translation id="5776313857861697733">Përparësia</translation>
+<translation id="5776574724412881956">Karta virtuale nuk është plotësuar? Kliko te detajet e kartës virtuale për t'i kopjuar në kujtesën e fragmenteve. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Eksperimenti u aktivizua</translation>
 <translation id="578305955206182703">E verdhë portokalli</translation>
 <translation id="57838592816432529">Hiqi zërin</translation>
@@ -2004,6 +2014,7 @@
 <translation id="6116338172782435947">Shiko tekstin dhe imazhet e kopjuara te kujtesa e fragmenteve</translation>
 <translation id="6118782133429281336">Lista e origjinave është bosh.</translation>
 <translation id="6120179357481664955">Të kujtohet ID-ja e UPI?</translation>
+<translation id="6122181661879998141">pjesën e përparme të kartës</translation>
 <translation id="6124432979022149706">Chrome Enterprise Connectors</translation>
 <translation id="6126565365696310362">Zarf kinez nr. 2</translation>
 <translation id="6127379762771434464">Artikulli u hoq</translation>
@@ -2369,6 +2380,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> kërkon të përdorë kamerën</translation>
 <translation id="7108819624672055576">Lejuar nga një shtesë</translation>
 <translation id="7111012039238467737">(E vlefshme)</translation>
+<translation id="7112327784801341716">Nuk shfaqen informacionet aktuale? Kontakto bankën për t'i përditësuar ato.</translation>
 <translation id="7118618213916969306">Kërko për URL-në e kujtesës së fragmenteve, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">Mbyll skedat ose programet e tjera</translation>
 <translation id="7129355289156517987">Kur mbyll të gjitha skedat "e fshehta" në Chromium, aktiviteti yt në këto skeda fshihet nga kjo pajisje:
@@ -2672,6 +2684,7 @@
 <translation id="7798389633136518089">U shpërfill sepse politika nuk është caktuar nga një burim në renë kompjuterike.</translation>
 <translation id="7800304661137206267">Lidhja është e enkriptuar me <ph name="CIPHER" />, me <ph name="MAC" /> për vërtetimin e mesazhit dhe <ph name="KX" /> si mekanizmi i shkëmbimit të çelësit.</translation>
 <translation id="7802523362929240268">Sajti është i ligjshëm</translation>
+<translation id="7802989406998618639">Fut kodin e sigurisë me <ph name="NUMBER_OF_DIGITS" /> shifra në <ph name="SIDE_OF_CARD" /> që banka të mund të verifikojë që je ti</translation>
 <translation id="780301667611848630">Jo, faleminderit</translation>
 <translation id="7805571567667010077">Menaxhohet nga organizata jote</translation>
 <translation id="7805768142964895445">Statusi</translation>
@@ -2999,6 +3012,7 @@
 <translation id="8725066075913043281">Provo sërish</translation>
 <translation id="8726549941689275341">Madhësia e faqes:</translation>
 <translation id="8730621377337864115">U krye</translation>
+<translation id="8731268612289859741">Kodi i sigurisë</translation>
 <translation id="8731544501227493793">Menaxho butonin e fjalëkalimeve, shtyp "Enter" për të parë dhe menaxhuar fjalëkalimet e tua në cilësimet e Chrome</translation>
 <translation id="8734529307927223492">Pajisja jote <ph name="DEVICE_TYPE" /> menaxhohet nga <ph name="MANAGER" /></translation>
 <translation id="8736059027199600831">30 x 40 inç</translation>
@@ -3104,6 +3118,7 @@
 <translation id="9005998258318286617">Ngarkimi i dokumentit PDF dështoi.</translation>
 <translation id="9008178007718859630">Shtëpia dhe dekori i brendshëm</translation>
 <translation id="9008201768610948239">Shpërfill</translation>
+<translation id="9018120810758822233">Fut kodin tënd të sigurisë për <ph name="CREDIT_CARD" /></translation>
 <translation id="901834265349196618">mail</translation>
 <translation id="9020200922353704812">Adresa e faturimit të kartës është e detyrueshme</translation>
 <translation id="9020542370529661692">Kjo faqe është përkthyer në <ph name="TARGET_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index 2a0de8c..7781314 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Odvedi me tamo</translation>
 <translation id="4648262692072505866">Heš mora da bude u formatu SHA-256.</translation>
 <translation id="4652266463001779298">Nije dozvoljeno</translation>
+<translation id="4652440160515225514">Vaša organizacija je blokirala ovaj sajt jer krši smernice.</translation>
 <translation id="4653167719759882810">Pripajanje i kupovina preduzeća</translation>
 <translation id="4658638640878098064">Spajanje u gornjem levom uglu</translation>
 <translation id="4660119392514473465">Sada možete da pregledate privatno i drugi ljudi koji koriste uređaj neće videti vaše aktivnosti. Međutim, sačuvaće se preuzimanja, obeleživači i stavke na listi za čitanje</translation>
@@ -2919,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Opozovi premeštanje</translation>
 <translation id="8438476240229491014">Zapamti ovo podešavanje</translation>
 <translation id="8438786541497918448">Dozvolićete korišćenje kamere i mikrofona?</translation>
+<translation id="8438923942245957911">Vaša organizacija je obeležila ovaj sajt</translation>
 <translation id="8443613539889492016">Rep i hip-hop</translation>
 <translation id="8444543005280733648">Računarske mreže</translation>
 <translation id="8446884382197647889">Saznajte više</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index 96c421bd..7b61589 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Одведи ме тамо</translation>
 <translation id="4648262692072505866">Хеш мора да буде у формату SHA-256.</translation>
 <translation id="4652266463001779298">Није дозвољено</translation>
+<translation id="4652440160515225514">Ваша организација је блокирала овај сајт јер крши смернице.</translation>
 <translation id="4653167719759882810">Припајање и куповина предузећа</translation>
 <translation id="4658638640878098064">Спајање у горњем левом углу</translation>
 <translation id="4660119392514473465">Сада можете да прегледате приватно и други људи који користе уређај неће видети ваше активности. Међутим, сачуваће се преузимања, обележивачи и ставке на листи за читање</translation>
@@ -2919,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Опозови премештање</translation>
 <translation id="8438476240229491014">Запамти ово подешавање</translation>
 <translation id="8438786541497918448">Дозволићете коришћење камере и микрофона?</translation>
+<translation id="8438923942245957911">Ваша организација је обележила овај сајт</translation>
 <translation id="8443613539889492016">Реп и хип-хоп</translation>
 <translation id="8444543005280733648">Рачунарске мреже</translation>
 <translation id="8446884382197647889">Сазнајте више</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index 4416a5a..270574db 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, bonyeza 'Tab' kisha 'Enter' ili udhibiti maelezo, faragha na usalama wako katika Akaunti yako ya Google</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, vitendo vingi vinapatikana, bonyeza 'Tab' ili uvipitie</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Maelezo ya kadi pepe</translation>
 <translation id="1803020234906945288">Ulaji vyakula vyenye lishe bora</translation>
 <translation id="1803264062614276815">Jina la mwenye kadi</translation>
 <translation id="1803351196216024260">Inaweza kuomba ruhusa ya kutumia maikrofoni yako</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">Inchi 22 x 34</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{Pendekezo 1}other{Mapendekezo #}}</translation>
 <translation id="2066915425250589881">kuomba yafutwe</translation>
+<translation id="2066969741541525119">Tovuti unayoelekea kuifungua imezuiwa na shirika lako</translation>
 <translation id="2068528718802935086">Watoto wachanga na watoto wenye umri wa miaka mitatu hadi mitano</translation>
 <translation id="2071156619270205202">Huwezi kupata nambari ya kadi pepe kwa kutumia kadi hii.</translation>
 <translation id="2071692954027939183">Arifa zimezuiwa kiotomatiki kwa sababu kwa kawaida huziruhusu</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Toboa mara kadhaa chini</translation>
 <translation id="219906046732893612">Uboreshaji wa nyumba</translation>
 <translation id="2202020181578195191">Andika mwaka sahihi wa kuisha kwa muda wa matumizi</translation>
+<translation id="2202627062836089804">nyuma ya kadi yako</translation>
 <translation id="22081806969704220">Trei ya tatu</translation>
 <translation id="2210794033760923560">Pakia Ripoti</translation>
 <translation id="2212735316055980242">Sera haikupatikana</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">Jina la faili:</translation>
 <translation id="3507936815618196901">Kubuni ramani ya 3D ya mazingira yako na kufuatilia mkao wa kamera</translation>
 <translation id="3512163584740124171">Sera hii haitumiki kwa sababu sera nyingine kutoka kundi sawa la sera inapewa kipaumbele zaidi.</translation>
+<translation id="3515972145999192222">Shirika lako limezuia <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> kwa sababu kinakiuka sera. <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">Kitufe cha 'Dhibiti anwani', bonyeza 'Enter' ili uweke na udhibiti anwani katika mipangilio ya Chrome</translation>
 <translation id="3518941727116570328">Kushughulikia vipengee vingi</translation>
 <translation id="3525130752944427905">Inchi 10 x 14</translation>
@@ -1059,6 +1063,7 @@
 <translation id="3678342917559046352">Kiendelezi si Sahihi: Thamani inatakiwa iwe kati ya miundo ifuatayo: &lt;extension_id&gt; au &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Fungua ukurasa kwenye dirisha fiche jipya (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">Maelezo ya cheti</translation>
+<translation id="3693327506115126094">Chagua njia utakayotumia kuthibitisha kuwa ni wewe</translation>
 <translation id="3699374065820972102">TouchID imewashwa ili ujaze manenosiri</translation>
 <translation id="3701427423622901115">Imekubali kuweka upya.</translation>
 <translation id="3704162925118123524">Mtandao unaotumia unaweza kukuhitaji kuutembelea ukurasa wake wa kuingia katika akaunti.</translation>
@@ -1143,6 +1148,7 @@
 <translation id="3906954721959377182">Kompyuta kibao</translation>
 <translation id="3909477809443608991"><ph name="URL" /> inataka kucheza maudhui yanayolindwa. Utambulisho wa kifaa chako utathibitishwa na Google na kinaweza kufikiwa na tovuti hii.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Weka msimbo wako wa usalama</translation>
 <translation id="3927932062596804919">Kataza</translation>
 <translation id="393316646445601645">Intaneti na mawasiliano ya simu</translation>
 <translation id="3939773374150895049">Ungependa kutumia WebAuthn badala ya CVC?</translation>
@@ -1389,6 +1395,7 @@
 <translation id="4524805452350978254">Dhibiti kadi</translation>
 <translation id="4526465106919207193">Watu na jamii</translation>
 <translation id="4530347922939905757">SMS</translation>
+<translation id="4531477351494678589">Nambari ya kadi pepe:</translation>
 <translation id="4540780316273593836">Hitilafu Fulani Imetokea</translation>
 <translation id="4541810033354695636">uhalisia ulioboreshwa</translation>
 <translation id="4542971377163063093">Trei ya sita</translation>
@@ -1398,6 +1405,7 @@
 <translation id="4567686777917670400">Msimamizi wako anaweza kubadilisha mipangilio ya kivinjari chako akiwa mbali. Huenda pia shughuli kwenye kifaa hiki zikadhibitiwa nje ya Chromium. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Usafirishaji</translation>
 <translation id="4582204425268416675">Ondoa kadi</translation>
+<translation id="4582595824823167856">Pata SMS</translation>
 <translation id="4587425331216688090">Ungependa kuondoa anwani kutoka kwenye Chrome?</translation>
 <translation id="459089498662672729">Sera ya msimamizi haipendekezi kubandika hapa kutoka <ph name="ORIGIN_NAME" /></translation>
 <translation id="4592951414987517459">Muunganisho wako kwenye <ph name="DOMAIN" /> umesimbwa kwa njia fiche kwa kutumia mipangilio ya kriptografia ya kisasa.</translation>
@@ -1409,6 +1417,7 @@
 <translation id="4606870351894164739">Impactful</translation>
 <translation id="4607603470419975064">Kitufe cha kuona vidokezo vya Chrome, bonyeza 'Enter' ili upate maelezo kuhusu vipengele vya Chrome</translation>
 <translation id="4607608436550361748">Angalia vidokezo vya Chrome</translation>
+<translation id="460848736049414407">Imezuiwa na Msimamizi</translation>
 <translation id="4610279718074907952">Tovuti hii ipo katika kikundi kilichobainishwa na <ph name="SET_OWNER" />, ambacho kinaweza kuona shughuli zako</translation>
 <translation id="4617273035598175554">Programu ya michoro na uhuishaji</translation>
 <translation id="4622292761762557753">Hamisha tu</translation>
@@ -1423,6 +1432,7 @@
 <translation id="4646534391647090355">Nipeleke kwenye sehemu hiyo sasa</translation>
 <translation id="4648262692072505866">Lazima kiwakilishi kifupi kiwe na muundo wa SHA-256.</translation>
 <translation id="4652266463001779298">Hairuhusiwi</translation>
+<translation id="4652440160515225514">Shirika lako limezuia tovuti hii kwa sababu inakiuka sera.</translation>
 <translation id="4653167719759882810">Uunganishaji na ununuzi</translation>
 <translation id="4658638640878098064">Toboa juu kushoto</translation>
 <translation id="4660119392514473465">Sasa unaweza kuvinjari kwa faragha na watu wengine wanaotumia kifaa hiki hawataona shughuli zako. Hata hivyo, vipakuliwa, alamisho na vipengee vya orodha ya kusoma vitahifadhiwa.</translation>
@@ -1875,6 +1885,7 @@
 <translation id="57689295674415555">Je, nambari ya kadi pepe haijajazwa?</translation>
 <translation id="5772086939108830423">Tumia Ufunguo wa Siri kwenye Kifaa Tofauti</translation>
 <translation id="5776313857861697733">Kipaumbele</translation>
+<translation id="5776574724412881956">Je, kadi pepe haijajazwa? Bofya maelezo ya kadi pepe ili unakili kwenye ubao wa kunakili. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Jaribio limeruhusiwa</translation>
 <translation id="578305955206182703">Rangi ya chungwa</translation>
 <translation id="57838592816432529">Zima sauti</translation>
@@ -2004,6 +2015,7 @@
 <translation id="6116338172782435947">Kuona maandishi na picha zilizonakiliwa kwenye ubao wa kunakili</translation>
 <translation id="6118782133429281336">Orodha halisi iko tupu.</translation>
 <translation id="6120179357481664955">Ungependa kukumbuka kitambulisho chako cha UPI?</translation>
+<translation id="6122181661879998141">mbele ya kadi yako</translation>
 <translation id="6124432979022149706">Viunganishi vya Chrome Enterprise</translation>
 <translation id="6126565365696310362">Bahasha ya muundo wa Kichina ya ukubwa #2</translation>
 <translation id="6127379762771434464">Kipengee kimeondolewa</translation>
@@ -2370,6 +2382,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> inataka kutumia kamera yako</translation>
 <translation id="7108819624672055576">Imeruhusiwa na kiendelezi</translation>
 <translation id="7111012039238467737">(Sahihi)</translation>
+<translation id="7112327784801341716">Je, huoni taarifa zako za sasa? Wasiliana na benki yako ili uzisasishe.</translation>
 <translation id="7118618213916969306">Tafuta URL ya ubao wa kunakili, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">Funga vichupo au programu nyingine</translation>
 <translation id="7129355289156517987">Unapofunga vichupo vyote fiche kwenye Chromium, shughuli zako kwenye vichupo hivyo zitafutwa katika kifaa hiki:
@@ -2671,6 +2684,7 @@
 <translation id="7798389633136518089">Imepuuzwa kwa sababu sera haijawekwa na chanzo cha wingu.</translation>
 <translation id="7800304661137206267">Muunganisho umesimbwa fiche kwa kutumia <ph name="CIPHER" />, kwa <ph name="MAC" /> ya uthibitishaji wa ujumbe na <ph name="KX" /> kama utaratibu muhimu wa ubadilishanaji.</translation>
 <translation id="7802523362929240268">Tovuti hii ni sahihi</translation>
+<translation id="7802989406998618639">Weka msimbo wa usalama wenye tarakimu <ph name="NUMBER_OF_DIGITS" /> ulio katika <ph name="SIDE_OF_CARD" /> ili benki yako iweze kuthibitisha ni kuwa wewe</translation>
 <translation id="780301667611848630">Hapana</translation>
 <translation id="7805571567667010077">Inadhibitiwa na shirika lako</translation>
 <translation id="7805768142964895445">Hali</translation>
@@ -2903,6 +2917,7 @@
 <translation id="8437238597147034694">Tendua hatua</translation>
 <translation id="8438476240229491014">Kumbuka mipangilio hii</translation>
 <translation id="8438786541497918448">Ungependa kutumia kamera na maikrofoni?</translation>
+<translation id="8438923942245957911">Tovuti hii imetiwa alama na shirika lako</translation>
 <translation id="8443613539889492016">Rap na Hip-hop</translation>
 <translation id="8444543005280733648">Mitandao ya kompyuta</translation>
 <translation id="8446884382197647889">Pata Maelezo Zaidi</translation>
@@ -2997,6 +3012,7 @@
 <translation id="8725066075913043281">Jaribu tena</translation>
 <translation id="8726549941689275341">Ukubwa wa kurasa:</translation>
 <translation id="8730621377337864115">Nimemaliza</translation>
+<translation id="8731268612289859741">Msimbo wa usalama</translation>
 <translation id="8731544501227493793">Kitufe cha 'Dhibiti manenosiri', bonyeza 'Enter' ili uangalie na udhibiti manenosiri yako katika mipangilio ya Chrome</translation>
 <translation id="8734529307927223492"><ph name="DEVICE_TYPE" /> yako inadhibitiwa na <ph name="MANAGER" /></translation>
 <translation id="8736059027199600831">Inchi 30 x 40</translation>
@@ -3102,6 +3118,7 @@
 <translation id="9005998258318286617">Imeshindwa kupakia hati ya PDF.</translation>
 <translation id="9008178007718859630">Nyumba na mapambo ya ndani</translation>
 <translation id="9008201768610948239">Puuza</translation>
+<translation id="9018120810758822233">Weka msimbo wako wa usalama wa <ph name="CREDIT_CARD" /></translation>
 <translation id="901834265349196618">Barua pepe</translation>
 <translation id="9020200922353704812">Anwani ya kutuma bili ya kadi sharti iandikwe</translation>
 <translation id="9020542370529661692">Ukurasa huu umetafsiriwa kwenda <ph name="TARGET_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index aedba72..3f0373e 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />, உங்கள் Google கணக்கில் உள்ள தகவல்கள், தனியுரிமை, பாதுகாப்பு ஆகியவற்றை நிர்வகிக்க Tab பட்டனை அழுத்திவிட்டு Enter பட்டனை அழுத்துங்கள்</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, ஒன்றுக்கும் மேற்பட்ட செயல்கள் உள்ளன, அவற்றில் ஒன்றைத் தேர்ந்தெடுக்க Tab விசையை அழுத்துங்கள்</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">விர்ச்சுவல் கார்டு விவரங்கள்</translation>
 <translation id="1803020234906945288">ஆரோக்கியமாக உணவு உண்ணும் முறை</translation>
 <translation id="1803264062614276815">கார்டு உரிமையாளரின் பெயர்</translation>
 <translation id="1803351196216024260">மைக்ரோஃபோனைப் பயன்படுத்த அனுமதி கேட்க வேண்டும்</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 இன்ச்</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 பரிந்துரை}other{# பரிந்துரைகள்}}</translation>
 <translation id="2066915425250589881">நீக்குமாறு கோரலாம்</translation>
+<translation id="2066969741541525119">இந்தத் தளம் உங்கள் நிறுவனத்தால் தடுக்கப்பட்டுள்ளது</translation>
 <translation id="2068528718802935086">குழந்தைகள் &amp; மழலையர்கள்</translation>
 <translation id="2071156619270205202">இந்தக் கார்டு எண்ணை விர்ச்சுவல் கார்டு எண்ணாகப் பயன்படுத்த முடியாது.</translation>
 <translation id="2071692954027939183">வழக்கமாக நீங்கள் அறிவிப்புகளை அனுமதிப்பதில்லை என்பதால் அவை தானாகவே தடுக்கப்பட்டன</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">மல்டிப்பில் பஞ்ச் பாட்டம்</translation>
 <translation id="219906046732893612">வீட்டு மேம்பாடு</translation>
 <translation id="2202020181578195191">சரியான காலாவதி ஆண்டை உள்ளிடவும்</translation>
+<translation id="2202627062836089804">உங்கள் கார்டின் பின்பக்கம்</translation>
 <translation id="22081806969704220">தட்டு 3</translation>
 <translation id="2210794033760923560">அறிக்கையைப் பதிவேற்று</translation>
 <translation id="2212735316055980242">கொள்கை காணப்படவில்லை</translation>
@@ -981,6 +984,7 @@
 <translation id="350069200438440499">ஃபைல் பெயர்:</translation>
 <translation id="3507936815618196901">உங்களைச் சுற்றியுள்ள இடங்களின் 3D மேப்பை உருவாக்கவும் கேமரா நிலையை டிராக் செய்யவும் விரும்புகிறது</translation>
 <translation id="3512163584740124171">அதே கொள்கை வகையைச் சார்ந்த வேறொன்று அதிக முக்கியத்துவம் வாய்ந்தது என்பதால் இந்தக் கொள்கை ஏற்றுக் கொள்ளப்படவில்லை.</translation>
+<translation id="3515972145999192222"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ஒரு கொள்கையை மீறுவதால் உங்கள் நிறுவனம் அதைத் தடுத்துள்ளது. <ph name="BEGIN_LEARN_MORE_LINK" />மேலும் அறிக<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">இணைய முகவரிகளை நிர்வகிப்பதற்கான பட்டன். Chrome அமைப்புகளில் இணைய முகவரிகளைச் சேர்க்கவும் நிர்வகிக்கவும் Enter விசையை அழுத்துங்கள்</translation>
 <translation id="3518941727116570328">பல பொருட்களைக் கையாளுதல்</translation>
 <translation id="3525130752944427905">10 x 14 இன்ச்</translation>
@@ -1055,6 +1059,7 @@
 <translation id="3678342917559046352">தவறான நீட்டிப்பு: எதிர்பார்க்கப்படும் மதிப்பு பின்வரும் வடிவத்தில் ஒன்றாக இருக்க வேண்டும்: &lt;extension_id&gt; அல்லது &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">புதிய மறைநிலைச் சாளரத்தில் பக்கத்தைத் திறக்கவும் (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">சான்றிதழ் தகவல்</translation>
+<translation id="3693327506115126094">இது நீங்கள்தான் என்பதை எப்படி உறுதிசெய்வீர்கள் என்பதைத் தேர்வுசெய்யவும்</translation>
 <translation id="3699374065820972102">TouchID இயக்கத்தில் உள்ளதால் கடவுச்சொற்கள் நிரப்பப்படும்</translation>
 <translation id="3701427423622901115">மீட்டமைத்தல் ஏற்கப்பட்டது.</translation>
 <translation id="3704162925118123524">நீங்கள் பயன்படுத்திக் கொண்டிருக்கும் நெட்வொர்க், அதன் உள்நுழைவுப் பக்கத்தை நீங்கள் பார்க்கக் கோரலாம்.</translation>
@@ -1139,6 +1144,7 @@
 <translation id="3906954721959377182">டேப்லெட்</translation>
 <translation id="3909477809443608991">பாதுகாக்கப்பட்ட உள்ளடக்கத்தை <ph name="URL" /> இயக்க விரும்புகிறது. உங்கள் சாதனத்தின் அடையாளத்தை Google சரிபார்க்கும், சாதன அடையாளத்தை இந்தத் தளம் அணுகக்கூடும்.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">உங்கள் பாதுகாப்புக் குறியீட்டை உள்ளிடவும்</translation>
 <translation id="3927932062596804919">மறு</translation>
 <translation id="393316646445601645">இணையம் &amp; தொலைத்தொடர்பு</translation>
 <translation id="3939773374150895049">CVCக்கு பதிலாக WebAuthnனைப் பயன்படுத்தவா?</translation>
@@ -1385,6 +1391,7 @@
 <translation id="4524805452350978254">கார்டுகளை நிர்வகி</translation>
 <translation id="4526465106919207193">மக்கள் &amp; சமுதாயம்</translation>
 <translation id="4530347922939905757">மெசேஜ்</translation>
+<translation id="4531477351494678589">விர்ச்சுவல் கார்டு எண்:</translation>
 <translation id="4540780316273593836">ஏதோ தவறாகிவிட்டது</translation>
 <translation id="4541810033354695636">ஆக்மென்ட்டட் ரியாலிட்டி</translation>
 <translation id="4542971377163063093">தட்டு 6</translation>
@@ -1394,6 +1401,7 @@
 <translation id="4567686777917670400">உலாவியின் அமைவை உங்கள் நிர்வாகியால் ரிமோட் சாதனத்தில் இருந்தே மாற்ற முடியும். இந்தச் சாதனத்தின் செயல்பாடுகளை Chromium அல்லாமல் வேறு இடத்தில் இருந்தும் நிர்வகிக்கலாம். <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">டெலிவரி</translation>
 <translation id="4582204425268416675">கார்டை அகற்றும்</translation>
+<translation id="4582595824823167856">மெசேஜைப் பெறுக</translation>
 <translation id="4587425331216688090">Chrome இலிருந்து முகவரியை அகற்றவா?</translation>
 <translation id="459089498662672729"><ph name="ORIGIN_NAME" /> என்ற தளத்திலிருந்து நகலெடுத்து இங்கே ஒட்டுவது நிர்வாகக் கொள்கையின்படி பரிந்துரைக்கப்படவில்லை</translation>
 <translation id="4592951414987517459">நவீன சைபர் சூட்டைப் பயன்படுத்தி <ph name="DOMAIN" /> உடனான உங்கள் இணைப்பு என்க்ரிப்ட் செய்யப்பட்டது.</translation>
@@ -1405,6 +1413,7 @@
 <translation id="4606870351894164739">இம்பேக்ட்ஃபுல்</translation>
 <translation id="4607603470419975064">Chrome உதவிக்குறிப்புகளைக் காட்டும் பட்டன். Chrome அம்சங்கள் குறித்து அறிய Enter பட்டனை அழுத்துங்கள்</translation>
 <translation id="4607608436550361748">Chrome உதவிக்குறிப்புகளைக் காட்டு</translation>
+<translation id="460848736049414407">நிர்வாகியால் தடுக்கப்பட்டுள்ளது</translation>
 <translation id="4610279718074907952">இந்தத் தளம் இடம்பெறும் குழு <ph name="SET_OWNER" /> மூலம் வரையறுக்கப்படுகிறது. உங்கள் செயல்பாடுகளை இந்தக் குழு தெரிந்துகொள்ள முடியும்.</translation>
 <translation id="4617273035598175554">கிராஃபிக்ஸ் &amp; அனிமேஷன் மென்பொருள்</translation>
 <translation id="4622292761762557753">பரவாயில்லை மாற்று</translation>
@@ -1871,6 +1880,7 @@
 <translation id="57689295674415555">விர்ச்சுவல் கார்டு எண் நிரப்பப்படவில்லையா?</translation>
 <translation id="5772086939108830423">வேறொரு சாதனத்தில் கடவுக்குறியீட்டைப் பயன்படுத்து</translation>
 <translation id="5776313857861697733">முன்னுரிமை</translation>
+<translation id="5776574724412881956">விர்ச்சுவல் கார்டை நிரப்பவில்லையா? கிளிப்போர்டுக்கு நகலெடுக்க விர்ச்சுவல் கார்டு விவரங்களைக் கிளிக் செய்யவும். <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">பரிசோதனை இயக்கப்பட்டுள்ளது</translation>
 <translation id="578305955206182703">ஆம்பர்</translation>
 <translation id="57838592816432529">ஒலியடக்கு</translation>
@@ -2000,6 +2010,7 @@
 <translation id="6116338172782435947">கிளிப்போர்டுக்கு நகலெடுத்த உரையையும் படங்களையும் பார்க்க விரும்புகிறது</translation>
 <translation id="6118782133429281336">ஆரிஜின் பட்டியல் காலியாக உள்ளது.</translation>
 <translation id="6120179357481664955">உங்கள் UPI ஐடியைச் சேமிக்கவா?</translation>
+<translation id="6122181661879998141">உங்கள் கார்டின் முன்பக்கம்</translation>
 <translation id="6124432979022149706">Chrome Enterprise Connectors</translation>
 <translation id="6126565365696310362">என்வெலப் சைனீஸ் #2</translation>
 <translation id="6127379762771434464">உருப்படி அகற்றப்பட்டது</translation>
@@ -2365,6 +2376,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> உங்கள் கேமராவைப் பயன்படுத்த விரும்புகிறது</translation>
 <translation id="7108819624672055576">நீட்டிப்பு அனுமதித்தது</translation>
 <translation id="7111012039238467737">(சரியானது)</translation>
+<translation id="7112327784801341716">தற்போதைய தகவல்கள் காட்டப்படவில்லையா? அவற்றைப் புதுப்பிக்க பேங்க்கைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="7118618213916969306"><ph name="SHORT_URL" /> எனும் கிளிப்-போர்டு URLலைத் தேடும்</translation>
 <translation id="7119414471315195487">பிற தாவல்கள் அல்லது நிரல்களை மூடவும்</translation>
 <translation id="7129355289156517987">Chromium மறைநிலைப் பக்கங்கள் அனைத்தையும் மூடும்போது அந்தப் பக்கங்களில் நீங்கள் மேற்கொண்ட செயல்பாடுகள் இந்தச் சாதனத்தில் இருந்து அழிக்கப்படும்:
@@ -2668,6 +2680,7 @@
 <translation id="7798389633136518089">கிளவுடு ஆதாரம் மூலம் அமைக்கப்படாததால் கொள்கை புறக்கணிக்கப்பட்டது.</translation>
 <translation id="7800304661137206267">செய்தி அங்கீகரிப்பிற்காக, <ph name="KX" /> ஐ விசைப் பரிமாற்ற செயல்முறையாகக் கொண்டு, <ph name="MAC" /> உடன் <ph name="CIPHER" /> ஐப் பயன்படுத்தி இணைப்பானது என்க்ரிப்ட் செய்யப்பட்டது.</translation>
 <translation id="7802523362929240268">தளமானது சட்டப்பூர்வமானது</translation>
+<translation id="7802989406998618639">பணப் பரிவர்த்தனை செய்வது நீங்கள்தான் என்பதை உங்கள் பேங்க் சரிபார்க்கக்கூடிய வகையில் <ph name="SIDE_OF_CARD" /> உள்ள <ph name="NUMBER_OF_DIGITS" /> இலக்க பாதுகாப்புக் குறியீட்டை உள்ளிடவும்</translation>
 <translation id="780301667611848630">வேண்டாம்</translation>
 <translation id="7805571567667010077">உங்கள் நிறுவனத்தால் நிர்வகிக்கப்படுகிறது</translation>
 <translation id="7805768142964895445">நிலை</translation>
@@ -2995,6 +3008,7 @@
 <translation id="8725066075913043281">மீண்டும் முயற்சிக்கவும்</translation>
 <translation id="8726549941689275341">பக்க அளவு:</translation>
 <translation id="8730621377337864115">முடிந்தது</translation>
+<translation id="8731268612289859741">பாதுகாப்புக் குறியீடு</translation>
 <translation id="8731544501227493793">’கடவுச்சொற்களை நிர்வகி’ பட்டன், Chrome அமைப்புகளில் கடவுச்சொற்களைப் பார்க்கவும் நிர்வகிக்கவும் Enter விசையை அழுத்துங்கள்</translation>
 <translation id="8734529307927223492">உங்கள் <ph name="DEVICE_TYPE" /> சாதனத்தை <ph name="MANAGER" /> நிர்வகிக்கிறது</translation>
 <translation id="8736059027199600831">30 x 40 இன்ச்</translation>
@@ -3100,6 +3114,7 @@
 <translation id="9005998258318286617">PDF ஆவணத்தை ஏற்ற முடியவில்லை.</translation>
 <translation id="9008178007718859630">வீடு &amp; உட்புற அலங்காரம்</translation>
 <translation id="9008201768610948239">புறக்கணி</translation>
+<translation id="9018120810758822233"><ph name="CREDIT_CARD" /> கார்டுக்கான பாதுகாப்புக் குறியீட்டை உள்ளிடுங்கள்</translation>
 <translation id="901834265349196618">மின்னஞ்சல்</translation>
 <translation id="9020200922353704812">கார்டு பில்லிங் முகவரி தேவை</translation>
 <translation id="9020542370529661692">இந்தப் பக்கம் <ph name="TARGET_LANGUAGE" /> க்கு மொழிபெயர்க்கப்பட்டது</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index 1c62c831..36a1690 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -1434,6 +1434,7 @@
 <translation id="4646534391647090355">ఇప్పుడు నన్ను అక్కడకు తీసుకు వెళ్లు</translation>
 <translation id="4648262692072505866">హ్యాష్ SHA-256 ఫార్మాట్‌లో ఉండాలి.</translation>
 <translation id="4652266463001779298">అనుమతించబడదు</translation>
+<translation id="4652440160515225514">ఈ సైట్ ఒక పాలసీని ఉల్లంఘించినందున మీ సంస్థ దానిని బ్లాక్ చేసింది.</translation>
 <translation id="4653167719759882810">విలీనాలు &amp; ఆర్జనలు</translation>
 <translation id="4658638640878098064">ఎడమవైపు ఎగువ భాగంలో స్టేపుల్</translation>
 <translation id="4660119392514473465">ఇప్పుడు మీరు ప్రైవేట్‌గా బ్రౌజ్ చేయవచ్చు, ఈ పరికరాన్ని ఉపయోగించే ఇతర వ్యక్తులు మీ యాక్టివిటీని చూడలేరు. అయినప్పటికీ, డౌన్‌లోడ్‌లు, బుక్‌మార్క్‌లు, చదవాల్సిన ఐటెమ్‌ల లిస్ట్ సేవ్ చేయబడతాయి.</translation>
@@ -2922,6 +2923,7 @@
 <translation id="8437238597147034694">&amp;తరలించడాన్ని రద్దు చేయి</translation>
 <translation id="8438476240229491014">ఈ సెట్టింగ్‌ను గుర్తుంచుకోండి</translation>
 <translation id="8438786541497918448">కెమెరా, మైక్రోఫోన్‌ను ఉపయోగించాలా?</translation>
+<translation id="8438923942245957911">ఈ సైట్‌ను మీ సంస్థ ఫ్లాగ్ చేసింది</translation>
 <translation id="8443613539889492016">ర్యాప్ &amp; హిప్-హాప్</translation>
 <translation id="8444543005280733648">కంప్యూటర్ నెట్‌వర్క్‌లు</translation>
 <translation id="8446884382197647889">మరింత తెలుసుకోండి</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index aed5e007..2832e1e 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" /> กด Tab ตามด้วย Enter เพื่อจัดการข้อมูล ความเป็นส่วนตัว และการรักษาความปลอดภัยในบัญชี Google ของคุณ</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" /> มีการทำงานหลายอย่างที่ทำได้ กด Tab เพื่อวนดูการทำงานดังกล่าว</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">รายละเอียดบัตรเสมือน</translation>
 <translation id="1803020234906945288">การรับประทานอาหารเพื่อสุขภาพ</translation>
 <translation id="1803264062614276815">ชื่อผู้ถือบัตร</translation>
 <translation id="1803351196216024260">สามารถขอใช้ไมโครโฟนของคุณได้</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 นิ้ว</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 คำแนะนำ}other{# คำแนะนำ}}</translation>
 <translation id="2066915425250589881">ส่งคำขอให้ลบ</translation>
+<translation id="2066969741541525119">องค์กรของคุณได้บล็อกเว็บไซต์ที่คุณกำลังจะเข้าชม</translation>
 <translation id="2068528718802935086">ทารกและเด็กเล็ก</translation>
 <translation id="2071156619270205202">บัตรนี้ไม่มีสิทธิ์ใช้หมายเลขบัตรเสมือน</translation>
 <translation id="2071692954027939183">การแจ้งเตือนถูกบล็อกโดยอัตโนมัติเนื่องจากคุณมักไม่อนุญาตให้แสดง</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">เจาะรูด้านล่างหลายรู</translation>
 <translation id="219906046732893612">การปรับปรุงบ้าน</translation>
 <translation id="2202020181578195191">ป้อนปีที่หมดอายุที่ถูกต้อง</translation>
+<translation id="2202627062836089804">ด้านหลังบัตร</translation>
 <translation id="22081806969704220">ถาด 3</translation>
 <translation id="2210794033760923560">อัปโหลดรายงาน</translation>
 <translation id="2212735316055980242">ไม่พบนโยบาย</translation>
@@ -984,6 +987,7 @@
 <translation id="350069200438440499">ชื่อไฟล์:</translation>
 <translation id="3507936815618196901">สร้างแผนที่ 3 มิติของสิ่งที่อยู่รอบตัวคุณและติดตามตำแหน่งของกล้อง</translation>
 <translation id="3512163584740124171">ระบบจะไม่สนใจนโยบายนี้เพราะอีกนโยบายหนึ่งจากกลุ่มนโยบายเดียวกันมีลำดับความสำคัญสูงกว่า</translation>
+<translation id="3515972145999192222">องค์กรของคุณได้บล็อก <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> เนื่องจากละเมิดนโยบาย <ph name="BEGIN_LEARN_MORE_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">ปุ่มจัดการที่อยู่ กด Enter เพื่อเพิ่มและจัดการที่อยู่ในการตั้งค่า Chrome</translation>
 <translation id="3518941727116570328">การจัดการออบเจ็กต์หลายรายการ</translation>
 <translation id="3525130752944427905">10 x 14 นิ้ว</translation>
@@ -1058,6 +1062,7 @@
 <translation id="3678342917559046352">ส่วนขยายไม่ถูกต้อง: ค่าควรอยู่ในรูปแบบต่อไปนี้ &lt;extension_id&gt; หรือ &lt;extension_id&gt;;&lt;update_url&gt;</translation>
 <translation id="3678529606614285348">เปิดหน้าเว็บในหน้าต่างที่ไม่ระบุตัวตนใหม่ (Ctrl-Shift-N)</translation>
 <translation id="3681007416295224113">ข้อมูลในใบรับรอง</translation>
+<translation id="3693327506115126094">เลือกวิธียืนยันว่าเป็นคุณ</translation>
 <translation id="3699374065820972102">Touch ID เปิดอยู่สำหรับการป้อนรหัสผ่าน</translation>
 <translation id="3701427423622901115">รับทราบการรีเซ็ตแล้ว</translation>
 <translation id="3704162925118123524">เครือข่ายที่คุณใช้อาจต้องการให้คุณไปที่หน้าการเข้าสู่ระบบ</translation>
@@ -1142,6 +1147,7 @@
 <translation id="3906954721959377182">แท็บเล็ต</translation>
 <translation id="3909477809443608991"><ph name="URL" /> ต้องการเล่นเนื้อหาที่ได้รับความคุ้มครอง ข้อมูลประจำตัวของอุปกรณ์จะได้รับการยืนยันโดย Google และเว็บไซต์นี้อาจเข้าถึงข้อมูลดังกล่าว</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">ป้อนรหัสความปลอดภัย</translation>
 <translation id="3927932062596804919">ปฏิเสธ</translation>
 <translation id="393316646445601645">อินเทอร์เน็ตและโทรคมนาคม</translation>
 <translation id="3939773374150895049">ใช้ WebAuthn แทน CVC ไหม</translation>
@@ -1388,6 +1394,7 @@
 <translation id="4524805452350978254">จัดการการ์ด</translation>
 <translation id="4526465106919207193">ผู้คนและสังคม</translation>
 <translation id="4530347922939905757">SMS</translation>
+<translation id="4531477351494678589">หมายเลขบัตรเสมือน:</translation>
 <translation id="4540780316273593836">เกิดข้อผิดพลาด</translation>
 <translation id="4541810033354695636">Augmented Reality</translation>
 <translation id="4542971377163063093">ถาด 6</translation>
@@ -1397,6 +1404,7 @@
 <translation id="4567686777917670400">ผู้ดูแลระบบจะเปลี่ยนการตั้งค่าเบราว์เซอร์จากระยะไกลได้ กิจกรรมในอุปกรณ์นี้อาจมีการจัดการภายนอก Chromium ได้ด้วย <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">การจัดส่ง</translation>
 <translation id="4582204425268416675">นำบัตรออก</translation>
+<translation id="4582595824823167856">รับ SMS</translation>
 <translation id="4587425331216688090">นำที่อยู่ออกจาก Chrome ไหม</translation>
 <translation id="459089498662672729">นโยบายของผู้ดูแลระบบไม่แนะนำการวางจาก <ph name="ORIGIN_NAME" /> ลงในตำแหน่งนี้</translation>
 <translation id="4592951414987517459">มีการเข้ารหัสการเชื่อมต่อของคุณกับ <ph name="DOMAIN" /> ด้วยชุดการเข้ารหัสที่ทันสมัย</translation>
@@ -1408,6 +1416,7 @@
 <translation id="4606870351894164739">มีประสิทธิภาพ</translation>
 <translation id="4607603470419975064">ปุ่มดูเคล็ดลับในการใช้ Chrome กด Enter เพื่อดูข้อมูลเกี่ยวกับฟีเจอร์ต่างๆ ของ Chrome</translation>
 <translation id="4607608436550361748">ดูเคล็ดลับในการใช้ Chrome</translation>
+<translation id="460848736049414407">ถูกบล็อกโดยผู้ดูแลระบบ</translation>
 <translation id="4610279718074907952">เว็บไซต์นี้อยู่ในกลุ่มที่ <ph name="SET_OWNER" /> กำหนดไว้และสามารถดูกิจกรรมของคุณได้</translation>
 <translation id="4617273035598175554">ซอฟต์แวร์กราฟิกและแอนิเมชัน</translation>
 <translation id="4622292761762557753">โอนต่อไป</translation>
@@ -1422,6 +1431,7 @@
 <translation id="4646534391647090355">พาฉันไปที่นั่นเลย</translation>
 <translation id="4648262692072505866">แฮชต้องอยู่ในรูปแบบ SHA-256</translation>
 <translation id="4652266463001779298">ไม่อนุญาต</translation>
+<translation id="4652440160515225514">องค์กรของคุณบล็อกเว็บไซต์นี้เนื่องจากละเมิดนโยบาย</translation>
 <translation id="4653167719759882810">การควบรวมและการเข้าซื้อกิจการ</translation>
 <translation id="4658638640878098064">เย็บด้วยลวดเย็บกระดาษด้านซ้ายบน</translation>
 <translation id="4660119392514473465">คุณท่องเว็บแบบเป็นส่วนตัวได้แล้วตอนนี้ และผู้อื่นที่ใช้อุปกรณ์เครื่องนี้จะไม่เห็นกิจกรรมของคุณ อย่างไรก็ตาม ระบบจะบันทึกรายการที่ดาวน์โหลด บุ๊กมาร์ก และเรื่องรออ่าน</translation>
@@ -1874,6 +1884,7 @@
 <translation id="57689295674415555">ไม่กรอกหมายเลขบัตรเสมือนใช่ไหม</translation>
 <translation id="5772086939108830423">ใช้พาสคีย์ในอุปกรณ์อื่น</translation>
 <translation id="5776313857861697733">ลำดับความสำคัญ</translation>
+<translation id="5776574724412881956">ระบบไม่ได้กรอกบัตรเสมือนใช่ไหม คลิกรายละเอียดบัตรเสมือนเพื่อคัดลอกไปยังคลิปบอร์ด <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">เปิดใช้การทดสอบอยู่</translation>
 <translation id="578305955206182703">เหลืองอำพัน</translation>
 <translation id="57838592816432529">ปิดเสียง</translation>
@@ -2003,6 +2014,7 @@
 <translation id="6116338172782435947">ดูข้อความและรูปภาพที่คัดลอกไปที่คลิปบอร์ด</translation>
 <translation id="6118782133429281336">รายการต้นทางว่างเปล่า</translation>
 <translation id="6120179357481664955">จำรหัส UPI ไหม</translation>
+<translation id="6122181661879998141">ด้านหน้าบัตร</translation>
 <translation id="6124432979022149706">เครื่องมือเชื่อมต่อ Chrome Enterprise</translation>
 <translation id="6126565365696310362">Envelope Chinese #2</translation>
 <translation id="6127379762771434464">นำรายการออกแล้ว</translation>
@@ -2369,6 +2381,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> ต้องการใช้กล้องถ่ายรูปของคุณ</translation>
 <translation id="7108819624672055576">อนุญาตโดยส่วนขยาย</translation>
 <translation id="7111012039238467737">(ถูกต้อง)</translation>
+<translation id="7112327784801341716">หากไม่เห็นข้อมูลปัจจุบัน โปรดติดต่อธนาคารให้อัปเดต</translation>
 <translation id="7118618213916969306">ค้นหา URL ในคลิปบอร์ด <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">ปิดแท็บหรือโปรแกรมอื่นๆ</translation>
 <translation id="7129355289156517987">เมื่อคุณปิดแท็บที่ไม่ระบุตัวตนใน Chromium ทั้งหมด ระบบจะล้างกิจกรรมในแท็บเหล่านั้นจากอุปกรณ์เครื่องนี้
@@ -2672,6 +2685,7 @@
 <translation id="7798389633136518089">เพิกเฉยเพราะแหล่งที่มาในระบบคลาวด์ไม่ได้ตั้งค่านโยบายไว้</translation>
 <translation id="7800304661137206267">การเชื่อมต่อถูกเข้ารหัสโดยใช้ <ph name="CIPHER" /> โดยใช้ <ph name="MAC" /> สำหรับตรวจสอบสิทธิ์ข้อความและ <ph name="KX" /> เป็นกลไลการแลกเปลี่ยนกุญแจ</translation>
 <translation id="7802523362929240268">ไซต์ถูกต้อง</translation>
+<translation id="7802989406998618639">ป้อนรหัสความปลอดภัย <ph name="NUMBER_OF_DIGITS" /> หลักบน<ph name="SIDE_OF_CARD" />เพื่อให้ธนาคารยืนยันว่าเป็นคุณ</translation>
 <translation id="780301667611848630">ไม่ ขอบคุณ</translation>
 <translation id="7805571567667010077">จัดการโดยองค์กรของคุณ</translation>
 <translation id="7805768142964895445">สถานะ</translation>
@@ -2906,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;เลิกทำการย้าย</translation>
 <translation id="8438476240229491014">จำการตั้งค่านี้</translation>
 <translation id="8438786541497918448">ใช้กล้องและไมโครโฟนไหม</translation>
+<translation id="8438923942245957911">องค์กรของคุณติดธงคำเตือนเว็บไซต์นี้ไว้</translation>
 <translation id="8443613539889492016">แร็ปและฮิปฮอป</translation>
 <translation id="8444543005280733648">เครือข่ายคอมพิวเตอร์</translation>
 <translation id="8446884382197647889">ดูข้อมูลเพิ่มเติม</translation>
@@ -3000,6 +3015,7 @@
 <translation id="8725066075913043281">ลองอีกครั้ง</translation>
 <translation id="8726549941689275341">ขนาดหน้า:</translation>
 <translation id="8730621377337864115">เสร็จสิ้น</translation>
+<translation id="8731268612289859741">รหัสความปลอดภัย</translation>
 <translation id="8731544501227493793">จัดการปุ่มรหัสผ่าน กด Enter เพื่อดูและจัดการรหัสผ่านในการตั้งค่า Chrome</translation>
 <translation id="8734529307927223492"><ph name="DEVICE_TYPE" /> ของคุณจัดการโดย <ph name="MANAGER" /></translation>
 <translation id="8736059027199600831">30 x 40 นิ้ว</translation>
@@ -3105,6 +3121,7 @@
 <translation id="9005998258318286617">ไม่สามารถโหลดเอกสาร PDF</translation>
 <translation id="9008178007718859630">การจัดบ้านและตกแต่งภายใน</translation>
 <translation id="9008201768610948239">ไม่สนใจ</translation>
+<translation id="9018120810758822233">ป้อนรหัสความปลอดภัยสำหรับ <ph name="CREDIT_CARD" /></translation>
 <translation id="901834265349196618">อีเมล</translation>
 <translation id="9020200922353704812">ต้องใส่ที่อยู่สำหรับการเรียกเก็บเงินของบัตร</translation>
 <translation id="9020542370529661692">หน้านี้ได้รับการแปลเป็น <ph name="TARGET_LANGUAGE" /> แล้ว</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 077dddf..4fdc2fa 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />; натисніть Tab, а потім – Enter, щоб керувати своєю інформацією, конфіденційністю й безпекою в обліковому записі Google</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />; доступно кілька дій, натискайте Tab, щоб переходити між ними</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Дані віртуальної картки</translation>
 <translation id="1803020234906945288">Здорове харчування</translation>
 <translation id="1803264062614276815">Ім’я та прізвище власника картки</translation>
 <translation id="1803351196216024260">Може просити доступ до мікрофона</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 дюйм.</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 пропозиція}one{# пропозиція}few{# пропозиції}many{# пропозицій}other{# пропозиції}}</translation>
 <translation id="2066915425250589881">запит на видалення</translation>
+<translation id="2066969741541525119">Адміністратор вашої організації заблокував указаний сайт</translation>
 <translation id="2068528718802935086">Немовлята й малюки</translation>
 <translation id="2071156619270205202">Указаний номер не підходить для віртуальної картки.</translation>
 <translation id="2071692954027939183">Сповіщення автоматично заблоковано, оскільки ви зазвичай не дозволяєте їх</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Пробити кілька отворів унизу</translation>
 <translation id="219906046732893612">Облаштування житла</translation>
 <translation id="2202020181578195191">Введіть дійсний рік закінчення терміну дії</translation>
+<translation id="2202627062836089804">зворотній стороні картки</translation>
 <translation id="22081806969704220">Лоток 3</translation>
 <translation id="2210794033760923560">Завантажити звіт</translation>
 <translation id="2212735316055980242">Правило не знайдено</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">Ім'я файлу:</translation>
 <translation id="3507936815618196901">Створити 3D-карту вашого оточення та відстежувати положення камери</translation>
 <translation id="3512163584740124171">Це правило ігнорується, оскільки інше правило цієї групи має вищий пріоритет.</translation>
+<translation id="3515972145999192222">Ваша організація заблокувала домен <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, оскільки він порушує правила. <ph name="BEGIN_LEARN_MORE_LINK" />Докладніше<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">Кнопка "Керувати адресами"; натисніть Enter, щоб додати адреси та керувати ними в налаштуваннях Chrome</translation>
 <translation id="3518941727116570328">Обробка кількох об'єктів</translation>
 <translation id="3525130752944427905">10 x 14 дюйм.</translation>
@@ -1059,6 +1063,7 @@
 <translation id="3678342917559046352">Недійсне розширення: має бути одне з таких значень: &lt;extension_id&gt; або &lt;extension_id&gt;;&lt;update_url&gt;.</translation>
 <translation id="3678529606614285348">Відкрийте сторінку в анонімному вікні (Ctrl+Shift+N)</translation>
 <translation id="3681007416295224113">Інформація про сертифікат</translation>
+<translation id="3693327506115126094">Виберіть спосіб підтвердження особи</translation>
 <translation id="3699374065820972102">TouchID ввімкнено для заповнення паролів</translation>
 <translation id="3701427423622901115">Скидання підтверджено.</translation>
 <translation id="3704162925118123524">Можливо, щоб з’єднатися з цією мережею, потрібно відвідати її сторінку входу.</translation>
@@ -1143,6 +1148,7 @@
 <translation id="3906954721959377182">Планшет</translation>
 <translation id="3909477809443608991"><ph name="URL" /> хоче відтворити захищений вміст. Ми перевіримо ідентифікаційні дані вашого пристрою, і сайт зможе отримати до нього доступ.</translation>
 <translation id="3909695131102177774"><ph name="LABEL" />: <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Введіть код безпеки</translation>
 <translation id="3927932062596804919">Відмовити</translation>
 <translation id="393316646445601645">Інтернет і телекомунікація</translation>
 <translation id="3939773374150895049">Використовувати веб-автентифікацію замість коду CVC?</translation>
@@ -1389,6 +1395,7 @@
 <translation id="4524805452350978254">Керувати картками</translation>
 <translation id="4526465106919207193">Люди й суспільство</translation>
 <translation id="4530347922939905757">SMS</translation>
+<translation id="4531477351494678589">Номер віртуальної картки:</translation>
 <translation id="4540780316273593836">Сталася помилка</translation>
 <translation id="4541810033354695636">доповнена реальність</translation>
 <translation id="4542971377163063093">Лоток 6</translation>
@@ -1398,6 +1405,7 @@
 <translation id="4567686777917670400">Адміністратор може змінити налаштування веб-переглядача віддалено. Діями на цьому пристрої можна керувати за межами Chromium. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Доставка</translation>
 <translation id="4582204425268416675">Видалити картку</translation>
+<translation id="4582595824823167856">Отримати SMS</translation>
 <translation id="4587425331216688090">Видалити адресу з Chrome?</translation>
 <translation id="459089498662672729">Адміністратор не радить вставляти сюди дані із сайту <ph name="ORIGIN_NAME" /></translation>
 <translation id="4592951414987517459">З’єднання з доменом <ph name="DOMAIN" /> шифрується за допомогою сучасного набору шифрів.</translation>
@@ -1409,6 +1417,7 @@
 <translation id="4606870351894164739">Вражаючий</translation>
 <translation id="4607603470419975064">Кнопка "Переглянути поради щодо Chrome"; натисніть Enter, щоб дізнатися про функції Chrome</translation>
 <translation id="4607608436550361748">Переглянути поради щодо Chrome</translation>
+<translation id="460848736049414407">Заблоковано адміністратором</translation>
 <translation id="4610279718074907952">Цей сайт належить до групи, визначеної сайтом-власником <ph name="SET_OWNER" />, і інші сайти-учасники можуть бачити ваші дії</translation>
 <translation id="4617273035598175554">Графічне програмне забезпечення та ПЗ для створення анімації</translation>
 <translation id="4622292761762557753">Усе одно перенести</translation>
@@ -1423,6 +1432,7 @@
 <translation id="4646534391647090355">Перейти зараз</translation>
 <translation id="4648262692072505866">Хеш має бути у форматі SHA-256.</translation>
 <translation id="4652266463001779298">Заборонено</translation>
+<translation id="4652440160515225514">Ваша організація заблокувала цей сайт, оскільки він порушує правила.</translation>
 <translation id="4653167719759882810">Злиття й поглинання</translation>
 <translation id="4658638640878098064">Скріпити вгорі ліворуч</translation>
 <translation id="4660119392514473465">Тепер ви можете переглядати контент анонімно. Інші користувачі цього пристрою не бачитимуть дані про ваші дії. Однак завантаження, закладки й пункти зі списку читання зберігатимуться.</translation>
@@ -1875,6 +1885,7 @@
 <translation id="57689295674415555">Номер віртуальної картки не заповнено?</translation>
 <translation id="5772086939108830423">Використати ключ доступу на іншому пристрої</translation>
 <translation id="5776313857861697733">Пріоритет</translation>
+<translation id="5776574724412881956">Віртуальна картка незаповнена? Натисніть дані віртуальної картки, щоб скопіювати їх у буфер обміну. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Експеримент увімкнено</translation>
 <translation id="578305955206182703">Бурштиновий</translation>
 <translation id="57838592816432529">Вимкнути звук</translation>
@@ -2004,6 +2015,7 @@
 <translation id="6116338172782435947">Переглядати тексти й зображення в буфері обміну</translation>
 <translation id="6118782133429281336">Список джерел порожній.</translation>
 <translation id="6120179357481664955">Запам'ятати ідентифікатор UPI?</translation>
+<translation id="6122181661879998141">лицьовій стороні картки</translation>
 <translation id="6124432979022149706">Конектори Chrome Enterprise</translation>
 <translation id="6126565365696310362">Конверт Chinese № 2</translation>
 <translation id="6127379762771434464">Веб-сайт видалено</translation>
@@ -2370,6 +2382,7 @@
 <translation id="7108634116785509031">Сайт <ph name="HOST" /> хоче отримати доступ до вашої камери</translation>
 <translation id="7108819624672055576">Дозволено розширенням</translation>
 <translation id="7111012039238467737">(Дійсний)</translation>
+<translation id="7112327784801341716">Не відображається актуальна інформація? Попросіть представника банку оновити її.</translation>
 <translation id="7118618213916969306">Пошук URL-адреси з буфера обміну, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">Закрийте інші вкладки та програми</translation>
 <translation id="7129355289156517987">Коли ви закриваєте всі анонімні вкладки в Chromium, з пристрою видаляються дані про ваші дії в них, зокрема:
@@ -2673,6 +2686,7 @@
 <translation id="7798389633136518089">Ігнорується, оскільки правило не налаштовано хмарним джерелом.</translation>
 <translation id="7800304661137206267">З'єднання зашифровано з використанням <ph name="CIPHER" /> з алгоритмом <ph name="MAC" /> для автентифікації повідомлення та кодування <ph name="KX" /> як механізму обміну ключами.</translation>
 <translation id="7802523362929240268">Сайт законно зареєстрований</translation>
+<translation id="7802989406998618639">Введіть <ph name="NUMBER_OF_DIGITS" />-значний код безпеки, указаний на <ph name="SIDE_OF_CARD" />, щоб банк міг підтвердити вашу особу</translation>
 <translation id="780301667611848630">Ні, дякую</translation>
 <translation id="7805571567667010077">Дозволом керує ваша організація</translation>
 <translation id="7805768142964895445">Статус</translation>
@@ -2907,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;Відмінити переміщення</translation>
 <translation id="8438476240229491014">Запам’ятати це налаштування</translation>
 <translation id="8438786541497918448">Використовувати камеру та мікрофон?</translation>
+<translation id="8438923942245957911">Ваша організація поскаржилася на цей сайт</translation>
 <translation id="8443613539889492016">Реп і хіп-хоп</translation>
 <translation id="8444543005280733648">Комп’ютерні мережі</translation>
 <translation id="8446884382197647889">Докладніше</translation>
@@ -3001,6 +3016,7 @@
 <translation id="8725066075913043281">Повторити спробу</translation>
 <translation id="8726549941689275341">Розмір сторінки:</translation>
 <translation id="8730621377337864115">Готово</translation>
+<translation id="8731268612289859741">Код безпеки</translation>
 <translation id="8731544501227493793">Кнопка "Керувати паролями"; натисніть Enter, щоб переглянути паролі й керувати ними в налаштуваннях Chrome</translation>
 <translation id="8734529307927223492">Вашим пристроєм <ph name="DEVICE_TYPE" /> керує <ph name="MANAGER" /></translation>
 <translation id="8736059027199600831">30 x 40 дюйм.</translation>
@@ -3106,6 +3122,7 @@
 <translation id="9005998258318286617">Не вдалося завантажити документ PDF.</translation>
 <translation id="9008178007718859630">Оздоблення будинків і оформлення інтер’єрів</translation>
 <translation id="9008201768610948239">Ігнорувати</translation>
+<translation id="9018120810758822233">Введіть код безпеки для кредитної картки <ph name="CREDIT_CARD" /></translation>
 <translation id="901834265349196618">електронна адреса</translation>
 <translation id="9020200922353704812">Потрібно вказати платіжну адресу картки</translation>
 <translation id="9020542370529661692">Цю сторінку перекладено такою мовою: <ph name="TARGET_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb
index fe89abe..2578b27d 100644
--- a/components/strings/components_strings_ur.xtb
+++ b/components/strings/components_strings_ur.xtb
@@ -1434,6 +1434,7 @@
 <translation id="4646534391647090355">اب مجھے وہاں لے چلیں</translation>
 <translation id="4648262692072505866">‏ہیش کا فارمیٹ SHA-256 ہونا چاہیے۔</translation>
 <translation id="4652266463001779298">اجازت نہیں ہے</translation>
+<translation id="4652440160515225514">آپ کی تنظیم نے اس سائٹ کو مسدود کر دیا ہے کیونکہ یہ پالیسی کی خلاف ورزی کرتی ہے۔</translation>
 <translation id="4653167719759882810">انضمام اور حصول</translation>
 <translation id="4658638640878098064">اوپر بائیں طرف سٹیپل</translation>
 <translation id="4660119392514473465">اب آپ نجی طور پر براؤز کر سکتے ہیں اور اس آلے کا استعمال کرنے والے دوسرے لوگوں کو آپ کی سرگرمی نہیں دکھائی دے گی۔ تاہم، ڈاؤن لوڈز، بک مارکس اور پڑھنے کی فہرست کے آئٹمز محفوظ ہو جائیں گے۔</translation>
@@ -2923,6 +2924,7 @@
 <translation id="8437238597147034694">منتقلی کو &amp;کالعدم کریں</translation>
 <translation id="8438476240229491014">اس ترتیب کو یاد رکھیں</translation>
 <translation id="8438786541497918448">کیمرا اور مائیکروفون استعمال کریں؟</translation>
+<translation id="8438923942245957911">اس سائٹ پر آپ کی تنظیم نے جھنڈا لگایا ہے</translation>
 <translation id="8443613539889492016">رَیپ اور ہپ ہاپ موسیقی</translation>
 <translation id="8444543005280733648">کمپیوٹر نیٹ ورکس</translation>
 <translation id="8446884382197647889">مزید جانیں</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb
index 295d8f8..bda6eae 100644
--- a/components/strings/components_strings_zh-HK.xtb
+++ b/components/strings/components_strings_zh-HK.xtb
@@ -1431,6 +1431,7 @@
 <translation id="4646534391647090355">立即前往下載中心</translation>
 <translation id="4648262692072505866">雜湊必須為 SHA-256 格式。</translation>
 <translation id="4652266463001779298">不允許</translation>
+<translation id="4652440160515225514">這個網站由於違反某項政策規定,因此已遭貴機構封鎖。</translation>
 <translation id="4653167719759882810">合併和收購</translation>
 <translation id="4658638640878098064">釘裝 (左上方)</translation>
 <translation id="4660119392514473465">現在您可私下瀏覽內容,而使用這部電腦的其他使用者將無法看到您的活動。不過,您的下載檔案、書籤和閱讀清單項目仍會保留在裝置上。</translation>
@@ -2919,6 +2920,7 @@
 <translation id="8437238597147034694">復原移動(&amp;U)</translation>
 <translation id="8438476240229491014">記住此設定</translation>
 <translation id="8438786541497918448">要使用攝錄機和麥克風嗎?</translation>
+<translation id="8438923942245957911">貴機構已標記這個網站</translation>
 <translation id="8443613539889492016">饒舌音樂和 Hip-Hop</translation>
 <translation id="8444543005280733648">電腦網絡</translation>
 <translation id="8446884382197647889">瞭解詳情</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 29ba82a..3b5e1b7 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -1431,6 +1431,7 @@
 <translation id="4646534391647090355">立即前往下載中心</translation>
 <translation id="4648262692072505866">雜湊的格式必須是 SHA-256。</translation>
 <translation id="4652266463001779298">不允許</translation>
+<translation id="4652440160515225514">這個網站由於違反某項政策規定,因此已遭貴機構封鎖。</translation>
 <translation id="4653167719759882810">合併與收購</translation>
 <translation id="4658638640878098064">釘裝 (左上方)</translation>
 <translation id="4660119392514473465">現在你可以進行私密瀏覽了。共用這部裝置的其他使用者不會看到你的活動,不過,你下載的內容、新增的書籤及加入閱讀清單中的項目仍會保留在裝置上。</translation>
@@ -2919,6 +2920,7 @@
 <translation id="8437238597147034694">復原移動(&amp;U)</translation>
 <translation id="8438476240229491014">記住這項設定</translation>
 <translation id="8438786541497918448">要使用攝影機和麥克風嗎?</translation>
+<translation id="8438923942245957911">貴機構已標記這個網站</translation>
 <translation id="8443613539889492016">饒舌樂與嘻哈樂</translation>
 <translation id="8444543005280733648">電腦網路</translation>
 <translation id="8446884382197647889">瞭解詳情</translation>
diff --git a/components/sync/driver/sync_service_crypto.cc b/components/sync/driver/sync_service_crypto.cc
index 906a6d1f..77dc9a8 100644
--- a/components/sync/driver/sync_service_crypto.cc
+++ b/components/sync/driver/sync_service_crypto.cc
@@ -424,24 +424,36 @@
   state_.account_info = account_info;
   state_.engine = engine;
 
-  // Since there was no state changes during engine initialization, now the
-  // state is known and no user action required.
-  if (state_.required_user_action ==
-      RequiredUserAction::kUnknownDuringInitialization) {
-    UpdateRequiredUserActionAndNotify(RequiredUserAction::kNone);
-    RefreshIsRecoverabilityDegraded();
-  }
-
-  // This indicates OnTrustedVaultKeyRequired() was called as part of the
-  // engine's initialization.
-  if (state_.required_user_action ==
-      RequiredUserAction::kFetchingTrustedVaultKeys) {
-    FetchTrustedVaultKeys(/*is_second_fetch_attempt=*/false);
-  }
-
-  // Attempt decryption with bootstrap token if necessary.
-  if (state_.required_user_action == RequiredUserAction::kPassphraseRequired) {
-    MaybeSetDecryptionKeyFromBootstrapToken();
+  switch (state_.required_user_action) {
+    case RequiredUserAction::kNone:
+      // It was already established during initialization that there's nothing
+      // to do, which is possible for some passphrase types, but not others
+      // (including |kTrustedVaultPassphrase|.
+      DCHECK_NE(state_.cached_passphrase_type,
+                PassphraseType::kTrustedVaultPassphrase);
+      break;
+    case RequiredUserAction::kUnknownDuringInitialization:
+      // Since there was no state changes during engine initialization, now the
+      // state is known and no user action required.
+      UpdateRequiredUserActionAndNotify(RequiredUserAction::kNone);
+      RefreshIsRecoverabilityDegraded();
+      break;
+    case RequiredUserAction::kFetchingTrustedVaultKeys:
+      // This indicates OnTrustedVaultKeyRequired() was called as part of the
+      // engine's initialization.
+      FetchTrustedVaultKeys(/*is_second_fetch_attempt=*/false);
+      break;
+    case RequiredUserAction::kPassphraseRequired:
+      // Attempt decryption with bootstrap token if necessary.
+      MaybeSetDecryptionKeyFromBootstrapToken();
+      break;
+    case RequiredUserAction::kTrustedVaultKeyRequired:
+    case RequiredUserAction::kTrustedVaultKeyRequiredButFetching:
+    case RequiredUserAction::kTrustedVaultRecoverabilityDegraded:
+      // Neither keys nor the recoverability state are fetched during engine
+      // initialization.
+      NOTREACHED();
+      break;
   }
 }
 
@@ -541,7 +553,7 @@
     // If SetSyncEngine() hasn't been called yet, it means
     // OnTrustedVaultKeyRequired() was called as part of the engine's
     // initialization. Fetching the keys is not useful right now because there
-    // is known engine to feed the keys to, so let's defer fetching until
+    // is no engine to feed the keys to, so let's defer fetching until
     // SetSyncEngine() is called.
     return;
   }
@@ -564,6 +576,7 @@
       break;
   }
 
+  DCHECK(state_.engine);
   UpdateRequiredUserActionAndNotify(RequiredUserAction::kNone);
   RefreshIsRecoverabilityDegraded();
 
@@ -603,6 +616,11 @@
   state_.cached_explicit_passphrase_time = passphrase_time;
 
   // Clear recoverability degraded state in case a custom passphrase was set.
+  // Note that the opposite transition (into degraded recoverability) isn't
+  // handled here, i.e. RefreshIsRecoverabilityDegraded() isn't invoked, as
+  // it can be safely assumed that in practice either of
+  // OnTrustedVaultKeyRequired() or OnTrustedVaultKeyAccepted() will eventually
+  // be invoked.
   if (type != PassphraseType::kTrustedVaultPassphrase &&
       state_.required_user_action ==
           RequiredUserAction::kTrustedVaultRecoverabilityDegraded) {
@@ -640,6 +658,11 @@
 }
 
 void SyncServiceCrypto::OnTrustedVaultRecoverabilityChanged() {
+  // Ignore calls during engine initialization, as decoverability will be
+  // refreshed in SetSyncEngine().
+  if (!state_.engine) {
+    return;
+  }
   RefreshIsRecoverabilityDegraded();
 }
 
@@ -775,6 +798,8 @@
 }
 
 void SyncServiceCrypto::RefreshIsRecoverabilityDegraded() {
+  DCHECK(state_.engine);
+
   if (state_.cached_passphrase_type !=
       PassphraseType::kTrustedVaultPassphrase) {
     return;
diff --git a/components/viz/service/debugger/viz_debugger.cc b/components/viz/service/debugger/viz_debugger.cc
index ee7f2d0..4cb85ca6 100644
--- a/components/viz/service/debugger/viz_debugger.cc
+++ b/components/viz/service/debugger/viz_debugger.cc
@@ -49,19 +49,17 @@
 
 VizDebugger::FilterBlock::FilterBlock(const FilterBlock& other) = default;
 
-base::DictionaryValue VizDebugger::CallSubmitCommon::GetDictionaryValue()
-    const {
-  base::DictionaryValue option_dict;
-  option_dict.SetString("color",
-                        base::StringPrintf("#%02x%02x%02x", option.color_r,
-                                           option.color_g, option.color_b));
-  option_dict.SetInteger("alpha", option.color_a);
+base::Value::Dict VizDebugger::CallSubmitCommon::GetDictionaryValue() const {
+  base::Value::Dict option_dict;
+  option_dict.Set("color", base::StringPrintf("#%02x%02x%02x", option.color_r,
+                                              option.color_g, option.color_b));
+  option_dict.Set("alpha", option.color_a);
 
-  base::DictionaryValue dict;
-  dict.SetInteger("drawindex", draw_index);
-  dict.SetInteger("source_index", source_index);
-  dict.SetInteger("thread_id", thread_id);
-  dict.SetKey("option", std::move(option_dict));
+  base::Value::Dict dict;
+  dict.Set("drawindex", draw_index);
+  dict.Set("source_index", source_index);
+  dict.Set("thread_id", thread_id);
+  dict.Set("option", std::move(option_dict));
   return dict;
 }
 
@@ -97,30 +95,30 @@
   // by having a lock around the |json_frame_output_| object.
   submission_count_ = 0;
 
-  base::DictionaryValue global_dict;
-  global_dict.SetInteger("version", kVizDebuggerVersion);
-  global_dict.SetString("frame", base::NumberToString(counter));
-  global_dict.SetInteger("windowx", window_pix.width());
-  global_dict.SetInteger("windowy", window_pix.height());
-  global_dict.SetString(
+  base::Value::Dict global_dict;
+  global_dict.Set("version", kVizDebuggerVersion);
+  global_dict.Set("frame", base::NumberToString(counter));
+  global_dict.Set("windowx", window_pix.width());
+  global_dict.Set("windowy", window_pix.height());
+  global_dict.Set(
       "time", base::NumberToString(time_ticks.since_origin().InMicroseconds()));
 
-  base::ListValue new_sources;
+  base::Value::List new_sources;
   for (size_t i = last_sent_source_count_; i < sources_.size(); i++) {
     const StaticSource* each = sources_[i];
 
-    base::DictionaryValue dict;
-    dict.SetString("file", each->file);
-    dict.SetInteger("line", each->line);
-    dict.SetString("func", each->func);
-    dict.SetString("anno", each->anno);
-    dict.SetInteger("index", each->reg_index);
+    base::Value::Dict dict;
+    dict.Set("file", each->file);
+    dict.Set("line", each->line);
+    dict.Set("func", each->func);
+    dict.Set("anno", each->anno);
+    dict.Set("index", each->reg_index);
     new_sources.Append(std::move(dict));
   }
 
   // Remote connection will now have acknowledged all the new sources.
   last_sent_source_count_ = sources_.size();
-  global_dict.SetKey("new_sources", std::move(new_sources));
+  global_dict.Set("new_sources", std::move(new_sources));
 
   // We take the minimum between tail index and buffer size to make sure we
   // don't go out of bounds.
@@ -133,100 +131,100 @@
   size_t const max_logs_index = std::min(static_cast<int>(logs_tail_idx_),
                                          static_cast<int>(logs_.size()));
 
-  base::ListValue draw_calls;
+  base::Value::List draw_calls;
 
   // Hash set to keep track of threads that have been registered already.
   base::flat_set<int> registered_threads;
   for (size_t i = 0; i < max_rect_calls_index; ++i) {
-    base::DictionaryValue dict = draw_rect_calls_[i].GetDictionaryValue();
-    base::DictionaryValue threads_dict;
+    base::Value::Dict dict = draw_rect_calls_[i].GetDictionaryValue();
+    base::Value::Dict threads_dict;
     {
-      base::ListValue list_xy;
+      base::Value::List list_xy;
       list_xy.Append(draw_rect_calls_[i].obj_size.width());
       list_xy.Append(draw_rect_calls_[i].obj_size.height());
-      dict.SetKey("size", std::move(list_xy));
+      dict.Set("size", std::move(list_xy));
     }
     {
-      base::ListValue list_xy;
+      base::Value::List list_xy;
       list_xy.Append(static_cast<double>(draw_rect_calls_[i].pos.x()));
       list_xy.Append(static_cast<double>(draw_rect_calls_[i].pos.y()));
-      dict.SetKey("pos", std::move(list_xy));
+      dict.Set("pos", std::move(list_xy));
     }
     if (draw_rect_calls_[i].uv != DEFAULT_UV) {
       {
-        base::ListValue list_xy;
+        base::Value::List list_xy;
         list_xy.Append(static_cast<double>(draw_rect_calls_[i].uv.width()));
         list_xy.Append(static_cast<double>(draw_rect_calls_[i].uv.height()));
-        dict.SetKey("uv_size", std::move(list_xy));
+        dict.Set("uv_size", std::move(list_xy));
       }
       {
-        base::ListValue list_xy;
+        base::Value::List list_xy;
         list_xy.Append(static_cast<double>(draw_rect_calls_[i].uv.x()));
         list_xy.Append(static_cast<double>(draw_rect_calls_[i].uv.y()));
-        dict.SetKey("uv_pos", std::move(list_xy));
+        dict.Set("uv_pos", std::move(list_xy));
       }
     }
-    dict.SetInteger("buff_id", std::move(draw_rect_calls_[i].buff_id));
+    dict.Set("buff_id", std::move(draw_rect_calls_[i].buff_id));
     registered_threads.insert(draw_rect_calls_[i].thread_id);
     draw_calls.Append(std::move(dict));
   }
 
-  global_dict.SetKey("drawcalls", std::move(draw_calls));
+  global_dict.Set("drawcalls", std::move(draw_calls));
 
-  base::DictionaryValue buff_map;
+  base::Value::Dict buff_map;
   for (auto&& each : buffers_) {
-    base::DictionaryValue dict;
-    dict.SetInteger("width", each.buffer_info.width);
-    dict.SetInteger("height", each.buffer_info.height);
-    base::ListValue lst;
+    base::Value::Dict dict;
+    dict.Set("width", each.buffer_info.width);
+    dict.Set("height", each.buffer_info.height);
+    base::Value::List lst;
     for (auto& buffer : each.buffer_info.buffer) {
       lst.Append(buffer.color_r);
       lst.Append(buffer.color_g);
       lst.Append(buffer.color_b);
       lst.Append(buffer.color_a);
     }
-    dict.SetKey("buffer", std::move(lst));
-    buff_map.SetKey(base::NumberToString(each.id), std::move(dict));
+    dict.Set("buffer", std::move(lst));
+    buff_map.Set(base::NumberToString(each.id), std::move(dict));
   }
-  global_dict.SetKey("buff_map", std::move(buff_map));
+  global_dict.Set("buff_map", std::move(buff_map));
 
-  base::ListValue logs;
+  base::Value::List logs;
   for (size_t i = 0; i < max_logs_index; ++i) {
-    base::DictionaryValue dict = logs_[i].GetDictionaryValue();
-    dict.SetString("value", std::move(logs_[i].value));
+    base::Value::Dict dict = logs_[i].GetDictionaryValue();
+    dict.Set("value", std::move(logs_[i].value));
     logs.Append(std::move(dict));
     registered_threads.insert(logs_[i].thread_id);
   }
-  global_dict.SetKey("logs", std::move(logs));
+  global_dict.Set("logs", std::move(logs));
 
-  base::ListValue texts;
+  base::Value::List texts;
   for (size_t i = 0; i < max_text_calls_index; ++i) {
-    base::DictionaryValue dict = draw_text_calls_[i].GetDictionaryValue();
+    base::Value::Dict dict = draw_text_calls_[i].GetDictionaryValue();
     {
-      base::ListValue list_xy;
+      base::Value::List list_xy;
       list_xy.Append(static_cast<double>(draw_text_calls_[i].pos.x()));
       list_xy.Append(static_cast<double>(draw_text_calls_[i].pos.y()));
-      dict.SetKey("pos", std::move(list_xy));
+      dict.Set("pos", std::move(list_xy));
     }
-    dict.SetString("text", draw_text_calls_[i].text);
+    dict.Set("text", draw_text_calls_[i].text);
     texts.Append(std::move(dict));
     registered_threads.insert(draw_text_calls_[i].thread_id);
   }
-  global_dict.SetKey("text", std::move(texts));
+  global_dict.Set("text", std::move(texts));
 
   // Gather thread name:id for all active threads this frame.
-  base::ListValue new_threads;
+  base::Value::List new_threads;
   for (auto&& thread_id : registered_threads) {
     std::string cur_thread_name =
         base::ThreadIdNameManager::GetInstance()->GetName(thread_id);
-    base::DictionaryValue threads_dict;
-    threads_dict.SetInteger("thread_id", thread_id);
-    threads_dict.SetString("thread_name", cur_thread_name);
+    base::Value::Dict threads_dict;
+    threads_dict.Set("thread_id", thread_id);
+    threads_dict.Set("thread_name", cur_thread_name);
     new_threads.Append(std::move(threads_dict));
     registered_threads.insert(thread_id);
   }
 
-  global_dict.SetKey("threads", std::move(new_threads));
+  global_dict.Set("threads", std::move(new_threads));
 
   // Reset index counters for each buffer.
   buffers_.clear();
@@ -234,7 +232,7 @@
   draw_text_calls_tail_idx_ = 0;
   logs_tail_idx_ = 0;
 
-  return std::move(global_dict);
+  return base::Value(std::move(global_dict));
 }
 
 void VizDebugger::UpdateFilters() {
@@ -486,9 +484,9 @@
   new_filters_.clear();
   apply_new_filters_next_frame_ = true;
 
-  base::DictionaryValue dict;
-  dict.SetString("connection", "ok");
-  debug_output_->LogFrame(std::move(dict));
+  base::Value::Dict dict;
+  dict.Set("connection", "ok");
+  debug_output_->LogFrame(base::Value(std::move(dict)));
 
   enabled_.store(true);
   read_write_lock_.WriteUnLock();
diff --git a/components/viz/service/debugger/viz_debugger.h b/components/viz/service/debugger/viz_debugger.h
index cf9832c..df506795 100644
--- a/components/viz/service/debugger/viz_debugger.h
+++ b/components/viz/service/debugger/viz_debugger.h
@@ -161,7 +161,7 @@
           source_index(source),
           thread_id(thread),
           option(draw_option) {}
-    base::DictionaryValue GetDictionaryValue() const;
+    base::Value::Dict GetDictionaryValue() const;
     int draw_index;
     int source_index;
     int thread_id;
diff --git a/components/web_package/signed_web_bundles/signed_web_bundle_id.h b/components/web_package/signed_web_bundles/signed_web_bundle_id.h
index 86a3dac7..3fc722d18 100644
--- a/components/web_package/signed_web_bundles/signed_web_bundle_id.h
+++ b/components/web_package/signed_web_bundles/signed_web_bundle_id.h
@@ -84,8 +84,8 @@
                     std::array<uint8_t, kDecodedIdLength> decoded_id);
 
   Type type_;
-  const std::string encoded_id_;
-  const std::array<uint8_t, kDecodedIdLength> decoded_id_;
+  std::string encoded_id_;
+  std::array<uint8_t, kDecodedIdLength> decoded_id_;
 
   static base::RepeatingCallback<void(void*, size_t)>
   GetDefaultRandomGenerator();
diff --git a/content/app/android/library_loader_hooks.cc b/content/app/android/library_loader_hooks.cc
index d208eb7f..cf2b4ff 100644
--- a/content/app/android/library_loader_hooks.cc
+++ b/content/app/android/library_loader_hooks.cc
@@ -6,6 +6,7 @@
 
 #include "base/android/reached_code_profiler.h"
 #include "base/logging.h"
+#include "base/process/current_process.h"
 #include "base/trace_event/trace_event.h"
 #include "content/common/content_constants_internal.h"
 #include "content/common/url_schemes.h"
@@ -29,7 +30,8 @@
           base::android::LibraryProcessType::PROCESS_BROWSER ||
       library_process_type ==
           base::android::LibraryProcessType::PROCESS_WEBVIEW) {
-    base::trace_event::TraceLog::GetInstance()->set_process_name("Browser");
+    base::CurrentProcess::GetInstance().SetProcessType(
+        base::CurrentProcessType::PROCESS_BROWSER);
   }
   base::trace_event::TraceLog::GetInstance()->SetProcessSortIndex(
       kTraceEventBrowserProcessSortIndex);
diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
index 6f50af74..33ec861 100644
--- a/content/app/content_main_runner_impl.cc
+++ b/content/app/content_main_runner_impl.cc
@@ -825,7 +825,9 @@
   // ensure the cache is populated.
   // Making the blocking call now also avoids the potential for blocking later
   // in when it might be user-visible.
-  base::FetchAndCacheSystemInfo();
+  if (!base::FetchAndCacheSystemInfo()) {
+    return TerminateForFatalInitializationError();
+  }
 #endif
 
   if (!GetContentClient())
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 08a89fab..4504428 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -467,9 +467,6 @@
     "attribution_reporting/combinatorics.h",
     "attribution_reporting/common_source_info.cc",
     "attribution_reporting/common_source_info.h",
-    "attribution_reporting/os_level_attribution_manager.h",
-    "attribution_reporting/os_level_attribution_manager_impl.cc",
-    "attribution_reporting/os_level_attribution_manager_impl.h",
     "attribution_reporting/rate_limit_result.h",
     "attribution_reporting/rate_limit_table.cc",
     "attribution_reporting/rate_limit_table.h",
diff --git a/content/browser/accessibility/dump_accessibility_browsertest_base.cc b/content/browser/accessibility/dump_accessibility_browsertest_base.cc
index 14058fa5..71f151d 100644
--- a/content/browser/accessibility/dump_accessibility_browsertest_base.cc
+++ b/content/browser/accessibility/dump_accessibility_browsertest_base.cc
@@ -53,6 +53,10 @@
     DCHECK(!data.HasStringAttribute(ax::mojom::StringAttribute::kChildTreeId));
     return false;  // A disabled child tree owner won't have a child tree.
   }
+
+  if (node.IsInvisibleOrIgnored())
+    return false;
+
   // If has a child tree owner role or a child tree id, then expect some
   // child tree content. In some cases IsChildTreeOwner(role) will be false,
   // if an ARIA role was used, e.g. <iframe role="region">.
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 978821f..9c7eb729 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -97,9 +97,6 @@
   // Enable accessibility object model, used in other tests.
   base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
       switches::kEnableBlinkFeatures, "AccessibilityObjectModel");
-  // Enable display locking, used in some tests.
-  base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-      switches::kEnableBlinkFeatures, "CSSContentVisibilityHiddenMatchable");
   // Enable HTMLSelectMenuElement, used by AccessibilitySelectMenu and
   // AccessibilitySelectMenuOpen.
   base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
diff --git a/content/browser/attribution_reporting/attribution_manager.h b/content/browser/attribution_reporting/attribution_manager.h
index b137aa1..ffce3c87 100644
--- a/content/browser/attribution_reporting/attribution_manager.h
+++ b/content/browser/attribution_reporting/attribution_manager.h
@@ -28,7 +28,6 @@
 class AttributionObserver;
 class AttributionTrigger;
 class BrowsingDataFilterBuilder;
-class OsLevelAttributionManager;
 class StorableSource;
 class StoredSource;
 class WebContents;
@@ -50,10 +49,6 @@
   // Gets manager responsible for tracking pending data hosts targeting `this`.
   virtual AttributionDataHostManager* GetDataHostManager() = 0;
 
-  // Gets the os-level manager responsible for handling OS sources and
-  // triggers targeting `this`. May return `nullptr`.
-  virtual OsLevelAttributionManager* GetOsLevelManager() = 0;
-
   // Persists the given |source| to storage. Called when a navigation
   // originating from a source tag finishes.
   virtual void HandleSource(StorableSource source) = 0;
diff --git a/content/browser/attribution_reporting/attribution_manager_impl.cc b/content/browser/attribution_reporting/attribution_manager_impl.cc
index e800a4b3..6bee3bf8 100644
--- a/content/browser/attribution_reporting/attribution_manager_impl.cc
+++ b/content/browser/attribution_reporting/attribution_manager_impl.cc
@@ -13,7 +13,6 @@
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
 #include "base/command_line.h"
-#include "base/feature_list.h"
 #include "base/functional/overloaded.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ref.h"
@@ -49,7 +48,6 @@
 #include "content/browser/attribution_reporting/attribution_storage_sql.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
 #include "content/browser/attribution_reporting/attribution_utils.h"
-#include "content/browser/attribution_reporting/os_level_attribution_manager_impl.h"
 #include "content/browser/attribution_reporting/send_result.h"
 #include "content/browser/attribution_reporting/storable_source.h"
 #include "content/browser/attribution_reporting/stored_source.h"
@@ -64,7 +62,6 @@
 #include "content/public/common/content_switches.h"
 #include "storage/browser/quota/special_storage_policy.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
-#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/mojom/conversions/attribution_reporting.mojom.h"
 #include "url/gurl.h"
@@ -413,8 +410,7 @@
       storage_partition, user_data_directory, max_pending_events,
       std::move(special_storage_policy), std::move(storage_delegate),
       std::move(cookie_checker), std::move(report_sender),
-      /*data_host_manager=*/nullptr,
-      /*os_level_manager=*/nullptr));
+      /*data_host_manager=*/nullptr));
 }
 
 // static
@@ -441,11 +437,7 @@
           std::make_unique<AttributionCookieCheckerImpl>(storage_partition),
           std::make_unique<AttributionReportNetworkSender>(
               storage_partition->GetURLLoaderFactoryForBrowserProcess()),
-          std::make_unique<AttributionDataHostManagerImpl>(this),
-          base::FeatureList::IsEnabled(
-              blink::features::kAttributionReportingCrossAppWeb)
-              ? std::make_unique<OsLevelAttributionManagerImpl>()
-              : nullptr) {}
+          std::make_unique<AttributionDataHostManagerImpl>(this)) {}
 
 AttributionManagerImpl::AttributionManagerImpl(
     StoragePartitionImpl* storage_partition,
@@ -455,8 +447,7 @@
     std::unique_ptr<AttributionStorageDelegate> storage_delegate,
     std::unique_ptr<AttributionCookieChecker> cookie_checker,
     std::unique_ptr<AttributionReportSender> report_sender,
-    std::unique_ptr<AttributionDataHostManager> data_host_manager,
-    std::unique_ptr<OsLevelAttributionManager> os_level_manager)
+    std::unique_ptr<AttributionDataHostManager> data_host_manager)
     : storage_partition_(storage_partition),
       max_pending_events_(max_pending_events),
       attribution_storage_(base::SequenceBound<AttributionStorageSql>(
@@ -468,7 +459,6 @@
                               base::Unretained(this)),
           attribution_storage_)),
       data_host_manager_(std::move(data_host_manager)),
-      os_level_manager_(std::move(os_level_manager)),
       special_storage_policy_(std::move(special_storage_policy)),
       cookie_checker_(std::move(cookie_checker)),
       report_sender_(std::move(report_sender)) {
@@ -508,10 +498,6 @@
   return data_host_manager_.get();
 }
 
-OsLevelAttributionManager* AttributionManagerImpl::GetOsLevelManager() {
-  return os_level_manager_.get();
-}
-
 void AttributionManagerImpl::HandleSource(StorableSource source) {
   MaybeEnqueueEvent(std::move(source));
 }
diff --git a/content/browser/attribution_reporting/attribution_manager_impl.h b/content/browser/attribution_reporting/attribution_manager_impl.h
index 29b71a9c..b03b93cf 100644
--- a/content/browser/attribution_reporting/attribution_manager_impl.h
+++ b/content/browser/attribution_reporting/attribution_manager_impl.h
@@ -53,7 +53,6 @@
 class AttributionStorage;
 class AttributionStorageDelegate;
 class CreateReportResult;
-class OsLevelAttributionManager;
 class StoragePartitionImpl;
 class StoredSource;
 
@@ -138,7 +137,6 @@
   void AddObserver(AttributionObserver* observer) override;
   void RemoveObserver(AttributionObserver* observer) override;
   AttributionDataHostManager* GetDataHostManager() override;
-  OsLevelAttributionManager* GetOsLevelManager() override;
   void HandleSource(StorableSource source) override;
   void HandleTrigger(AttributionTrigger trigger) override;
   void GetActiveSourcesForWebUI(
@@ -182,8 +180,7 @@
       std::unique_ptr<AttributionStorageDelegate> storage_delegate,
       std::unique_ptr<AttributionCookieChecker> cookie_checker,
       std::unique_ptr<AttributionReportSender> report_sender,
-      std::unique_ptr<AttributionDataHostManager> data_host_manager,
-      std::unique_ptr<OsLevelAttributionManager> os_level_manager);
+      std::unique_ptr<AttributionDataHostManager> data_host_manager);
 
   void MaybeEnqueueEvent(SourceOrTrigger event);
   void ProcessEvents();
@@ -269,8 +266,6 @@
 
   std::unique_ptr<AttributionDataHostManager> data_host_manager_;
 
-  std::unique_ptr<OsLevelAttributionManager> os_level_manager_;
-
   // Storage policy for the browser context |this| is in. May be nullptr.
   scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy_;
 
diff --git a/content/browser/attribution_reporting/attribution_storage_sql.cc b/content/browser/attribution_reporting/attribution_storage_sql.cc
index a47885d2..9f7fc2e 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql.cc
@@ -64,11 +64,11 @@
 namespace content {
 
 // Version number of the database.
-const int AttributionStorageSql::kCurrentVersionNumber = 37;
+const int AttributionStorageSql::kCurrentVersionNumber = 38;
 
 // Earliest version which can use a |kCurrentVersionNumber| database
 // without failing.
-const int AttributionStorageSql::kCompatibleVersionNumber = 37;
+const int AttributionStorageSql::kCompatibleVersionNumber = 38;
 
 // Latest version of the database that cannot be upgraded to
 // |kCurrentVersionNumber| without razing the database.
@@ -126,6 +126,8 @@
   prefix "reporting_origin," \
   prefix "source_time," \
   prefix "expiry_time," \
+  prefix "event_report_window_time," \
+  prefix "aggregatable_report_window_time," \
   prefix "source_type," \
   prefix "attribution_logic," \
   prefix "priority," \
@@ -372,7 +374,7 @@
   int num_conversions;
 };
 
-constexpr int kSourceColumnCount = 17;
+constexpr int kSourceColumnCount = 19;
 
 // Helper to deserialize source rows. See `GetActiveSources()` for the
 // expected ordering of columns used for the input to this function.
@@ -392,6 +394,8 @@
       SuitableOrigin::Deserialize(statement.ColumnString(col++));
   base::Time source_time = statement.ColumnTime(col++);
   base::Time expiry_time = statement.ColumnTime(col++);
+  base::Time event_report_window_time = statement.ColumnTime(col++);
+  base::Time aggregatable_report_window_time = statement.ColumnTime(col++);
   absl::optional<AttributionSourceType> source_type =
       DeserializeSourceType(statement.ColumnInt(col++));
   absl::optional<StoredSource::AttributionLogic> attribution_logic =
@@ -403,6 +407,8 @@
   absl::optional<attribution_reporting::AggregationKeys> aggregation_keys =
       DeserializeAggregationKeys(statement.ColumnString(col++));
 
+  // TODO: Enforce remaining expiry/report_window/time invariants from
+  // CommonSource.
   if (!source_origin || !destination_origin || !reporting_origin ||
       !source_type.has_value() || !attribution_logic.has_value() ||
       num_conversions < 0 || aggregatable_budget_consumed < 0 ||
@@ -422,18 +428,17 @@
   if (!active_state.has_value())
     return absl::nullopt;
 
-  // TODO(crbug.com/1366433): Change constructor call to include separated
-  // event_report_window and aggregatable_report_window.
   return StoredSourceData{
       .source = StoredSource(
-          CommonSourceInfo(source_event_id, std::move(*source_origin),
-                           std::move(*destination_origin),
-                           std::move(*reporting_origin), source_time,
-                           /*expiry_time=*/expiry_time,
-                           /*event_report_window_time=*/expiry_time,
-                           /*aggregatable_report_window_time=*/expiry_time,
-                           *source_type, priority, std::move(*filter_data),
-                           debug_key, std::move(*aggregation_keys)),
+          CommonSourceInfo(
+              source_event_id, std::move(*source_origin),
+              std::move(*destination_origin), std::move(*reporting_origin),
+              source_time,
+              /*expiry_time=*/expiry_time,
+              /*event_report_window_time=*/event_report_window_time,
+              /*aggregatable_report_window_time=*/
+              aggregatable_report_window_time, *source_type, priority,
+              std::move(*filter_data), debug_key, std::move(*aggregation_keys)),
           *attribution_logic, *active_state, source_id,
           aggregatable_budget_consumed),
       .num_conversions = num_conversions};
@@ -639,12 +644,12 @@
   static constexpr char kInsertImpressionSql[] =
       "INSERT INTO sources"
       "(source_event_id,source_origin,destination_origin,"
-      "destination_site,"
-      "reporting_origin,source_time,expiry_time,source_type,"
-      "attribution_logic,priority,source_site,"
+      "destination_site,reporting_origin,source_time,"
+      "expiry_time,event_report_window_time,aggregatable_report_window_time,"
+      "source_type,attribution_logic,priority,source_site,"
       "num_attributions,event_level_active,aggregatable_active,debug_key,"
       "aggregatable_budget_consumed,aggregatable_source,filter_data)"
-      "VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,?,?)";
+      "VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,?,?)";
   sql::Statement statement(
       db_->GetCachedStatement(SQL_FROM_HERE, kInsertImpressionSql));
   statement.BindInt64(0, SerializeUint64(delegate_->SanitizeSourceEventId(
@@ -655,23 +660,25 @@
   statement.BindString(4, common_info.reporting_origin().Serialize());
   statement.BindTime(5, common_info.source_time());
   statement.BindTime(6, common_info.expiry_time());
-  statement.BindInt(7, SerializeSourceType(common_info.source_type()));
-  statement.BindInt(8, SerializeAttributionLogic(attribution_logic));
-  statement.BindInt64(9, common_info.priority());
-  statement.BindString(10, common_info.SourceSite().Serialize());
-  statement.BindInt(11, num_conversions);
-  statement.BindBool(12, event_level_active);
-  statement.BindBool(13, aggregatable_active);
+  statement.BindTime(7, common_info.event_report_window_time());
+  statement.BindTime(8, common_info.aggregatable_report_window_time());
+  statement.BindInt(9, SerializeSourceType(common_info.source_type()));
+  statement.BindInt(10, SerializeAttributionLogic(attribution_logic));
+  statement.BindInt64(11, common_info.priority());
+  statement.BindString(12, common_info.SourceSite().Serialize());
+  statement.BindInt(13, num_conversions);
+  statement.BindBool(14, event_level_active);
+  statement.BindBool(15, aggregatable_active);
 
-  BindUint64OrNull(statement, 14, common_info.debug_key());
+  BindUint64OrNull(statement, 16, common_info.debug_key());
 
   absl::optional<StoredSource::ActiveState> active_state =
       GetSourceActiveState(event_level_active, aggregatable_active);
   DCHECK(active_state.has_value());
 
-  statement.BindBlob(15,
+  statement.BindBlob(17,
                      SerializeAggregationKeys(common_info.aggregation_keys()));
-  statement.BindBlob(16, SerializeFilterData(common_info.filter_data()));
+  statement.BindBlob(18, SerializeFilterData(common_info.filter_data()));
 
   if (!statement.Run())
     return StoreSourceResult(StorableSource::Result::kInternalError);
@@ -2205,6 +2212,8 @@
       "reporting_origin TEXT NOT NULL,"
       "source_time INTEGER NOT NULL,"
       "expiry_time INTEGER NOT NULL,"
+      "event_report_window_time INTEGER NOT NULL,"
+      "aggregatable_report_window_time INTEGER NOT NULL,"
       "num_attributions INTEGER NOT NULL,"
       "event_level_active INTEGER NOT NULL,"
       "aggregatable_active INTEGER NOT NULL,"
diff --git a/content/browser/attribution_reporting/attribution_storage_sql_migrations.cc b/content/browser/attribution_reporting/attribution_storage_sql_migrations.cc
index 344655d3..f2b42bb 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql_migrations.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql_migrations.cc
@@ -267,6 +267,97 @@
   return transaction.Commit();
 }
 
+bool MigrateToVersion38(sql::Database* db, sql::MetaTable* meta_table) {
+  // Wrap each migration in its own transaction. See comment in
+  // `MigrateToVersion34`.
+  sql::Transaction transaction(db);
+  if (!transaction.Begin())
+    return false;
+
+  static constexpr char kNewSourceTableSql[] =
+      "CREATE TABLE new_sources("
+      "source_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
+      "source_event_id INTEGER NOT NULL,"
+      "source_origin TEXT NOT NULL,"
+      "destination_origin TEXT NOT NULL,"
+      "reporting_origin TEXT NOT NULL,"
+      "source_time INTEGER NOT NULL,"
+      "expiry_time INTEGER NOT NULL,"
+      "event_report_window_time INTEGER NOT NULL,"
+      "aggregatable_report_window_time INTEGER NOT NULL,"
+      "num_attributions INTEGER NOT NULL,"
+      "event_level_active INTEGER NOT NULL,"
+      "aggregatable_active INTEGER NOT NULL,"
+      "destination_site TEXT NOT NULL,"
+      "source_type INTEGER NOT NULL,"
+      "attribution_logic INTEGER NOT NULL,"
+      "priority INTEGER NOT NULL,"
+      "source_site TEXT NOT NULL,"
+      "debug_key INTEGER,"
+      "aggregatable_budget_consumed INTEGER NOT NULL,"
+      "aggregatable_source BLOB NOT NULL,"
+      "filter_data BLOB NOT NULL)";
+  if (!db->Execute(kNewSourceTableSql))
+    return false;
+
+  // Transfer the existing rows to the new table, inserting
+  // `expiry_time` as default values for the event_report_window_time
+  // and aggregatable_report_window_time columns.
+  static constexpr char kPopulateNewSourceTableSql[] =
+      "INSERT INTO new_sources SELECT "
+      "source_id,source_event_id,source_origin,destination_origin,"
+      "reporting_origin,source_time,expiry_time,expiry_time,expiry_time,"
+      "num_attributions,event_level_active,aggregatable_active,"
+      "destination_site,source_type,attribution_logic,priority,"
+      "source_site,debug_key,aggregatable_budget_consumed,"
+      "aggregatable_source,filter_data "
+      "FROM sources";
+  if (!db->Execute(kPopulateNewSourceTableSql))
+    return false;
+
+  static constexpr char kDropOldSourceTableSql[] = "DROP TABLE sources";
+  if (!db->Execute(kDropOldSourceTableSql))
+    return false;
+
+  static constexpr char kRenameSourceTableSql[] =
+      "ALTER TABLE new_sources RENAME TO sources";
+  if (!db->Execute(kRenameSourceTableSql))
+    return false;
+
+  // Create the sources table indices on the new table.
+  static constexpr char kConversionDestinationIndexSql[] =
+      "CREATE INDEX sources_by_active_destination_site_reporting_origin "
+      "ON sources"
+      "(event_level_active,aggregatable_active,destination_site,"
+      "reporting_origin)";
+  if (!db->Execute(kConversionDestinationIndexSql))
+    return false;
+
+  static constexpr char kImpressionExpiryIndexSql[] =
+      "CREATE INDEX sources_by_expiry_time "
+      "ON sources(expiry_time)";
+  if (!db->Execute(kImpressionExpiryIndexSql))
+    return false;
+
+  static constexpr char kImpressionOriginIndexSql[] =
+      "CREATE INDEX active_sources_by_source_origin "
+      "ON sources(source_origin)"
+      "WHERE event_level_active=1 OR aggregatable_active=1";
+  if (!db->Execute(kImpressionOriginIndexSql))
+    return false;
+
+  static constexpr char kImpressionSiteReportingOriginIndexSql[] =
+      "CREATE INDEX active_unattributed_sources_by_site_reporting_origin "
+      "ON sources(source_site,reporting_origin)"
+      "WHERE event_level_active=1 AND num_attributions=0 AND "
+      "aggregatable_active=1 AND aggregatable_budget_consumed=0";
+  if (!db->Execute(kImpressionSiteReportingOriginIndexSql))
+    return false;
+
+  meta_table->SetVersionNumber(38);
+  return transaction.Commit();
+}
+
 }  // namespace
 
 bool UpgradeAttributionStorageSqlSchema(sql::Database* db,
@@ -294,6 +385,10 @@
     if (!MigrateToVersion37(db, meta_table))
       return false;
   }
+  if (meta_table->GetVersionNumber() == 37) {
+    if (!MigrateToVersion38(db, meta_table))
+      return false;
+  }
   // Add similar if () blocks for new versions here.
 
   if (base::ThreadTicks::IsSupported()) {
diff --git a/content/browser/attribution_reporting/attribution_storage_sql_migrations_unittest.cc b/content/browser/attribution_reporting/attribution_storage_sql_migrations_unittest.cc
index a985baa..669422fc 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql_migrations_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql_migrations_unittest.cc
@@ -374,4 +374,54 @@
   histograms.ExpectTotalCount("Conversions.Storage.MigrationTime", 1);
 }
 
+TEST_F(AttributionStorageSqlMigrationsTest, MigrateVersion37ToCurrent) {
+  base::HistogramTester histograms;
+  LoadDatabase(GetVersionFilePath(37), DbPath());
+
+  // Verify pre-conditions.
+  {
+    sql::Database db;
+    ASSERT_TRUE(db.Open(DbPath()));
+    ASSERT_FALSE(db.DoesColumnExist("sources", "event_report_window"));
+    ASSERT_FALSE(db.DoesColumnExist("sources", "aggregatable_report_window"));
+
+    sql::Statement s(db.GetUniqueStatement("SELECT * FROM sources"));
+
+    ASSERT_TRUE(s.Step());
+    ASSERT_EQ(8, s.ColumnInt(6));  // expiry_time
+    ASSERT_EQ(9, s.ColumnInt(7));  // num_attributions
+    ASSERT_FALSE(s.Step());
+  }
+
+  MigrateDatabase();
+
+  // Verify schema is current.
+  {
+    sql::Database db;
+    ASSERT_TRUE(db.Open(DbPath()));
+
+    // Check version.
+    EXPECT_EQ(AttributionStorageSql::kCurrentVersionNumber,
+              VersionFromDatabase(&db));
+
+    // Compare without quotes as sometimes migrations cause table names to be
+    // string literals.
+    EXPECT_EQ(RemoveQuotes(GetCurrentSchema()), RemoveQuotes(db.GetSchema()));
+
+    // Verify that data is preserved across the migration.
+    sql::Statement s(db.GetUniqueStatement("SELECT * FROM sources"));
+
+    ASSERT_TRUE(s.Step());
+    ASSERT_EQ(8, s.ColumnInt(6));  // expiry_time
+    ASSERT_EQ(8, s.ColumnInt(7));  // event_report_window
+    ASSERT_EQ(8, s.ColumnInt(8));  // aggregatable_report_window
+    ASSERT_EQ(9, s.ColumnInt(9));  // num_attributions
+    ASSERT_FALSE(s.Step());
+  }
+
+  // DB creation histograms should be recorded.
+  histograms.ExpectTotalCount("Conversions.Storage.CreationTime", 0);
+  histograms.ExpectTotalCount("Conversions.Storage.MigrationTime", 1);
+}
+
 }  // namespace content
diff --git a/content/browser/attribution_reporting/attribution_storage_unittest.cc b/content/browser/attribution_reporting/attribution_storage_unittest.cc
index 4b552fce..17bc505 100644
--- a/content/browser/attribution_reporting/attribution_storage_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_storage_unittest.cc
@@ -231,6 +231,21 @@
       ElementsAre(CommonSourceInfoIs(SourceBuilder().BuildCommonInfo())));
 }
 
+TEST_F(AttributionStorageTest, UniqueReportWindowsStored_ValuesIdentical) {
+  storage()->StoreSource(SourceBuilder()
+                             .SetExpiry(base::Days(30))
+                             .SetEventReportWindow(base::Days(15))
+                             .SetAggregatableReportWindow(base::Days(5))
+                             .Build());
+  EXPECT_THAT(storage()->GetActiveSources(),
+              ElementsAre(CommonSourceInfoIs(
+                  SourceBuilder()
+                      .SetExpiry(base::Days(30))
+                      .SetEventReportWindow(base::Days(15))
+                      .SetAggregatableReportWindow(base::Days(5))
+                      .BuildCommonInfo())));
+}
+
 TEST_F(AttributionStorageTest,
        GetWithNoMatchingImpressions_NoImpressionsReturned) {
   EXPECT_THAT(
diff --git a/content/browser/attribution_reporting/attribution_test_utils.cc b/content/browser/attribution_reporting/attribution_test_utils.cc
index c248438..f3c8309 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.cc
+++ b/content/browser/attribution_reporting/attribution_test_utils.cc
@@ -367,10 +367,6 @@
   return data_host_manager_.get();
 }
 
-OsLevelAttributionManager* MockAttributionManager::GetOsLevelManager() {
-  return nullptr;
-}
-
 void MockAttributionManager::NotifySourcesChanged() {
   for (auto& observer : observers_)
     observer.OnSourcesChanged();
diff --git a/content/browser/attribution_reporting/attribution_test_utils.h b/content/browser/attribution_reporting/attribution_test_utils.h
index f0a680f..522e2303 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.h
+++ b/content/browser/attribution_reporting/attribution_test_utils.h
@@ -335,7 +335,6 @@
   void AddObserver(AttributionObserver* observer) override;
   void RemoveObserver(AttributionObserver* observer) override;
   AttributionDataHostManager* GetDataHostManager() override;
-  OsLevelAttributionManager* GetOsLevelManager() override;
 
   void NotifySourcesChanged();
   void NotifyReportsChanged(AttributionReport::Type report_type);
diff --git a/content/browser/attribution_reporting/os_level_attribution_manager.h b/content/browser/attribution_reporting/os_level_attribution_manager.h
deleted file mode 100644
index 90f0beb..0000000
--- a/content/browser/attribution_reporting/os_level_attribution_manager.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_BROWSER_ATTRIBUTION_REPORTING_OS_LEVEL_ATTRIBUTION_MANAGER_H_
-#define CONTENT_BROWSER_ATTRIBUTION_REPORTING_OS_LEVEL_ATTRIBUTION_MANAGER_H_
-
-namespace attribution_reporting {
-class OsSource;
-class OsTrigger;
-}  // namespace attribution_reporting
-
-namespace content {
-
-// Interface between the browser's Attribution Reporting implementation and the
-// operating system's.
-class OsLevelAttributionManager {
- public:
-  virtual ~OsLevelAttributionManager() = default;
-
-  // Registers the given source with the OS.
-  virtual void RegisterSource(attribution_reporting::OsSource) = 0;
-
-  // Registers the given trigger with the OS.
-  virtual void RegisterTrigger(attribution_reporting::OsTrigger) = 0;
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_ATTRIBUTION_REPORTING_OS_LEVEL_ATTRIBUTION_MANAGER_H_
diff --git a/content/browser/attribution_reporting/os_level_attribution_manager_impl.cc b/content/browser/attribution_reporting/os_level_attribution_manager_impl.cc
deleted file mode 100644
index a482239..0000000
--- a/content/browser/attribution_reporting/os_level_attribution_manager_impl.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/attribution_reporting/os_level_attribution_manager_impl.h"
-
-#include "components/attribution_reporting/os_registration.h"
-
-namespace content {
-
-OsLevelAttributionManagerImpl::OsLevelAttributionManagerImpl() = default;
-
-OsLevelAttributionManagerImpl::~OsLevelAttributionManagerImpl() = default;
-
-void OsLevelAttributionManagerImpl::RegisterSource(
-    attribution_reporting::OsSource) {
-  // TODO(https://crbug.com/1374035): Route this source to an appropriate API
-  // provided by the underlying platform.
-}
-
-void OsLevelAttributionManagerImpl::RegisterTrigger(
-    attribution_reporting::OsTrigger) {
-  // TODO(https://crbug.com/1374035): Route this trigger to an appropriate API
-  // provided by the underlying platform.
-}
-
-}  // namespace content
diff --git a/content/browser/attribution_reporting/os_level_attribution_manager_impl.h b/content/browser/attribution_reporting/os_level_attribution_manager_impl.h
deleted file mode 100644
index 63717cc7..0000000
--- a/content/browser/attribution_reporting/os_level_attribution_manager_impl.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_BROWSER_ATTRIBUTION_REPORTING_OS_LEVEL_ATTRIBUTION_MANAGER_IMPL_H_
-#define CONTENT_BROWSER_ATTRIBUTION_REPORTING_OS_LEVEL_ATTRIBUTION_MANAGER_IMPL_H_
-
-#include "content/browser/attribution_reporting/os_level_attribution_manager.h"
-
-namespace content {
-
-class OsLevelAttributionManagerImpl : public OsLevelAttributionManager {
- public:
-  OsLevelAttributionManagerImpl();
-
-  ~OsLevelAttributionManagerImpl() override;
-
-  OsLevelAttributionManagerImpl(const OsLevelAttributionManagerImpl&) = delete;
-  OsLevelAttributionManagerImpl& operator=(
-      const OsLevelAttributionManagerImpl&) = delete;
-
-  OsLevelAttributionManagerImpl(OsLevelAttributionManagerImpl&&) = delete;
-  OsLevelAttributionManagerImpl& operator=(OsLevelAttributionManagerImpl&&) =
-      delete;
-
- private:
-  // OsLevelAttributionManager:
-  void RegisterSource(attribution_reporting::OsSource) override;
-  void RegisterTrigger(attribution_reporting::OsTrigger) override;
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_ATTRIBUTION_REPORTING_OS_LEVEL_ATTRIBUTION_MANAGER_IMPL_H_
diff --git a/content/browser/bad_message.h b/content/browser/bad_message.h
index 903dd14..fa60a40 100644
--- a/content/browser/bad_message.h
+++ b/content/browser/bad_message.h
@@ -316,6 +316,7 @@
   MSDH_SUPPRESS_LOCAL_AUDIO_PLAYBACK_BUT_AUDIO_NOT_REQUESTED = 289,
   MSDH_HOTWORD_ENABLED_BUT_AUDIO_NOT_REQUESTED = 290,
   MSDH_DISABLE_LOCAL_ECHO_BUT_AUDIO_NOT_REQUESTED = 291,
+  MSDH_ON_STREAM_STARTED_DISALLOWED = 292,
 
   // Please add new elements here. The naming convention is abbreviated class
   // name (e.g. RenderFrameHost becomes RFH) plus a unique description of the
diff --git a/content/browser/browser_main.cc b/content/browser/browser_main.cc
index e9e6d28..1ace108 100644
--- a/content/browser/browser_main.cc
+++ b/content/browser/browser_main.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/process/current_process.h"
 #include "base/trace_event/trace_event.h"
 #include "content/browser/browser_main_runner_impl.h"
 #include "content/common/content_constants_internal.h"
@@ -16,7 +17,8 @@
 int BrowserMain(MainFunctionParams parameters) {
   TRACE_EVENT_INSTANT0("startup", "BrowserMain", TRACE_EVENT_SCOPE_THREAD);
 
-  base::trace_event::TraceLog::GetInstance()->set_process_name("Browser");
+  base::CurrentProcess::GetInstance().SetProcessType(
+      base::CurrentProcessType::PROCESS_BROWSER);
   base::trace_event::TraceLog::GetInstance()->SetProcessSortIndex(
       kTraceEventBrowserProcessSortIndex);
 
diff --git a/content/browser/fenced_frame/fenced_frame_browsertest.cc b/content/browser/fenced_frame/fenced_frame_browsertest.cc
index 3d7001a..f15a947 100644
--- a/content/browser/fenced_frame/fenced_frame_browsertest.cc
+++ b/content/browser/fenced_frame/fenced_frame_browsertest.cc
@@ -1354,7 +1354,7 @@
                      JsReplace(kAddIframeScript, iframe_url)));
   RenderFrameHostImpl* iframe = static_cast<RenderFrameHostImpl*>(
       ChildFrameAt(primary_main_frame_host(), 1));
-  ASSERT_TRUE(iframe && iframe->GetParent() == primary_main_frame_host());
+  ASSERT_TRUE(iframe && iframe->GetParent()->IsInPrimaryMainFrame());
   EXPECT_EQ(iframe->GetProcess(), ff_rfh->GetProcess());
 }
 
diff --git a/content/browser/find_request_manager_browsertest.cc b/content/browser/find_request_manager_browsertest.cc
index 6b0f30e..880b46a 100644
--- a/content/browser/find_request_manager_browsertest.cc
+++ b/content/browser/find_request_manager_browsertest.cc
@@ -760,7 +760,7 @@
  private:
   void FrameSizeChanged(RenderFrameHost* render_frame_host,
                         const gfx::Size& frame_size) override {
-    if (render_frame_host == web_contents()->GetPrimaryMainFrame())
+    if (render_frame_host->IsInPrimaryMainFrame())
       run_loop_.Quit();
   }
 
@@ -1338,7 +1338,7 @@
   contents()->GetController().GoBack();
   EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
   // |rfh_a| should become the active frame.
-  EXPECT_EQ(rfh_a.get(), render_frame_host());
+  EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
   // The results from the page A should be 19 as the mainframe(2 results) and
   // the new subframe (17 results).
   expect_match_results(19);
@@ -1351,7 +1351,7 @@
   contents()->GetController().GoForward();
   EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
   // |rfh_b| should become the active frame.
-  EXPECT_EQ(rfh_b.get(), render_frame_host());
+  EXPECT_TRUE(rfh_b->IsInPrimaryMainFrame());
   // The results from the page B should be 5 as the mainframe(5 results) and no
   // subframe.
   expect_match_results(5);
@@ -1772,7 +1772,7 @@
   contents()->GetController().GoBack();
   EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
   // |rfh_a| should become the active frame.
-  EXPECT_EQ(rfh_a.get(), render_frame_host());
+  EXPECT_TRUE(rfh_a->IsInPrimaryMainFrame());
   // Ensure B is cached.
   EXPECT_EQ(rfh_b->GetLifecycleState(),
             content::RenderFrameHost::LifecycleState::kInBackForwardCache);
@@ -1791,7 +1791,7 @@
   contents()->GetController().GoForward();
   EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
   // |rfh_b| should become the active frame.
-  EXPECT_EQ(rfh_b.get(), render_frame_host());
+  EXPECT_TRUE(rfh_b->IsInPrimaryMainFrame());
 
   // 9) Wait for replies from the main frame and the subframes.
   delegate.WaitForFinalReply();
diff --git a/content/browser/interest_group/interest_group_k_anonymity_manager.cc b/content/browser/interest_group/interest_group_k_anonymity_manager.cc
index 29ead16..0e5bb27 100644
--- a/content/browser/interest_group/interest_group_k_anonymity_manager.cc
+++ b/content/browser/interest_group/interest_group_k_anonymity_manager.cc
@@ -101,6 +101,9 @@
     const std::string& key) {
   if (!k_anonymity_service_)
     return;
+  if (joins_in_progress.contains(key))
+    return;
+  joins_in_progress.insert(key);
   interest_group_manager_->GetLastKAnonymityReported(
       key,
       base::BindOnce(&InterestGroupKAnonymityManager::OnGotLastReportedTime,
@@ -110,14 +113,17 @@
 void InterestGroupKAnonymityManager::OnGotLastReportedTime(
     std::string key,
     absl::optional<base::Time> last_update_time) {
-  DCHECK(last_update_time);
-  if (!last_update_time)
+  if (!last_update_time) {
+    joins_in_progress.erase(key);
     return;
+  }
 
   // If it has been long enough since we last joined
   if (base::Time::Now() < last_update_time.value_or(base::Time()) +
-                              k_anonymity_service_->GetJoinInterval())
+                              k_anonymity_service_->GetJoinInterval()) {
+    joins_in_progress.erase(key);
     return;
+  }
 
   k_anonymity_service_->JoinSet(
       key, base::BindOnce(&InterestGroupKAnonymityManager::JoinSetCallback,
@@ -128,6 +134,7 @@
                                                      bool status) {
   // Update the time regardless of status until we verify the server is stable.
   interest_group_manager_->UpdateLastKAnonymityReported(key);
+  joins_in_progress.erase(key);
 }
 
 }  // namespace content
diff --git a/content/browser/interest_group/interest_group_k_anonymity_manager.h b/content/browser/interest_group/interest_group_k_anonymity_manager.h
index 5fb1b31..7bd0d33 100644
--- a/content/browser/interest_group/interest_group_k_anonymity_manager.h
+++ b/content/browser/interest_group/interest_group_k_anonymity_manager.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_K_ANONYMITY_MANAGER_H_
 #define CONTENT_BROWSER_INTEREST_GROUP_INTEREST_GROUP_K_ANONYMITY_MANAGER_H_
 
+#include "base/containers/flat_set.h"
 #include "base/memory/raw_ptr.h"
 #include "content/browser/interest_group/storage_interest_group.h"
 #include "content/common/content_export.h"
@@ -73,6 +74,13 @@
   raw_ptr<InterestGroupManagerImpl> interest_group_manager_;
 
   raw_ptr<KAnonymityServiceDelegate> k_anonymity_service_;
+
+  // We keep track of joins in progress because the joins that haven't completed
+  // are still marked as eligible but it would be incorrect to join them
+  // multiple times. We don't do this for query because the size of the request
+  // could expose membership in overlapping groups through traffic analysis.
+  base::flat_set<std::string> joins_in_progress;
+
   base::WeakPtrFactory<InterestGroupKAnonymityManager> weak_ptr_factory_;
 };
 
diff --git a/content/browser/interest_group/interest_group_k_anonymity_manager_unittest.cc b/content/browser/interest_group/interest_group_k_anonymity_manager_unittest.cc
index 0a7ce630..c187eaeb 100644
--- a/content/browser/interest_group/interest_group_k_anonymity_manager_unittest.cc
+++ b/content/browser/interest_group/interest_group_k_anonymity_manager_unittest.cc
@@ -120,11 +120,11 @@
 
   base::test::TaskEnvironment& task_environment() { return task_environment_; }
 
- private:
+ protected:
   base::ScopedTempDir temp_directory_;
   base::test::TaskEnvironment task_environment_{
       base::test::TaskEnvironment::TimeSource::MOCK_TIME};
-  std::unique_ptr<TestKAnonymityServiceDelegate> delegate_;
+  std::unique_ptr<KAnonymityServiceDelegate> delegate_;
 };
 
 TEST_F(InterestGroupKAnonymityManagerTest,
@@ -305,4 +305,75 @@
   // EXPECT_EQ(base::Time::Min(), maybe_group->name_kanon->last_updated);
 }
 
+class MockAnonymityServiceDelegate : public KAnonymityServiceDelegate {
+ public:
+  void JoinSet(std::string id,
+               base::OnceCallback<void(bool)> callback) override {
+    requested_ids_.emplace_back(std::move(id));
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(std::move(callback), true));
+  }
+
+  void QuerySets(
+      std::vector<std::string> ids,
+      base::OnceCallback<void(std::vector<bool>)> callback) override {
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(std::move(callback),
+                                  std::vector<bool>(ids.size(), true)));
+  }
+  base::TimeDelta GetJoinInterval() override { return kJoinInterval; }
+
+  base::TimeDelta GetQueryInterval() override { return kQueryInterval; }
+
+  std::vector<std::string> TakeRequestedIDs() {
+    std::vector<std::string> retval;
+    std::swap(retval, requested_ids_);
+    return retval;
+  }
+
+ private:
+  std::vector<std::string> requested_ids_;
+};
+
+class InterestGroupKAnonymityManagerTestWithMock
+    : public InterestGroupKAnonymityManagerTest {
+ public:
+  std::unique_ptr<InterestGroupManagerImpl> CreateManager(
+      bool has_error = false) {
+    delegate_ = std::make_unique<MockAnonymityServiceDelegate>();
+    return std::make_unique<InterestGroupManagerImpl>(
+        temp_directory_.GetPath(), false,
+        InterestGroupManagerImpl::ProcessMode::kDedicated, nullptr,
+        delegate_.get());
+  }
+
+  MockAnonymityServiceDelegate* delegate() {
+    return static_cast<MockAnonymityServiceDelegate*>(delegate_.get());
+  }
+};
+
+TEST_F(InterestGroupKAnonymityManagerTestWithMock,
+       JoinSetShouldNotRequestDuplicates) {
+  auto manager = CreateManager();
+  const GURL top_frame = GURL("https://www.example.com/foo");
+  const url::Origin owner = url::Origin::Create(top_frame);
+  const GURL ad1 = GURL(kAdURL);
+
+  // Join one group twice, and an overlapping group once.
+  manager->JoinInterestGroup(MakeInterestGroup(owner, "foo"), top_frame);
+  manager->JoinInterestGroup(MakeInterestGroup(owner, "foo"), top_frame);
+  manager->JoinInterestGroup(MakeInterestGroup(owner, "bar"), top_frame);
+
+  manager->RegisterAdAsWon(ad1);
+  manager->RegisterAdAsWon(ad1);
+
+  // k-anonymity update happens here.
+  task_environment().FastForwardBy(base::Minutes(1));
+
+  // Should have no duplicates.
+  std::vector<std::string> joined_ids = delegate()->TakeRequestedIDs();
+  base::flat_set<std::string> id_set(joined_ids);
+  EXPECT_EQ(joined_ids.size(), id_set.size());
+}
+
 }  // namespace content
diff --git a/content/browser/media/session/media_session_service_impl_browsertest.cc b/content/browser/media/session/media_session_service_impl_browsertest.cc
index a2c5003e..be14c8c5 100644
--- a/content/browser/media/session/media_session_service_impl_browsertest.cc
+++ b/content/browser/media/session/media_session_service_impl_browsertest.cc
@@ -8,7 +8,6 @@
 
 #include "base/command_line.h"
 #include "base/memory/raw_ptr.h"
-#include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "content/browser/media/session/media_session_impl.h"
 #include "content/browser/media/session/media_session_player_observer.h"
@@ -20,7 +19,6 @@
 #include "content/public/test/content_browser_test_utils.h"
 #include "content/shell/browser/shell.h"
 #include "media/base/media_content_type.h"
-#include "media/base/media_switches.h"
 #include "services/media_session/public/cpp/test/mock_media_session.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -170,6 +168,25 @@
     observer.WaitForExpectedActions(expected_actions);
   }
 
+  void ExecuteScriptToSetUpWebRTCMediaSessionSync() {
+    ASSERT_TRUE(ExecJs(shell(), kSetUpWebRTCMediaSessionScript));
+    media_session::test::MockMediaSessionMojoObserver observer(*GetSession());
+
+    std::set<media_session::mojom::MediaSessionAction> expected_actions;
+    expected_actions.insert(media_session::mojom::MediaSessionAction::kPlay);
+    expected_actions.insert(media_session::mojom::MediaSessionAction::kPause);
+    expected_actions.insert(media_session::mojom::MediaSessionAction::kStop);
+    expected_actions.insert(media_session::mojom::MediaSessionAction::kSeekTo);
+    expected_actions.insert(media_session::mojom::MediaSessionAction::kScrubTo);
+    expected_actions.insert(
+        media_session::mojom::MediaSessionAction::kToggleMicrophone);
+    expected_actions.insert(
+        media_session::mojom::MediaSessionAction::kToggleCamera);
+    expected_actions.insert(media_session::mojom::MediaSessionAction::kHangUp);
+
+    observer.WaitForExpectedActions(expected_actions);
+  }
+
  private:
   std::unique_ptr<MockMediaSessionPlayerObserver> player_;
 };
@@ -258,40 +275,7 @@
   EXPECT_EQ(1u, GetService()->actions().size());
 }
 
-// Browser tests with the MediaSessionWebRTC feature enabled.
-// TODO(steimel): Merge with above tests when the feature is enabled by default.
-class MediaSessionServiceImplWebRTCBrowserTest
-    : public MediaSessionServiceImplBrowserTest {
- protected:
-  void SetUpCommandLine(base::CommandLine* command_line) override {
-    MediaSessionServiceImplBrowserTest::SetUpCommandLine(command_line);
-    feature_list_.InitAndEnableFeature(media::kMediaSessionWebRTC);
-  }
-
-  void ExecuteScriptToSetUpWebRTCMediaSessionSync() {
-    ASSERT_TRUE(ExecJs(shell(), kSetUpWebRTCMediaSessionScript));
-    media_session::test::MockMediaSessionMojoObserver observer(*GetSession());
-
-    std::set<media_session::mojom::MediaSessionAction> expected_actions;
-    expected_actions.insert(media_session::mojom::MediaSessionAction::kPlay);
-    expected_actions.insert(media_session::mojom::MediaSessionAction::kPause);
-    expected_actions.insert(media_session::mojom::MediaSessionAction::kStop);
-    expected_actions.insert(media_session::mojom::MediaSessionAction::kSeekTo);
-    expected_actions.insert(media_session::mojom::MediaSessionAction::kScrubTo);
-    expected_actions.insert(
-        media_session::mojom::MediaSessionAction::kToggleMicrophone);
-    expected_actions.insert(
-        media_session::mojom::MediaSessionAction::kToggleCamera);
-    expected_actions.insert(media_session::mojom::MediaSessionAction::kHangUp);
-
-    observer.WaitForExpectedActions(expected_actions);
-  }
-
- private:
-  base::test::ScopedFeatureList feature_list_;
-};
-
-IN_PROC_BROWSER_TEST_F(MediaSessionServiceImplWebRTCBrowserTest,
+IN_PROC_BROWSER_TEST_F(MediaSessionServiceImplBrowserTest,
                        MicrophoneAndCameraStatesInitiallyUnknown) {
   EXPECT_TRUE(NavigateToURL(shell(), GetTestUrl(".", "title1.html")));
   EnsurePlayer();
@@ -304,7 +288,7 @@
   observer.WaitForCameraState(media_session::mojom::CameraState::kUnknown);
 }
 
-IN_PROC_BROWSER_TEST_F(MediaSessionServiceImplWebRTCBrowserTest,
+IN_PROC_BROWSER_TEST_F(MediaSessionServiceImplBrowserTest,
                        MicrophoneAndCameraStatesCanBeSet) {
   EXPECT_TRUE(NavigateToURL(shell(), GetTestUrl(".", "title1.html")));
   EnsurePlayer();
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
index f2fdfed..21676375 100644
--- a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
+++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
@@ -595,8 +595,13 @@
 
 void MediaStreamDispatcherHost::OnStreamStarted(const std::string& label) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  DCHECK(!base::FeatureList::IsEnabled(
-      blink::features::kStartMediaStreamCaptureIndicatorInBrowser));
+
+  if (base::FeatureList::IsEnabled(
+          blink::features::kStartMediaStreamCaptureIndicatorInBrowser)) {
+    ReceivedBadMessage(render_process_id_,
+                       bad_message::MSDH_ON_STREAM_STARTED_DISALLOWED);
+    return;
+  }
   media_stream_manager_->OnStreamStarted(label);
 }
 
diff --git a/content/browser/webid/federated_auth_request_impl.cc b/content/browser/webid/federated_auth_request_impl.cc
index 4ce35a5..86f2e64 100644
--- a/content/browser/webid/federated_auth_request_impl.cc
+++ b/content/browser/webid/federated_auth_request_impl.cc
@@ -38,6 +38,7 @@
 
 using blink::mojom::FederatedAuthRequestResult;
 using blink::mojom::IdentityProvider;
+using blink::mojom::IdentityProviderGetParametersPtr;
 using blink::mojom::IdentityProviderPtr;
 using blink::mojom::IdpSigninStatus;
 using blink::mojom::LogoutRpsStatus;
@@ -418,28 +419,38 @@
 }
 
 void FederatedAuthRequestImpl::RequestToken(
-    std::vector<IdentityProviderPtr> idp_ptrs,
-    bool prefer_auto_sign_in,
+    std::vector<IdentityProviderGetParametersPtr> idp_get_params_ptrs,
     RequestTokenCallback callback) {
-  if (idp_ptrs.empty()) {
-    std::move(callback).Run(RequestTokenStatus::kError, absl::nullopt, "");
+  // idp_get_params_ptrs should never be empty since it is the renderer-side
+  // code which populates it.
+  if (idp_get_params_ptrs.empty()) {
+    mojo::ReportBadMessage("idp_get_params_ptrs is empty.");
     return;
   }
   // It should not be possible to receive multiple IDPs when the
   // `kFedCmMultipleIdentityProviders` flag is disabled. But such a message
   // could be received from a compromised renderer.
-  if (idp_ptrs.size() > 1u && !base::FeatureList::IsEnabled(
-                                  features::kFedCmMultipleIdentityProviders)) {
+  const bool is_multi_idp_input = idp_get_params_ptrs.size() > 1u ||
+                                  idp_get_params_ptrs[0]->providers.size() > 1u;
+  if (is_multi_idp_input && !IsFedCmMultipleIdentityProvidersEnabled()) {
     std::move(callback).Run(RequestTokenStatus::kError, absl::nullopt, "");
     return;
   }
 
+  // Check that providers are non-empty.
+  for (auto& idp_get_params_ptr : idp_get_params_ptrs) {
+    if (idp_get_params_ptr->providers.size() == 0) {
+      std::move(callback).Run(RequestTokenStatus::kError, absl::nullopt, "");
+      return;
+    }
+  }
+
   if (!fedcm_metrics_) {
     // TODO(crbug.com/1307709): Handle FedCmMetrics for multiple IDPs.
     fedcm_metrics_ = std::make_unique<FedCmMetrics>(
-        idp_ptrs[0]->config_url, render_frame_host().GetPageUkmSourceId(),
-        base::RandInt(1, 1 << 30),
-        /*is_disabled=*/idp_ptrs.size() > 1);
+        idp_get_params_ptrs[0]->providers[0]->config_url,
+        render_frame_host().GetPageUkmSourceId(), base::RandInt(1, 1 << 30),
+        /*is_disabled=*/idp_get_params_ptrs.size() > 1);
   }
 
   if (HasPendingRequest()) {
@@ -454,80 +465,92 @@
       ->SetHasPendingWebIdentityRequest(true);
   network_manager_ = CreateNetworkManager();
   request_dialog_controller_ = CreateDialogController();
+  start_time_ = base::TimeTicks::Now();
 
-  for (auto& idp_ptr : idp_ptrs) {
-    // Throw an error if duplicate IDPs are specified.
-    if (pending_idps_.count(idp_ptr->config_url)) {
-      CompleteRequestWithError(FederatedAuthRequestResult::kError,
-                               /*token_status=*/absl::nullopt,
-                               /*should_delay_callback=*/false);
-      return;
-    }
-    pending_idps_.insert(idp_ptr->config_url);
+  FederatedApiPermissionStatus permission_status =
+      api_permission_delegate_->GetApiPermissionStatus(GetEmbeddingOrigin());
+
+  absl::optional<TokenStatus> error_token_status;
+  FederatedAuthRequestResult request_result =
+      FederatedAuthRequestResult::kError;
+
+  switch (permission_status) {
+    case FederatedApiPermissionStatus::BLOCKED_VARIATIONS:
+      error_token_status = TokenStatus::kDisabledInFlags;
+      break;
+    case FederatedApiPermissionStatus::BLOCKED_THIRD_PARTY_COOKIES_BLOCKED:
+      error_token_status = TokenStatus::kThirdPartyCookiesBlocked;
+      break;
+    case FederatedApiPermissionStatus::BLOCKED_SETTINGS:
+      error_token_status = TokenStatus::kDisabledInSettings;
+      request_result = FederatedAuthRequestResult::kErrorDisabledInSettings;
+      break;
+    case FederatedApiPermissionStatus::BLOCKED_EMBARGO:
+      error_token_status = TokenStatus::kDisabledEmbargo;
+      request_result = FederatedAuthRequestResult::kErrorDisabledInSettings;
+      break;
+    case FederatedApiPermissionStatus::GRANTED:
+      // Intentional fall-through.
+      break;
+    default:
+      NOTREACHED();
+      break;
   }
 
+  if (error_token_status) {
+    CompleteRequestWithError(request_result, *error_token_status,
+                             /*should_delay_callback=*/true);
+    return;
+  }
+
+  std::set<GURL> pending_idps;
+  for (auto& idp_get_params_ptr : idp_get_params_ptrs) {
+    for (auto& idp_ptr : idp_get_params_ptr->providers) {
+      // Throw an error if duplicate IDPs are specified.
+      const bool is_unique_idp =
+          pending_idps.insert(idp_ptr->config_url).second;
+      if (!is_unique_idp) {
+        CompleteRequestWithError(FederatedAuthRequestResult::kError,
+                                 /*token_status=*/absl::nullopt,
+                                 /*should_delay_callback=*/false);
+        return;
+      }
+
+      if (!network::IsOriginPotentiallyTrustworthy(
+              url::Origin::Create(idp_ptr->config_url))) {
+        CompleteRequestWithError(FederatedAuthRequestResult::kError,
+                                 TokenStatus::kIdpNotPotentiallyTrustworthy,
+                                 /*should_delay_callback=*/false);
+        return;
+      }
+
+      // TODO(crbug.com/1382545): Handle ShouldFailIfNotSignedInWithIdp in the
+      // multi IDP use case.
+      if (ShouldFailIfNotSignedInWithIdp(idp_ptr->config_url,
+                                         sharing_permission_delegate_)) {
+        CompleteRequestWithError(FederatedAuthRequestResult::kError,
+                                 TokenStatus::kNotSignedInWithIdp,
+                                 /*should_delay_callback=*/true);
+        return;
+      }
+    }
+  }
+  CHECK(pending_idps_.empty());
+  pending_idps_ = std::move(pending_idps);
+
   // TODO(crbug.com/1361642): Handle cases where not all IDPs' requests are
   // successful. Currently when multiple IDPs are specified, an accounts
   // dialog is shown only when the last IDP's request is successful.
-  for (auto& idp_ptr : idp_ptrs) {
-    prefer_auto_sign_in_ = prefer_auto_sign_in && IsFedCmAutoSigninEnabled();
-    start_time_ = base::TimeTicks::Now();
-
-    if (!network::IsOriginPotentiallyTrustworthy(
-            url::Origin::Create(idp_ptr->config_url))) {
-      CompleteRequestWithError(FederatedAuthRequestResult::kError,
-                               TokenStatus::kIdpNotPotentiallyTrustworthy,
-                               /*should_delay_callback=*/false);
-      return;
+  for (auto& idp_get_params_ptr : idp_get_params_ptrs) {
+    // TODO(crbug.com/1383384): Handle prefer_auto_sign_in_ for multi IDP.
+    prefer_auto_sign_in_ = idp_get_params_ptr->prefer_auto_sign_in &&
+                           IsFedCmAutoSigninEnabled() &&
+                           !IsFedCmMultipleIdentityProvidersEnabled();
+    for (auto& idp_ptr : idp_get_params_ptr->providers) {
+      idp_info_[idp_ptr->config_url].provider = *idp_ptr;
+      idp_order_.push_back(idp_ptr->config_url);
+      FetchManifest(*idp_ptr);
     }
-
-    FederatedApiPermissionStatus permission_status =
-        api_permission_delegate_->GetApiPermissionStatus(GetEmbeddingOrigin());
-
-    absl::optional<TokenStatus> error_token_status;
-    FederatedAuthRequestResult request_result =
-        FederatedAuthRequestResult::kError;
-
-    switch (permission_status) {
-      case FederatedApiPermissionStatus::BLOCKED_VARIATIONS:
-        error_token_status = TokenStatus::kDisabledInFlags;
-        break;
-      case FederatedApiPermissionStatus::BLOCKED_THIRD_PARTY_COOKIES_BLOCKED:
-        error_token_status = TokenStatus::kThirdPartyCookiesBlocked;
-        break;
-      case FederatedApiPermissionStatus::BLOCKED_SETTINGS:
-        error_token_status = TokenStatus::kDisabledInSettings;
-        request_result = FederatedAuthRequestResult::kErrorDisabledInSettings;
-        break;
-      case FederatedApiPermissionStatus::BLOCKED_EMBARGO:
-        error_token_status = TokenStatus::kDisabledEmbargo;
-        request_result = FederatedAuthRequestResult::kErrorDisabledInSettings;
-        break;
-      case FederatedApiPermissionStatus::GRANTED:
-        // Intentional fall-through.
-        break;
-      default:
-        NOTREACHED();
-        break;
-    }
-
-    if (error_token_status) {
-      CompleteRequestWithError(request_result, *error_token_status,
-                               /*should_delay_callback=*/true);
-      return;
-    }
-
-    if (ShouldFailIfNotSignedInWithIdp(idp_ptr->config_url,
-                                       sharing_permission_delegate_)) {
-      CompleteRequestWithError(FederatedAuthRequestResult::kError,
-                               TokenStatus::kNotSignedInWithIdp,
-                               /*should_delay_callback=*/true);
-      return;
-    }
-
-    idp_info_[idp_ptr->config_url].provider = *idp_ptr;
-    idp_order_.push_back(idp_ptr->config_url);
-    FetchManifest(*idp_ptr);
   }
 }
 
diff --git a/content/browser/webid/federated_auth_request_impl.h b/content/browser/webid/federated_auth_request_impl.h
index 6fc9923..090043fe 100644
--- a/content/browser/webid/federated_auth_request_impl.h
+++ b/content/browser/webid/federated_auth_request_impl.h
@@ -56,8 +56,8 @@
   ~FederatedAuthRequestImpl() override;
 
   // blink::mojom::FederatedAuthRequest:
-  void RequestToken(std::vector<blink::mojom::IdentityProviderPtr> idp_ptrs,
-                    bool prefer_auto_sign_in,
+  void RequestToken(std::vector<blink::mojom::IdentityProviderGetParametersPtr>
+                        idp_get_params_ptrs,
                     RequestTokenCallback) override;
   void CancelTokenRequest() override;
   void LogoutRps(std::vector<blink::mojom::LogoutRpsRequestPtr> logout_requests,
diff --git a/content/browser/webid/federated_auth_request_impl_unittest.cc b/content/browser/webid/federated_auth_request_impl_unittest.cc
index 7b8a5e6..32c0366 100644
--- a/content/browser/webid/federated_auth_request_impl_unittest.cc
+++ b/content/browser/webid/federated_auth_request_impl_unittest.cc
@@ -729,20 +729,24 @@
                    const MockConfiguration& configuration) {
     test_network_request_manager_->SetTestConfig(configuration);
     SetMockExpectations(request_parameters, expectation, configuration);
-    std::vector<blink::mojom::IdentityProviderPtr> identity_provider_ptrs;
+
+    std::vector<blink::mojom::IdentityProviderGetParametersPtr> idp_get_params;
     for (const auto& identity_provider :
          request_parameters.identity_providers) {
-      blink::mojom::IdentityProviderPtr identity_provider_ptr =
+      std::vector<blink::mojom::IdentityProviderPtr> idp_ptrs;
+      blink::mojom::IdentityProviderPtr idp_ptr =
           blink::mojom::IdentityProvider::New(GURL(identity_provider.provider),
                                               identity_provider.client_id,
                                               identity_provider.nonce);
-      identity_provider_ptrs.push_back(std::move(identity_provider_ptr));
+      idp_ptrs.push_back(std::move(idp_ptr));
+      blink::mojom::IdentityProviderGetParametersPtr get_params =
+          blink::mojom::IdentityProviderGetParameters::New(
+              std::move(idp_ptrs), request_parameters.prefer_auto_sign_in);
+      idp_get_params.push_back(std::move(get_params));
     }
 
-    auto auth_response =
-        PerformAuthRequest(std::move(identity_provider_ptrs),
-                           request_parameters.prefer_auto_sign_in,
-                           configuration.wait_for_callback);
+    auto auth_response = PerformAuthRequest(std::move(idp_get_params),
+                                            configuration.wait_for_callback);
     ASSERT_EQ(std::get<0>(auth_response), expectation.return_status);
     if (std::get<0>(auth_response) == RequestTokenStatus::kSuccess) {
       EXPECT_EQ(configuration.token, std::get<2>(auth_response));
@@ -840,12 +844,11 @@
   std::tuple<absl::optional<RequestTokenStatus>,
              absl::optional<GURL>,
              absl::optional<std::string>>
-  PerformAuthRequest(
-      std::vector<blink::mojom::IdentityProviderPtr> identity_provider_ptrs,
-      bool prefer_auto_sign_in,
-      bool wait_for_callback) {
-    request_remote_->RequestToken(std::move(identity_provider_ptrs),
-                                  prefer_auto_sign_in, auth_helper_.callback());
+  PerformAuthRequest(std::vector<blink::mojom::IdentityProviderGetParametersPtr>
+                         idp_get_params,
+                     bool wait_for_callback) {
+    request_remote_->RequestToken(std::move(idp_get_params),
+                                  auth_helper_.callback());
 
     if (wait_for_callback)
       request_remote_.set_disconnect_handler(auth_helper_.quit_closure());
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 1e2d2b8..0c5a419 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -243,7 +243,6 @@
     {wf::EnableMediaCastOverlayButton, media::kMediaCastOverlayButton},
     {wf::EnableMediaEngagementBypassAutoplayPolicies,
      media::kMediaEngagementBypassAutoplayPolicies},
-    {wf::EnableMediaSessionWebRTC, media::kMediaSessionWebRTC},
     {wf::EnableMouseSubframeNoImplicitCapture,
      features::kMouseSubframeNoImplicitCapture},
     {wf::EnableNeverSlowMode, features::kNeverSlowMode},
diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
index 0aac97f6..a044de5 100644
--- a/content/gpu/gpu_main.cc
+++ b/content/gpu/gpu_main.cc
@@ -17,6 +17,7 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/clamped_math.h"
+#include "base/process/current_process.h"
 #include "base/process/process_metrics.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
@@ -191,7 +192,8 @@
 // Main function for starting the Gpu process.
 int GpuMain(MainFunctionParams parameters) {
   TRACE_EVENT0("gpu", "GpuMain");
-  base::trace_event::TraceLog::GetInstance()->set_process_name("GPU Process");
+  base::CurrentProcess::GetInstance().SetProcessType(
+      base::CurrentProcessType::PROCESS_GPU);
   base::trace_event::TraceLog::GetInstance()->SetProcessSortIndex(
       kTraceEventGpuProcessSortIndex);
 
diff --git a/content/ppapi_plugin/ppapi_plugin_main.cc b/content/ppapi_plugin/ppapi_plugin_main.cc
index 86e093a..1dbd794 100644
--- a/content/ppapi_plugin/ppapi_plugin_main.cc
+++ b/content/ppapi_plugin/ppapi_plugin_main.cc
@@ -9,6 +9,7 @@
 #include "base/files/file_path.h"
 #include "base/i18n/rtl.h"
 #include "base/path_service.h"
+#include "base/process/current_process.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/single_thread_task_executor.h"
@@ -138,7 +139,8 @@
 
   base::SingleThreadTaskExecutor main_thread_task_executor;
   base::PlatformThread::SetName("CrPPAPIMain");
-  base::trace_event::TraceLog::GetInstance()->set_process_name("PPAPI Process");
+  base::CurrentProcess::GetInstance().SetProcessType(
+      base::CurrentProcessType::PROCESS_PPAPI_PLUGIN);
   base::trace_event::TraceLog::GetInstance()->SetProcessSortIndex(
       kTraceEventPpapiProcessSortIndex);
 
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index 3885a61..4eb97784 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -388,7 +388,7 @@
   //   1. IO thread, |ChildProcessImpl::BindReceiver()| (child_thread_impl.cc)
   //   2. IO thread ,|ContentClient::BindChildProcessInterface()|
   //   3. Main thread, |ChildThreadImpl::OnBindReceiver()| (virtual)
-  //   4. Possibly more stpes, depending on the ChildThreadImpl subclass.
+  //   4. Possibly more steps, depending on the ChildThreadImpl subclass.
   virtual void BindReceiver(mojo::GenericPendingReceiver receiver) = 0;
 
   // Extracts any persistent-memory-allocator used for renderer metrics.
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h
index be34338c..8bcd241 100644
--- a/content/public/test/browser_test_utils.h
+++ b/content/public/test/browser_test_utils.h
@@ -526,9 +526,15 @@
 class ToRenderFrameHost {
  public:
   template <typename T>
+  // NOLINTNEXTLINE(google-explicit-constructor)
   ToRenderFrameHost(T* frame_convertible_value)
       : render_frame_host_(ConvertToRenderFrameHost(frame_convertible_value)) {}
 
+  template <typename T, typename RawPtrType>
+  // NOLINTNEXTLINE(google-explicit-constructor)
+  ToRenderFrameHost(const raw_ptr<T, RawPtrType>& frame_convertible_value)
+      : ToRenderFrameHost(frame_convertible_value.get()) {}
+
   // Extract the underlying frame.
   RenderFrameHost* render_frame_host() const { return render_frame_host_; }
 
diff --git a/content/renderer/renderer_main.cc b/content/renderer/renderer_main.cc
index 119e250..842edbb 100644
--- a/content/renderer/renderer_main.cc
+++ b/content/renderer/renderer_main.cc
@@ -15,6 +15,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/pending_task.h"
+#include "base/process/current_process.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/system/sys_info.h"
@@ -133,7 +134,8 @@
   // expect synchronous events around the main loop of a thread.
   TRACE_EVENT_INSTANT0("startup", "RendererMain", TRACE_EVENT_SCOPE_THREAD);
 
-  base::trace_event::TraceLog::GetInstance()->set_process_name("Renderer");
+  base::CurrentProcess::GetInstance().SetProcessType(
+      base::CurrentProcessType::PROCESS_RENDERER);
   base::trace_event::TraceLog::GetInstance()->SetProcessSortIndex(
       kTraceEventRendererProcessSortIndex);
 
diff --git a/content/services/auction_worklet/BUILD.gn b/content/services/auction_worklet/BUILD.gn
index fb1f1e2..4786100 100644
--- a/content/services/auction_worklet/BUILD.gn
+++ b/content/services/auction_worklet/BUILD.gn
@@ -44,6 +44,8 @@
     "auction_v8_inspector_util.h",
     "auction_worklet_service_impl.cc",
     "auction_worklet_service_impl.h",
+    "bidder_lazy_filler.cc",
+    "bidder_lazy_filler.h",
     "bidder_worklet.cc",
     "bidder_worklet.h",
     "context_recycler.cc",
diff --git a/content/services/auction_worklet/bidder_lazy_filler.cc b/content/services/auction_worklet/bidder_lazy_filler.cc
new file mode 100644
index 0000000..3f2b56a1
--- /dev/null
+++ b/content/services/auction_worklet/bidder_lazy_filler.cc
@@ -0,0 +1,201 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/services/auction_worklet/bidder_lazy_filler.h"
+
+#include "content/services/auction_worklet/auction_v8_helper.h"
+#include "content/services/auction_worklet/public/mojom/bidder_worklet.mojom.h"
+#include "gin/converter.h"
+#include "gin/dictionary.h"
+#include "v8/include/v8-exception.h"
+#include "v8/include/v8-external.h"
+
+namespace auction_worklet {
+
+namespace {
+
+// Creates a V8 array containing information about the passed in previous wins.
+// Array is sorted by time, earliest wins first. Modifies order of `prev_wins`
+// input vector. This should should be harmless, since each list of previous
+// wins is only used for a single bid in a single auction, and its order is
+// unspecified, anyways.
+v8::MaybeLocal<v8::Value> CreatePrevWinsArray(
+    AuctionV8Helper* v8_helper,
+    v8::Local<v8::Context> context,
+    base::Time auction_start_time,
+    std::vector<mojom::PreviousWinPtr>& prev_wins) {
+  std::sort(prev_wins.begin(), prev_wins.end(),
+            [](const mojom::PreviousWinPtr& prev_win1,
+               const mojom::PreviousWinPtr& prev_win2) {
+              return prev_win1->time < prev_win2->time;
+            });
+  std::vector<v8::Local<v8::Value>> prev_wins_v8;
+  v8::Isolate* isolate = v8_helper->isolate();
+  for (const auto& prev_win : prev_wins) {
+    int64_t time_delta = (auction_start_time - prev_win->time).InSeconds();
+    // Don't give negative times if clock has changed since last auction win.
+    if (time_delta < 0)
+      time_delta = 0;
+    v8::Local<v8::Value> win_values[2];
+    win_values[0] = v8::Number::New(isolate, time_delta);
+    if (!v8_helper->CreateValueFromJson(context, prev_win->ad_json)
+             .ToLocal(&win_values[1])) {
+      return v8::MaybeLocal<v8::Value>();
+    }
+    prev_wins_v8.push_back(
+        v8::Array::New(isolate, win_values, std::size(win_values)));
+  }
+  return v8::Array::New(isolate, prev_wins_v8.data(), prev_wins_v8.size());
+}
+
+}  // namespace
+
+InterestGroupLazyFiller::InterestGroupLazyFiller(AuctionV8Helper* v8_helper)
+    : LazyFiller(v8_helper) {}
+
+void InterestGroupLazyFiller::ReInitialize(
+    const mojom::BidderWorkletNonSharedParams*
+        bidder_worklet_non_shared_params) {
+  bidder_worklet_non_shared_params_ = bidder_worklet_non_shared_params;
+}
+
+bool InterestGroupLazyFiller::FillInObject(v8::Local<v8::Object> object) {
+  if (bidder_worklet_non_shared_params_->user_bidding_signals &&
+      !DefineLazyAttribute(object, "userBiddingSignals",
+                           &HandleUserBiddingSignals)) {
+    return false;
+  }
+  if (bidder_worklet_non_shared_params_->trusted_bidding_signals_keys &&
+      !DefineLazyAttribute(object, "trustedBiddingSignalsKeys",
+                           &HandleTrustedBiddingSignalsKeys)) {
+    return false;
+  }
+  if (bidder_worklet_non_shared_params_->priority_vector &&
+      !DefineLazyAttribute(object, "priorityVector", &HandlePriorityVector)) {
+    return false;
+  }
+  return true;
+}
+
+void InterestGroupLazyFiller::Reset() {
+  bidder_worklet_non_shared_params_ = nullptr;
+}
+
+// static
+void InterestGroupLazyFiller::HandleUserBiddingSignals(
+    v8::Local<v8::Name> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  InterestGroupLazyFiller* self = GetSelf<InterestGroupLazyFiller>(info);
+  AuctionV8Helper* v8_helper = self->v8_helper();
+  v8::Isolate* isolate = v8_helper->isolate();
+  v8::Local<v8::Value> value;
+  v8::TryCatch try_catch(isolate);
+  if (self->bidder_worklet_non_shared_params_ &&
+      self->bidder_worklet_non_shared_params_->user_bidding_signals &&
+      v8_helper
+          ->CreateValueFromJson(
+              isolate->GetCurrentContext(),
+              *self->bidder_worklet_non_shared_params_->user_bidding_signals)
+          .ToLocal(&value)) {
+    SetResult(info, value);
+  } else {
+    try_catch.Reset();
+    SetResult(info, v8::Null(isolate));
+  }
+}
+
+// static
+void InterestGroupLazyFiller::HandleTrustedBiddingSignalsKeys(
+    v8::Local<v8::Name> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  InterestGroupLazyFiller* self = GetSelf<InterestGroupLazyFiller>(info);
+  AuctionV8Helper* v8_helper = self->v8_helper();
+  v8::Isolate* isolate = v8_helper->isolate();
+  if (self->bidder_worklet_non_shared_params_ &&
+      self->bidder_worklet_non_shared_params_->trusted_bidding_signals_keys) {
+    std::vector<v8::Local<v8::Value>> trusted_bidding_signals_keys;
+    for (const auto& key : *self->bidder_worklet_non_shared_params_
+                                ->trusted_bidding_signals_keys) {
+      v8::Local<v8::Value> key_value;
+      if (!v8_helper->CreateUtf8String(key).ToLocal(&key_value)) {
+        SetResult(info, v8::Null(isolate));
+        return;
+      }
+      trusted_bidding_signals_keys.emplace_back(std::move(key_value));
+    }
+
+    SetResult(info, v8::Array::New(isolate, trusted_bidding_signals_keys.data(),
+                                   trusted_bidding_signals_keys.size()));
+  } else {
+    SetResult(info, v8::Null(isolate));
+  }
+}
+
+// static
+void InterestGroupLazyFiller::HandlePriorityVector(
+    v8::Local<v8::Name> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  InterestGroupLazyFiller* self = GetSelf<InterestGroupLazyFiller>(info);
+  AuctionV8Helper* v8_helper = self->v8_helper();
+  v8::Isolate* isolate = v8_helper->isolate();
+  if (self->bidder_worklet_non_shared_params_ &&
+      self->bidder_worklet_non_shared_params_->priority_vector) {
+    v8::Local<v8::Object> priority_vector = v8::Object::New(isolate);
+    gin::Dictionary priority_vector_dict(isolate, priority_vector);
+    for (const auto& pair :
+         *self->bidder_worklet_non_shared_params_->priority_vector) {
+      if (!priority_vector_dict.Set(pair.first, pair.second)) {
+        SetResult(info, v8::Null(isolate));
+        return;
+      }
+    }
+    SetResult(info, priority_vector);
+  } else {
+    SetResult(info, v8::Null(isolate));
+  }
+}
+
+BiddingBrowserSignalsLazyFiller::BiddingBrowserSignalsLazyFiller(
+    AuctionV8Helper* v8_helper)
+    : LazyFiller(v8_helper) {}
+
+void BiddingBrowserSignalsLazyFiller::ReInitialize(
+    mojom::BiddingBrowserSignals* bidder_browser_signals,
+    base::Time auction_start_time) {
+  bidder_browser_signals_ = bidder_browser_signals;
+  auction_start_time_ = auction_start_time;
+}
+
+bool BiddingBrowserSignalsLazyFiller::FillInObject(
+    v8::Local<v8::Object> object) {
+  if (!DefineLazyAttribute(object, "prevWins", &HandlePrevWins))
+    return false;
+  return true;
+}
+
+void BiddingBrowserSignalsLazyFiller::Reset() {
+  bidder_browser_signals_ = nullptr;
+}
+
+// static
+void BiddingBrowserSignalsLazyFiller::HandlePrevWins(
+    v8::Local<v8::Name> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  BiddingBrowserSignalsLazyFiller* self =
+      GetSelf<BiddingBrowserSignalsLazyFiller>(info);
+  AuctionV8Helper* v8_helper = self->v8_helper();
+  v8::Isolate* isolate = v8_helper->isolate();
+  v8::Local<v8::Value> value;
+  if (self->bidder_browser_signals_ &&
+      CreatePrevWinsArray(v8_helper, isolate->GetCurrentContext(),
+                          self->auction_start_time_,
+                          self->bidder_browser_signals_->prev_wins)
+          .ToLocal(&value)) {
+    SetResult(info, value);
+  } else {
+    SetResult(info, v8::Null(isolate));
+  }
+}
+
+}  // namespace auction_worklet
diff --git a/content/services/auction_worklet/bidder_lazy_filler.h b/content/services/auction_worklet/bidder_lazy_filler.h
new file mode 100644
index 0000000..dba2328b
--- /dev/null
+++ b/content/services/auction_worklet/bidder_lazy_filler.h
@@ -0,0 +1,63 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_SERVICES_AUCTION_WORKLET_BIDDER_LAZY_FILLER_H_
+#define CONTENT_SERVICES_AUCTION_WORKLET_BIDDER_LAZY_FILLER_H_
+
+#include "base/memory/raw_ptr.h"
+#include "base/time/time.h"
+#include "content/common/content_export.h"
+#include "content/services/auction_worklet/auction_v8_helper.h"
+#include "content/services/auction_worklet/context_recycler.h"
+#include "content/services/auction_worklet/public/mojom/bidder_worklet.mojom-forward.h"
+#include "v8/include/v8-forward.h"
+
+namespace auction_worklet {
+
+class CONTENT_EXPORT InterestGroupLazyFiller : public LazyFiller {
+ public:
+  explicit InterestGroupLazyFiller(AuctionV8Helper* v8_helper);
+
+  void ReInitialize(const mojom::BidderWorkletNonSharedParams*
+                        bidder_worklet_non_shared_params);
+
+  bool FillInObject(v8::Local<v8::Object> object) override;
+  void Reset() override;
+
+ private:
+  static void HandleUserBiddingSignals(
+      v8::Local<v8::Name> name,
+      const v8::PropertyCallbackInfo<v8::Value>& info);
+  static void HandleTrustedBiddingSignalsKeys(
+      v8::Local<v8::Name> name,
+      const v8::PropertyCallbackInfo<v8::Value>& info);
+  static void HandlePriorityVector(
+      v8::Local<v8::Name> name,
+      const v8::PropertyCallbackInfo<v8::Value>& info);
+
+  raw_ptr<const mojom::BidderWorkletNonSharedParams>
+      bidder_worklet_non_shared_params_ = nullptr;
+};
+
+class CONTENT_EXPORT BiddingBrowserSignalsLazyFiller : public LazyFiller {
+ public:
+  explicit BiddingBrowserSignalsLazyFiller(AuctionV8Helper* v8_helper);
+
+  void ReInitialize(mojom::BiddingBrowserSignals* bidder_browser_signals,
+                    base::Time auction_start_time);
+
+  bool FillInObject(v8::Local<v8::Object> object) override;
+  void Reset() override;
+
+ private:
+  static void HandlePrevWins(v8::Local<v8::Name> name,
+                             const v8::PropertyCallbackInfo<v8::Value>& info);
+
+  raw_ptr<mojom::BiddingBrowserSignals> bidder_browser_signals_ = nullptr;
+  base::Time auction_start_time_;
+};
+
+}  // namespace auction_worklet
+
+#endif  // CONTENT_SERVICES_AUCTION_WORKLET_BIDDER_LAZY_FILLER_H_
diff --git a/content/services/auction_worklet/bidder_worklet.cc b/content/services/auction_worklet/bidder_worklet.cc
index 16b214a..92f62511 100644
--- a/content/services/auction_worklet/bidder_worklet.cc
+++ b/content/services/auction_worklet/bidder_worklet.cc
@@ -24,6 +24,7 @@
 #include "base/trace_event/trace_event.h"
 #include "base/types/optional_util.h"
 #include "content/services/auction_worklet/auction_v8_helper.h"
+#include "content/services/auction_worklet/bidder_lazy_filler.h"
 #include "content/services/auction_worklet/for_debugging_only_bindings.h"
 #include "content/services/auction_worklet/private_aggregation_bindings.h"
 #include "content/services/auction_worklet/public/mojom/auction_worklet_service.mojom.h"
@@ -75,40 +76,6 @@
   return true;
 }
 
-// Creates a V8 array containing information about the passed in previous wins.
-// Array is sorted by time, earliest wins first. Modifies order of `prev_wins`
-// input vector. This should should be harmless, since each list of previous
-// wins is only used for a single bid in a single auction, and its order is
-// unspecified, anyways.
-v8::MaybeLocal<v8::Value> CreatePrevWinsArray(
-    AuctionV8Helper* v8_helper,
-    v8::Local<v8::Context> context,
-    base::Time auction_start_time,
-    std::vector<mojom::PreviousWinPtr>& prev_wins) {
-  std::sort(prev_wins.begin(), prev_wins.end(),
-            [](const mojom::PreviousWinPtr& prev_win1,
-               const mojom::PreviousWinPtr& prev_win2) {
-              return prev_win1->time < prev_win2->time;
-            });
-  std::vector<v8::Local<v8::Value>> prev_wins_v8;
-  v8::Isolate* isolate = v8_helper->isolate();
-  for (const auto& prev_win : prev_wins) {
-    int64_t time_delta = (auction_start_time - prev_win->time).InSeconds();
-    // Don't give negative times if clock has changed since last auction win.
-    if (time_delta < 0)
-      time_delta = 0;
-    v8::Local<v8::Value> win_values[2];
-    win_values[0] = v8::Number::New(isolate, time_delta);
-    if (!v8_helper->CreateValueFromJson(context, prev_win->ad_json)
-             .ToLocal(&win_values[1])) {
-      return v8::MaybeLocal<v8::Value>();
-    }
-    prev_wins_v8.push_back(
-        v8::Array::New(isolate, win_values, std::size(win_values)));
-  }
-  return v8::Array::New(isolate, prev_wins_v8.data(), prev_wins_v8.size());
-}
-
 // Converts a vector of blink::InterestGroup::Ads into a v8 object.
 bool CreateAdVector(AuctionV8Helper* v8_helper,
                     v8::Local<v8::Context> context,
@@ -670,6 +637,8 @@
     fresh_context_recycler->AddSetBidBindings();
     fresh_context_recycler->AddSetPriorityBindings();
     fresh_context_recycler->AddSetPrioritySignalsOverrideBindings();
+    fresh_context_recycler->AddInterestGroupLazyFiller();
+    fresh_context_recycler->AddBiddingBrowserSignalsLazyFiller();
     context_recycler = fresh_context_recycler.get();
   }
 
@@ -705,48 +674,15 @@
            bidder_worklet_non_shared_params->daily_update_url->spec())) ||
       (trusted_bidding_signals_url_ &&
        !interest_group_dict.Set("trustedBiddingSignalsUrl",
-                                trusted_bidding_signals_url_->spec())) ||
-      (bidder_worklet_non_shared_params->user_bidding_signals &&
-       !v8_helper_->InsertJsonValue(
-           context, "userBiddingSignals",
-           *bidder_worklet_non_shared_params->user_bidding_signals,
-           interest_group_object))) {
+                                trusted_bidding_signals_url_->spec()))) {
     return absl::nullopt;
   }
 
-  if (bidder_worklet_non_shared_params->priority_vector) {
-    v8::Local<v8::Object> priority_vector = v8::Object::New(isolate);
-    gin::Dictionary priority_vector_dict(isolate, priority_vector);
-    for (const auto& pair :
-         *bidder_worklet_non_shared_params->priority_vector) {
-      if (!priority_vector_dict.Set(pair.first, pair.second)) {
-        return absl::nullopt;
-      }
-    }
-    if (!v8_helper_->InsertValue("priorityVector", priority_vector,
-                                 interest_group_object)) {
-      return absl::nullopt;
-    }
-  }
-
-  if (bidder_worklet_non_shared_params->trusted_bidding_signals_keys) {
-    std::vector<v8::Local<v8::Value>> trusted_bidding_signals_keys;
-    for (const auto& key :
-         *bidder_worklet_non_shared_params->trusted_bidding_signals_keys) {
-      v8::Local<v8::Value> key_value;
-      if (!v8_helper_->CreateUtf8String(key).ToLocal(&key_value)) {
-        return absl::nullopt;
-      }
-      trusted_bidding_signals_keys.emplace_back(std::move(key_value));
-    }
-
-    if (!v8_helper_->InsertValue(
-            "trustedBiddingSignalsKeys",
-            v8::Array::New(isolate, trusted_bidding_signals_keys.data(),
-                           trusted_bidding_signals_keys.size()),
-            interest_group_object)) {
-      return absl::nullopt;
-    }
+  context_recycler->interest_group_lazy_filler()->ReInitialize(
+      bidder_worklet_non_shared_params.get());
+  if (!context_recycler->interest_group_lazy_filler()->FillInObject(
+          interest_group_object)) {
+    return absl::nullopt;
   }
 
   v8::Local<v8::Value> ads;
@@ -825,16 +761,10 @@
     }
   }
 
-  v8::Local<v8::Value> prev_wins;
-  if (!CreatePrevWinsArray(v8_helper_.get(), context, auction_start_time,
-                           bidding_browser_signals->prev_wins)
-           .ToLocal(&prev_wins)) {
-    return absl::nullopt;
-  }
-
-  v8::Maybe<bool> result = browser_signals->Set(
-      context, gin::StringToV8(isolate, "prevWins"), prev_wins);
-  if (result.IsNothing() || !result.FromJust()) {
+  context_recycler->bidding_browser_signals_lazy_filler()->ReInitialize(
+      bidding_browser_signals.get(), auction_start_time);
+  if (!context_recycler->bidding_browser_signals_lazy_filler()->FillInObject(
+          browser_signals)) {
     return absl::nullopt;
   }
 
diff --git a/content/services/auction_worklet/bidder_worklet_unittest.cc b/content/services/auction_worklet/bidder_worklet_unittest.cc
index c50fb45..b4c73fc5 100644
--- a/content/services/auction_worklet/bidder_worklet_unittest.cc
+++ b/content/services/auction_worklet/bidder_worklet_unittest.cc
@@ -1785,11 +1785,16 @@
   const std::string kGenerateBidBody =
       R"({ad: interestGroup.userBiddingSignals, bid:1, render:"https://response.test/"})";
 
-  // Since UserBiddingSignals are in JSON, non-JSON strings should result in
-  // failures.
+  // Since UserBiddingSignals are in JSON, non-JSON like standalone string
+  // literals should not come in, but we are required to hangle such cases
+  // gracefully, since it's ultimately data from the renderer. In this case it
+  // just turns into null.
   interest_group_user_bidding_signals_ = "foo";
-  RunGenerateBidWithReturnValueExpectingResult(kGenerateBidBody,
-                                               mojom::BidderWorkletBidPtr());
+  RunGenerateBidWithReturnValueExpectingResult(
+      kGenerateBidBody,
+      mojom::BidderWorkletBid::New("null", 1, GURL("https://response.test/"),
+                                   /*ad_components=*/absl::nullopt,
+                                   base::TimeDelta()));
 
   interest_group_user_bidding_signals_ = R"("foo")";
   RunGenerateBidWithReturnValueExpectingResult(
diff --git a/content/services/auction_worklet/context_recycler.cc b/content/services/auction_worklet/context_recycler.cc
index 46e18e08..2d019ba 100644
--- a/content/services/auction_worklet/context_recycler.cc
+++ b/content/services/auction_worklet/context_recycler.cc
@@ -8,6 +8,7 @@
 
 #include "base/check.h"
 #include "content/services/auction_worklet/auction_v8_helper.h"
+#include "content/services/auction_worklet/bidder_lazy_filler.h"
 #include "content/services/auction_worklet/for_debugging_only_bindings.h"
 #include "content/services/auction_worklet/private_aggregation_bindings.h"
 #include "content/services/auction_worklet/register_ad_beacon_bindings.h"
@@ -15,6 +16,8 @@
 #include "content/services/auction_worklet/set_bid_bindings.h"
 #include "content/services/auction_worklet/set_priority_bindings.h"
 #include "content/services/auction_worklet/set_priority_signals_override_bindings.h"
+#include "gin/converter.h"
+#include "v8/include/v8-external.h"
 #include "v8/include/v8-template.h"
 
 namespace auction_worklet {
@@ -22,6 +25,30 @@
 Bindings::Bindings() = default;
 Bindings::~Bindings() = default;
 
+LazyFiller::~LazyFiller() = default;
+
+LazyFiller::LazyFiller(AuctionV8Helper* v8_helper) : v8_helper_(v8_helper) {}
+
+// static
+void LazyFiller::SetResult(const v8::PropertyCallbackInfo<v8::Value>& info,
+                           v8::Local<v8::Value> result) {
+  info.GetReturnValue().Set(result);
+}
+
+bool LazyFiller::DefineLazyAttribute(v8::Local<v8::Object> object,
+                                     base::StringPiece name,
+                                     v8::AccessorNameGetterCallback getter) {
+  v8::Isolate* isolate = v8_helper_->isolate();
+
+  v8::Maybe<bool> success = object->SetLazyDataProperty(
+      isolate->GetCurrentContext(), gin::StringToSymbol(isolate, name), getter,
+      v8::External::New(isolate, this),
+      /*attributes=*/v8::None,
+      /*getter_side_effect_type=*/v8::SideEffectType::kHasNoSideEffect,
+      /*setter_side_effect_type=*/v8::SideEffectType::kHasSideEffect);
+  return success.IsJust() && success.FromJust();
+}
+
 ContextRecycler::ContextRecycler(AuctionV8Helper* v8_helper)
     : v8_helper_(v8_helper) {}
 
@@ -66,6 +93,18 @@
   AddBindings(set_priority_bindings_.get());
 }
 
+void ContextRecycler::AddInterestGroupLazyFiller() {
+  DCHECK(!interest_group_lazy_filler_);
+  interest_group_lazy_filler_ =
+      std::make_unique<InterestGroupLazyFiller>(v8_helper_);
+}
+
+void ContextRecycler::AddBiddingBrowserSignalsLazyFiller() {
+  DCHECK(!bidding_browser_signals_lazy_filler_);
+  bidding_browser_signals_lazy_filler_ =
+      std::make_unique<BiddingBrowserSignalsLazyFiller>(v8_helper_);
+}
+
 void ContextRecycler::AddSetPrioritySignalsOverrideBindings() {
   DCHECK(!set_priority_signals_override_bindings_);
   set_priority_signals_override_bindings_ =
@@ -94,6 +133,10 @@
 void ContextRecycler::ResetForReuse() {
   for (Bindings* bindings : bindings_list_)
     bindings->Reset();
+  if (bidding_browser_signals_lazy_filler_)
+    bidding_browser_signals_lazy_filler_->Reset();
+  if (interest_group_lazy_filler_)
+    interest_group_lazy_filler_->Reset();
 }
 
 ContextRecyclerScope::ContextRecyclerScope(ContextRecycler& context_recycler)
diff --git a/content/services/auction_worklet/context_recycler.h b/content/services/auction_worklet/context_recycler.h
index 8bb23ded..7429aeb7 100644
--- a/content/services/auction_worklet/context_recycler.h
+++ b/content/services/auction_worklet/context_recycler.h
@@ -12,6 +12,7 @@
 #include "base/memory/raw_ref.h"
 #include "content/common/content_export.h"
 #include "content/services/auction_worklet/auction_v8_helper.h"
+#include "v8/include/v8-external.h"
 #include "v8/include/v8-forward.h"
 
 namespace auction_worklet {
@@ -23,6 +24,8 @@
 class SetBidBindings;
 class SetPriorityBindings;
 class SetPrioritySignalsOverrideBindings;
+class BiddingBrowserSignalsLazyFiller;
+class InterestGroupLazyFiller;
 
 // Base class for bindings used with contexts used with ContextRecycler.
 // The expected lifecycle is:
@@ -41,6 +44,56 @@
   virtual void Reset() = 0;
 };
 
+// Base class for helper for lazily filling in objects, with lifetime tied to
+// ContextRecycler. The connection to ContextRecycler is needed in case the
+// parent object is (inappropriately) saved between reuses, to avoid dangling
+// points to input data (in that case we return overly fresh data, but that's
+// safe, and it doesn't seem worth the effort to aid in misuse).
+//
+// API for implementers is as follows:
+//
+// 1) In FillInObject, call DefineLazyAttribute for all relevant attributes.
+// 2) In the static helpers registered with DefineLazyAttribute
+//    (which take (v8::Local<v8::Name> name,
+//                 const v8::PropertyCallbackInfo<v8::Value>& info)
+//    Use GetSelf and SetResult() to provide value.
+//    The implementation must be careful of `this` being in recycled state,
+//    and also re-check that the field itself is still there (the check in
+//    FillInObject may have been from pre-recycling).
+//
+//    If you use the JSON parser, make sure to eat exceptions with v8::TryCatch.
+//
+// 3) In Reset(), adjust state for recycling.
+//
+// Users should get one from ContextRecycler and call FillInObject on it, after
+// ContextRecyclerScope is active.
+class LazyFiller {
+ public:
+  virtual ~LazyFiller();
+  // Return success/failure.
+  virtual bool FillInObject(v8::Local<v8::Object> object) = 0;
+  virtual void Reset() = 0;
+
+ protected:
+  explicit LazyFiller(AuctionV8Helper* v8_helper);
+  AuctionV8Helper* v8_helper() { return v8_helper_.get(); }
+
+  template <typename T>
+  static T* GetSelf(const v8::PropertyCallbackInfo<v8::Value>& info) {
+    return static_cast<T*>(v8::External::Cast(*info.Data())->Value());
+  }
+
+  static void SetResult(const v8::PropertyCallbackInfo<v8::Value>& info,
+                        v8::Local<v8::Value> result);
+
+  bool DefineLazyAttribute(v8::Local<v8::Object> object,
+                           base::StringPiece name,
+                           v8::AccessorNameGetterCallback getter);
+
+ private:
+  const raw_ptr<AuctionV8Helper> v8_helper_;
+};
+
 // This helps manage the state of bindings on a context should we chose to
 // recycle it, by calling Reset() after the current usage is done, to prepare
 // for the next. Context is accessed via ContextRecyclerScope.
@@ -80,6 +133,16 @@
     return set_priority_signals_override_bindings_.get();
   }
 
+  void AddInterestGroupLazyFiller();
+  InterestGroupLazyFiller* interest_group_lazy_filler() {
+    return interest_group_lazy_filler_.get();
+  }
+
+  void AddBiddingBrowserSignalsLazyFiller();
+  BiddingBrowserSignalsLazyFiller* bidding_browser_signals_lazy_filler() {
+    return bidding_browser_signals_lazy_filler_.get();
+  }
+
  private:
   friend class ContextRecyclerScope;
 
@@ -107,6 +170,10 @@
 
   // everything here is owned by one of the unique_ptr's above.
   std::vector<Bindings*> bindings_list_;
+
+  std::unique_ptr<InterestGroupLazyFiller> interest_group_lazy_filler_;
+  std::unique_ptr<BiddingBrowserSignalsLazyFiller>
+      bidding_browser_signals_lazy_filler_;
 };
 
 // Helper to enter a context scope on creation and reset all bindings
diff --git a/content/services/auction_worklet/context_recycler_unittest.cc b/content/services/auction_worklet/context_recycler_unittest.cc
index 660f4c0..650e3ab 100644
--- a/content/services/auction_worklet/context_recycler_unittest.cc
+++ b/content/services/auction_worklet/context_recycler_unittest.cc
@@ -18,6 +18,7 @@
 #include "content/common/private_aggregation_features.h"
 #include "content/common/private_aggregation_host.mojom-forward.h"
 #include "content/services/auction_worklet/auction_v8_helper.h"
+#include "content/services/auction_worklet/bidder_lazy_filler.h"
 #include "content/services/auction_worklet/for_debugging_only_bindings.h"
 #include "content/services/auction_worklet/private_aggregation_bindings.h"
 #include "content/services/auction_worklet/public/mojom/bidder_worklet.mojom.h"
@@ -588,6 +589,197 @@
   }
 }
 
+TEST_F(ContextRecyclerTest, BidderLazyFiller) {
+  // Test to make sure lifetime managing/avoiding UaF is done right.
+  // Actual argument passing is covered thoroughly in bidder worklet unit tests.
+  const char kScript[] = R"(
+    function test(obj) {
+      if (!globalThis.stash) {
+        // On first run
+        globalThis.stash = obj;
+      } else {
+        return JSON.stringify(globalThis.stash);
+      }
+    }
+  )";
+
+  v8::Local<v8::UnboundScript> script = Compile(kScript);
+  ASSERT_FALSE(script.IsEmpty());
+
+  ContextRecycler context_recycler(helper_.get());
+  context_recycler.AddInterestGroupLazyFiller();
+  context_recycler.AddBiddingBrowserSignalsLazyFiller();
+
+  {
+    base::Time now = base::Time::Now();
+    mojom::BidderWorkletNonSharedParamsPtr ig_params =
+        mojom::BidderWorkletNonSharedParams::New();
+    ig_params->user_bidding_signals.emplace("{\"j\": 1}");
+    ig_params->trusted_bidding_signals_keys.emplace();
+    ig_params->trusted_bidding_signals_keys->push_back("a");
+    ig_params->trusted_bidding_signals_keys->push_back("b");
+    ig_params->priority_vector.emplace();
+    ig_params->priority_vector->insert(
+        std::pair<std::string, double>("a", 42.0));
+
+    mojom::BiddingBrowserSignalsPtr bs_params =
+        mojom::BiddingBrowserSignals::New();
+    bs_params->prev_wins.push_back(
+        mojom::PreviousWin::New(now - base::Minutes(1), "[\"a\"]"));
+    bs_params->prev_wins.push_back(
+        mojom::PreviousWin::New(now - base::Minutes(2), "[\"b\"]"));
+
+    ContextRecyclerScope scope(context_recycler);
+    context_recycler.interest_group_lazy_filler()->ReInitialize(
+        ig_params.get());
+    context_recycler.bidding_browser_signals_lazy_filler()->ReInitialize(
+        bs_params.get(), now);
+
+    v8::Local<v8::Object> arg(v8::Object::New(helper_->isolate()));
+    context_recycler.interest_group_lazy_filler()->FillInObject(arg);
+    context_recycler.bidding_browser_signals_lazy_filler()->FillInObject(arg);
+
+    std::vector<std::string> error_msgs;
+    Run(scope, script, "test", error_msgs, arg);
+    EXPECT_THAT(error_msgs, ElementsAre());
+  }
+
+  {
+    base::Time now = base::Time::Now();
+    mojom::BidderWorkletNonSharedParamsPtr ig_params =
+        mojom::BidderWorkletNonSharedParams::New();
+    ig_params->user_bidding_signals.emplace("{\"k\": 2}");
+    ig_params->trusted_bidding_signals_keys.emplace();
+    ig_params->trusted_bidding_signals_keys->push_back("c");
+    ig_params->trusted_bidding_signals_keys->push_back("d");
+    ig_params->priority_vector.emplace();
+    ig_params->priority_vector->insert(
+        std::pair<std::string, double>("e", 12.0));
+
+    mojom::BiddingBrowserSignalsPtr bs_params =
+        mojom::BiddingBrowserSignals::New();
+    bs_params->prev_wins.push_back(
+        mojom::PreviousWin::New(now - base::Minutes(3), "[\"c\"]"));
+    bs_params->prev_wins.push_back(
+        mojom::PreviousWin::New(now - base::Minutes(4), "[\"d\"]"));
+
+    ContextRecyclerScope scope(context_recycler);
+    context_recycler.interest_group_lazy_filler()->ReInitialize(
+        ig_params.get());
+    context_recycler.bidding_browser_signals_lazy_filler()->ReInitialize(
+        bs_params.get(), now);
+
+    v8::Local<v8::Object> arg(v8::Object::New(helper_->isolate()));
+    context_recycler.interest_group_lazy_filler()->FillInObject(arg);
+    context_recycler.bidding_browser_signals_lazy_filler()->FillInObject(arg);
+
+    std::vector<std::string> error_msgs;
+    v8::MaybeLocal<v8::Value> maybe_result =
+        Run(scope, script, "test", error_msgs, arg);
+    EXPECT_THAT(error_msgs, ElementsAre());
+    v8::Local<v8::Value> result;
+    ASSERT_TRUE(maybe_result.ToLocal(&result));
+    std::string str_result;
+    ASSERT_TRUE(gin::ConvertFromV8(helper_->isolate(), result, &str_result));
+    EXPECT_EQ(
+        "{\"userBiddingSignals\":{\"k\":2},"
+        "\"trustedBiddingSignalsKeys\":[\"c\",\"d\"],"
+        "\"priorityVector\":{\"e\":12},"
+        "\"prevWins\":[[240,[\"d\"]],[180,[\"c\"]]]}",
+        str_result);
+  }
+}
+
+TEST_F(ContextRecyclerTest, BidderLazyFiller2) {
+  // Test to make sure that stale objects with fields added that are no longer
+  // there handle it gracefully.
+  const char kScript[] = R"(
+    function test(obj) {
+      if (!globalThis.stash) {
+        // On first run
+        globalThis.stash = obj;
+      } else {
+        return JSON.stringify(globalThis.stash);
+      }
+    }
+  )";
+
+  v8::Local<v8::UnboundScript> script = Compile(kScript);
+  ASSERT_FALSE(script.IsEmpty());
+
+  ContextRecycler context_recycler(helper_.get());
+  context_recycler.AddInterestGroupLazyFiller();
+  context_recycler.AddBiddingBrowserSignalsLazyFiller();
+
+  {
+    base::Time now = base::Time::Now();
+    mojom::BidderWorkletNonSharedParamsPtr ig_params =
+        mojom::BidderWorkletNonSharedParams::New();
+    ig_params->user_bidding_signals.emplace("{\"j\": 1}");
+    ig_params->trusted_bidding_signals_keys.emplace();
+    ig_params->trusted_bidding_signals_keys->push_back("a");
+    ig_params->trusted_bidding_signals_keys->push_back("b");
+    ig_params->priority_vector.emplace();
+    ig_params->priority_vector->insert(
+        std::pair<std::string, double>("a", 42.0));
+
+    mojom::BiddingBrowserSignalsPtr bs_params =
+        mojom::BiddingBrowserSignals::New();
+    bs_params->prev_wins.push_back(
+        mojom::PreviousWin::New(now - base::Minutes(1), "[\"a\"]"));
+    bs_params->prev_wins.push_back(
+        mojom::PreviousWin::New(now - base::Minutes(2), "[\"b\"]"));
+
+    ContextRecyclerScope scope(context_recycler);
+    context_recycler.interest_group_lazy_filler()->ReInitialize(
+        ig_params.get());
+    context_recycler.bidding_browser_signals_lazy_filler()->ReInitialize(
+        bs_params.get(), now);
+
+    v8::Local<v8::Object> arg(v8::Object::New(helper_->isolate()));
+    context_recycler.interest_group_lazy_filler()->FillInObject(arg);
+    context_recycler.bidding_browser_signals_lazy_filler()->FillInObject(arg);
+
+    std::vector<std::string> error_msgs;
+    Run(scope, script, "test", error_msgs, arg);
+    EXPECT_THAT(error_msgs, ElementsAre());
+  }
+
+  {
+    // Now cover the data for the fields not actually being there.
+    base::Time now = base::Time::Now();
+    mojom::BidderWorkletNonSharedParamsPtr ig_params =
+        mojom::BidderWorkletNonSharedParams::New();
+    mojom::BiddingBrowserSignalsPtr bs_params =
+        mojom::BiddingBrowserSignals::New();
+
+    ContextRecyclerScope scope(context_recycler);
+    context_recycler.interest_group_lazy_filler()->ReInitialize(
+        ig_params.get());
+    context_recycler.bidding_browser_signals_lazy_filler()->ReInitialize(
+        bs_params.get(), now);
+
+    v8::Local<v8::Object> arg(v8::Object::New(helper_->isolate()));
+    context_recycler.interest_group_lazy_filler()->FillInObject(arg);
+    context_recycler.bidding_browser_signals_lazy_filler()->FillInObject(arg);
+
+    std::vector<std::string> error_msgs;
+    v8::MaybeLocal<v8::Value> maybe_result =
+        Run(scope, script, "test", error_msgs, arg);
+    EXPECT_THAT(error_msgs, ElementsAre());
+    v8::Local<v8::Value> result;
+    ASSERT_TRUE(maybe_result.ToLocal(&result));
+    std::string str_result;
+    ASSERT_TRUE(gin::ConvertFromV8(helper_->isolate(), result, &str_result));
+    EXPECT_EQ(
+        "{\"userBiddingSignals\":null,"
+        "\"trustedBiddingSignalsKeys\":null,"
+        "\"priorityVector\":null,"
+        "\"prevWins\":[]}",
+        str_result);
+  }
+}
+
 class ContextRecyclerPrivateAggregationEnabledTest
     : public ContextRecyclerTest {
  public:
diff --git a/content/shell/app/shell_main_delegate.cc b/content/shell/app/shell_main_delegate.cc
index da99dd0..33d0d07 100644
--- a/content/shell/app/shell_main_delegate.cc
+++ b/content/shell/app/shell_main_delegate.cc
@@ -17,6 +17,7 @@
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/path_service.h"
+#include "base/process/current_process.h"
 #include "base/trace_event/trace_log.h"
 #include "build/build_config.h"
 #include "components/crash/core/common/crash_key.h"
@@ -233,7 +234,8 @@
   if (!process_type.empty())
     return std::move(main_function_params);
 
-  base::trace_event::TraceLog::GetInstance()->set_process_name("Browser");
+  base::CurrentProcess::GetInstance().SetProcessType(
+      base::CurrentProcessType::PROCESS_BROWSER);
   base::trace_event::TraceLog::GetInstance()->SetProcessSortIndex(
       kTraceEventBrowserProcessSortIndex);
 
diff --git a/content/test/attribution_simulator_input_parser.cc b/content/test/attribution_simulator_input_parser.cc
index 2e88f900..1f28227 100644
--- a/content/test/attribution_simulator_input_parser.cc
+++ b/content/test/attribution_simulator_input_parser.cc
@@ -14,10 +14,8 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/strings/abseil_string_number_conversions.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
-#include "base/strings/string_util.h"
 #include "base/test/bind.h"
 #include "base/time/time.h"
 #include "base/types/expected.h"
@@ -38,7 +36,6 @@
 #include "content/browser/attribution_reporting/attribution_trigger.h"
 #include "content/browser/attribution_reporting/storable_source.h"
 #include "net/cookies/canonical_cookie.h"
-#include "third_party/abseil-cpp/absl/numeric/int128.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/abseil-cpp/absl/types/variant.h"
 #include "url/gurl.h"
@@ -548,45 +545,6 @@
     return attribution_reporting::Filters();
   }
 
-  absl::uint128 ParseAggregationKey(const base::Value& key_value) {
-    const std::string* s = key_value.GetIfString();
-
-    absl::uint128 value = 0;
-    if (!s ||
-        !base::StartsWith(*s, "0x", base::CompareCase::INSENSITIVE_ASCII) ||
-        !base::HexStringToUInt128(*s, &value)) {
-      *Error() << "must be a uint128 formatted as a base-16 string";
-    }
-
-    return value;
-  }
-
-  base::flat_set<std::string> ParseAggregatableTriggerDataSourceKeys(
-      const base::Value::Dict& dict) {
-    static constexpr char kKey[] = "source_keys";
-
-    base::flat_set<std::string> source_keys;
-
-    auto context = PushContext(kKey);
-
-    const base::Value* values = dict.Find(kKey);
-    if (!values) {
-      *Error() << "must be present";
-      return source_keys;
-    }
-
-    ParseList(*values,
-              base::BindLambdaForTesting([&](const base::Value& value) {
-                if (!value.is_string()) {
-                  *Error() << "must be a string";
-                } else {
-                  source_keys.emplace(value.GetString());
-                }
-              }));
-
-    return source_keys;
-  }
-
   std::vector<attribution_reporting::AggregatableTriggerData>
   ParseAggregatableTriggerData(const base::Value::Dict& dict) {
     static constexpr char kKey[] = "aggregatable_trigger_data";
@@ -603,42 +561,15 @@
         *values,
         base::BindLambdaForTesting(
             [&](const base::Value& aggregatable_trigger) {
-              if (!EnsureDictionary(aggregatable_trigger))
-                return;
-
-              const base::Value::Dict& trigger_dict =
-                  aggregatable_trigger.GetDict();
-
-              base::flat_set<std::string> source_keys =
-                  ParseAggregatableTriggerDataSourceKeys(trigger_dict);
-
-              absl::uint128 key;
-              {
-                static constexpr char kKeyKeyPiece[] = "key_piece";
-                auto key_context = PushContext(kKeyKeyPiece);
-                const base::Value* key_piece = trigger_dict.Find(kKeyKeyPiece);
-                if (key_piece) {
-                  key = ParseAggregationKey(*key_piece);
-                } else {
-                  *Error() << "must be present";
-                }
-              }
-
-              attribution_reporting::Filters filters =
-                  ParseFilters(trigger_dict, "filters");
-
-              attribution_reporting::Filters not_filters =
-                  ParseFilters(trigger_dict, "not_filters");
-
+              base::Value aggregatable_trigger_copy =
+                  aggregatable_trigger.Clone();
               auto trigger_data =
-                  attribution_reporting::AggregatableTriggerData::Create(
-                      key, std::move(source_keys), std::move(filters),
-                      std::move(not_filters));
-              if (!trigger_data)
-                *Error() << "invalid";
-
-              if (has_error())
+                  attribution_reporting::AggregatableTriggerData::FromJSON(
+                      aggregatable_trigger_copy);
+              if (!trigger_data.has_value()) {
+                *Error() << trigger_data.error();
                 return;
+              }
 
               aggregatable_triggers.push_back(std::move(*trigger_data));
             }),
@@ -651,34 +582,15 @@
       const base::Value::Dict& dict) {
     static constexpr char kKey[] = "aggregatable_values";
 
-    const base::Value* value = dict.Find(kKey);
-    if (!value)
-      return attribution_reporting::AggregatableValues();
-
     auto context = PushContext(kKey);
 
-    if (!EnsureDictionary(*value))
-      return attribution_reporting::AggregatableValues();
+    auto aggregatable_values =
+        attribution_reporting::AggregatableValues::FromJSON(dict.Find(kKey));
+    if (aggregatable_values.has_value())
+      return *aggregatable_values;
 
-    attribution_reporting::AggregatableValues::Values::container_type container;
-
-    for (auto [id, key_value] : value->GetDict()) {
-      auto key_context = PushContext(id);
-      if (!key_value.is_int() || key_value.GetInt() <= 0) {
-        *Error() << "must be a positive integer";
-      } else {
-        container.emplace_back(id, key_value.GetInt());
-      }
-    }
-
-    absl::optional<attribution_reporting::AggregatableValues>
-        aggregatable_values = attribution_reporting::AggregatableValues::Create(
-            std::move(container));
-    if (!aggregatable_values.has_value())
-      *Error() << "invalid";
-
-    return aggregatable_values.value_or(
-        attribution_reporting::AggregatableValues());
+    *Error() << aggregatable_values.error();
+    return attribution_reporting::AggregatableValues();
   }
 
   bool EnsureDictionary(const base::Value& value) {
diff --git a/content/test/attribution_simulator_input_parser_unittest.cc b/content/test/attribution_simulator_input_parser_unittest.cc
index db66d94b..19c2866 100644
--- a/content/test/attribution_simulator_input_parser_unittest.cc
+++ b/content/test/attribution_simulator_input_parser_unittest.cc
@@ -962,7 +962,7 @@
         }]})json",
     },
     {
-        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_trigger_data"][0]: must be a dictionary)",
+        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_trigger_data"][0]: kAggregatableTriggerDataWrongType)",
         R"json({"triggers": [{
           "Attribution-Reporting-Register-Trigger": {
             "timestamp": "1643235576000",
@@ -973,44 +973,48 @@
         }]})json",
     },
     {
-        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_trigger_data"][0]["source_keys"]: must be present)",
-        R"json({"triggers": [{
-          "Attribution-Reporting-Register-Trigger": {
-            "timestamp": "1643235576000",
-            "reporting_origin": "https://a.r.test",
-            "destination_origin": " https://a.d1.test",
-            "aggregatable_trigger_data": [{}]
-          }
-        }]})json",
-    },
-    {
-        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_trigger_data"][0]["source_keys"]: must be a list)",
+        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_trigger_data"][0]: kAggregatableTriggerDataSourceKeysMissing)",
         R"json({"triggers": [{
           "Attribution-Reporting-Register-Trigger": {
             "timestamp": "1643235576000",
             "reporting_origin": "https://a.r.test",
             "destination_origin": " https://a.d1.test",
             "aggregatable_trigger_data": [{
+              "key_piece": "0x123"
+            }]
+          }
+        }]})json",
+    },
+    {
+        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_trigger_data"][0]: kAggregatableTriggerDataSourceKeysWrongType)",
+        R"json({"triggers": [{
+          "Attribution-Reporting-Register-Trigger": {
+            "timestamp": "1643235576000",
+            "reporting_origin": "https://a.r.test",
+            "destination_origin": " https://a.d1.test",
+            "aggregatable_trigger_data": [{
+              "key_piece": "0x123",
               "source_keys": "a"
             }]
           }
         }]})json",
     },
     {
-        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_trigger_data"][0]["source_keys"][0]: must be a string)",
+        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_trigger_data"][0]: kAggregatableTriggerDataSourceKeysKeyWrongType)",
         R"json({"triggers": [{
           "Attribution-Reporting-Register-Trigger": {
             "timestamp": "1643235576000",
             "reporting_origin": "https://a.r.test",
             "destination_origin": " https://a.d1.test",
             "aggregatable_trigger_data": [{
+              "key_piece": "0x123",
               "source_keys": [ 5 ]
             }]
           }
         }]})json",
     },
     {
-        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_trigger_data"][0]["key_piece"]: must be a uint128 formatted as a base-16 string)",
+        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_trigger_data"][0]: kAggregatableTriggerDataKeyPieceWrongFormat)",
         R"json({"triggers": [{
           "Attribution-Reporting-Register-Trigger": {
             "timestamp": "1643235576000",
@@ -1024,7 +1028,7 @@
         }]})json",
     },
     {
-        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_values"]: must be a dictionary)",
+        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_values"]: kAggregatableValuesWrongType)",
         R"json({"triggers": [{
           "Attribution-Reporting-Register-Trigger": {
             "timestamp": "1643235576000",
@@ -1035,7 +1039,7 @@
         }]})json",
     },
     {
-        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_values"]["a"]: must be a positive integer)",
+        R"(["triggers"][0]["Attribution-Reporting-Register-Trigger"]["aggregatable_values"]: kAggregatableValuesValueOutOfRange)",
         R"json({"triggers": [{
           "Attribution-Reporting-Register-Trigger": {
             "timestamp": "1643235576000",
diff --git a/content/test/data/attribution_reporting/databases/version_37.sql b/content/test/data/attribution_reporting/databases/version_37.sql
index e46ab01..9b85c58 100644
--- a/content/test/data/attribution_reporting/databases/version_37.sql
+++ b/content/test/data/attribution_reporting/databases/version_37.sql
@@ -48,4 +48,6 @@
 
 CREATE INDEX contribution_aggregation_id_idx ON aggregatable_contributions(aggregation_id);
 
+INSERT INTO sources VALUES (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20);
+
 COMMIT;
diff --git a/content/test/data/attribution_reporting/databases/version_38.sql b/content/test/data/attribution_reporting/databases/version_38.sql
new file mode 100644
index 0000000..0a69837
--- /dev/null
+++ b/content/test/data/attribution_reporting/databases/version_38.sql
@@ -0,0 +1,51 @@
+PRAGMA foreign_keys=OFF;
+
+BEGIN TRANSACTION;
+
+CREATE TABLE sources(source_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,source_event_id INTEGER NOT NULL,source_origin TEXT NOT NULL,destination_origin TEXT NOT NULL,reporting_origin TEXT NOT NULL,source_time INTEGER NOT NULL,expiry_time INTEGER NOT NULL,event_report_window_time INTEGER NOT NULL,aggregatable_report_window_time INTEGER NOT NULL,num_attributions INTEGER NOT NULL,event_level_active INTEGER NOT NULL,aggregatable_active INTEGER NOT NULL,destination_site TEXT NOT NULL,source_type INTEGER NOT NULL,attribution_logic INTEGER NOT NULL,priority INTEGER NOT NULL,source_site TEXT NOT NULL,debug_key INTEGER,aggregatable_budget_consumed INTEGER NOT NULL,aggregatable_source BLOB NOT NULL,filter_data BLOB NOT NULL);
+
+CREATE TABLE event_level_reports(report_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,source_id INTEGER NOT NULL,trigger_data INTEGER NOT NULL,trigger_time INTEGER NOT NULL,report_time INTEGER NOT NULL,priority INTEGER NOT NULL,failed_send_attempts INTEGER NOT NULL,external_report_id TEXT NOT NULL,debug_key INTEGER);
+
+CREATE TABLE rate_limits(id INTEGER PRIMARY KEY NOT NULL,scope INTEGER NOT NULL,source_id INTEGER NOT NULL,source_site TEXT NOT NULL,source_origin TEXT NOT NULL,destination_site TEXT NOT NULL,destination_origin TEXT NOT NULL,reporting_origin TEXT NOT NULL,time INTEGER NOT NULL,expiry_time INTEGER NOT NULL);
+
+CREATE TABLE dedup_keys(source_id INTEGER NOT NULL,report_type INTEGER NOT NULL,dedup_key INTEGER NOT NULL,PRIMARY KEY(source_id,report_type,dedup_key))WITHOUT ROWID;
+
+CREATE TABLE aggregatable_report_metadata(aggregation_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,source_id INTEGER NOT NULL,trigger_time INTEGER NOT NULL,debug_key INTEGER,external_report_id TEXT NOT NULL,report_time INTEGER NOT NULL,failed_send_attempts INTEGER NOT NULL,initial_report_time INTEGER NOT NULL);
+
+CREATE TABLE aggregatable_contributions(contribution_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,aggregation_id INTEGER NOT NULL,key_high_bits INTEGER NOT NULL,key_low_bits INTEGER NOT NULL,value INTEGER NOT NULL);
+
+CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR);
+
+INSERT INTO meta VALUES('mmap_status','-1');
+INSERT INTO meta VALUES('version','38');
+INSERT INTO meta VALUES('last_compatible_version','38');
+
+CREATE INDEX sources_by_active_destination_site_reporting_origin ON sources(event_level_active,aggregatable_active,destination_site,reporting_origin);
+
+CREATE INDEX sources_by_expiry_time ON sources(expiry_time);
+
+CREATE INDEX active_sources_by_source_origin ON sources(source_origin)WHERE event_level_active=1 OR aggregatable_active=1;
+
+CREATE INDEX active_unattributed_sources_by_site_reporting_origin ON sources(source_site,reporting_origin)WHERE event_level_active=1 AND num_attributions=0 AND aggregatable_active=1 AND aggregatable_budget_consumed=0;
+
+CREATE INDEX event_level_reports_by_report_time ON event_level_reports(report_time);
+
+CREATE INDEX event_level_reports_by_source_id ON event_level_reports(source_id);
+
+CREATE INDEX rate_limit_source_site_reporting_origin_idx ON rate_limits(scope,source_site,reporting_origin);
+
+CREATE INDEX rate_limit_reporting_origin_idx ON rate_limits(scope,destination_site,source_site);
+
+CREATE INDEX rate_limit_time_idx ON rate_limits(time);
+
+CREATE INDEX rate_limit_source_id_idx ON rate_limits(source_id);
+
+CREATE INDEX aggregate_source_id_idx ON aggregatable_report_metadata(source_id);
+
+CREATE INDEX aggregate_trigger_time_idx ON aggregatable_report_metadata(trigger_time);
+
+CREATE INDEX aggregate_report_time_idx ON aggregatable_report_metadata(report_time);
+
+CREATE INDEX contribution_aggregation_id_idx ON aggregatable_contributions(aggregation_id);
+
+COMMIT;
diff --git a/content/utility/utility_service_factory.cc b/content/utility/utility_service_factory.cc
index 62b50ab..806a4b0a 100644
--- a/content/utility/utility_service_factory.cc
+++ b/content/utility/utility_service_factory.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/debug/crash_logging.h"
+#include "base/process/current_process.h"
 #include "base/trace_event/trace_log.h"
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_features.h"
@@ -23,9 +24,10 @@
 void UtilityServiceFactory::RunService(
     const std::string& service_name,
     mojo::ScopedMessagePipeHandle service_pipe) {
-  auto* trace_log = base::trace_event::TraceLog::GetInstance();
-  if (trace_log->IsProcessNameEmpty())
-    trace_log->set_process_name("Service: " + service_name);
+  if (base::CurrentProcess::GetInstance().IsProcessNameEmpty()) {
+    base::CurrentProcess::GetInstance().SetProcessType(
+        GetCurrentProcessType(service_name));
+  }
 
   static auto* const service_name_crash_key =
       base::debug::AllocateCrashKeyString("service-name",
diff --git a/content/utility/utility_thread_impl.cc b/content/utility/utility_thread_impl.cc
index f6efa20..9e2ce069 100644
--- a/content/utility/utility_thread_impl.cc
+++ b/content/utility/utility_thread_impl.cc
@@ -16,6 +16,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/no_destructor.h"
+#include "base/process/current_process.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_log.h"
@@ -56,9 +57,10 @@
     base::debug::SetCrashKeyString(service_name_crash_key, service_name);
 
     // Traces should also indicate the service name.
-    auto* trace_log = base::trace_event::TraceLog::GetInstance();
-    if (trace_log->IsProcessNameEmpty())
-      trace_log->set_process_name("Service: " + service_name);
+    if (base::CurrentProcess::GetInstance().IsProcessNameEmpty()) {
+      base::CurrentProcess::GetInstance().SetProcessType(
+          GetCurrentProcessType(service_name));
+    }
 
     // Ensure the ServiceFactory is (lazily) initialized.
     if (!io_thread_services_) {
@@ -263,4 +265,70 @@
   service_factory_->RunService(service_name, std::move(service_pipe));
 }
 
+constexpr ServiceCurrentProcessType kCurrentProcessTypes[] = {
+    {"network.mojom.NetworkService",
+     CurrentProcessType::PROCESS_SERVICE_NETWORK},
+    {"tracing.mojom.TracingService",
+     CurrentProcessType::PROCESS_SERVICE_TRACING},
+    {"storage.mojom.StorageService",
+     CurrentProcessType::PROCESS_SERVICE_STORAGE},
+    {"audio.mojom.AudioService", CurrentProcessType::PROCESS_SERVICE_AUDIO},
+    {"data_decoder.mojom.DataDecoderService",
+     CurrentProcessType::PROCESS_SERVICE_DATA_DECODER},
+    {"chrome.mojom.UtilWin", CurrentProcessType::PROCESS_SERVICE_UTIL_WIN},
+    {"proxy_resolver.mojom.ProxyResolverFactory",
+     CurrentProcessType::PROCESS_SERVICE_PROXY_RESOLVER},
+    {"media.mojom.CdmService", CurrentProcessType::PROCESS_SERVICE_CDM},
+    {"video_capture.mojom.VideoCaptureService",
+     CurrentProcessType::PROCESS_SERVICE_VIDEO_CAPTURE},
+    {"unzip.mojom.Unzipper", CurrentProcessType::PROCESS_SERVICE_UNZIPPER},
+    {"mirroring.mojom.MirroringService",
+     CurrentProcessType::PROCESS_SERVICE_MIRRORING},
+    {"patch.mojom.FilePatcher",
+     CurrentProcessType::PROCESS_SERVICE_FILEPATCHER},
+    {"chromeos.tts.mojom.TtsService", CurrentProcessType::PROCESS_SERVICE_TTS},
+    {"printing.mojom.PrintingService",
+     CurrentProcessType::PROCESS_SERVICE_PRINTING},
+    {"quarantine.mojom.Quarantine",
+     CurrentProcessType::PROCESS_SERVICE_QUARANTINE},
+    {"ash.local_search_service.mojom.LocalSearchService",
+     CurrentProcessType::PROCESS_SERVICE_CROS_LOCALSEARCH},
+    {"ash.assistant.mojom.AssistantAudioDecoderFactory",
+     CurrentProcessType::PROCESS_SERVICE_CROS_ASSISTANT_AUDIO_DECODER},
+    {"chrome.mojom.FileUtilService",
+     CurrentProcessType::PROCESS_SERVICE_FILEUTIL},
+    {"printing.mojom.PrintCompositor",
+     CurrentProcessType::PROCESS_SERVICE_PRINTCOMPOSITOR},
+    {"paint_preview.mojom.PaintPreviewCompositorCollection",
+     CurrentProcessType::PROCESS_SERVICE_PAINTPREVIEW},
+    {"media.mojom.SpeechRecognitionService",
+     CurrentProcessType::PROCESS_SERVICE_SPEECHRECOGNITION},
+    {"device.mojom.XRDeviceService",
+     CurrentProcessType::PROCESS_SERVICE_XRDEVICE},
+    {"chrome.mojom.UtilReadIcon", CurrentProcessType::PROCESS_SERVICE_READICON},
+    {"language_detection.mojom.LanguageDetectionService",
+     CurrentProcessType::PROCESS_SERVICE_LANGUAGEDETECTION},
+    {"sharing.mojom.Sharing", CurrentProcessType::PROCESS_SERVICE_SHARING},
+    {"chrome.mojom.MediaParserFactory",
+     CurrentProcessType::PROCESS_SERVICE_MEDIAPARSER},
+    {"qrcode_generator.mojom.QRCodeGeneratorService",
+     CurrentProcessType::PROCESS_SERVICE_QRCODEGENERATOR},
+    {"chrome.mojom.ProfileImport",
+     CurrentProcessType::PROCESS_SERVICE_PROFILEIMPORT},
+    {"ash.ime.mojom.ImeService", CurrentProcessType::PROCESS_SERVICE_IME},
+    {"recording.mojom.RecordingService",
+     CurrentProcessType::PROCESS_SERVICE_RECORDING},
+    {"shape_detection.mojom.ShapeDetectionService",
+     CurrentProcessType::PROCESS_SERVICE_SHAPEDETECTION},
+};
+
+CurrentProcessType GetCurrentProcessType(const std::string& name) {
+  for (auto kCurrentProcessType : kCurrentProcessTypes) {
+    if (name == kCurrentProcessType.name) {
+      return kCurrentProcessType.type;
+    }
+  }
+  return CurrentProcessType::PROCESS_UTILITY;
+}
+
 }  // namespace content
diff --git a/content/utility/utility_thread_impl.h b/content/utility/utility_thread_impl.h
index 6156840..afda1bb 100644
--- a/content/utility/utility_thread_impl.h
+++ b/content/utility/utility_thread_impl.h
@@ -8,6 +8,8 @@
 #include <memory>
 
 #include "base/callback.h"
+#include "base/process/current_process.h"
+#include "base/strings/pattern.h"
 #include "build/build_config.h"
 #include "content/child/child_thread_impl.h"
 #include "content/public/utility/utility_thread.h"
@@ -76,6 +78,15 @@
   std::unique_ptr<mojo::ServiceFactory> main_thread_services_;
 };
 
+using CurrentProcessType = base::CurrentProcessType;
+
+struct ServiceCurrentProcessType {
+  const char* name;
+  CurrentProcessType type;
+};
+
+CurrentProcessType GetCurrentProcessType(const std::string& name);
+
 }  // namespace content
 
 #endif  // CONTENT_UTILITY_UTILITY_THREAD_IMPL_H_
diff --git a/device/bluetooth/floss/floss_dbus_client.h b/device/bluetooth/floss/floss_dbus_client.h
index 16340a0..7688a933 100644
--- a/device/bluetooth/floss/floss_dbus_client.h
+++ b/device/bluetooth/floss/floss_dbus_client.h
@@ -343,8 +343,8 @@
 const DBusTypeInfo& GetDBusTypeInfo(const absl::optional<T>*) {
   static base::NoDestructor<DBusTypeInfo> elem_info(
       GetDBusTypeInfo(static_cast<T*>(nullptr)));
-  static base::NoDestructor<DBusTypeInfo> info(
-      {"a{sv}", "optional<" + elem_info->type_name + ">"});
+  static base::NoDestructor<DBusTypeInfo> info{
+      {"a{sv}", "optional<" + elem_info->type_name + ">"}};
   return *info;
 }
 
diff --git a/docs/enterprise/add_new_policy.md b/docs/enterprise/add_new_policy.md
index 90669855..133d13c 100644
--- a/docs/enterprise/add_new_policy.md
+++ b/docs/enterprise/add_new_policy.md
@@ -261,28 +261,39 @@
 to ensure this is okay. The general preference is to leave policies as
 deprecated, but still supported.
 
-When removing support for a policy, update `supported_on` to correctly list the
-last milestone the policy is supported on. Please also set 'deprecated' to True
-if the policy skipped past the deprecation state.
-
-### Steps
-1. Update `YourPolicyName.yaml`, marking the policy as no longer supported.
-   Also marking as deprecated if not previously done.
-1. Update the related test in the `policy_test_cases.json`.
-    - If the policy is going to be removed in the current milestone, remove the
-      the test at the same time.
-    - If the policy is going to be removed in the future milestone, remove the
-      test **after** policy support ended.
-1. Remove the policy handling code.
+When removing support for a policy:
+1. Update `YourPolicyName.yaml` to mark the poilcy as no longer supported.
+   - Update `supported_on` to correctly list the last milestone the policy is
+     supported on.
+   - Set 'deprecated' to True if the policy skipped past the deprecation state.
+1. If the last milestone lies in the future file a bug to clean up the policy
+   supporting code as soon as the milestone has been reached. Set its next action
+   date to a date shortly after the expected branch date for that version. Add a
+   comment in the yaml file with the bug number for reference.
+1. Lastly after the last supported version has been branched:
+   - remove all the code that implements the policy behavior as shown in the
+     [Examples](#examples) section below after the milestone has been reached.
+   - Update the related test in the `policy_test_cases.json` by clearing the
+     the test for that policy.
 1. Notify chromium-enterprise@chromium.org to ensure this removal of support is
    mentioned in the enterprise release notes.
 
 ## Examples
 
-Here is an example based on the instructions above. It's a good, simple place to
-get started:
-[https://chromium-review.googlesource.com/c/chromium/src/+/1742209](https://chromium-review.googlesource.com/c/chromium/src/+/1742209)
-
+- Here is an example for adding a new policy. It's a good, simple place to
+  get started:
+  [https://chromium-review.googlesource.com/c/chromium/src/+/4004453](https://chromium-review.googlesource.com/c/chromium/src/+/4004453)
+- This is an example for the clean-up CL needed to remove a deprecated, escape
+  hatch policy. As mentioned in the section
+  [Removing support for a policy](#removing-support-for-a-policy).
+  [https://chromium-review.googlesource.com/c/chromium/src/+/3551442](https://chromium-review.googlesource.com/c/chromium/src/+/3551442)
+  (Note: The example above has been created prior to the policy_templates.json
+  to individual yaml files but it still shows clearly how to modify the policy
+  definition. We will update the document again as soon as we have a good clean
+  sample containing yaml file policy removal.)
+- This is an example of a CL that sets the expiration date of a policy in a
+  future milestone:
+  [https://chromium-review.googlesource.com/c/chromium/src/+/4022055](https://chromium-review.googlesource.com/c/chromium/src/+/4022055)
 
 ## Modifying existing policies
 
diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn
index 3ae1f38..e4bcc1f4 100644
--- a/extensions/browser/BUILD.gn
+++ b/extensions/browser/BUILD.gn
@@ -684,21 +684,6 @@
   ]
 }
 
-# NOTE: This is separate from ":browser" because it depends on
-# //extensions/browser/api:api_registration, which in turn depends on
-# :browser.
-source_set("core_api_provider") {
-  sources = [
-    "core_extensions_browser_api_provider.cc",
-    "core_extensions_browser_api_provider.h",
-  ]
-
-  deps = [
-    ":browser",
-    "//extensions/browser/api:api_registration",
-  ]
-}
-
 # The set of all browsertests for anything defined under the
 # //extensions/browser module. Note that, unlike the production build targets
 # above, this is a monolithic target that includes all tests for both the core
diff --git a/extensions/browser/api/BUILD.gn b/extensions/browser/api/BUILD.gn
index 7dbd699..41e6dd7 100644
--- a/extensions/browser/api/BUILD.gn
+++ b/extensions/browser/api/BUILD.gn
@@ -16,6 +16,7 @@
 group("api") {
   public_deps = [
     "//extensions/browser/api:api_implementations",
+    "//extensions/browser/api:api_provider",
     "//extensions/browser/api:api_registration",
   ]
 }
@@ -64,30 +65,6 @@
       "//ui/base/clipboard",
     ]
   }
-
-  if (is_chromeos_ash) {
-    sources += [
-      "media_perception_private/conversion_utils.cc",
-      "media_perception_private/conversion_utils.h",
-      "media_perception_private/media_perception_api_delegate.h",
-      "media_perception_private/media_perception_api_manager.cc",
-      "media_perception_private/media_perception_api_manager.h",
-      "media_perception_private/media_perception_private_api.cc",
-      "media_perception_private/media_perception_private_api.h",
-    ]
-
-    deps += [
-      "//chromeos",
-      "//chromeos/ash/components/dbus",
-      "//chromeos/ash/components/dbus/media_analytics",
-      "//chromeos/ash/components/dbus/media_analytics:media_perception_proto",
-      "//chromeos/ash/components/dbus/upstart",
-      "//chromeos/login/login_state",
-      "//chromeos/services/media_perception/public/mojom",
-      "//chromeos/services/media_perception/public/mojom:mojom_js_data_deps",
-      "//extensions/browser/api/storage",
-    ]
-  }
 }
 
 # The collection of API implementations.
@@ -144,6 +121,7 @@
       "//extensions/browser/api/cec_private",
       "//extensions/browser/api/diagnostics",
       "//extensions/browser/api/lock_screen_data",
+      "//extensions/browser/api/media_perception_private",
       "//extensions/browser/api/webcam_private",
     ]
   }
@@ -166,6 +144,19 @@
   ]
 }
 
+# The "glue" layer that adds relevant API registrations to the extensions
+# client.
+source_set("api_provider") {
+  sources = [
+    "core_extensions_browser_api_provider.cc",
+    "core_extensions_browser_api_provider.h",
+  ]
+  deps = [
+    "//extensions/browser:browser_sources",
+    "//extensions/browser/api:api_registration",
+  ]
+}
+
 # The step necessary to generate the code to register the corresponding
 # ExtensionFunctions in order to map the function string name with their
 # implementation.
diff --git a/extensions/browser/api/alarms/alarm_manager.cc b/extensions/browser/api/alarms/alarm_manager.cc
index 5edd856..830e8d9 100644
--- a/extensions/browser/api/alarms/alarm_manager.cc
+++ b/extensions/browser/api/alarms/alarm_manager.cc
@@ -131,38 +131,41 @@
                             std::unique_ptr<Alarm> alarm,
                             AddAlarmCallback callback) {
   RunWhenReady(extension_id,
-               base::BindOnce(&AlarmManager::AddAlarmWhenReady, AsWeakPtr(),
-                              std::move(alarm), std::move(callback)));
+               base::BindOnce(&AlarmManager::AddAlarmWhenReady,
+                              weak_ptr_factory_.GetWeakPtr(), std::move(alarm),
+                              std::move(callback)));
 }
 
 void AlarmManager::GetAlarm(const std::string& extension_id,
                             const std::string& name,
                             GetAlarmCallback callback) {
-  RunWhenReady(extension_id,
-               base::BindOnce(&AlarmManager::GetAlarmWhenReady, AsWeakPtr(),
-                              name, std::move(callback)));
+  RunWhenReady(extension_id, base::BindOnce(&AlarmManager::GetAlarmWhenReady,
+                                            weak_ptr_factory_.GetWeakPtr(),
+                                            name, std::move(callback)));
 }
 
 void AlarmManager::GetAllAlarms(const std::string& extension_id,
                                 GetAllAlarmsCallback callback) {
-  RunWhenReady(extension_id,
-               base::BindOnce(&AlarmManager::GetAllAlarmsWhenReady, AsWeakPtr(),
-                              std::move(callback)));
+  RunWhenReady(
+      extension_id,
+      base::BindOnce(&AlarmManager::GetAllAlarmsWhenReady,
+                     weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
 }
 
 void AlarmManager::RemoveAlarm(const std::string& extension_id,
                                const std::string& name,
                                RemoveAlarmCallback callback) {
-  RunWhenReady(extension_id,
-               base::BindOnce(&AlarmManager::RemoveAlarmWhenReady, AsWeakPtr(),
-                              name, std::move(callback)));
+  RunWhenReady(extension_id, base::BindOnce(&AlarmManager::RemoveAlarmWhenReady,
+                                            weak_ptr_factory_.GetWeakPtr(),
+                                            name, std::move(callback)));
 }
 
 void AlarmManager::RemoveAllAlarms(const std::string& extension_id,
                                    RemoveAllAlarmsCallback callback) {
-  RunWhenReady(extension_id,
-               base::BindOnce(&AlarmManager::RemoveAllAlarmsWhenReady,
-                              AsWeakPtr(), std::move(callback)));
+  RunWhenReady(
+      extension_id,
+      base::BindOnce(&AlarmManager::RemoveAllAlarmsWhenReady,
+                     weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
 }
 
 void AlarmManager::AddAlarmWhenReady(std::unique_ptr<Alarm> alarm,
@@ -440,10 +443,10 @@
   if (storage) {
     bool is_unpacked = Manifest::IsUnpackedLocation(extension->location());
     ready_actions_.insert(ReadyMap::value_type(extension->id(), ReadyQueue()));
-    storage->GetExtensionValue(
-        extension->id(), kRegisteredAlarms,
-        base::BindOnce(&AlarmManager::ReadFromStorage, AsWeakPtr(),
-                       extension->id(), is_unpacked));
+    storage->GetExtensionValue(extension->id(), kRegisteredAlarms,
+                               base::BindOnce(&AlarmManager::ReadFromStorage,
+                                              weak_ptr_factory_.GetWeakPtr(),
+                                              extension->id(), is_unpacked));
   }
 }
 
diff --git a/extensions/browser/api/alarms/alarm_manager.h b/extensions/browser/api/alarms/alarm_manager.h
index c3dbc0b..1aedd1c 100644
--- a/extensions/browser/api/alarms/alarm_manager.h
+++ b/extensions/browser/api/alarms/alarm_manager.h
@@ -61,8 +61,7 @@
 // Manages the currently pending alarms for every extension in a profile.
 // There is one manager per virtual Profile.
 class AlarmManager : public BrowserContextKeyedAPI,
-                     public ExtensionRegistryObserver,
-                     public base::SupportsWeakPtr<AlarmManager> {
+                     public ExtensionRegistryObserver {
  public:
   using AlarmList = std::vector<std::unique_ptr<Alarm>>;
 
@@ -249,6 +248,8 @@
 
   // Next poll's time.
   base::Time next_poll_time_;
+
+  base::WeakPtrFactory<AlarmManager> weak_ptr_factory_{this};
 };
 
 }  //  namespace extensions
diff --git a/extensions/browser/api/bluetooth_socket/bluetooth_socket_event_dispatcher.h b/extensions/browser/api/bluetooth_socket/bluetooth_socket_event_dispatcher.h
index 90db7dc..928ce32 100644
--- a/extensions/browser/api/bluetooth_socket/bluetooth_socket_event_dispatcher.h
+++ b/extensions/browser/api/bluetooth_socket/bluetooth_socket_event_dispatcher.h
@@ -30,9 +30,7 @@
 
 // Dispatch events related to "bluetooth" sockets from callback on native socket
 // instances. There is one instance per browser context.
-class BluetoothSocketEventDispatcher
-    : public BrowserContextKeyedAPI,
-      public base::SupportsWeakPtr<BluetoothSocketEventDispatcher> {
+class BluetoothSocketEventDispatcher : public BrowserContextKeyedAPI {
  public:
   explicit BluetoothSocketEventDispatcher(content::BrowserContext* context);
   ~BluetoothSocketEventDispatcher() override;
diff --git a/extensions/browser/core_extensions_browser_api_provider.cc b/extensions/browser/api/core_extensions_browser_api_provider.cc
similarity index 88%
rename from extensions/browser/core_extensions_browser_api_provider.cc
rename to extensions/browser/api/core_extensions_browser_api_provider.cc
index 23c7583..dc8f574e 100644
--- a/extensions/browser/core_extensions_browser_api_provider.cc
+++ b/extensions/browser/api/core_extensions_browser_api_provider.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 "extensions/browser/core_extensions_browser_api_provider.h"
+#include "extensions/browser/api/core_extensions_browser_api_provider.h"
 
 #include "extensions/browser/api/generated_api_registration.h"
 
diff --git a/extensions/browser/core_extensions_browser_api_provider.h b/extensions/browser/api/core_extensions_browser_api_provider.h
similarity index 76%
rename from extensions/browser/core_extensions_browser_api_provider.h
rename to extensions/browser/api/core_extensions_browser_api_provider.h
index cc2907d..3e62f71b 100644
--- a/extensions/browser/core_extensions_browser_api_provider.h
+++ b/extensions/browser/api/core_extensions_browser_api_provider.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 EXTENSIONS_BROWSER_CORE_EXTENSIONS_BROWSER_API_PROVIDER_H_
-#define EXTENSIONS_BROWSER_CORE_EXTENSIONS_BROWSER_API_PROVIDER_H_
+#ifndef EXTENSIONS_BROWSER_API_CORE_EXTENSIONS_BROWSER_API_PROVIDER_H_
+#define EXTENSIONS_BROWSER_API_CORE_EXTENSIONS_BROWSER_API_PROVIDER_H_
 
 #include "extensions/browser/extensions_browser_api_provider.h"
 
@@ -23,4 +23,4 @@
 
 }  // namespace extensions
 
-#endif  // EXTENSIONS_BROWSER_CORE_EXTENSIONS_BROWSER_API_PROVIDER_H_
+#endif  // EXTENSIONS_BROWSER_API_CORE_EXTENSIONS_BROWSER_API_PROVIDER_H_
diff --git a/extensions/browser/api/media_perception_private/BUILD.gn b/extensions/browser/api/media_perception_private/BUILD.gn
new file mode 100644
index 0000000..d5ac1bcc
--- /dev/null
+++ b/extensions/browser/api/media_perception_private/BUILD.gn
@@ -0,0 +1,33 @@
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//extensions/buildflags/buildflags.gni")
+
+assert(enable_extensions,
+       "Cannot depend on extensions because enable_extensions=false.")
+
+source_set("media_perception_private") {
+  sources = [
+    "conversion_utils.cc",
+    "conversion_utils.h",
+    "media_perception_api_delegate.h",
+    "media_perception_api_manager.cc",
+    "media_perception_api_manager.h",
+    "media_perception_private_api.cc",
+    "media_perception_private_api.h",
+  ]
+
+  deps = [
+    "//base",
+    "//chromeos/ash/components/dbus",
+    "//chromeos/ash/components/dbus/media_analytics",
+    "//chromeos/ash/components/dbus/media_analytics:media_perception_proto",
+    "//chromeos/ash/components/dbus/upstart",
+    "//chromeos/services/media_perception/public/mojom",
+    "//chromeos/services/media_perception/public/mojom:mojom_js_data_deps",
+    "//extensions/browser:browser_sources",
+    "//extensions/common",
+    "//extensions/common/api",
+  ]
+}
diff --git a/extensions/browser/api/printer_provider/printer_provider_api.cc b/extensions/browser/api/printer_provider/printer_provider_api.cc
index 36a5751..19d870711 100644
--- a/extensions/browser/api/printer_provider/printer_provider_api.cc
+++ b/extensions/browser/api/printer_provider/printer_provider_api.cc
@@ -234,7 +234,7 @@
 
   // Completes the request with the provided request id. It runs the request
   // callback and removes the request from the set.
-  void Complete(int request_id, const base::DictionaryValue& printer_info);
+  void Complete(int request_id, base::Value::Dict printer_info);
 
   // Runs all pending callbacks with empty capability value and clears the
   // set of pending requests.
@@ -502,9 +502,8 @@
   return last_request_id_;
 }
 
-void PendingUsbPrinterInfoRequests::Complete(
-    int request_id,
-    const base::DictionaryValue& printer_info) {
+void PendingUsbPrinterInfoRequests::Complete(int request_id,
+                                             base::Value::Dict printer_info) {
   auto it = pending_requests_.find(request_id);
   if (it == pending_requests_.end())
     return;
@@ -512,12 +511,12 @@
   PrinterProviderAPI::GetPrinterInfoCallback callback = std::move(it->second);
   pending_requests_.erase(it);
 
-  std::move(callback).Run(printer_info);
+  std::move(callback).Run(std::move(printer_info));
 }
 
 void PendingUsbPrinterInfoRequests::FailAll() {
   for (auto& request : pending_requests_) {
-    std::move(request.second).Run(base::DictionaryValue());
+    std::move(request.second).Run(base::Value::Dict());
   }
   pending_requests_.clear();
 }
@@ -661,7 +660,7 @@
   if (!event_router->ExtensionHasEventListener(
           extension_id,
           api::printer_provider::OnGetUsbPrinterInfoRequested::kEventName)) {
-    std::move(callback).Run(base::DictionaryValue());
+    std::move(callback).Run(base::Value::Dict());
     return;
   }
 
@@ -722,11 +721,10 @@
     base::Value::Dict printer(result->ToValue());
     UpdatePrinterWithExtensionInfo(&printer, extension);
     pending_usb_printer_info_requests_[extension->id()].Complete(
-        request_id, *base::DictionaryValue::From(base::Value::ToUniquePtrValue(
-                        base::Value(std::move(printer)))));
+        request_id, std::move(printer));
   } else {
     pending_usb_printer_info_requests_[extension->id()].Complete(
-        request_id, base::DictionaryValue());
+        request_id, base::Value::Dict());
   }
 }
 
diff --git a/extensions/browser/api/printer_provider/printer_provider_api.h b/extensions/browser/api/printer_provider/printer_provider_api.h
index 7c0a268..e167ef89 100644
--- a/extensions/browser/api/printer_provider/printer_provider_api.h
+++ b/extensions/browser/api/printer_provider/printer_provider_api.h
@@ -29,10 +29,10 @@
   using GetPrintersCallback =
       base::RepeatingCallback<void(base::Value::List printers, bool done)>;
   using GetCapabilityCallback =
-      base::OnceCallback<void(base::Value::Dict capability)>;
+      base::OnceCallback<void(const base::Value::Dict capability)>;
   using PrintCallback = base::OnceCallback<void(const base::Value& error)>;
   using GetPrinterInfoCallback =
-      base::OnceCallback<void(const base::DictionaryValue& printer_info)>;
+      base::OnceCallback<void(const base::Value::Dict printer_info)>;
 
   static PrinterProviderAPI* Create(content::BrowserContext* context);
 
diff --git a/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.h b/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.h
index fe3fe0db..f32222e 100644
--- a/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.h
+++ b/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.h
@@ -26,9 +26,7 @@
 
 // Dispatch events related to "sockets.tcp" sockets from callback on native
 // socket instances. There is one instance per profile.
-class TCPSocketEventDispatcher
-    : public BrowserContextKeyedAPI,
-      public base::SupportsWeakPtr<TCPSocketEventDispatcher> {
+class TCPSocketEventDispatcher : public BrowserContextKeyedAPI {
  public:
   explicit TCPSocketEventDispatcher(content::BrowserContext* context);
   ~TCPSocketEventDispatcher() override;
diff --git a/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.h b/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.h
index b8ea931c..5811000 100644
--- a/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.h
+++ b/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.h
@@ -30,9 +30,7 @@
 
 // Dispatch events related to "sockets.tcp" sockets from callback on native
 // socket instances. There is one instance per profile.
-class TCPServerSocketEventDispatcher
-    : public BrowserContextKeyedAPI,
-      public base::SupportsWeakPtr<TCPServerSocketEventDispatcher> {
+class TCPServerSocketEventDispatcher : public BrowserContextKeyedAPI {
  public:
   explicit TCPServerSocketEventDispatcher(content::BrowserContext* context);
   ~TCPServerSocketEventDispatcher() override;
diff --git a/extensions/browser/api/sockets_udp/udp_socket_event_dispatcher.h b/extensions/browser/api/sockets_udp/udp_socket_event_dispatcher.h
index e40ea2d..2a3f9c9 100644
--- a/extensions/browser/api/sockets_udp/udp_socket_event_dispatcher.h
+++ b/extensions/browser/api/sockets_udp/udp_socket_event_dispatcher.h
@@ -28,9 +28,7 @@
 
 // Dispatch events related to "sockets.udp" sockets from callback on native
 // socket instances. There is one instance per profile.
-class UDPSocketEventDispatcher
-    : public BrowserContextKeyedAPI,
-      public base::SupportsWeakPtr<UDPSocketEventDispatcher> {
+class UDPSocketEventDispatcher : public BrowserContextKeyedAPI {
  public:
   explicit UDPSocketEventDispatcher(content::BrowserContext* context);
   ~UDPSocketEventDispatcher() override;
diff --git a/extensions/browser/api/usb/usb_api.cc b/extensions/browser/api/usb/usb_api.cc
index 55ec01c..0d58996 100644
--- a/extensions/browser/api/usb/usb_api.cc
+++ b/extensions/browser/api/usb/usb_api.cc
@@ -484,16 +484,13 @@
 UsbTransferFunction::UsbTransferFunction() = default;
 UsbTransferFunction::~UsbTransferFunction() = default;
 
-void UsbTransferFunction::OnCompleted(
-    UsbTransferStatus status,
-    std::unique_ptr<base::DictionaryValue> transfer_info) {
+void UsbTransferFunction::OnCompleted(UsbTransferStatus status,
+                                      base::Value::Dict transfer_info) {
   if (status == UsbTransferStatus::COMPLETED) {
-    Respond(
-        OneArgument(base::Value::FromUniquePtrValue(std::move(transfer_info))));
+    Respond(OneArgument(base::Value(std::move(transfer_info))));
   } else {
     base::Value::List error_args;
-    error_args.Append(
-        base::Value::FromUniquePtrValue(std::move(transfer_info)));
+    error_args.Append(std::move(transfer_info));
     // Using ErrorWithArguments is discouraged but required to provide the
     // detailed transfer info as the transfer may have partially succeeded.
     Respond(ErrorWithArguments(std::move(error_args),
@@ -504,26 +501,25 @@
 void UsbTransferFunction::OnTransferInCompleted(
     UsbTransferStatus status,
     base::span<const uint8_t> data) {
-  base::Value transfer_info(base::Value::Type::DICTIONARY);
-  transfer_info.SetIntKey(kResultCodeKey, static_cast<int>(status));
-  transfer_info.SetKey(kDataKey, base::Value(data));
+  base::Value::Dict transfer_info;
+  transfer_info.Set(kResultCodeKey, static_cast<int>(status));
+  transfer_info.Set(kDataKey, base::Value(data));
 
-  OnCompleted(status, base::DictionaryValue::From(base::Value::ToUniquePtrValue(
-                          std::move(transfer_info))));
+  OnCompleted(status, std::move(transfer_info));
 }
 
 void UsbTransferFunction::OnTransferOutCompleted(UsbTransferStatus status) {
-  auto transfer_info = std::make_unique<base::DictionaryValue>();
-  transfer_info->SetIntKey(kResultCodeKey, static_cast<int>(status));
-  transfer_info->SetKey(kDataKey, base::Value(base::Value::Type::BINARY));
+  base::Value::Dict transfer_info;
+  transfer_info.Set(kResultCodeKey, static_cast<int>(status));
+  transfer_info.Set(kDataKey, base::Value(base::Value::Type::BINARY));
 
   OnCompleted(status, std::move(transfer_info));
 }
 
 void UsbTransferFunction::OnDisconnect() {
   const auto status = UsbTransferStatus::DISCONNECT;
-  auto transfer_info = std::make_unique<base::DictionaryValue>();
-  transfer_info->SetIntKey(kResultCodeKey, static_cast<int>(status));
+  base::Value::Dict transfer_info;
+  transfer_info.Set(kResultCodeKey, static_cast<int>(status));
   OnCompleted(status, std::move(transfer_info));
 }
 
@@ -1307,9 +1303,9 @@
     data_ptr += packet->length;
   }
 
-  auto transfer_info = std::make_unique<base::DictionaryValue>();
-  transfer_info->SetKey(kResultCodeKey, base::Value(static_cast<int>(status)));
-  transfer_info->SetKey(kDataKey, base::Value(std::move(buffer)));
+  base::Value::Dict transfer_info;
+  transfer_info.Set(kResultCodeKey, base::Value(static_cast<int>(status)));
+  transfer_info.Set(kDataKey, base::Value(std::move(buffer)));
   OnCompleted(status, std::move(transfer_info));
 }
 
@@ -1323,8 +1319,8 @@
       status = packet->status;
     }
   }
-  auto transfer_info = std::make_unique<base::DictionaryValue>();
-  transfer_info->SetKey(kResultCodeKey, base::Value(static_cast<int>(status)));
+  base::Value::Dict transfer_info;
+  transfer_info.Set(kResultCodeKey, base::Value(static_cast<int>(status)));
   OnCompleted(status, std::move(transfer_info));
 }
 
diff --git a/extensions/browser/api/usb/usb_api.h b/extensions/browser/api/usb/usb_api.h
index 1938be43..b579ce8 100644
--- a/extensions/browser/api/usb/usb_api.h
+++ b/extensions/browser/api/usb/usb_api.h
@@ -76,7 +76,7 @@
   ~UsbTransferFunction() override;
 
   void OnCompleted(device::mojom::UsbTransferStatus status,
-                   std::unique_ptr<base::DictionaryValue> transfer_info);
+                   base::Value::Dict transfer_info);
   void OnTransferInCompleted(device::mojom::UsbTransferStatus status,
                              base::span<const uint8_t> data);
   void OnTransferOutCompleted(device::mojom::UsbTransferStatus status);
diff --git a/extensions/browser/extension_function_dispatcher.cc b/extensions/browser/extension_function_dispatcher.cc
index 72df5a3..bad28683 100644
--- a/extensions/browser/extension_function_dispatcher.cc
+++ b/extensions/browser/extension_function_dispatcher.cc
@@ -406,8 +406,8 @@
   std::unique_ptr<ResponseCallbackWrapper>& callback_wrapper =
       response_callback_wrappers_[&frame];
   if (!callback_wrapper) {
-    callback_wrapper =
-        std::make_unique<ResponseCallbackWrapper>(AsWeakPtr(), &frame);
+    callback_wrapper = std::make_unique<ResponseCallbackWrapper>(
+        weak_ptr_factory_.GetWeakPtr(), &frame);
   }
 
   DispatchWithCallbackInternal(
@@ -448,7 +448,7 @@
       response_callback_wrappers_for_worker_[key];
   if (!callback_wrapper) {
     callback_wrapper = std::make_unique<WorkerResponseCallbackWrapper>(
-        AsWeakPtr(), rph, params.worker_thread_id);
+        weak_ptr_factory_.GetWeakPtr(), rph, params.worker_thread_id);
   }
 
   DispatchWithCallbackInternal(params, nullptr, render_process_id,
@@ -501,7 +501,7 @@
   } else {
     function->SetRenderFrameHost(render_frame_host);
   }
-  function->SetDispatcher(AsWeakPtr());
+  function->SetDispatcher(weak_ptr_factory_.GetWeakPtr());
   if (extension &&
       ExtensionsBrowserClient::Get()->CanExtensionCrossIncognito(
           extension, browser_context_)) {
diff --git a/extensions/browser/extension_function_dispatcher.h b/extensions/browser/extension_function_dispatcher.h
index d0fb9ef..e661317 100644
--- a/extensions/browser/extension_function_dispatcher.h
+++ b/extensions/browser/extension_function_dispatcher.h
@@ -42,8 +42,7 @@
 // we can gracefully handle cases like WebContents, where the RVH, extension,
 // and URL can all change over the lifetime of the tab. Instead, these items
 // are all passed into each request.
-class ExtensionFunctionDispatcher
-    : public base::SupportsWeakPtr<ExtensionFunctionDispatcher> {
+class ExtensionFunctionDispatcher {
  public:
   class Delegate {
    public:
@@ -111,6 +110,10 @@
   void ProcessServiceWorkerResponse(int request_id,
                                     int64_t service_worker_version_id);
 
+  base::WeakPtr<ExtensionFunctionDispatcher> AsWeakPtr() {
+    return weak_ptr_factory_.GetWeakPtr();
+  }
+
  private:
   // For a given RenderFrameHost instance, ResponseCallbackWrapper
   // creates ExtensionFunction::ResponseCallback instances which send responses
@@ -171,6 +174,8 @@
   // the renderer. These are removed once the response is processed.
   // The lifetimes of the instances are managed by the instances themselves.
   std::set<ExtensionFunction*> worker_response_targets_;
+
+  base::WeakPtrFactory<ExtensionFunctionDispatcher> weak_ptr_factory_{this};
 };
 
 }  // namespace extensions
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index 15ca7ed..0f6034d 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1792,6 +1792,7 @@
   AUTOTESTPRIVATE_REMOVECOMPONENTEXTENSION = 1729,
   PASSWORDSPRIVATE_REQUESTCREDENTIALSDETAILS = 1730,
   PASSWORDSPRIVATE_GETCREDENTIALGROUPS = 1731,
+  AUTOTESTPRIVATE_GETLAUNCHERSSEARCHBOXSTATE = 1732,
   // Last entry: Add new entries above, then run:
   // tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/extensions/browser/state_store.cc b/extensions/browser/state_store.cc
index 1c522a3..d963d60 100644
--- a/extensions/browser/state_store.cc
+++ b/extensions/browser/state_store.cc
@@ -99,7 +99,8 @@
   if (deferred_load) {
     // Call `Init()` asynchronously with a low priority to not delay startup.
     content::GetUIThreadTaskRunner({base::TaskPriority::USER_VISIBLE})
-        ->PostTask(FROM_HERE, base::BindOnce(&StateStore::Init, AsWeakPtr()));
+        ->PostTask(FROM_HERE, base::BindOnce(&StateStore::Init,
+                                             weak_ptr_factory_.GetWeakPtr()));
   } else {
     Init();
   }
diff --git a/extensions/browser/state_store.h b/extensions/browser/state_store.h
index f545d363..6d2cec3 100644
--- a/extensions/browser/state_store.h
+++ b/extensions/browser/state_store.h
@@ -28,8 +28,7 @@
 namespace extensions {
 
 // A storage area for per-extension state that needs to be persisted to disk.
-class StateStore : public base::SupportsWeakPtr<StateStore>,
-                   public ExtensionRegistryObserver {
+class StateStore : public ExtensionRegistryObserver {
  public:
   typedef value_store::ValueStoreFrontend::ReadCallback ReadCallback;
 
@@ -118,6 +117,8 @@
 
   base::ScopedObservation<ExtensionRegistry, ExtensionRegistryObserver>
       extension_registry_observation_{this};
+
+  base::WeakPtrFactory<StateStore> weak_ptr_factory_{this};
 };
 
 }  // namespace extensions
diff --git a/extensions/shell/BUILD.gn b/extensions/shell/BUILD.gn
index 6922940..e82d4f8 100644
--- a/extensions/shell/BUILD.gn
+++ b/extensions/shell/BUILD.gn
@@ -61,7 +61,6 @@
     "//extensions:extensions_resources",
     "//extensions:shell_and_test_pak",
     "//extensions/browser",
-    "//extensions/browser:core_api_provider",
     "//extensions/browser/kiosk",
     "//extensions/browser/updater",
     "//extensions/common",
diff --git a/extensions/shell/browser/shell_extensions_browser_client.cc b/extensions/shell/browser/shell_extensions_browser_client.cc
index 73a68190..4c5cbc6 100644
--- a/extensions/shell/browser/shell_extensions_browser_client.cc
+++ b/extensions/shell/browser/shell_extensions_browser_client.cc
@@ -17,8 +17,8 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/common/user_agent.h"
+#include "extensions/browser/api/core_extensions_browser_api_provider.h"
 #include "extensions/browser/api/extensions_api_client.h"
-#include "extensions/browser/core_extensions_browser_api_provider.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extensions_browser_interface_binders.h"
 #include "extensions/browser/null_app_sorting.h"
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index a469d3c1..be7ba1eb 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -1290,6 +1290,7 @@
   //     GL_OES_depth32
 
   if (gfx::HasExtension(extensions, "GL_ANGLE_texture_usage")) {
+    feature_flags_.angle_texture_usage = true;
     AddExtensionString("GL_ANGLE_texture_usage");
     validators_.texture_parameter.AddValue(GL_TEXTURE_USAGE_ANGLE);
   }
diff --git a/gpu/command_buffer/service/shared_image/iosurface_image_backing.h b/gpu/command_buffer/service/shared_image/iosurface_image_backing.h
index 316c3b10..f6bba4b 100644
--- a/gpu/command_buffer/service/shared_image/iosurface_image_backing.h
+++ b/gpu/command_buffer/service/shared_image/iosurface_image_backing.h
@@ -23,12 +23,9 @@
 // IOSurface backing.
 class GLTextureIOSurfaceRepresentationClient {
  public:
-  virtual bool GLTextureImageRepresentationBeginAccess(EGLDisplay display,
-                                                       bool readonly) = 0;
-  virtual void GLTextureImageRepresentationEndAccess(EGLDisplay display,
-                                                     bool readonly) = 0;
-  virtual void GLTextureImageRepresentationRelease(EGLDisplay display,
-                                                   bool have_context) = 0;
+  virtual bool GLTextureImageRepresentationBeginAccess(bool readonly) = 0;
+  virtual void GLTextureImageRepresentationEndAccess(bool readonly) = 0;
+  virtual void GLTextureImageRepresentationRelease(bool have_context) = 0;
 };
 
 // Representation of a GLTextureImageBacking or
@@ -185,7 +182,7 @@
   void InitializePixels(GLenum format, GLenum type, const uint8_t* data);
 
   GLenum GetGLTarget() const;
-  GLuint GetGLServiceId(EGLDisplay display) const;
+  GLuint GetGLServiceId() const;
   std::unique_ptr<gfx::GpuFence> GetLastWriteGpuFence();
   void SetReleaseFence(gfx::GpuFenceHandle release_fence);
 
@@ -225,12 +222,9 @@
   void Update(std::unique_ptr<gfx::GpuFence> in_fence) override;
 
   // GLTextureIOSurfaceRepresentationClient:
-  bool GLTextureImageRepresentationBeginAccess(EGLDisplay display,
-                                               bool readonly) override;
-  void GLTextureImageRepresentationEndAccess(EGLDisplay display,
-                                             bool readonly) override;
-  void GLTextureImageRepresentationRelease(EGLDisplay display,
-                                           bool have_context) override;
+  bool GLTextureImageRepresentationBeginAccess(bool readonly) override;
+  void GLTextureImageRepresentationEndAccess(bool readonly) override;
+  void GLTextureImageRepresentationRelease(bool have_context) override;
 
   bool IsPassthrough() const { return true; }
 
@@ -243,22 +237,10 @@
   // disallowed concurrent read/write accesses.
   bool ongoing_write_access_ = false;
 
-  void RetainGLTexture(EGLDisplay display);
-  void ReleaseGLTexture(EGLDisplay display, bool have_context);
-
-  struct TextureInfo {
-    TextureInfo();
-    TextureInfo(const TextureInfo&) = delete;
-    ~TextureInfo();
-
-    size_t gl_texture_retain_count_ = 0;
-    scoped_refptr<gles2::TexturePassthrough> gl_texture_ = nullptr;
-    std::unique_ptr<gl::ScopedEGLSurfaceIOSurface> egl_surface_;
-  };
-
-  TextureInfo& GetTextureInfo(EGLDisplay display);
-
-  std::map<EGLDisplay, TextureInfo> texture_infos_;
+  void RetainGLTexture();
+  void ReleaseGLTexture(bool have_context);
+  size_t gl_texture_retain_count_ = 0;
+  bool gl_texture_retained_for_legacy_mailbox_ = false;
 
   const GLTextureImageBackingHelper::InitializeGLTextureParams gl_params_;
 
@@ -266,6 +248,9 @@
   // |texture_| is nullptr.
   gfx::Rect cleared_rect_;
 
+  std::unique_ptr<gl::ScopedEGLSurfaceIOSurface> egl_surface_;
+  scoped_refptr<gles2::TexturePassthrough> gl_texture_;
+
   sk_sp<SkPromiseImageTexture> cached_promise_texture_;
   std::unique_ptr<gl::GLFence> last_write_gl_fence_;
 
diff --git a/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm b/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm
index 8422f1f..89fe89f 100644
--- a/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm
+++ b/gpu/command_buffer/service/shared_image/iosurface_image_backing.mm
@@ -59,9 +59,7 @@
 GLTextureIOSurfaceRepresentation::~GLTextureIOSurfaceRepresentation() {
   texture_.reset();
   if (client_)
-    client_->GLTextureImageRepresentationRelease(
-        gl::GLDisplayEGL::GetDisplayForCurrentContext()->GetDisplay(),
-        has_context());
+    client_->GLTextureImageRepresentationRelease(has_context());
 }
 
 const scoped_refptr<gles2::TexturePassthrough>&
@@ -75,9 +73,7 @@
   mode_ = mode;
   bool readonly = mode_ != GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM;
   if (client_ && mode != GL_SHARED_IMAGE_ACCESS_MODE_OVERLAY_CHROMIUM)
-    return client_->GLTextureImageRepresentationBeginAccess(
-        gl::GLDisplayEGL::GetDisplayForCurrentContext()->GetDisplay(),
-        readonly);
+    return client_->GLTextureImageRepresentationBeginAccess(readonly);
   return true;
 }
 
@@ -87,7 +83,6 @@
   mode_ = 0;
   if (client_)
     return client_->GLTextureImageRepresentationEndAccess(
-        gl::GLDisplayEGL::GetDisplayForCurrentContext()->GetDisplay(),
         current_mode != GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM);
 }
 
@@ -120,8 +115,7 @@
   promise_texture_.reset();
   if (client_) {
     DCHECK(context_state_->GrContextIsGL());
-    client_->GLTextureImageRepresentationRelease(
-        context_state_->display()->GetDisplay(), has_context());
+    client_->GLTextureImageRepresentationRelease(has_context());
   }
 }
 
@@ -136,7 +130,6 @@
   if (client_) {
     DCHECK(context_state_->GrContextIsGL());
     if (!client_->GLTextureImageRepresentationBeginAccess(
-            context_state_->display()->GetDisplay(),
             /*readonly=*/false)) {
       return {};
     }
@@ -174,7 +167,6 @@
   if (client_) {
     DCHECK(context_state_->GrContextIsGL());
     if (!client_->GLTextureImageRepresentationBeginAccess(
-            context_state_->display()->GetDisplay(),
             /*readonly=*/false)) {
       return {};
     }
@@ -193,8 +185,7 @@
   }
 
   if (client_)
-    client_->GLTextureImageRepresentationEndAccess(
-        context_state_->display()->GetDisplay(), false /* readonly */);
+    client_->GLTextureImageRepresentationEndAccess(false /* readonly */);
 }
 
 std::vector<sk_sp<SkPromiseImageTexture>>
@@ -206,7 +197,6 @@
   if (client_) {
     DCHECK(context_state_->GrContextIsGL());
     if (!client_->GLTextureImageRepresentationBeginAccess(
-            context_state_->display()->GetDisplay(),
             /*readonly=*/true)) {
       return {};
     }
@@ -218,8 +208,7 @@
 
 void SkiaIOSurfaceRepresentation::EndReadAccess() {
   if (client_)
-    client_->GLTextureImageRepresentationEndAccess(
-        context_state_->display()->GetDisplay(), true /* readonly */);
+    client_->GLTextureImageRepresentationEndAccess(true /* readonly */);
 }
 
 bool SkiaIOSurfaceRepresentation::SupportsMultipleConcurrentReadAccess() {
@@ -337,39 +326,42 @@
   // https://crbug.com/1251724
   if (usage & SHARED_IMAGE_USAGE_HIGH_PERFORMANCE_GPU)
     return;
-}
 
-IOSurfaceImageBacking::~IOSurfaceImageBacking() {
-  for (auto& iter : texture_infos_) {
-    DCHECK_EQ(iter.second.gl_texture_retain_count_, 0u);
+  // NOTE: Mac currently retains GLTexture and reuses it. Not sure if this is
+  // best approach as it can lead to issues with context losses.
+  if (!gl_texture_retained_for_legacy_mailbox_) {
+    RetainGLTexture();
+    gl_texture_retained_for_legacy_mailbox_ = true;
   }
 }
 
-void IOSurfaceImageBacking::RetainGLTexture(EGLDisplay display) {
-  auto& texture_info = texture_infos_[display];
-  texture_info.gl_texture_retain_count_ += 1;
-  if (texture_info.gl_texture_retain_count_ > 1)
+IOSurfaceImageBacking::~IOSurfaceImageBacking() {
+  if (gl_texture_retained_for_legacy_mailbox_)
+    ReleaseGLTexture(have_context());
+  DCHECK_EQ(gl_texture_retain_count_, 0u);
+}
+
+void IOSurfaceImageBacking::RetainGLTexture() {
+  gl_texture_retain_count_ += 1;
+  if (gl_texture_retain_count_ > 1)
     return;
 
   // Allocate the GL texture.
   GLTextureImageBackingHelper::MakeTextureAndSetParameters(
       gl_params_.target, 0 /* service_id */,
-      gl_params_.framebuffer_attachment_angle, &texture_info.gl_texture_,
-      nullptr);
+      gl_params_.framebuffer_attachment_angle, &gl_texture_, nullptr);
 
   // Set the GLImage to be initially unbound from the GL texture.
-  texture_info.gl_texture_->SetEstimatedSize(
+  gl_texture_->SetEstimatedSize(
       viz::ResourceSizes::UncheckedSizeInBytes<size_t>(size(), format()));
-  texture_info.gl_texture_->SetLevelImage(gl_params_.target, 0, image_.get());
-  texture_info.gl_texture_->set_is_bind_pending(true);
+  gl_texture_->SetLevelImage(gl_params_.target, 0, image_.get());
+  gl_texture_->set_is_bind_pending(true);
 }
 
-void IOSurfaceImageBacking::ReleaseGLTexture(EGLDisplay display,
-                                             bool have_context) {
-  auto& texture_info = GetTextureInfo(display);
-  DCHECK_GT(texture_info.gl_texture_retain_count_, 0u);
-  texture_info.gl_texture_retain_count_ -= 1;
-  if (texture_info.gl_texture_retain_count_ > 0)
+void IOSurfaceImageBacking::ReleaseGLTexture(bool have_context) {
+  DCHECK_GT(gl_texture_retain_count_, 0u);
+  gl_texture_retain_count_ -= 1;
+  if (gl_texture_retain_count_ > 0)
     return;
 
   // If the cached promise texture is referencing the GL texture, then it needs
@@ -381,43 +373,27 @@
     }
   }
 
-  if (texture_info.gl_texture_) {
+  if (gl_texture_) {
     if (have_context) {
-      if (texture_info.egl_surface_) {
-        ScopedRestoreTexture scoped_restore(
-            gl::g_current_gl_context, GetGLTarget(), GetGLServiceId(display));
-        texture_info.egl_surface_.reset();
+      if (egl_surface_) {
+        ScopedRestoreTexture scoped_restore(gl::g_current_gl_context,
+                                            GetGLTarget(), GetGLServiceId());
+        egl_surface_.reset();
       }
     } else {
-      texture_info.gl_texture_->MarkContextLost();
+      gl_texture_->MarkContextLost();
     }
-    texture_info.gl_texture_.reset();
+    gl_texture_.reset();
   }
 }
 
-IOSurfaceImageBacking::TextureInfo& IOSurfaceImageBacking::GetTextureInfo(
-    EGLDisplay display) {
-#if DCHECK_IS_ON()
-  auto iter = texture_infos_.find(display);
-  DCHECK(iter != texture_infos_.end());
-#endif
-  return texture_infos_[display];
-}
-
-IOSurfaceImageBacking::TextureInfo::TextureInfo() = default;
-
-IOSurfaceImageBacking::TextureInfo::~TextureInfo() = default;
-
 GLenum IOSurfaceImageBacking::GetGLTarget() const {
   return gl_params_.target;
 }
 
-GLuint IOSurfaceImageBacking::GetGLServiceId(EGLDisplay display) const {
-  auto iter = texture_infos_.find(display);
-  if (texture_infos_.end() == iter)
-    return 0;
-  if (iter->second.gl_texture_)
-    return iter->second.gl_texture_->service_id();
+GLuint IOSurfaceImageBacking::GetGLServiceId() const {
+  if (gl_texture_)
+    return gl_texture_->service_id();
   return 0;
 }
 
@@ -451,11 +427,8 @@
 
   // Add a |service_guid| which expresses shared ownership between the
   // various GPU dumps.
-  EGLDisplay display =
-      gl::GLDisplayEGL::GetDisplayForCurrentContext()->GetDisplay();
-  if (auto service_id = GetGLServiceId(display)) {
-    auto service_guid =
-        gl::GetGLTextureServiceGUIDForTracing(GetGLServiceId(display));
+  if (auto service_id = GetGLServiceId()) {
+    auto service_guid = gl::GetGLTextureServiceGUIDForTracing(GetGLServiceId());
     pmd->CreateSharedGlobalAllocatorDump(service_guid);
     pmd->AddOwnershipEdge(client_guid, service_guid, kOwningEdgeImportance);
   }
@@ -483,14 +456,12 @@
 std::unique_ptr<GLTexturePassthroughImageRepresentation>
 IOSurfaceImageBacking::ProduceGLTexturePassthrough(SharedImageManager* manager,
                                                    MemoryTypeTracker* tracker) {
-  gl::GLDisplayEGL* display = gl::GLDisplayEGL::GetDisplayForCurrentContext();
   // The corresponding release will be done when the returned representation is
   // destroyed, in GLTextureImageRepresentationRelease.
-  RetainGLTexture(display->GetDisplay());
-  auto& texture_info = GetTextureInfo(display->GetDisplay());
-  DCHECK(texture_info.gl_texture_);
+  RetainGLTexture();
+  DCHECK(gl_texture_);
   return std::make_unique<GLTextureIOSurfaceRepresentation>(
-      manager, this, this, tracker, texture_info.gl_texture_);
+      manager, this, this, tracker, gl_texture_);
 }
 
 std::unique_ptr<OverlayImageRepresentation>
@@ -527,8 +498,7 @@
   if (context_state->GrContextIsGL()) {
     // The corresponding release will be done when the returned representation
     // is destroyed, in GLTextureImageRepresentationRelease.
-    RetainGLTexture(
-        gl::GLDisplayEGL::GetDisplayForCurrentContext()->GetDisplay());
+    RetainGLTexture();
     gl_client = this;
   }
 
@@ -540,12 +510,10 @@
       DCHECK(cached_promise_texture_);
     } else {
       GrBackendTexture backend_texture;
-      GetGrBackendTexture(
-          context_state->feature_info(), GetGLTarget(), size(),
-          GetGLServiceId(
-              gl::GLDisplayEGL::GetDisplayForCurrentContext()->GetDisplay()),
-          format().resource_format(),
-          context_state->gr_context()->threadSafeProxy(), &backend_texture);
+      GetGrBackendTexture(context_state->feature_info(), GetGLTarget(), size(),
+                          GetGLServiceId(), format().resource_format(),
+                          context_state->gr_context()->threadSafeProxy(),
+                          &backend_texture);
       cached_promise_texture_ = SkPromiseImageTexture::Make(backend_texture);
     }
   }
@@ -591,14 +559,11 @@
         gl::GLFence::CreateFromGpuFence(*in_fence.get());
     egl_fence->ServerWait();
   }
-  gl::GLDisplayEGL* display = gl::GLDisplayEGL::GetDisplayForCurrentContext();
-  auto iter = texture_infos_.find(display);
-  if (iter != texture_infos_.end() && iter->second.gl_texture_)
-    iter->second.gl_texture_->set_is_bind_pending(true);
+  if (gl_texture_)
+    gl_texture_->set_is_bind_pending(true);
 }
 
 bool IOSurfaceImageBacking::GLTextureImageRepresentationBeginAccess(
-    EGLDisplay egl_display,
     bool readonly) {
   DCHECK(!ongoing_write_access_);
   if (readonly) {
@@ -618,13 +583,10 @@
       fence.Wait();
     }
   }
-  gl::GLDisplayEGL* display = gl::GLDisplayEGL::GetDisplayForCurrentContext();
-  DCHECK_EQ(display->GetDisplay(), egl_display);
-  auto& texture_info = GetTextureInfo(egl_display);
 
   // If the GL texture is already bound (the bind is not marked as pending),
   // then early-out.
-  if (!texture_info.gl_texture_->is_bind_pending())
+  if (!gl_texture_->is_bind_pending())
     return true;
 
   if (usage() & SHARED_IMAGE_USAGE_WEBGPU &&
@@ -634,6 +596,7 @@
     // If any Metal shared events have been enqueued (the assumption
     // is that this was done by the Dawn representation), wait on
     // them.
+    gl::GLDisplayEGL* display = gl::GLDisplayEGL::GetDisplayForCurrentContext();
     if (display && display->IsANGLEMetalSharedEventSyncSupported()) {
       std::vector<std::unique_ptr<SharedEventAndSignalValue>> signals =
           TakeSharedEvents();
@@ -646,40 +609,40 @@
 
   // Create the EGL surface to bind to the GL texture, if it doesn't exist
   // already.
-  if (!texture_info.egl_surface_) {
+  if (!egl_surface_) {
     auto* gl_image_io_surface =
         static_cast<gl::GLImageIOSurface*>(image_.get());
+    gl::GLDisplayEGL* display = gl::GLDisplayEGL::GetDisplayForCurrentContext();
     if (!display) {
       LOG(ERROR) << "No GLDisplayEGL current.";
       return false;
     }
-    texture_info.egl_surface_ = gl::ScopedEGLSurfaceIOSurface::Create(
+    egl_surface_ = gl::ScopedEGLSurfaceIOSurface::Create(
         display->GetDisplay(), GetGLTarget(), gl_image_io_surface->io_surface(),
         gl_image_io_surface->io_surface_plane(), gl_image_io_surface->format());
-    if (!texture_info.egl_surface_) {
+    if (!egl_surface_) {
       LOG(ERROR) << "Failed to create ScopedEGLSurfaceIOSurface.";
       return false;
     }
   }
 
   ScopedRestoreTexture scoped_restore(gl::g_current_gl_context, GetGLTarget(),
-                                      texture_info.gl_texture_->service_id());
+                                      GetGLServiceId());
 
   // Un-bind the IOSurface from the GL texture (this will be a no-op if it is
   // not yet bound).
-  texture_info.egl_surface_->ReleaseTexImage();
+  egl_surface_->ReleaseTexImage();
 
   // Bind the IOSurface to the GL texture.
-  if (!texture_info.egl_surface_->BindTexImage()) {
+  if (!egl_surface_->BindTexImage()) {
     LOG(ERROR) << "Failed to bind ScopedEGLSurfaceIOSurface to target";
     return false;
   }
-  texture_info.gl_texture_->set_is_bind_pending(false);
+  gl_texture_->set_is_bind_pending(false);
   return true;
 }
 
 void IOSurfaceImageBacking::GLTextureImageRepresentationEndAccess(
-    EGLDisplay egl_display,
     bool readonly) {
   if (readonly) {
     DCHECK(num_ongoing_read_accesses_ > 0);
@@ -733,14 +696,13 @@
       (gl::GetANGLEImplementation() == gl::ANGLEImplementation::kMetal &&
        !readonly);
 
-  gl::GLDisplayEGL* display = gl::GLDisplayEGL::GetDisplayForCurrentContext();
-  DCHECK_EQ(display->GetDisplay(), egl_display);
-  auto& texture_info = GetTextureInfo(egl_display);
   bool needs_synchronization = needs_sync_for_swangle || needs_sync_for_metal;
   if (needs_synchronization) {
     if (needs_sync_for_metal) {
       if (@available(macOS 10.14, *)) {
-        if (texture_info.egl_surface_) {
+        if (egl_surface_) {
+          gl::GLDisplayEGL* display =
+              gl::GLDisplayEGL::GetDisplayForCurrentContext();
           if (display) {
             metal::MTLSharedEventPtr shared_event = nullptr;
             uint64_t signal_value = 0;
@@ -754,24 +716,20 @@
       }
     }
 
-    if (!texture_info.gl_texture_->is_bind_pending()) {
-      if (texture_info.egl_surface_) {
-        ScopedRestoreTexture scoped_restore(
-            gl::g_current_gl_context, GetGLTarget(),
-            texture_info.gl_texture_->service_id());
-        texture_info.egl_surface_->ReleaseTexImage();
+    if (!gl_texture_->is_bind_pending()) {
+      if (egl_surface_) {
+        ScopedRestoreTexture scoped_restore(gl::g_current_gl_context,
+                                            GetGLTarget(), GetGLServiceId());
+        egl_surface_->ReleaseTexImage();
       }
-      texture_info.gl_texture_->set_is_bind_pending(true);
+      gl_texture_->set_is_bind_pending(true);
     }
   }
 }
 
 void IOSurfaceImageBacking::GLTextureImageRepresentationRelease(
-    EGLDisplay egl_display,
     bool has_context) {
-  DCHECK_EQ(gl::GLDisplayEGL::GetDisplayForCurrentContext()->GetDisplay(),
-            egl_display);
-  ReleaseGLTexture(egl_display, has_context);
+  ReleaseGLTexture(has_context);
 }
 
 void IOSurfaceImageBacking::InitializePixels(GLenum format,
diff --git a/headless/lib/headless_content_main_delegate.cc b/headless/lib/headless_content_main_delegate.cc
index f93bcac5..1fc2a4d 100644
--- a/headless/lib/headless_content_main_delegate.cc
+++ b/headless/lib/headless_content_main_delegate.cc
@@ -16,6 +16,7 @@
 #include "base/files/file_util.h"
 #include "base/lazy_instance.h"
 #include "base/path_service.h"
+#include "base/process/current_process.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/trace_event/trace_event.h"
@@ -377,8 +378,8 @@
   if (!process_type.empty())
     return std::move(main_function_params);
 
-  base::trace_event::TraceLog::GetInstance()->set_process_name(
-      "HeadlessBrowser");
+  base::CurrentProcess::GetInstance().SetProcessType(
+      base::CurrentProcessType::PROCESS_BROWSER);
   base::trace_event::TraceLog::GetInstance()->SetProcessSortIndex(
       kTraceEventBrowserProcessSortIndex);
 
diff --git a/infra/config/generated/builders/ci/GPU Win x64 Builder/properties.json b/infra/config/generated/builders/ci/GPU Win x64 Builder/properties.json
index 8c034dfc..c071f526 100644
--- a/infra/config/generated/builders/ci/GPU Win x64 Builder/properties.json
+++ b/infra/config/generated/builders/ci/GPU Win x64 Builder/properties.json
@@ -84,6 +84,10 @@
           "group": "tryserver.chromium.win"
         },
         {
+          "builder": "win-rel-inverse-fyi",
+          "group": "tryserver.chromium.win"
+        },
+        {
           "builder": "win10_chromium_inverse_fieldtrials_x64_fyi_rel_ng",
           "group": "tryserver.chromium.win"
         },
@@ -92,10 +96,6 @@
           "group": "tryserver.chromium.win"
         },
         {
-          "builder": "win10_chromium_x64_rel_ng-inverse-fyi",
-          "group": "tryserver.chromium.win"
-        },
-        {
           "builder": "win10_chromium_x64_rel_ng-reclient",
           "group": "tryserver.chromium.win"
         }
diff --git "a/infra/config/generated/builders/ci/Mac Builder \050dbg\051/properties.json" "b/infra/config/generated/builders/ci/Mac Builder \050dbg\051/properties.json"
index 30a3567..be92ca3 100644
--- "a/infra/config/generated/builders/ci/Mac Builder \050dbg\051/properties.json"
+++ "b/infra/config/generated/builders/ci/Mac Builder \050dbg\051/properties.json"
@@ -79,9 +79,6 @@
               "legacy_gclient_config": {
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "parent": {
                 "bucket": "ci",
                 "builder": "Mac Builder (dbg)",
diff --git a/infra/config/generated/builders/ci/VR Linux/properties.json b/infra/config/generated/builders/ci/VR Linux/properties.json
index cc856d6..bc48aa6f 100644
--- a/infra/config/generated/builders/ci/VR Linux/properties.json
+++ b/infra/config/generated/builders/ci/VR Linux/properties.json
@@ -23,9 +23,6 @@
               },
               "legacy_gclient_config": {
                 "config": "chromium"
-              },
-              "legacy_test_results_config": {
-                "config": "staging_server"
               }
             }
           }
diff --git a/infra/config/generated/builders/ci/Win x64 Builder/properties.json b/infra/config/generated/builders/ci/Win x64 Builder/properties.json
index 03beae18..0b23cdc 100644
--- a/infra/config/generated/builders/ci/Win x64 Builder/properties.json
+++ b/infra/config/generated/builders/ci/Win x64 Builder/properties.json
@@ -155,6 +155,10 @@
           "group": "tryserver.chromium.win"
         },
         {
+          "builder": "win-rel-inverse-fyi",
+          "group": "tryserver.chromium.win"
+        },
+        {
           "builder": "win10_chromium_inverse_fieldtrials_x64_fyi_rel_ng",
           "group": "tryserver.chromium.win"
         },
@@ -163,10 +167,6 @@
           "group": "tryserver.chromium.win"
         },
         {
-          "builder": "win10_chromium_x64_rel_ng-inverse-fyi",
-          "group": "tryserver.chromium.win"
-        },
-        {
           "builder": "win10_chromium_x64_rel_ng-reclient",
           "group": "tryserver.chromium.win"
         },
diff --git a/infra/config/generated/builders/ci/Win10 Tests x64/properties.json b/infra/config/generated/builders/ci/Win10 Tests x64/properties.json
index 391e801..26ee95a5 100644
--- a/infra/config/generated/builders/ci/Win10 Tests x64/properties.json
+++ b/infra/config/generated/builders/ci/Win10 Tests x64/properties.json
@@ -77,6 +77,10 @@
           "group": "tryserver.chromium.win"
         },
         {
+          "builder": "win-rel-inverse-fyi",
+          "group": "tryserver.chromium.win"
+        },
+        {
           "builder": "win10_chromium_inverse_fieldtrials_x64_fyi_rel_ng",
           "group": "tryserver.chromium.win"
         },
@@ -85,10 +89,6 @@
           "group": "tryserver.chromium.win"
         },
         {
-          "builder": "win10_chromium_x64_rel_ng-inverse-fyi",
-          "group": "tryserver.chromium.win"
-        },
-        {
           "builder": "win10_chromium_x64_rel_ng-reclient",
           "group": "tryserver.chromium.win"
         }
diff --git "a/infra/config/generated/builders/ci/Win10 x64 Release \050NVIDIA\051/properties.json" "b/infra/config/generated/builders/ci/Win10 x64 Release \050NVIDIA\051/properties.json"
index d7a74dd..ae95372 100644
--- "a/infra/config/generated/builders/ci/Win10 x64 Release \050NVIDIA\051/properties.json"
+++ "b/infra/config/generated/builders/ci/Win10 x64 Release \050NVIDIA\051/properties.json"
@@ -77,6 +77,10 @@
           "group": "tryserver.chromium.win"
         },
         {
+          "builder": "win-rel-inverse-fyi",
+          "group": "tryserver.chromium.win"
+        },
+        {
           "builder": "win10_chromium_inverse_fieldtrials_x64_fyi_rel_ng",
           "group": "tryserver.chromium.win"
         },
@@ -85,10 +89,6 @@
           "group": "tryserver.chromium.win"
         },
         {
-          "builder": "win10_chromium_x64_rel_ng-inverse-fyi",
-          "group": "tryserver.chromium.win"
-        },
-        {
           "builder": "win10_chromium_x64_rel_ng-reclient",
           "group": "tryserver.chromium.win"
         }
diff --git a/infra/config/generated/builders/ci/fuchsia-arm64-chrome-rel/properties.json b/infra/config/generated/builders/ci/fuchsia-arm64-chrome-rel/properties.json
index fafcec6..d76fafe 100644
--- a/infra/config/generated/builders/ci/fuchsia-arm64-chrome-rel/properties.json
+++ b/infra/config/generated/builders/ci/fuchsia-arm64-chrome-rel/properties.json
@@ -30,9 +30,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "run_tests_serially": true
             }
           }
diff --git a/infra/config/generated/builders/ci/fuchsia-fyi-arm64-dbg/properties.json b/infra/config/generated/builders/ci/fuchsia-fyi-arm64-dbg/properties.json
index e05a26f..a40314e8 100644
--- a/infra/config/generated/builders/ci/fuchsia-fyi-arm64-dbg/properties.json
+++ b/infra/config/generated/builders/ci/fuchsia-fyi-arm64-dbg/properties.json
@@ -30,9 +30,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "run_tests_serially": true
             }
           }
diff --git a/infra/config/generated/builders/ci/fuchsia-fyi-x64-asan/properties.json b/infra/config/generated/builders/ci/fuchsia-fyi-x64-asan/properties.json
index 0f6b139..6f705e60 100644
--- a/infra/config/generated/builders/ci/fuchsia-fyi-x64-asan/properties.json
+++ b/infra/config/generated/builders/ci/fuchsia-fyi-x64-asan/properties.json
@@ -27,9 +27,6 @@
                   "fuchsia_x64"
                 ],
                 "config": "chromium"
-              },
-              "legacy_test_results_config": {
-                "config": "staging_server"
               }
             }
           }
diff --git a/infra/config/generated/builders/ci/fuchsia-fyi-x64-dbg/properties.json b/infra/config/generated/builders/ci/fuchsia-fyi-x64-dbg/properties.json
index 84ce889..82a9f3e 100644
--- a/infra/config/generated/builders/ci/fuchsia-fyi-x64-dbg/properties.json
+++ b/infra/config/generated/builders/ci/fuchsia-fyi-x64-dbg/properties.json
@@ -27,9 +27,6 @@
                   "fuchsia_x64"
                 ],
                 "config": "chromium"
-              },
-              "legacy_test_results_config": {
-                "config": "staging_server"
               }
             }
           }
diff --git a/infra/config/generated/builders/ci/fuchsia-x64-chrome-rel/properties.json b/infra/config/generated/builders/ci/fuchsia-x64-chrome-rel/properties.json
index 45271310..f9b17f8 100644
--- a/infra/config/generated/builders/ci/fuchsia-x64-chrome-rel/properties.json
+++ b/infra/config/generated/builders/ci/fuchsia-x64-chrome-rel/properties.json
@@ -28,9 +28,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "run_tests_serially": true
             }
           }
diff --git a/infra/config/generated/builders/ci/fuchsia-x64-workstation/properties.json b/infra/config/generated/builders/ci/fuchsia-x64-workstation/properties.json
index 932d7f6..15e27656 100644
--- a/infra/config/generated/builders/ci/fuchsia-x64-workstation/properties.json
+++ b/infra/config/generated/builders/ci/fuchsia-x64-workstation/properties.json
@@ -28,9 +28,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "run_tests_serially": true
             }
           }
diff --git a/infra/config/generated/builders/ci/lacros-amd64-generic-rel-skylab-fyi/properties.json b/infra/config/generated/builders/ci/lacros-amd64-generic-rel-skylab-fyi/properties.json
index cd415040..ab03720b 100644
--- a/infra/config/generated/builders/ci/lacros-amd64-generic-rel-skylab-fyi/properties.json
+++ b/infra/config/generated/builders/ci/lacros-amd64-generic-rel-skylab-fyi/properties.json
@@ -35,9 +35,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "skylab_upload_location": {
                 "gs_bucket": "lacros-amd64-generic-rel-skylab-try"
               }
diff --git a/infra/config/generated/builders/ci/lacros-arm64-generic-rel-skylab-fyi/properties.json b/infra/config/generated/builders/ci/lacros-arm64-generic-rel-skylab-fyi/properties.json
index 3a07eda..2ede1cce 100644
--- a/infra/config/generated/builders/ci/lacros-arm64-generic-rel-skylab-fyi/properties.json
+++ b/infra/config/generated/builders/ci/lacros-arm64-generic-rel-skylab-fyi/properties.json
@@ -35,9 +35,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "skylab_upload_location": {
                 "gs_bucket": "lacros-arm64-generic-rel-skylab-try"
               }
diff --git a/infra/config/generated/builders/ci/linux-ash-chromium-builder-fyi-rel/properties.json b/infra/config/generated/builders/ci/linux-ash-chromium-builder-fyi-rel/properties.json
deleted file mode 100644
index 37b8df2..0000000
--- a/infra/config/generated/builders/ci/linux-ash-chromium-builder-fyi-rel/properties.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "$build/archive": {
-    "archive_datas": [
-      {
-        "archive_type": "ARCHIVE_TYPE_ZIP",
-        "dirs": [
-          "locales",
-          "swiftshader"
-        ],
-        "files": [
-          "chrome",
-          "chrome_100_percent.pak",
-          "chrome_200_percent.pak",
-          "chrome_crashpad_handler",
-          "headless_lib_data.pak",
-          "headless_lib_strings.pak",
-          "icudtl.dat",
-          "libminigbm.so",
-          "nacl_helper",
-          "nacl_irt_x86_64.nexe",
-          "resources.pak",
-          "snapshot_blob.bin",
-          "test_ash_chrome"
-        ],
-        "gcs_bucket": "ash-chromium-on-linux-prebuilts",
-        "gcs_path": "x86_64/{%position%}/ash-chromium.zip",
-        "latest_upload": {
-          "gcs_file_content": "{%position%}",
-          "gcs_path": "x86_64/latest/ash-chromium.txt"
-        }
-      }
-    ]
-  },
-  "$build/reclient": {
-    "instance": "rbe-chromium-trusted",
-    "jobs": 250,
-    "metrics_project": "chromium-reclient-metrics"
-  },
-  "$recipe_engine/resultdb/test_presentation": {
-    "column_keys": [],
-    "grouping_keys": [
-      "status",
-      "v.test_suite"
-    ]
-  },
-  "builder_group": "chromium.fyi",
-  "recipe": "chromium"
-}
\ No newline at end of file
diff --git a/infra/config/generated/builders/ci/linux-chromeos-annotator-rel/properties.json b/infra/config/generated/builders/ci/linux-chromeos-annotator-rel/properties.json
index 60fb5f4..d5b0fd51 100644
--- a/infra/config/generated/builders/ci/linux-chromeos-annotator-rel/properties.json
+++ b/infra/config/generated/builders/ci/linux-chromeos-annotator-rel/properties.json
@@ -26,9 +26,6 @@
                   "chromeos"
                 ],
                 "config": "chromium"
-              },
-              "legacy_test_results_config": {
-                "config": "staging_server"
               }
             }
           }
diff --git a/infra/config/generated/builders/ci/mac-backuprefptr-x64-fyi-rel/properties.json b/infra/config/generated/builders/ci/mac-backuprefptr-x64-fyi-rel/properties.json
index 99768ef..c2ffd0e 100644
--- a/infra/config/generated/builders/ci/mac-backuprefptr-x64-fyi-rel/properties.json
+++ b/infra/config/generated/builders/ci/mac-backuprefptr-x64-fyi-rel/properties.json
@@ -24,9 +24,6 @@
               },
               "legacy_gclient_config": {
                 "config": "chromium"
-              },
-              "legacy_test_results_config": {
-                "config": "staging_server"
               }
             }
           }
diff --git a/infra/config/generated/builders/ci/mac-osxbeta-rel/properties.json b/infra/config/generated/builders/ci/mac-osxbeta-rel/properties.json
index 426784a1..ce7b923 100644
--- a/infra/config/generated/builders/ci/mac-osxbeta-rel/properties.json
+++ b/infra/config/generated/builders/ci/mac-osxbeta-rel/properties.json
@@ -50,9 +50,6 @@
               "legacy_gclient_config": {
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "parent": {
                 "bucket": "ci",
                 "builder": "Mac Builder (dbg)",
diff --git a/infra/config/generated/builders/try/fuchsia-arm64-chrome-rel/properties.json b/infra/config/generated/builders/try/fuchsia-arm64-chrome-rel/properties.json
index a99282e4..abca29aa 100644
--- a/infra/config/generated/builders/try/fuchsia-arm64-chrome-rel/properties.json
+++ b/infra/config/generated/builders/try/fuchsia-arm64-chrome-rel/properties.json
@@ -30,9 +30,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "run_tests_serially": true
             }
           }
diff --git a/infra/config/generated/builders/try/fuchsia-fyi-arm64-dbg/properties.json b/infra/config/generated/builders/try/fuchsia-fyi-arm64-dbg/properties.json
index 3e2798b..cf6f0194 100644
--- a/infra/config/generated/builders/try/fuchsia-fyi-arm64-dbg/properties.json
+++ b/infra/config/generated/builders/try/fuchsia-fyi-arm64-dbg/properties.json
@@ -30,9 +30,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "run_tests_serially": true
             }
           }
diff --git a/infra/config/generated/builders/try/fuchsia-fyi-x64-dbg/properties.json b/infra/config/generated/builders/try/fuchsia-fyi-x64-dbg/properties.json
index cac31a1b..be9ab4995 100644
--- a/infra/config/generated/builders/try/fuchsia-fyi-x64-dbg/properties.json
+++ b/infra/config/generated/builders/try/fuchsia-fyi-x64-dbg/properties.json
@@ -27,9 +27,6 @@
                   "fuchsia_x64"
                 ],
                 "config": "chromium"
-              },
-              "legacy_test_results_config": {
-                "config": "staging_server"
               }
             }
           }
diff --git a/infra/config/generated/builders/try/fuchsia-x64-chrome-rel/properties.json b/infra/config/generated/builders/try/fuchsia-x64-chrome-rel/properties.json
index 1e2ae42..e3d31e8 100644
--- a/infra/config/generated/builders/try/fuchsia-x64-chrome-rel/properties.json
+++ b/infra/config/generated/builders/try/fuchsia-x64-chrome-rel/properties.json
@@ -28,9 +28,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "run_tests_serially": true
             }
           }
diff --git a/infra/config/generated/builders/try/fuchsia-x64-workstation/properties.json b/infra/config/generated/builders/try/fuchsia-x64-workstation/properties.json
index 3e57d177..f22d795 100644
--- a/infra/config/generated/builders/try/fuchsia-x64-workstation/properties.json
+++ b/infra/config/generated/builders/try/fuchsia-x64-workstation/properties.json
@@ -28,9 +28,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "run_tests_serially": true
             }
           }
diff --git a/infra/config/generated/builders/try/lacros-amd64-generic-rel-skylab-fyi/properties.json b/infra/config/generated/builders/try/lacros-amd64-generic-rel-skylab-fyi/properties.json
index 048fadd..54a155c 100644
--- a/infra/config/generated/builders/try/lacros-amd64-generic-rel-skylab-fyi/properties.json
+++ b/infra/config/generated/builders/try/lacros-amd64-generic-rel-skylab-fyi/properties.json
@@ -35,9 +35,6 @@
                 ],
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "skylab_upload_location": {
                 "gs_bucket": "gs://lacros-amd64-generic-rel-skylab-try"
               }
diff --git a/infra/config/generated/builders/try/linux-wayland-rel-inverse-fyi/properties.json b/infra/config/generated/builders/try/linux-wayland-rel-inverse-fyi/properties.json
index 997bd158..de008863 100644
--- a/infra/config/generated/builders/try/linux-wayland-rel-inverse-fyi/properties.json
+++ b/infra/config/generated/builders/try/linux-wayland-rel-inverse-fyi/properties.json
@@ -1,4 +1,8 @@
 {
+  "$build/chromium_orchestrator": {
+    "compilator": "linux-wayland-rel-compilator",
+    "compilator_watcher_git_revision": "7809a690bbd935bcb3b4d922e24cabe168aaabc8"
+  },
   "$build/chromium_tests_builder_config": {
     "builder_config": {
       "builder_db": {
@@ -81,15 +85,6 @@
       }
     }
   },
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
-  },
-  "$build/reclient": {
-    "instance": "rbe-chromium-untrusted",
-    "metrics_project": "chromium-reclient-metrics"
-  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
@@ -98,5 +93,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.linux",
-  "recipe": "chromium_trybot"
+  "recipe": "chromium/orchestrator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/linux_layout_tests_layout_ng_disabled/properties.json b/infra/config/generated/builders/try/linux_layout_tests_layout_ng_disabled/properties.json
index 76060263..aa19d11 100644
--- a/infra/config/generated/builders/try/linux_layout_tests_layout_ng_disabled/properties.json
+++ b/infra/config/generated/builders/try/linux_layout_tests_layout_ng_disabled/properties.json
@@ -22,9 +22,6 @@
               },
               "legacy_gclient_config": {
                 "config": "chromium"
-              },
-              "legacy_test_results_config": {
-                "config": "staging_server"
               }
             }
           }
diff --git a/infra/config/generated/builders/try/linux_vr/properties.json b/infra/config/generated/builders/try/linux_vr/properties.json
index 570d95ac..9515320 100644
--- a/infra/config/generated/builders/try/linux_vr/properties.json
+++ b/infra/config/generated/builders/try/linux_vr/properties.json
@@ -23,9 +23,6 @@
               },
               "legacy_gclient_config": {
                 "config": "chromium"
-              },
-              "legacy_test_results_config": {
-                "config": "staging_server"
               }
             }
           }
diff --git a/infra/config/generated/builders/try/mac-osxbeta-rel/properties.json b/infra/config/generated/builders/try/mac-osxbeta-rel/properties.json
index 35e9a64..3686120 100644
--- a/infra/config/generated/builders/try/mac-osxbeta-rel/properties.json
+++ b/infra/config/generated/builders/try/mac-osxbeta-rel/properties.json
@@ -50,9 +50,6 @@
               "legacy_gclient_config": {
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "parent": {
                 "bucket": "ci",
                 "builder": "Mac Builder (dbg)",
diff --git a/infra/config/generated/builders/try/mac_chromium_compile_dbg_ng/properties.json b/infra/config/generated/builders/try/mac_chromium_compile_dbg_ng/properties.json
index 1e6315a..262e4dc2 100644
--- a/infra/config/generated/builders/try/mac_chromium_compile_dbg_ng/properties.json
+++ b/infra/config/generated/builders/try/mac_chromium_compile_dbg_ng/properties.json
@@ -79,9 +79,6 @@
               "legacy_gclient_config": {
                 "config": "chromium"
               },
-              "legacy_test_results_config": {
-                "config": "staging_server"
-              },
               "parent": {
                 "bucket": "ci",
                 "builder": "Mac Builder (dbg)",
diff --git a/infra/config/generated/builders/try/win10_chromium_x64_rel_ng-inverse-fyi/properties.json b/infra/config/generated/builders/try/win-rel-inverse-fyi/properties.json
similarity index 98%
rename from infra/config/generated/builders/try/win10_chromium_x64_rel_ng-inverse-fyi/properties.json
rename to infra/config/generated/builders/try/win-rel-inverse-fyi/properties.json
index ababb152..4775e81 100644
--- a/infra/config/generated/builders/try/win10_chromium_x64_rel_ng-inverse-fyi/properties.json
+++ b/infra/config/generated/builders/try/win-rel-inverse-fyi/properties.json
@@ -1,6 +1,6 @@
 {
   "$build/chromium_orchestrator": {
-    "compilator": "win10_chromium_x64_rel_ng-compilator",
+    "compilator": "win-rel-compilator",
     "compilator_watcher_git_revision": "7809a690bbd935bcb3b4d922e24cabe168aaabc8"
   },
   "$build/chromium_tests_builder_config": {
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg
index 900b103..106f9ff 100644
--- a/infra/config/generated/luci/commit-queue.cfg
+++ b/infra/config/generated/luci/commit-queue.cfg
@@ -3710,6 +3710,10 @@
         includable_only: true
       }
       builders {
+        name: "chromium/try/win-rel-inverse-fyi"
+        includable_only: true
+      }
+      builders {
         name: "chromium/try/win-swangle-chromium-try-x86"
         includable_only: true
       }
@@ -3808,10 +3812,6 @@
         includable_only: true
       }
       builders {
-        name: "chromium/try/win10_chromium_x64_rel_ng-inverse-fyi"
-        includable_only: true
-      }
-      builders {
         name: "chromium/try/win10_chromium_x64_rel_ng-reclient"
         experiment_percentage: 3
         location_filters {
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg
index 1634a23fa..8aa693c 100644
--- a/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -37637,95 +37637,6 @@
       }
     }
     builders {
-      name: "linux-ash-chromium-builder-fyi-rel"
-      swarming_host: "chromium-swarm.appspot.com"
-      dimensions: "builderless:1"
-      dimensions: "cores:8"
-      dimensions: "cpu:x86-64"
-      dimensions: "free_space:standard"
-      dimensions: "os:Ubuntu-18.04"
-      dimensions: "pool:luci.chromium.ci"
-      dimensions: "ssd:0"
-      exe {
-        cipd_package: "infra/chromium/bootstrapper/${platform}"
-        cipd_version: "latest"
-        cmd: "bootstrapper"
-      }
-      properties:
-        '{'
-        '  "$bootstrap/exe": {'
-        '    "exe": {'
-        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
-        '      "cipd_version": "refs/heads/main",'
-        '      "cmd": ['
-        '        "luciexe"'
-        '      ]'
-        '    }'
-        '  },'
-        '  "$bootstrap/properties": {'
-        '    "properties_file": "infra/config/generated/builders/ci/linux-ash-chromium-builder-fyi-rel/properties.json",'
-        '    "top_level_project": {'
-        '      "ref": "refs/heads/main",'
-        '      "repo": {'
-        '        "host": "chromium.googlesource.com",'
-        '        "project": "chromium/src"'
-        '      }'
-        '    }'
-        '  },'
-        '  "builder_group": "chromium.fyi",'
-        '  "led_builder_is_bootstrapped": true,'
-        '  "recipe": "chromium"'
-        '}'
-      priority: 35
-      execution_timeout_secs: 36000
-      build_numbers: YES
-      service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
-      experiments {
-        key: "chromium_swarming.expose_merge_script_failures"
-        value: 100
-      }
-      experiments {
-        key: "luci.buildbucket.omit_python2"
-        value: 100
-      }
-      experiments {
-        key: "luci.recipes.use_python3"
-        value: 100
-      }
-      resultdb {
-        enable: true
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "ci_test_results"
-          test_results {}
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "gpu_ci_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
-            }
-          }
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "blink_web_tests_ci_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)"
-            }
-          }
-        }
-        history_options {
-          use_invocation_timestamp: true
-        }
-      }
-    }
-    builders {
       name: "linux-ash-chromium-generator-rel"
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builderless:1"
@@ -81884,17 +81795,15 @@
           use_invocation_timestamp: true
         }
       }
-      description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/linux-wayland-rel\">linux-wayland-rel</a>."
+      description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/linux-wayland-rel\">linux-wayland-rel</a>.<br/>It is also the compilator for experimental orchestrator <a href=\"https://ci.chromium.org/p/chromium/builders/try/linux-wayland-rel-inverse-fyi\">linux-wayland-rel-inverse-fyi</a>."
     }
     builders {
       name: "linux-wayland-rel-inverse-fyi"
       swarming_host: "chromium-swarm.appspot.com"
-      dimensions: "builderless:1"
-      dimensions: "cores:8"
+      dimensions: "cores:2"
       dimensions: "cpu:x86-64"
       dimensions: "os:Ubuntu-18.04"
-      dimensions: "pool:luci.chromium.try"
-      dimensions: "ssd:0"
+      dimensions: "pool:luci.chromium.try.orchestrator"
       exe {
         cipd_package: "infra/chromium/bootstrapper/${platform}"
         cipd_version: "latest"
@@ -81923,7 +81832,7 @@
         '  },'
         '  "builder_group": "tryserver.chromium.linux",'
         '  "led_builder_is_bootstrapped": true,'
-        '  "recipe": "chromium_trybot"'
+        '  "recipe": "chromium/orchestrator"'
         '}'
       execution_timeout_secs: 14400
       expiration_secs: 7200
@@ -81931,23 +81840,19 @@
         seconds: 120
       }
       caches {
+        name: "unused_builder_cache"
+        path: "builder"
+      }
+      caches {
         name: "win_toolchain"
         path: "win_toolchain"
       }
       build_numbers: YES
-      service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com"
+      service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
       task_template_canary_percentage {
         value: 5
       }
       experiments {
-        key: "chromium_rts.inverted_rts"
-        value: 100
-      }
-      experiments {
-        key: "chromium_rts.inverted_rts_bail_early"
-        value: 100
-      }
-      experiments {
         key: "chromium_swarming.expose_merge_script_failures"
         value: 100
       }
@@ -82003,6 +81908,7 @@
           use_invocation_timestamp: true
         }
       }
+      description_html: "This is an experimental orchestrator making use of compilator <a href=\"https://ci.chromium.org/p/chromium/builders/try/linux-wayland-rel-compilator\">linux-wayland-rel-compilator</a>."
     }
     builders {
       name: "linux-webkit-msan-rel"
@@ -92064,7 +91970,128 @@
           use_invocation_timestamp: true
         }
       }
-      description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/win-rel\">win-rel</a>."
+      description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/win-rel\">win-rel</a>.<br/>It is also the compilator for experimental orchestrator <a href=\"https://ci.chromium.org/p/chromium/builders/try/win-rel-inverse-fyi\">win-rel-inverse-fyi</a>."
+    }
+    builders {
+      name: "win-rel-inverse-fyi"
+      swarming_host: "chromium-swarm.appspot.com"
+      dimensions: "cores:2"
+      dimensions: "cpu:x86-64"
+      dimensions: "os:Ubuntu-18.04"
+      dimensions: "pool:luci.chromium.try.orchestrator"
+      exe {
+        cipd_package: "infra/chromium/bootstrapper/${platform}"
+        cipd_version: "latest"
+        cmd: "bootstrapper"
+      }
+      properties:
+        '{'
+        '  "$bootstrap/exe": {'
+        '    "exe": {'
+        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
+        '      "cipd_version": "refs/heads/main",'
+        '      "cmd": ['
+        '        "luciexe"'
+        '      ]'
+        '    }'
+        '  },'
+        '  "$bootstrap/properties": {'
+        '    "properties_file": "infra/config/generated/builders/try/win-rel-inverse-fyi/properties.json",'
+        '    "top_level_project": {'
+        '      "ref": "refs/heads/main",'
+        '      "repo": {'
+        '        "host": "chromium.googlesource.com",'
+        '        "project": "chromium/src"'
+        '      }'
+        '    }'
+        '  },'
+        '  "builder_group": "tryserver.chromium.win",'
+        '  "led_builder_is_bootstrapped": true,'
+        '  "recipe": "chromium/orchestrator"'
+        '}'
+      execution_timeout_secs: 14400
+      expiration_secs: 7200
+      grace_period {
+        seconds: 120
+      }
+      caches {
+        name: "unused_builder_cache"
+        path: "builder"
+      }
+      caches {
+        name: "win_toolchain"
+        path: "win_toolchain"
+      }
+      build_numbers: YES
+      service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
+      task_template_canary_percentage {
+        value: 5
+      }
+      experiments {
+        key: "chromium_rts.inverted_rts"
+        value: 100
+      }
+      experiments {
+        key: "chromium_rts.inverted_rts_bail_early"
+        value: 100
+      }
+      experiments {
+        key: "chromium_swarming.expose_merge_script_failures"
+        value: 100
+      }
+      experiments {
+        key: "enable_weetbix_queries"
+        value: 100
+      }
+      experiments {
+        key: "luci.buildbucket.omit_python2"
+        value: 0
+      }
+      experiments {
+        key: "luci.recipes.use_python3"
+        value: 100
+      }
+      experiments {
+        key: "weetbix.enable_weetbix_exonerations"
+        value: 100
+      }
+      experiments {
+        key: "weetbix.retry_weak_exonerations"
+        value: 100
+      }
+      resultdb {
+        enable: true
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "try_test_results"
+          test_results {}
+        }
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "gpu_try_test_results"
+          test_results {
+            predicate {
+              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
+            }
+          }
+        }
+        bq_exports {
+          project: "chrome-luci-data"
+          dataset: "chromium"
+          table: "blink_web_tests_try_test_results"
+          test_results {
+            predicate {
+              test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)"
+            }
+          }
+        }
+        history_options {
+          use_invocation_timestamp: true
+        }
+      }
+      description_html: "This is an experimental orchestrator making use of compilator <a href=\"https://ci.chromium.org/p/chromium/builders/try/win-rel-compilator\">win-rel-compilator</a>."
     }
     builders {
       name: "win-swangle-chromium-try-x86"
@@ -93672,128 +93699,7 @@
           use_invocation_timestamp: true
         }
       }
-      description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/win10_chromium_x64_rel_ng\">win10_chromium_x64_rel_ng</a>.<br/>It is also the compilator for experimental orchestrator <a href=\"https://ci.chromium.org/p/chromium/builders/try/win10_chromium_x64_rel_ng-inverse-fyi\">win10_chromium_x64_rel_ng-inverse-fyi</a>."
-    }
-    builders {
-      name: "win10_chromium_x64_rel_ng-inverse-fyi"
-      swarming_host: "chromium-swarm.appspot.com"
-      dimensions: "cores:2"
-      dimensions: "cpu:x86-64"
-      dimensions: "os:Ubuntu-18.04"
-      dimensions: "pool:luci.chromium.try.orchestrator"
-      exe {
-        cipd_package: "infra/chromium/bootstrapper/${platform}"
-        cipd_version: "latest"
-        cmd: "bootstrapper"
-      }
-      properties:
-        '{'
-        '  "$bootstrap/exe": {'
-        '    "exe": {'
-        '      "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",'
-        '      "cipd_version": "refs/heads/main",'
-        '      "cmd": ['
-        '        "luciexe"'
-        '      ]'
-        '    }'
-        '  },'
-        '  "$bootstrap/properties": {'
-        '    "properties_file": "infra/config/generated/builders/try/win10_chromium_x64_rel_ng-inverse-fyi/properties.json",'
-        '    "top_level_project": {'
-        '      "ref": "refs/heads/main",'
-        '      "repo": {'
-        '        "host": "chromium.googlesource.com",'
-        '        "project": "chromium/src"'
-        '      }'
-        '    }'
-        '  },'
-        '  "builder_group": "tryserver.chromium.win",'
-        '  "led_builder_is_bootstrapped": true,'
-        '  "recipe": "chromium/orchestrator"'
-        '}'
-      execution_timeout_secs: 14400
-      expiration_secs: 7200
-      grace_period {
-        seconds: 120
-      }
-      caches {
-        name: "unused_builder_cache"
-        path: "builder"
-      }
-      caches {
-        name: "win_toolchain"
-        path: "win_toolchain"
-      }
-      build_numbers: YES
-      service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
-      task_template_canary_percentage {
-        value: 5
-      }
-      experiments {
-        key: "chromium_rts.inverted_rts"
-        value: 100
-      }
-      experiments {
-        key: "chromium_rts.inverted_rts_bail_early"
-        value: 100
-      }
-      experiments {
-        key: "chromium_swarming.expose_merge_script_failures"
-        value: 100
-      }
-      experiments {
-        key: "enable_weetbix_queries"
-        value: 100
-      }
-      experiments {
-        key: "luci.buildbucket.omit_python2"
-        value: 100
-      }
-      experiments {
-        key: "luci.recipes.use_python3"
-        value: 100
-      }
-      experiments {
-        key: "weetbix.enable_weetbix_exonerations"
-        value: 100
-      }
-      experiments {
-        key: "weetbix.retry_weak_exonerations"
-        value: 100
-      }
-      resultdb {
-        enable: true
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "try_test_results"
-          test_results {}
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "gpu_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+"
-            }
-          }
-        }
-        bq_exports {
-          project: "chrome-luci-data"
-          dataset: "chromium"
-          table: "blink_web_tests_try_test_results"
-          test_results {
-            predicate {
-              test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)"
-            }
-          }
-        }
-        history_options {
-          use_invocation_timestamp: true
-        }
-      }
-      description_html: "This is an experimental orchestrator making use of compilator <a href=\"https://ci.chromium.org/p/chromium/builders/try/win10_chromium_x64_rel_ng-compilator\">win10_chromium_x64_rel_ng-compilator</a>."
+      description_html: "This is the compilator half of an orchestrator + compilator pair of builders. The orchestrator is <a href=\"https://ci.chromium.org/p/chromium/builders/try/win10_chromium_x64_rel_ng\">win10_chromium_x64_rel_ng</a>."
     }
     builders {
       name: "win10_chromium_x64_rel_ng-reclient"
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg
index f7d8ca0..0f5a860 100644
--- a/infra/config/generated/luci/luci-milo.cfg
+++ b/infra/config/generated/luci/luci-milo.cfg
@@ -2853,9 +2853,6 @@
     name: "buildbucket/luci.chromium.try/win10_chromium_x64_rel_ng-compilator"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/win10_chromium_x64_rel_ng-inverse-fyi"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/win7-rel"
   }
   builders {
@@ -8842,11 +8839,6 @@
     category: "default"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/linux-ash-chromium-builder-fyi-rel"
-    category: "default"
-    short_name: "lcr"
-  }
-  builders {
     name: "buildbucket/luci.chromium.ci/linux-lacros-tester-rel-reviver"
     category: "default"
     short_name: "rev"
@@ -17402,6 +17394,9 @@
     name: "buildbucket/luci.chromium.try/win-rel-compilator"
   }
   builders {
+    name: "buildbucket/luci.chromium.try/win-rel-inverse-fyi"
+  }
+  builders {
     name: "buildbucket/luci.chromium.try/win-swangle-chromium-try-x86"
   }
   builders {
@@ -17444,9 +17439,6 @@
     name: "buildbucket/luci.chromium.try/win10_chromium_x64_rel_ng-compilator"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/win10_chromium_x64_rel_ng-inverse-fyi"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/win10_chromium_x64_rel_ng-reclient"
   }
   builders {
@@ -18627,6 +18619,9 @@
     name: "buildbucket/luci.chromium.try/win-rel-compilator"
   }
   builders {
+    name: "buildbucket/luci.chromium.try/win-rel-inverse-fyi"
+  }
+  builders {
     name: "buildbucket/luci.chromium.try/win10-wpt-content-shell-fyi-rel"
   }
   builders {
@@ -18642,9 +18637,6 @@
     name: "buildbucket/luci.chromium.try/win10_chromium_x64_rel_ng-compilator"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/win10_chromium_x64_rel_ng-inverse-fyi"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/win10_chromium_x64_rel_ng-reclient"
   }
   builders {
diff --git a/infra/config/generated/luci/luci-scheduler.cfg b/infra/config/generated/luci/luci-scheduler.cfg
index 94c7e183..3f97db87 100644
--- a/infra/config/generated/luci/luci-scheduler.cfg
+++ b/infra/config/generated/luci/luci-scheduler.cfg
@@ -4695,15 +4695,6 @@
   }
 }
 job {
-  id: "linux-ash-chromium-builder-fyi-rel"
-  realm: "ci"
-  buildbucket {
-    server: "cr-buildbucket.appspot.com"
-    bucket: "ci"
-    builder: "linux-ash-chromium-builder-fyi-rel"
-  }
-}
-job {
   id: "linux-ash-chromium-generator-rel"
   realm: "ci"
   schedule: "triggered"
@@ -6153,7 +6144,6 @@
   triggers: "linux-annotator-rel"
   triggers: "linux-archive-dbg"
   triggers: "linux-archive-rel"
-  triggers: "linux-ash-chromium-builder-fyi-rel"
   triggers: "linux-backuprefptr-x64-fyi-rel"
   triggers: "linux-bfcache-rel"
   triggers: "linux-blink-animation-use-time-delta"
diff --git a/infra/config/lib/builder_config.star b/infra/config/lib/builder_config.star
index a92a7ce..a72b1d1b 100644
--- a/infra/config/lib/builder_config.star
+++ b/infra/config/lib/builder_config.star
@@ -159,24 +159,6 @@
         apply_configs = args.listify(apply_configs),
     )
 
-def _test_results_config(*, config):
-    """The details for configuring test_results recipe module.
-
-    This uses the recipe engine's config item facility.
-
-    Args:
-        config: (str) The name of the recipe module config item to use.
-
-    Returns:
-        A struct that can be passed to the `test_results_config` argument of
-        `builder_spec`.
-    """
-    if not config:
-        fail("config must be provided")
-    return struct(
-        config = config,
-    )
-
 def _skylab_upload_location(*, gs_bucket, gs_extra = None):
     """The details for where tests are uploaded for skylab.
 
@@ -232,7 +214,6 @@
         gclient_config,
         chromium_config,
         android_config = None,
-        test_results_config = None,
         android_version_file = None,
         clobber = None,
         build_gs_bucket = None,
@@ -248,8 +229,6 @@
         gclient_config: (gclient_config) The gclient config for the builder.
         chromium_config: (chromium_config) The chromium config for the builder.
         android_config: (android_config) The android config for the builder.
-        test_results_config: (test_results_config) The test_results config for
-            the builder.
         android_version_file: (str) A path relative to the checkout to a file
             containing the Chrome version information for Android.
         clobber: (bool) Whether to have bot_update perform a clobber of any
@@ -299,7 +278,6 @@
         gclient_config = gclient_config,
         chromium_config = chromium_config,
         android_config = android_config,
-        test_results_config = test_results_config,
         android_version_file = android_version_file,
         clobber = clobber,
         build_gs_bucket = build_gs_bucket,
@@ -424,9 +402,6 @@
     # Function for defining android recipe module config
     android_config = _android_config,
 
-    # Function for defining test_results recipe module config
-    test_results_config = _test_results_config,
-
     # Function for defining try-specific settings
     try_settings = _try_settings,
     rts_config = _rts_config,
@@ -557,7 +532,6 @@
         ("gclient_config", "legacy_gclient_config"),
         ("chromium_config", "legacy_chromium_config"),
         ("android_config", "legacy_android_config"),
-        ("test_results_config", "legacy_test_results_config"),
     ):
         if src in builder_spec:
             builder_spec[dst] = builder_spec.pop(src)
diff --git a/infra/config/lib/orchestrator.star b/infra/config/lib/orchestrator.star
index d188526..e232ea95 100644
--- a/infra/config/lib/orchestrator.star
+++ b/infra/config/lib/orchestrator.star
@@ -35,13 +35,14 @@
 # bucket-qualified names of the experimental orchestrators that can use the
 # compilator.
 _EXPERIMENTAL_ORCHESTRATOR_NAMES_BY_COMPILATOR_NAME = {
-    "try/linux-rel-compilator": ["try/linux-rel-inverse-fyi"],
     "try/android-nougat-x86-rel-compilator": ["try/android-nougat-x86-rel-inverse-fyi"],
-    "try/win10_chromium_x64_rel_ng-compilator": ["try/win10_chromium_x64_rel_ng-inverse-fyi"],
-    "try/mac-rel-compilator": ["try/mac-rel-inverse-fyi"],
     "try/android-pie-arm64-rel-compilator": ["try/android-pie-arm64-rel-inverse-fyi"],
+    "try/mac-rel-compilator": ["try/mac-rel-inverse-fyi"],
     "try/linux_chromium_asan_rel_ng-compilator": ["try/linux_chromium_asan_rel_ng-inverse-fyi"],
     "try/linux_chromium_tsan_rel_ng-compilator": ["try/linux_chromium_tsan_rel_ng-inverse-fyi"],
+    "try/linux-rel-compilator": ["try/linux-rel-inverse-fyi"],
+    "try/linux-wayland-rel-compilator": ["try/linux-wayland-rel-inverse-fyi"],
+    "try/win-rel-compilator": ["try/win-rel-inverse-fyi"],
 }
 
 def register_orchestrator(bucket, name, builder_group, compilator):
diff --git a/infra/config/subprojects/chromium/ci/chromium.fuchsia.fyi.star b/infra/config/subprojects/chromium/ci/chromium.fuchsia.fyi.star
index b59bf86f..78571db 100644
--- a/infra/config/subprojects/chromium/ci/chromium.fuchsia.fyi.star
+++ b/infra/config/subprojects/chromium/ci/chromium.fuchsia.fyi.star
@@ -75,9 +75,6 @@
             target_bits = 64,
             target_platform = builder_config.target_platform.FUCHSIA,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
         run_tests_serially = True,
     ),
@@ -115,9 +112,6 @@
             target_bits = 64,
             target_platform = builder_config.target_platform.FUCHSIA,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
         run_tests_serially = True,
     ),
@@ -153,9 +147,6 @@
             target_bits = 64,
             target_platform = builder_config.target_platform.FUCHSIA,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
     ),
 )
@@ -190,9 +181,6 @@
             target_bits = 64,
             target_platform = builder_config.target_platform.FUCHSIA,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
     ),
 )
@@ -228,9 +216,6 @@
             target_bits = 64,
             target_platform = builder_config.target_platform.FUCHSIA,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
         run_tests_serially = True,
     ),
@@ -266,9 +251,6 @@
             target_bits = 64,
             target_platform = builder_config.target_platform.FUCHSIA,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
         run_tests_serially = True,
     ),
diff --git a/infra/config/subprojects/chromium/ci/chromium.fyi.star b/infra/config/subprojects/chromium/ci/chromium.fyi.star
index a9a8f9ca..32f66dcb 100644
--- a/infra/config/subprojects/chromium/ci/chromium.fyi.star
+++ b/infra/config/subprojects/chromium/ci/chromium.fyi.star
@@ -108,9 +108,6 @@
             build_config = builder_config.build_config.RELEASE,
             target_bits = 64,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
     ),
     console_view_entry = consoles.console_view_entry(
@@ -257,9 +254,6 @@
         skylab_upload_location = builder_config.skylab_upload_location(
             gs_bucket = "lacros-amd64-generic-rel-skylab-try",
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
     ),
 )
@@ -294,9 +288,6 @@
         skylab_upload_location = builder_config.skylab_upload_location(
             gs_bucket = "lacros-arm64-generic-rel-skylab-try",
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
     ),
 )
@@ -331,9 +322,6 @@
             build_config = builder_config.build_config.RELEASE,
             target_bits = 64,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
     ),
     console_view_entry = consoles.console_view_entry(
@@ -346,47 +334,6 @@
 )
 
 ci.builder(
-    name = "linux-ash-chromium-builder-fyi-rel",
-    console_view_entry = consoles.console_view_entry(
-        category = "default",
-        short_name = "lcr",
-    ),
-    os = os.LINUX_DEFAULT,
-    properties = {
-        # The format of these properties is defined at archive/properties.proto
-        "$build/archive": {
-            "archive_datas": [
-                {
-                    "files": [
-                        "chrome",
-                        "chrome_100_percent.pak",
-                        "chrome_200_percent.pak",
-                        "chrome_crashpad_handler",
-                        "headless_lib_data.pak",
-                        "headless_lib_strings.pak",
-                        "icudtl.dat",
-                        "libminigbm.so",
-                        "nacl_helper",
-                        "nacl_irt_x86_64.nexe",
-                        "resources.pak",
-                        "snapshot_blob.bin",
-                        "test_ash_chrome",
-                    ],
-                    "dirs": ["locales", "swiftshader"],
-                    "gcs_bucket": "ash-chromium-on-linux-prebuilts",
-                    "gcs_path": "x86_64/{%position%}/ash-chromium.zip",
-                    "archive_type": "ARCHIVE_TYPE_ZIP",
-                    "latest_upload": {
-                        "gcs_path": "x86_64/latest/ash-chromium.txt",
-                        "gcs_file_content": "{%position%}",
-                    },
-                },
-            ],
-        },
-    },
-)
-
-ci.builder(
     name = "linux-lacros-tester-rel-reviver",
     builder_spec = builder_config.builder_spec(
         gclient_config = builder_config.gclient_config(
@@ -770,9 +717,6 @@
             target_bits = 64,
             target_platform = builder_config.target_platform.MAC,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
     ),
     console_view_entry = consoles.console_view_entry(
@@ -834,9 +778,6 @@
             target_bits = 64,
             target_platform = builder_config.target_platform.MAC,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
     ),
 )
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star b/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
index f921305..d1e02a80 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
@@ -144,9 +144,6 @@
         skylab_upload_location = builder_config.skylab_upload_location(
             gs_bucket = "gs://lacros-amd64-generic-rel-skylab-try",
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
         build_gs_bucket = "chromium-fyi-archive",
     ),
     builderless = not settings.is_main,
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
index 88d3b06..aca385d46 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
@@ -240,8 +240,9 @@
     main_list_view = "try",
 )
 
-try_.builder(
+try_.orchestrator_builder(
     name = "linux-wayland-rel-inverse-fyi",
+    compilator = "linux-wayland-rel-compilator",
     mirrors = [
         "ci/Linux Builder (Wayland)",
         "ci/Linux Tests (Wayland)",
@@ -251,11 +252,7 @@
             condition = builder_config.rts_condition.QUICK_RUN_ONLY,
         ),
     ),
-    builderless = True,
-    experiments = {
-        "chromium_rts.inverted_rts": 100,
-        "chromium_rts.inverted_rts_bail_early": 100,
-    },
+    use_orchestrator_pool = True,
 
     # TODO(crbug.com/1366987): remove this.
     omit_python2 = False,
@@ -645,9 +642,6 @@
             build_config = builder_config.build_config.RELEASE,
             target_bits = 64,
         ),
-        test_results_config = builder_config.test_results_config(
-            config = "staging_server",
-        ),
     ),
     main_list_view = "try",
     tryjob = try_.job(
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.win.star b/infra/config/subprojects/chromium/try/tryserver.chromium.win.star
index 90518048..0949ae95 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.win.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.win.star
@@ -249,9 +249,9 @@
 )
 
 try_.orchestrator_builder(
-    name = "win10_chromium_x64_rel_ng-inverse-fyi",
+    name = "win-rel-inverse-fyi",
     check_for_flakiness = True,
-    compilator = "win10_chromium_x64_rel_ng-compilator",
+    compilator = "win-rel-compilator",
     mirrors = [
         "ci/Win x64 Builder",
         "ci/Win10 Tests x64",
@@ -265,12 +265,14 @@
     ),
     use_clang_coverage = True,
     coverage_test_types = ["unit", "overall"],
-    main_list_view = "try",
     experiments = {
         "chromium_rts.inverted_rts": 100,
         "chromium_rts.inverted_rts_bail_early": 100,
     },
     use_orchestrator_pool = True,
+
+    # TODO(crbug.com/1366994): remove this.
+    omit_python2 = False,
 )
 
 try_.compilator_builder(
diff --git a/ios/build/bots/scripts/test_apps.py b/ios/build/bots/scripts/test_apps.py
index 855052e7..238cadf 100644
--- a/ios/build/bots/scripts/test_apps.py
+++ b/ios/build/bots/scripts/test_apps.py
@@ -134,6 +134,10 @@
     self.host_app_path = kwargs.get('host_app_path')
     self.inserted_libs = kwargs.get('inserted_libs') or []
 
+  def _additional_inserted_libs(self):
+    """Returns additional libraries to add to inserted_libs."""
+    return []
+
   def remove_gtest_sharding_env_vars(self):
     """Removes sharding related env vars from self.env_vars."""
     for env_var_key in ['GTEST_SHARD_INDEX', 'GTEST_TOTAL_SHARDS']:
@@ -203,9 +207,11 @@
         }
     }
 
-    if self.inserted_libs:
+    inserted_libs = self.inserted_libs.copy()
+    inserted_libs.extend(self._additional_inserted_libs())
+    if inserted_libs:
       module_data['TestingEnvironmentVariables'][
-          'DYLD_INSERT_LIBRARIES'] = ':'.join(self.inserted_libs)
+          'DYLD_INSERT_LIBRARIES'] = ':'.join(inserted_libs)
 
     xctestrun_data = {module: module_data}
     gtest_filter = []
@@ -340,10 +346,6 @@
     Raises:
       AppNotFoundError: If the given app does not exist
     """
-    inserted_libs = list(kwargs.get('inserted_libs') or [])
-    inserted_libs.append('__PLATFORMS__/iPhoneSimulator.platform/Developer/'
-                         'usr/lib/libXCTestBundleInject.dylib')
-    kwargs['inserted_libs'] = inserted_libs
     super(EgtestsApp, self).__init__(egtests_app, **kwargs)
 
   def _xctest_path(self):
@@ -368,6 +370,17 @@
       raise test_runner.XCTestPlugInNotFoundError(plugin_xctest)
     return plugin_xctest.replace(self.test_app_path, '')
 
+  def _additional_inserted_libs(self):
+    """Returns additional libraries to add to inserted_libs."""
+    libs = [
+        '__PLATFORMS__/iPhoneSimulator.platform/Developer/'
+        'usr/lib/libXCTestBundleInject.dylib'
+    ]
+    for child in os.listdir(self.test_app_path):
+      if child.startswith('libclang_rt.asan'):
+        libs.append(os.path.join('@executable_path', child))
+    return libs
+
   def command(self, out_dir, destination, shards):
     """Returns the command that launches tests for EG Tests.
 
diff --git a/ios/build/bots/scripts/test_apps_test.py b/ios/build/bots/scripts/test_apps_test.py
index 4069a0ac..c063a221 100755
--- a/ios/build/bots/scripts/test_apps_test.py
+++ b/ios/build/bots/scripts/test_apps_test.py
@@ -311,8 +311,21 @@
     with self.assertRaises(test_runner.XCTestPlugInNotFoundError):
       egtest._xctest_path()
 
+  @mock.patch('os.listdir', autospec=True)
+  def test_additional_inserted_libs(self, mock_listdir):
+    mock_listdir.return_value = [
+        'random_file', 'main_binary', 'libclang_rt.asan_iossim_dynamic.dylib'
+    ]
+    egtest = test_apps.EgtestsApp(_TEST_APP_PATH)
+    self.assertEqual([
+        '__PLATFORMS__/iPhoneSimulator.platform/Developer/usr/lib/' +
+        'libXCTestBundleInject.dylib',
+        '@executable_path/libclang_rt.asan_iossim_dynamic.dylib'
+    ], egtest._additional_inserted_libs())
+
   def test_xctestRunNode_without_filter(self):
     self.mock(test_apps.EgtestsApp, '_xctest_path', lambda _: 'xctest-path')
+    self.mock(test_apps.EgtestsApp, '_additional_inserted_libs', lambda _: [])
     egtest_node = test_apps.EgtestsApp(
         _TEST_APP_PATH).fill_xctestrun_node()['test_app_module']
     self.assertNotIn('OnlyTestIdentifiers', egtest_node)
@@ -320,6 +333,7 @@
 
   def test_xctestRunNode_with_filter_only_identifiers(self):
     self.mock(test_apps.EgtestsApp, '_xctest_path', lambda _: 'xctest-path')
+    self.mock(test_apps.EgtestsApp, '_additional_inserted_libs', lambda _: [])
     filtered_tests = [
         'TestCase1/testMethod1', 'TestCase1/testMethod2',
         'TestCase2/testMethod1', 'TestCase1/testMethod2'
@@ -332,6 +346,7 @@
 
   def test_xctestRunNode_with_filter_skip_identifiers(self):
     self.mock(test_apps.EgtestsApp, '_xctest_path', lambda _: 'xctest-path')
+    self.mock(test_apps.EgtestsApp, '_additional_inserted_libs', lambda _: [])
     skipped_tests = [
         'TestCase1/testMethod1', 'TestCase1/testMethod2',
         'TestCase2/testMethod1', 'TestCase1/testMethod2'
@@ -342,6 +357,17 @@
     self.assertEqual(skipped_tests, egtest_node['SkipTestIdentifiers'])
     self.assertNotIn('OnlyTestIdentifiers', egtest_node)
 
+  def test_xctestRunNode_with_additional_inserted_libs(self):
+    asan_dylib = '@executable_path/libclang_rt.asan_iossim_dynamic.dylib'
+    self.mock(test_apps.EgtestsApp, '_xctest_path', lambda _: 'xctest-path')
+    self.mock(test_apps.EgtestsApp,
+              '_additional_inserted_libs', lambda _: [asan_dylib])
+    egtest_node = test_apps.EgtestsApp(
+        _TEST_APP_PATH).fill_xctestrun_node()['test_app_module']
+    self.assertEqual(
+        asan_dylib,
+        egtest_node['TestingEnvironmentVariables']['DYLD_INSERT_LIBRARIES'])
+
 
 if __name__ == '__main__':
   unittest.main()
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn
index 80971612..68c6dd54 100644
--- a/ios/chrome/app/BUILD.gn
+++ b/ios/chrome/app/BUILD.gn
@@ -83,6 +83,7 @@
     "//components/sync_preferences:sync_preferences",
     "//components/sync_preferences:test_support",
     "//components/variations",
+    "//components/variations/service",
     "//ios/chrome/app:enterprise_app_agent",
     "//ios/chrome/app/application_delegate",
     "//ios/chrome/app/application_delegate:application_delegate_internal",
diff --git a/ios/chrome/app/application_delegate/metric_kit_subscriber.mm b/ios/chrome/app/application_delegate/metric_kit_subscriber.mm
index d72b75eb..53b8ed60 100644
--- a/ios/chrome/app/application_delegate/metric_kit_subscriber.mm
+++ b/ios/chrome/app/application_delegate/metric_kit_subscriber.mm
@@ -56,7 +56,7 @@
   histogram->AddCount(bucket, count);
 }
 
-void ReportLongDuration(const char* histogram_name,
+void ReportLongDuration(const std::string& histogram_name,
                         NSMeasurement* measurement) {
   if (!measurement) {
     return;
@@ -69,7 +69,8 @@
                                 base::Seconds(86400 /* secs per day */), 50);
 }
 
-void ReportMemory(const char* histogram_name, NSMeasurement* measurement) {
+void ReportMemory(const std::string& histogram_name,
+                  NSMeasurement* measurement) {
   if (!measurement) {
     return;
   }
@@ -138,6 +139,16 @@
   }
 }
 
+// Record MXPayload data even when the version is mismatched.
+const char kHistogramPrefixIncludingMismatch[] =
+    "IOS.MetricKit.IncludingMismatch.";
+const char kHistogramPrefix[] = "IOS.MetricKit.";
+
+std::string HistogramPrefix(bool include_mismatch) {
+  return include_mismatch ? kHistogramPrefixIncludingMismatch
+                          : kHistogramPrefix;
+}
+
 }  // namespace
 
 @implementation MetricKitSubscriber
@@ -166,7 +177,7 @@
 }
 
 - (void)logStartupDurationMXHistogram:(MXHistogram*)histogram
-                       toUMAHistogram:(const char*)histogramUMAName {
+                       toUMAHistogram:(const std::string&)histogramUMAName {
   if (!histogram || !histogram.totalBucketCount) {
     return;
   }
@@ -175,9 +186,7 @@
   base::HistogramBase* histogramUMA = base::Histogram::FactoryTimeGet(
       histogramUMAName, base::Milliseconds(1), base::Minutes(1), 50,
       base::HistogramBase::kUmaTargetedHistogramFlag);
-  MXHistogramBucket* bucket;
-  NSEnumerator* enumerator = [histogram bucketEnumerator];
-  while (bucket = [enumerator nextObject]) {
+  for (MXHistogramBucket* bucket in [histogram bucketEnumerator]) {
     // MXHistogram structure is linear and the bucket size is not guaranteed to
     // never change. As the granularity is small in the current iOS version,
     // (10ms) they are reported using a representative value of the bucket.
@@ -203,9 +212,10 @@
   }
 }
 
-- (void)logForegroundExit:(MXForegroundExitData*)exitData {
+- (void)logForegroundExit:(MXForegroundExitData*)exitData
+          histogramPrefix:(const std::string&)prefix {
   base::HistogramBase* histogramUMA = base::LinearHistogram::FactoryGet(
-      "IOS.MetricKit.ForegroundExitData", 1, kMetricKitExitReasonCount,
+      prefix + "ForegroundExitData", 1, kMetricKitExitReasonCount,
       kMetricKitExitReasonCount + 1,
       base::HistogramBase::kUmaTargetedHistogramFlag);
   ReportExitReason(histogramUMA, kNormalAppExit,
@@ -222,9 +232,10 @@
                    exitData.cumulativeIllegalInstructionExitCount);
 }
 
-- (void)logBackgroundExit:(MXBackgroundExitData*)exitData {
+- (void)logBackgroundExit:(MXBackgroundExitData*)exitData
+          histogramPrefix:(const std::string&)prefix {
   base::HistogramBase* histogramUMA = base::LinearHistogram::FactoryGet(
-      "IOS.MetricKit.BackgroundExitData", 1, kMetricKitExitReasonCount,
+      prefix + "BackgroundExitData", 1, kMetricKitExitReasonCount,
       kMetricKitExitReasonCount + 1,
       base::HistogramBase::kUmaTargetedHistogramFlag);
   ReportExitReason(histogramUMA, kNormalAppExit,
@@ -250,41 +261,44 @@
 }
 
 - (void)processPayload:(MXMetricPayload*)payload {
-  if (payload.includesMultipleApplicationVersions ||
-      base::SysNSStringToUTF8(payload.metaData.applicationBuildVersion) !=
+  if (!payload.includesMultipleApplicationVersions &&
+      base::SysNSStringToUTF8(payload.metaData.applicationBuildVersion) ==
           version_info::GetVersionNumber()) {
-    // The metrics will be reported on the current version of Chrome.
-    // Ignore any report that contains data from another version to avoid
-    // confusion.
-    return;
+    [self processPayload:payload withHistogramPrefix:HistogramPrefix(false)];
   }
+  [self processPayload:payload withHistogramPrefix:HistogramPrefix(true)];
+}
 
-  ReportLongDuration("IOS.MetricKit.ForegroundTimePerDay",
+- (void)processPayload:(MXMetricPayload*)payload
+    withHistogramPrefix:(const std::string&)prefix {
+  ReportLongDuration(prefix + "ForegroundTimePerDay",
                      payload.applicationTimeMetrics.cumulativeForegroundTime);
-  ReportLongDuration("IOS.MetricKit.BackgroundTimePerDay",
+  ReportLongDuration(prefix + "BackgroundTimePerDay",
                      payload.applicationTimeMetrics.cumulativeBackgroundTime);
-  ReportMemory("IOS.MetricKit.AverageSuspendedMemory",
+  ReportMemory(prefix + "AverageSuspendedMemory",
                payload.memoryMetrics.averageSuspendedMemory.averageMeasurement);
-  ReportMemory("IOS.MetricKit.PeakMemoryUsage",
+  ReportMemory(prefix + "PeakMemoryUsage",
                payload.memoryMetrics.peakMemoryUsage);
 
   MXHistogram* histogrammedApplicationResumeTime =
       payload.applicationLaunchMetrics.histogrammedApplicationResumeTime;
   [self logStartupDurationMXHistogram:histogrammedApplicationResumeTime
-                       toUMAHistogram:"IOS.MetricKit.ApplicationResumeTime"];
+                       toUMAHistogram:prefix + "ApplicationResumeTime"];
 
   MXHistogram* histogrammedTimeToFirstDraw =
       payload.applicationLaunchMetrics.histogrammedTimeToFirstDraw;
   [self logStartupDurationMXHistogram:histogrammedTimeToFirstDraw
-                       toUMAHistogram:"IOS.MetricKit.TimeToFirstDraw"];
+                       toUMAHistogram:prefix + "TimeToFirstDraw"];
 
   MXHistogram* histogrammedApplicationHangTime =
       payload.applicationResponsivenessMetrics.histogrammedApplicationHangTime;
   [self logStartupDurationMXHistogram:histogrammedApplicationHangTime
-                       toUMAHistogram:"IOS.MetricKit.ApplicationHangTime"];
+                       toUMAHistogram:prefix + "ApplicationHangTime"];
 
-  [self logForegroundExit:payload.applicationExitMetrics.foregroundExitData];
-  [self logBackgroundExit:payload.applicationExitMetrics.backgroundExitData];
+  [self logForegroundExit:payload.applicationExitMetrics.foregroundExitData
+          histogramPrefix:prefix];
+  [self logBackgroundExit:payload.applicationExitMetrics.backgroundExitData
+          histogramPrefix:prefix];
 }
 
 - (void)didReceiveDiagnosticPayloads:(NSArray<MXDiagnosticPayload*>*)payloads {
diff --git a/ios/chrome/app/application_delegate/metric_kit_subscriber_unittest.mm b/ios/chrome/app/application_delegate/metric_kit_subscriber_unittest.mm
index 5be5877..78bb32a 100644
--- a/ios/chrome/app/application_delegate/metric_kit_subscriber_unittest.mm
+++ b/ios/chrome/app/application_delegate/metric_kit_subscriber_unittest.mm
@@ -60,8 +60,7 @@
 };
 
 TEST_F(MetricKitSubscriberTest, Metrics) {
-  base::HistogramTester tester;
-  MXMetricPayload* mock_report = MockMetricPayload(@{
+  NSDictionary* dictionary_report = @{
     @"applicationTimeMetrics" :
         @{@"cumulativeForegroundTime" : @1, @"cumulativeBackgroundTime" : @2},
     @"memoryMetrics" :
@@ -98,43 +97,78 @@
         @"cumulativeAppWatchdogExitCount" : @19
       }
     },
-  });
-  NSArray* array = @[ mock_report ];
-  [[MetricKitSubscriber sharedInstance] didReceiveMetricPayloads:array];
-  tester.ExpectUniqueTimeSample("IOS.MetricKit.ForegroundTimePerDay",
-                                base::Seconds(1), 1);
-  tester.ExpectUniqueTimeSample("IOS.MetricKit.BackgroundTimePerDay",
-                                base::Seconds(2), 1);
-  tester.ExpectUniqueSample("IOS.MetricKit.PeakMemoryUsage", 3, 1);
-  tester.ExpectUniqueSample("IOS.MetricKit.AverageSuspendedMemory", 4, 1);
+  };
 
-  tester.ExpectTotalCount("IOS.MetricKit.ApplicationResumeTime", 12);
-  tester.ExpectBucketCount("IOS.MetricKit.ApplicationResumeTime", 25, 5);
-  tester.ExpectBucketCount("IOS.MetricKit.ApplicationResumeTime", 35, 7);
+  {
+    MXMetricPayload* mock_report = MockMetricPayload(dictionary_report);
+    OCMStub([mock_report includesMultipleApplicationVersions]).andReturn(NO);
+    NSArray* array = @[ mock_report ];
 
-  tester.ExpectTotalCount("IOS.MetricKit.TimeToFirstDraw", 6);
-  tester.ExpectBucketCount("IOS.MetricKit.TimeToFirstDraw", 5, 2);
-  tester.ExpectBucketCount("IOS.MetricKit.TimeToFirstDraw", 15, 4);
+    base::HistogramTester tester;
+    [[MetricKitSubscriber sharedInstance] didReceiveMetricPayloads:array];
+    for (const std::string& prefix :
+         {"IOS.MetricKit.IncludingMismatch.", "IOS.MetricKit."}) {
+      tester.ExpectUniqueTimeSample(prefix + "ForegroundTimePerDay",
+                                    base::Seconds(1), 1);
+      tester.ExpectUniqueTimeSample(prefix + "BackgroundTimePerDay",
+                                    base::Seconds(2), 1);
+      tester.ExpectUniqueSample(prefix + "PeakMemoryUsage", 3, 1);
+      tester.ExpectUniqueSample(prefix + "AverageSuspendedMemory", 4, 1);
 
-  tester.ExpectTotalCount("IOS.MetricKit.BackgroundExitData", 71);
-  tester.ExpectBucketCount("IOS.MetricKit.BackgroundExitData", 2, 1);
-  tester.ExpectBucketCount("IOS.MetricKit.BackgroundExitData", 4, 2);
-  tester.ExpectBucketCount("IOS.MetricKit.BackgroundExitData", 1, 5);
-  tester.ExpectBucketCount("IOS.MetricKit.BackgroundExitData", 6, 6);
-  tester.ExpectBucketCount("IOS.MetricKit.BackgroundExitData", 8, 7);
-  tester.ExpectBucketCount("IOS.MetricKit.BackgroundExitData", 5, 8);
-  tester.ExpectBucketCount("IOS.MetricKit.BackgroundExitData", 7, 9);
-  tester.ExpectBucketCount("IOS.MetricKit.BackgroundExitData", 3, 10);
-  tester.ExpectBucketCount("IOS.MetricKit.BackgroundExitData", 9, 11);
-  tester.ExpectBucketCount("IOS.MetricKit.BackgroundExitData", 0, 12);
+      tester.ExpectTotalCount(prefix + "ApplicationResumeTime", 12);
+      tester.ExpectBucketCount(prefix + "ApplicationResumeTime", 25, 5);
+      tester.ExpectBucketCount(prefix + "ApplicationResumeTime", 35, 7);
 
-  tester.ExpectTotalCount("IOS.MetricKit.ForegroundExitData", 95);
-  tester.ExpectBucketCount("IOS.MetricKit.ForegroundExitData", 7, 13);
-  tester.ExpectBucketCount("IOS.MetricKit.ForegroundExitData", 1, 14);
-  tester.ExpectBucketCount("IOS.MetricKit.ForegroundExitData", 4, 15);
-  tester.ExpectBucketCount("IOS.MetricKit.ForegroundExitData", 0, 16);
-  tester.ExpectBucketCount("IOS.MetricKit.ForegroundExitData", 8, 18);
-  tester.ExpectBucketCount("IOS.MetricKit.ForegroundExitData", 2, 19);
+      tester.ExpectTotalCount(prefix + "TimeToFirstDraw", 6);
+      tester.ExpectBucketCount(prefix + "TimeToFirstDraw", 5, 2);
+      tester.ExpectBucketCount(prefix + "TimeToFirstDraw", 15, 4);
+
+      tester.ExpectTotalCount(prefix + "BackgroundExitData", 71);
+      tester.ExpectBucketCount(prefix + "BackgroundExitData", 2, 1);
+      tester.ExpectBucketCount(prefix + "BackgroundExitData", 4, 2);
+      tester.ExpectBucketCount(prefix + "BackgroundExitData", 1, 5);
+      tester.ExpectBucketCount(prefix + "BackgroundExitData", 6, 6);
+      tester.ExpectBucketCount(prefix + "BackgroundExitData", 8, 7);
+      tester.ExpectBucketCount(prefix + "BackgroundExitData", 5, 8);
+      tester.ExpectBucketCount(prefix + "BackgroundExitData", 7, 9);
+      tester.ExpectBucketCount(prefix + "BackgroundExitData", 3, 10);
+      tester.ExpectBucketCount(prefix + "BackgroundExitData", 9, 11);
+      tester.ExpectBucketCount(prefix + "BackgroundExitData", 0, 12);
+
+      tester.ExpectTotalCount(prefix + "ForegroundExitData", 95);
+      tester.ExpectBucketCount(prefix + "ForegroundExitData", 7, 13);
+      tester.ExpectBucketCount(prefix + "ForegroundExitData", 1, 14);
+      tester.ExpectBucketCount(prefix + "ForegroundExitData", 4, 15);
+      tester.ExpectBucketCount(prefix + "ForegroundExitData", 0, 16);
+      tester.ExpectBucketCount(prefix + "ForegroundExitData", 8, 18);
+      tester.ExpectBucketCount(prefix + "ForegroundExitData", 2, 19);
+    }
+  }
+
+  {
+    MXMetricPayload* mock_report = MockMetricPayload(dictionary_report);
+    OCMStub([mock_report includesMultipleApplicationVersions]).andReturn(YES);
+    NSArray* array = @[ mock_report ];
+
+    base::HistogramTester tester;
+    [[MetricKitSubscriber sharedInstance] didReceiveMetricPayloads:array];
+    tester.ExpectTotalCount("IOS.MetricKit.ApplicationResumeTime", 0);
+    tester.ExpectTotalCount("IOS.MetricKit.TimeToFirstDraw", 0);
+    tester.ExpectTotalCount("IOS.MetricKit.BackgroundExitData", 0);
+    tester.ExpectTotalCount("IOS.MetricKit.ForegroundExitData", 0);
+
+    const std::string prefix = "IOS.MetricKit.IncludingMismatch.";
+    tester.ExpectUniqueTimeSample(prefix + "ForegroundTimePerDay",
+                                  base::Seconds(1), 1);
+    tester.ExpectUniqueTimeSample(prefix + "BackgroundTimePerDay",
+                                  base::Seconds(2), 1);
+    tester.ExpectUniqueSample(prefix + "PeakMemoryUsage", 3, 1);
+    tester.ExpectUniqueSample(prefix + "AverageSuspendedMemory", 4, 1);
+    tester.ExpectTotalCount(prefix + "ApplicationResumeTime", 12);
+    tester.ExpectTotalCount(prefix + "TimeToFirstDraw", 6);
+    tester.ExpectTotalCount(prefix + "BackgroundExitData", 71);
+    tester.ExpectTotalCount(prefix + "ForegroundExitData", 95);
+  }
 }
 
 TEST_F(MetricKitSubscriberTest, SaveDiagnosticReport) {
diff --git a/ios/chrome/app/application_delegate/mock_metrickit_metric_payload.mm b/ios/chrome/app/application_delegate/mock_metrickit_metric_payload.mm
index 1fba4687..dd0c990 100644
--- a/ios/chrome/app/application_delegate/mock_metrickit_metric_payload.mm
+++ b/ios/chrome/app/application_delegate/mock_metrickit_metric_payload.mm
@@ -95,7 +95,13 @@
     OCMStub([bucket bucketCount]).andReturn(value.intValue);
     [buckets addObject:bucket];
   }
-  OCMStub([histogram bucketEnumerator]).andReturn(buckets.objectEnumerator);
+
+  // This uses `andDo` rather than `andReturn` since the objectEnumerator it
+  // returns needs to change each time it's called.
+  OCMStub([histogram bucketEnumerator]).andDo(^(NSInvocation* invocation) {
+    NSEnumerator* enumerator = buckets.objectEnumerator;
+    [invocation setReturnValue:&enumerator];
+  });
   return histogram;
 }
 
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb
index 8277831..bec000f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Tik op Verstekblaaierprogram.</translation>
 <translation id="2820289420301699633">Jou administrateur het beheer oor Chrome en kan toegang tot sy data kry</translation>
 <translation id="2830972654601096923">Bestuur adresse …</translation>
+<translation id="2834399722155632105">3. Tik op Wagwoordopsies</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Stel Translate-instellings terug</translation>
 <translation id="2848086008667475748">Maak dit verstek in Instellings …</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">Ontvolg</translation>
 <translation id="3863769054730344136">Stuur na jou toestelle toe</translation>
 <translation id="387280738075653372">Laai Chrome hier af.</translation>
+<translation id="3888863481921783344">Dit sal gebruik word om vir jou moontlike genooides na jou geleentheid te wys.</translation>
 <translation id="3892144330757387737">Jy sal jou geskiedenis hier kry</translation>
 <translation id="3897092660631435901">Kieslys</translation>
 <translation id="3904829425754749514">Jou organisasie het sinkronisering afgeskakel. Jy kan steeds jou boekmerke, geskiedenis, wagwoorde en ander instellings op hierdie toestel sien. As jy veranderinge aanbring, sal hulle nie na jou rekening sinkroniseer nie.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">Laat mense in die omtrek hierdie QR-kode met hul kamera of QR-skandeerderprogram skandeer om met hulle te deel</translation>
 <translation id="5911030830365207728">Google Vertaal</translation>
 <translation id="5913600720976431809">Opsies om hierdie bladsy te vertaal</translation>
+<translation id="5933515656458364246">Sinkroniseer jou data op alle toestelle.</translation>
 <translation id="5938160824633642847">Jou toestel is amper vol. Maak spasie beskikbaar en probeer weer.</translation>
 <translation id="5948291296578561264">Hiermee kan jy foto's in jou fotobiblioteek stoor.</translation>
 <translation id="5951816930277761335">Deel die skakel</translation>
@@ -712,6 +715,7 @@
 
 Jou data is op <ph name="TIME" /> met jou sinkroniseringwagfrase geënkripteer.</translation>
 <translation id="6418346271604475326">Berei PDF voor</translation>
+<translation id="6429213933892582367">Maak Wagwoordopsies oop</translation>
 <translation id="6434591244308415567">Iets is fout. Probeer later weer.</translation>
 <translation id="6435236283694032571">Voeg by Leeslys</translation>
 <translation id="6439338047467462846">Laat alles toe</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">Praat antwoorde terug</translation>
 <translation id="7207023858769244910">Sinkroniseer om inhoud gegrond op jou belangstellings te kry.</translation>
 <translation id="721597782417389033">Ongeldige kaartbynaam</translation>
+<translation id="7221173315674413369">Verken nuwe kenmerke en wenke in Wat's nuut</translation>
 <translation id="722454870747268814">Nuwe incognito-oortjie</translation>
 <translation id="7265758999917665941">Nooit vir hierdie werf nie</translation>
 <translation id="7272437679830969316">Kan nie jou identiteit verifieer nie. Wagwoord is nie gekopieer nie.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">Laai af</translation>
 <translation id="7531345132340165516">Huidige werf</translation>
 <translation id="7537586195939242955">Jammer, jou Pass kan nie tans na Passbook geïnstalleer word nie.</translation>
+<translation id="7553234618121028547">Maak <ph name="BEGIN_LINK" />Instellings<ph name="END_LINK" /> oop en gaan na Wagwoordopsies om dit af te skakel.</translation>
 <translation id="7554791636758816595">Nuwe oortjie</translation>
 <translation id="7561196759112975576">Altyd</translation>
 <translation id="7583004045319035904">Gebruik <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> om jou Incognito-oortjies te ontsluit.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">Skep, stoor en bestuur jou wagwoorde sodat jy maklik by webwerwe en apps kan aanmeld. <ph name="BEGIN_LINK" />Kom meer te wete<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Skakel af</translation>
 <translation id="8114753159095730575">Lêer kan afgelaai word. Opsies is naby die onderkant van die skerm beskikbaar.</translation>
+<translation id="81313319706244542">2. Tik op Wagwoorde</translation>
 <translation id="8132598642024322408">Nou <ph name="PRICE" />, was <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Dit sal gebruik word om geleenthede uit Chrome en Google Lens in jou Apple Calendar te skep.</translation>
 <translation id="8156478151976189188">Wagwoordsinkronisering werk nie</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> rekeninge</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Jou toestelle<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">Nuwe soektog</translation>
 <translation id="8323906514956095947">Raak en hou vir meer oortjieopsies</translation>
 <translation id="8328777765163860529">Maak almal toe</translation>
+<translation id="8343993175958086504">Rugsteun jou goed en gebruik dit op enige toestel.</translation>
 <translation id="8378714024927312812">Bestuur deur jou organisasie</translation>
 <translation id="8386068868580335421">Stel terug</translation>
 <translation id="8407669440184693619">Geen wagwoorde is vir hierdie werf gekry nie</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb
index 01e1d3f..4095686d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_as.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">আনফ’ল’ কৰক</translation>
 <translation id="3863769054730344136">আপোনাৰ ডিভাইচসমূহলৈ পঠিয়াওক</translation>
 <translation id="387280738075653372">ইয়াত Chrome ডাউনল’ড কৰক।</translation>
+<translation id="3888863481921783344">আপোনাক আপোনাৰ অনুষ্ঠানলৈ সম্ভাব্য আমন্ত্ৰিত ব্যক্তিসকল দেখুৱাবলৈ এইটো ব্যৱহাৰ কৰা হ’ব।</translation>
 <translation id="3892144330757387737">ইয়াত আপুনি নিজৰ ইতিহাস বিচাৰি পাব</translation>
 <translation id="3897092660631435901">মেনু</translation>
 <translation id="3904829425754749514">আপোনাৰ প্ৰতিষ্ঠানে ছিংক অফ কৰি থৈছে। আপুনি তথাপি এই ডিভাইচটোত থকা আপোনাৰ বুকমাৰ্ক, ইতিহাস, পাছৱৰ্ড আৰু অন্য ছেটিং চাব পাৰে। যদি আপুনি সালসলনি কৰে, সেয়া আপোনাৰ একাউণ্টত ছিংক নহ’ব।</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">অফ কৰক</translation>
 <translation id="8114753159095730575">ফাইল ডাউনল’ড উপলব্ধ। স্ক্ৰীনৰ তলৰ অংশৰ কাষত থকা বিকল্পসমূহ।</translation>
 <translation id="8132598642024322408">পূৰ্বে <ph name="PREVIOUS_PRICE" /> আছিল, এতিয়া <ph name="PRICE" />।</translation>
+<translation id="8136856065410661948">Chrome আৰু Google Lensৰ পৰা আপোনাৰ Apple Calendarত অনুষ্ঠান সৃষ্টি কৰিবলৈ এইটো ব্যৱহাৰ কৰা হ’ব।</translation>
 <translation id="8156478151976189188">পাছৱৰ্ড ছিংক কৰাৰ সুবিধাটোৱে কাম কৰা নাই</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> টা একাউণ্ট</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />আপোনাৰ ডিভাইচ<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb
index ae6b155..0c5369f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">İzləməyin</translation>
 <translation id="3863769054730344136">Cihazlara göndərin</translation>
 <translation id="387280738075653372">Chrome'u buradan endirin.</translation>
+<translation id="3888863481921783344">Bu, tədbirinizə mümkün dəvətliləri göstərmək üçün istifadə olunacaq.</translation>
 <translation id="3892144330757387737">Tarixçəni burada tapa bilərsiniz</translation>
 <translation id="3897092660631435901">Menyu</translation>
 <translation id="3904829425754749514">Təşkilatınız sinxronizasiyanı deaktiv etdi. Hələ də bu cihazda bütün əlfəcinlər, tarixçə, parol və digər ayarları görə bilərsiniz. Dəyişiklik etsəniz, onlar hesabınızla sinxronizasiya edilməyəcək.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Deaktiv Edin</translation>
 <translation id="8114753159095730575">Fayl endirilməsi əlçatandır. Seçimlər ekranın aşağısında əlçatandır.</translation>
 <translation id="8132598642024322408"><ph name="PREVIOUS_PRICE" /> olan məhsul indi <ph name="PRICE" /> qiymətinədir.</translation>
+<translation id="8136856065410661948">Bu, Chrome və Google Linzadan Apple Təqvimdə tədbirlər yaratmaq üçün istifadə olunacaq.</translation>
 <translation id="8156478151976189188">Parol Sinxronizasiyası İşləmir</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> hesabları</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Cihazlarınız<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
index ec59e19..fd962ee 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Dodirnite Zadana aplikacija preglednika</translation>
 <translation id="2820289420301699633">Vaš administrator ima kontrolu nad Chromeom i može pristupati njegovim podacima</translation>
 <translation id="2830972654601096923">Upravljajte adresama...</translation>
+<translation id="2834399722155632105">3. Dodirnite Opcije zaporke</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Poništi postavke Prevodioca</translation>
 <translation id="2848086008667475748">Postavite kao zadano u Postavkama…</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">Prestani pratiti</translation>
 <translation id="3863769054730344136">Pošaljite na svoje uređaje</translation>
 <translation id="387280738075653372">Preuzmite Chrome ovdje.</translation>
+<translation id="3888863481921783344">Ovo će se koristiti za prikazivanje potencijalnih pozvanih osoba na vaš događaj.</translation>
 <translation id="3892144330757387737">Svoju historiju ćete pronaći ovdje</translation>
 <translation id="3897092660631435901">Meni</translation>
 <translation id="3904829425754749514">Vaša organizacija je isključila sinhronizaciju. I dalje ćete moći pregledati svoje oznake, historiju, lozinke i druge postavke na ovom uređaju. Ako nešto promijenite, te promjene se neće sinhronizirati s vašim računom.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">Da dijelite sadržaj s osobama u blizini, dozvolite im da skeniraju ovaj QR kôd pomoću kamere ili aplikacije za skeniranje QR koda.</translation>
 <translation id="5911030830365207728">Google Prevodilac</translation>
 <translation id="5913600720976431809">Opcije za prijevod stranice</translation>
+<translation id="5933515656458364246">Sinkronizirajte svoje podatke na svim uređajima.</translation>
 <translation id="5938160824633642847">Vaš uređaj je skoro pun. Oslobodite prostor i pokušajte ponovo.</translation>
 <translation id="5948291296578561264">Ovo vam omogućava da sačuvate fotografije u biblioteku fotografija.</translation>
 <translation id="5951816930277761335">Podijelite link</translation>
@@ -712,6 +715,7 @@
 
 Vaši podaci su šifrirani sinhroniziranim pristupnim izrazom <ph name="TIME" />. Unesite izraz da započnete sinhronizaciju.</translation>
 <translation id="6418346271604475326">Pripremanje PDF-a</translation>
+<translation id="6429213933892582367">Otvorite Opcije zaporke</translation>
 <translation id="6434591244308415567">Došlo je do greške. Pokušajte ponovo kasnije.</translation>
 <translation id="6435236283694032571">Dodavanje na Listu za čitanje</translation>
 <translation id="6439338047467462846">Dozvoli sve</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">Izgovori odgovore</translation>
 <translation id="7207023858769244910">Sinhronizirajte da dobijete sadržaj zasnovan na vašim interesovanjima.</translation>
 <translation id="721597782417389033">Nevažeći nadimak kartice</translation>
+<translation id="7221173315674413369">Istražite nove značajke i savjete u odjeljku Novosti</translation>
 <translation id="722454870747268814">Nova anonimna kartica</translation>
 <translation id="7265758999917665941">Nikada za ovu web lokaciju</translation>
 <translation id="7272437679830969316">Nije moguće potvrditi identitet. Lozinka nije kopirana.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">Preuzmi</translation>
 <translation id="7531345132340165516">Trenutna web lokacija</translation>
 <translation id="7537586195939242955">Žao nam je, pristupna riječ trenutačno se ne može instalirati u Passbook.</translation>
+<translation id="7553234618121028547">Da biste isključili značajku, otvorite <ph name="BEGIN_LINK" />Postavke<ph name="END_LINK" />, a zatim Opcije zaporke.</translation>
 <translation id="7554791636758816595">Nova kartica</translation>
 <translation id="7561196759112975576">Uvijek</translation>
 <translation id="7583004045319035904">Koristite <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> da otključate svoje anonimne kartice.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">Kreirajte i sačuvajte lozinke te upravljajte njima da se možete jednostavno prijaviti na web lokacije i u aplikacije. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Isključi</translation>
 <translation id="8114753159095730575">Dostupno je preuzimanje fajla. Opcije koje su dostupne pri dnu ekrana.</translation>
+<translation id="81313319706244542">2. Dodirnite Zaporke</translation>
 <translation id="8132598642024322408">Sada je <ph name="PRICE" />, bilo je <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Ovo će se koristiti za kreiranje događaja na vašem Apple Kalendaru iz Chromea i Google Objektiva.</translation>
 <translation id="8156478151976189188">Sinhronizacija lozinki ne funkcionira</translation>
 <translation id="8157532349231307196">Broj računa: <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Vaši uređaji<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">Novo pretraživanje</translation>
 <translation id="8323906514956095947">Dodirnite i zadržite za više opcija za karticu</translation>
 <translation id="8328777765163860529">Zatvori sve</translation>
+<translation id="8343993175958086504">Sigurnosno kopirajte svoje sadržaje i upotrebljavajte ih na bilo kojem uređaju.</translation>
 <translation id="8378714024927312812">Pod upravljanjem vaše organizacije</translation>
 <translation id="8386068868580335421">Vrati na zadano</translation>
 <translation id="8407669440184693619">Nije pronađena nijedna lozinka za ovu web lokaciju</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index c969950c..e68d8ed2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Πατήστε Προεπιλεγμένη εφαρμογή προγράμματος περιήγησης.</translation>
 <translation id="2820289420301699633">Ο διαχειριστής σας έχει τον έλεγχο του Chrome και μπορεί να αποκτήσει πρόσβαση στα δεδομένα του</translation>
 <translation id="2830972654601096923">Διαχείριση διευθύνσεων…</translation>
+<translation id="2834399722155632105">3. Πατήστε Επιλογές κωδικών πρόσβασης</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Επαν.ρυθ.μετάφ.</translation>
 <translation id="2848086008667475748">Ορισμός ως προεπιλεγμένου στις Ρυθμίσεις…</translation>
@@ -631,6 +632,7 @@
 <translation id="5899314093904173337">Για κοινή χρήση με άτομα που βρίσκονται κοντά σας, επιτρέψτε τους να σαρώσουν αυτόν τον κωδικό QR με την εφαρμογή κάμερας ή την εφαρμογή σάρωσης κωδικών QR.</translation>
 <translation id="5911030830365207728">Μετάφραση Google</translation>
 <translation id="5913600720976431809">Επιλογές για τη Μετάφραση σελίδας</translation>
+<translation id="5933515656458364246">Συγχρονισμός των δεδομένων σας σε όλες τις συσκευές.</translation>
 <translation id="5938160824633642847">Ο αποθηκευτικός χώρος της συσκευής σας έχει σχεδόν γεμίσει. Απελευθερώστε χώρο και προσπαθήστε ξανά.</translation>
 <translation id="5948291296578561264">Σας επιτρέπει να αποθηκεύετε φωτογραφίες στη βιβλιοθήκη φωτογραφιών σας.</translation>
 <translation id="5951816930277761335">Μοιραστείτε τον σύνδεσμο</translation>
@@ -712,6 +714,7 @@
 
 Τα δεδομένα σας κρυπτογραφήθηκαν με τη δική σας φράση πρόσβασης συγχρονισμού στις <ph name="TIME" />. Πληκτρολογήστε την για να ξεκινήσει ο συγχρονισμός.</translation>
 <translation id="6418346271604475326">Προετοιμασία PDF</translation>
+<translation id="6429213933892582367">Ανοίξτε τις Επιλογές κωδικών πρόσβασης</translation>
 <translation id="6434591244308415567">Παρουσιάστηκε ένα σφάλμα. Δοκιμάστε ξανά αργότερα.</translation>
 <translation id="6435236283694032571">Προσθήκη στη λίστα ανάγνωσης</translation>
 <translation id="6439338047467462846">Να επιτρέπονται όλα</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Εκφώνηση απαντήσεων</translation>
 <translation id="7207023858769244910">Συγχρονίστε για να λαμβάνετε περιεχόμενο με βάση τα ενδιαφέροντά σας.</translation>
 <translation id="721597782417389033">Μη έγκυρο ψευδώνυμο κάρτας</translation>
+<translation id="7221173315674413369">Εξερευνήστε νέες λειτουργίες και συμβουλές στην ενότητα Τι νέο υπάρχει</translation>
 <translation id="722454870747268814">Νέα καρτέλα ανώνυμης περιήγησης</translation>
 <translation id="7265758999917665941">Ποτέ για αυτόν τον ιστότοπο</translation>
 <translation id="7272437679830969316">Δεν είναι δυνατή η επαλήθευση της ταυτότητας σας. Ο κωδικός πρόσβασης δεν αντιγράφηκε.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Λήψη</translation>
 <translation id="7531345132340165516">Τρέχων ιστότοπος</translation>
 <translation id="7537586195939242955">Δεν είναι δυνατή η εγκατάσταση του πάσου σας στο Passbook.</translation>
+<translation id="7553234618121028547">Για απενεργοποίηση, ανοίξτε τις <ph name="BEGIN_LINK" />Ρυθμίσεις<ph name="END_LINK" /> και μεταβείτε στις Επιλογές κωδικών πρόσβασης.</translation>
 <translation id="7554791636758816595">Νέα καρτέλα</translation>
 <translation id="7561196759112975576">Πάντα</translation>
 <translation id="7583004045319035904">Χρήση <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> για ξεκλείδωμα των καρτελών ανώνυμης περιήγησης.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Δημιουργήστε, αποθηκεύστε και διαχειριστείτε τους κωδικούς πρόσβασής σας, ώστε να μπορείτε να συνδεθείτε εύκολα σε ιστοτόπους και εφαρμογές. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Απενεργοποίηση</translation>
 <translation id="8114753159095730575">Η λήψη του αρχείου είναι διαθέσιμη. Οι διαθέσιμες επιλογές βρίσκονται κοντά στο κάτω μέρος της οθόνης.</translation>
+<translation id="81313319706244542">2. Πατήστε Κωδικοί πρόσβασης</translation>
 <translation id="8132598642024322408">Τώρα <ph name="PRICE" /> από <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8156478151976189188">Ο συγχρονισμός κωδικών πρόσβασης δεν λειτουργεί</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> λογαριασμοί</translation>
@@ -963,6 +969,7 @@
 <translation id="8319076807703933069">Νέα αναζήτηση</translation>
 <translation id="8323906514956095947">Αγγίξτε παρατεταμένα για περισσότερες επιλογές καρτελών</translation>
 <translation id="8328777765163860529">Κλείσιμο όλων</translation>
+<translation id="8343993175958086504">Δημιουργήστε αντίγραφα ασφαλείας των δεδομένων σας και χρησιμοποιήστε τα σε οποιαδήποτε συσκευή.</translation>
 <translation id="8378714024927312812">Διαχειριζόμενο από τον οργανισμό σας</translation>
 <translation id="8386068868580335421">Επαναφορά</translation>
 <translation id="8407669440184693619">Δεν βρέθηκαν κωδικοί πρόσβασης για αυτόν τον ιστότοπο</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index 31192285..602f8eae 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">۲. روی برنامه مرور پیش‌فرض ضربه بزنید</translation>
 <translation id="2820289420301699633">‏سرپرستتان Chrome را کنترل می‌کند و می‌تواند به داده‌های آن دسترسی داشته باشد</translation>
 <translation id="2830972654601096923">مدیریت نشانی‌ها…</translation>
+<translation id="2834399722155632105">۳. روی «گزینه‌های گذرواژه» ضربه بزنید</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />، <ph name="STATE" />، <ph name="URL" /></translation>
 <translation id="2843803966603263712">‏بازنشانی تنظیم «ترجمه Google»</translation>
 <translation id="2848086008667475748">تبدیل به برنامه پیش‌فرض در «تنظیمات»…</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">لغو دنبال کردن</translation>
 <translation id="3863769054730344136">ارسال به «دستگاه‌های شما»</translation>
 <translation id="387280738075653372">‏در اینجا Chrome را بارگیری کنید.</translation>
+<translation id="3888863481921783344">از این دسترسی برای نمایش دعوت‌شوندگان بالقوه به رویدادتان استفاده می‌شود.</translation>
 <translation id="3892144330757387737">سابقه را اینجا خواهید دید</translation>
 <translation id="3897092660631435901">منو</translation>
 <translation id="3904829425754749514">سازمانتان همگام‌سازی را خاموش کرده است. همچنان می‌توانید نشانک‌ها، سابقه، گذرواژه‌ها، و دیگر تنظیماتتان را در این دستگاه ببینید. اگر تغییری ایجاد کنید، با حسابتان همگام‌سازی نمی‌شود.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">‏برای هم‌رسانی کردن با افراد حاضر در اطراف، به‌آن‌ها اجازه دهید این رمزینه پاسخ‌سریع را با دوربین خود یا برنامه اسکنر QR اسکن کنند</translation>
 <translation id="5911030830365207728">‏ترجمه Google</translation>
 <translation id="5913600720976431809">گزینه‌های ترجمه صفحه</translation>
+<translation id="5933515656458364246">داده‌هایتان را در همه دستگاه‌ها همگام‌سازی کنید.</translation>
 <translation id="5938160824633642847">دستگاهتان تقریباً پر است. فضا آزاد کنید و دوباره امتحان کنید.</translation>
 <translation id="5948291296578561264">با این کار می‌توانید عکس‌ها را در کتابخانه عکستان ذخیره کنید.</translation>
 <translation id="5951816930277761335">این پیوند را هم‌رسانی کنید</translation>
@@ -712,6 +715,7 @@
 
 داده‌های شما در تاریخ <ph name="TIME" /> با گذرعبارت همگام‌سازی‌تان رمزگذاری شد. برای شروع همگام‌سازی آن را وارد کنید.</translation>
 <translation id="6418346271604475326">‏آماده‌سازی PDF</translation>
+<translation id="6429213933892582367">گزینه‌های «گذرواژه » را باز کنید</translation>
 <translation id="6434591244308415567">خطایی روی داد. بعداً دوباره امتحان کنید.</translation>
 <translation id="6435236283694032571">افزودن به فهرست خواندن</translation>
 <translation id="6439338047467462846">همه مجاز</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">پاسخ گفتاری</translation>
 <translation id="7207023858769244910">برای دریافت محتوا براساس علایقتان، همگام‌سازی کنید.</translation>
 <translation id="721597782417389033">نام مستعار کارت نامعتبر است</translation>
+<translation id="7221173315674413369">ویژگی‌ها و نکات جدید را در «تازه‌ها» کاوش کنید</translation>
 <translation id="722454870747268814">برگه ناشناس جدید</translation>
 <translation id="7265758999917665941">هرگز برای این سایت</translation>
 <translation id="7272437679830969316">نمی‌توانیم هویتتان را به تأیید برسانیم. گذرواژه کپی نشد.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">بارگیری</translation>
 <translation id="7531345132340165516">سایت فعلی</translation>
 <translation id="7537586195939242955">‏متأسفانه نصب «جواز» در Passbook فعلاً امکان‌پذیر نیست.</translation>
+<translation id="7553234618121028547">برای خاموش کردن، <ph name="BEGIN_LINK" />تنظیمات<ph name="END_LINK" /> را باز کنید و به «گزینه‌های گذرواژه» بروید.</translation>
 <translation id="7554791636758816595">برگهٔ جدید</translation>
 <translation id="7561196759112975576">همیشه</translation>
 <translation id="7583004045319035904">برای باز کردن قفل «برگه‌های ناشناس» از <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> استفاده کنید.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">گذرواژه‌هایتان را ایجاد، ذخیره، و مدیریت کنید تا بتوانید به‌راحتی به سیستم سایت‌ها و برنامه‌ها وارد شوید. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">خاموش کردن</translation>
 <translation id="8114753159095730575">بارگیری فایل دردسترس است. گزینه‌ها نزدیک انتهای صفحه دردسترس است.</translation>
+<translation id="81313319706244542">۲. روی «گذرواژه‌ها» ضربه بزنید</translation>
 <translation id="8132598642024322408">قیمت فعلی <ph name="PRICE" /> است، قیمت قبلی <ph name="PREVIOUS_PRICE" /> بود.</translation>
+<translation id="8136856065410661948">‏از این دسترسی برای ایجاد رویداد در Apple Calendar از Chrome و «لنز Google» استفاده می‌شود.</translation>
 <translation id="8156478151976189188">«همگام‌سازی گذرواژه» کار نمی‌کند</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> حساب</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />دستگاه‌های شما<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">جستجوی جدید</translation>
 <translation id="8323906514956095947">برای دیدن گزینه‌های بیشتر برگه، لمس کنید و نگه دارید</translation>
 <translation id="8328777765163860529">بستن همه</translation>
+<translation id="8343993175958086504">از داده‌هایتان پشتیبان بگیرید و در هر دستگاهی از آن‌ها استفاده کنید.</translation>
 <translation id="8378714024927312812">توسط سازمانتان مدیریت می‌شود</translation>
 <translation id="8386068868580335421">بازنشانی</translation>
 <translation id="8407669440184693619">هیچ گذرواژه‌ای برای این سایت پیدا نشد</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
index d9e29c4..227d4e51 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. I-tap ang Default na Browser App</translation>
 <translation id="2820289420301699633">May kontrol ang iyong administrator sa Chrome at maa-access niya ang data nito</translation>
 <translation id="2830972654601096923">Pamahalaan ang Mga Address...</translation>
+<translation id="2834399722155632105">3. I-tap ang Mga Opsyon sa Password</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">I-reset ang Mga Setting ng Pagsasalin</translation>
 <translation id="2848086008667475748">Gawing Default sa Mga Setting…</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">Huwag nang subaybayan</translation>
 <translation id="3863769054730344136">Ipadala sa Iyong Mga Device</translation>
 <translation id="387280738075653372">I-download ang Chrome dito.</translation>
+<translation id="3888863481921783344">Gagamitin ito para ipakita sa iyo ang mga posibleng inimbitahan sa event mo.</translation>
 <translation id="3892144330757387737">Makikita mo rito ang iyong history</translation>
 <translation id="3897092660631435901">Menu</translation>
 <translation id="3904829425754749514">Na-off ng iyong organisasyon ang pag-sync. Makikita mo pa rin ang iyong mga bookmark, history, password, at iba pang setting sa device na ito. Kung gagawa ka ng mga pagbabago, hindi masi-sync ang mga ito sa iyong account.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">Para magbahagi sa mga taong nasa malapit, ipa-scan sa kanila ang QR code na ito gamit ang kanilang camera o QR scanner app</translation>
 <translation id="5911030830365207728">Google Translate</translation>
 <translation id="5913600720976431809">Mga opsyon para Isalin ang page</translation>
+<translation id="5933515656458364246">I-sync ang iyong data sa lahat ng device.</translation>
 <translation id="5938160824633642847">Malapit nang mapuno ang iyong device. Magbakante ng espasyo at subukang muli.</translation>
 <translation id="5948291296578561264">Binibigyang-daan ka nito na mag-save ng mga larawan sa iyong library ng larawan.</translation>
 <translation id="5951816930277761335">Ibahagi ang Link</translation>
@@ -712,6 +715,7 @@
 
 Na-encrypt ang iyong data gamit ang iyong passphrase sa pag-sync noong <ph name="TIME" />. Ilagay ito upang simulan ang pag-sync.</translation>
 <translation id="6418346271604475326">Ihinahanda ang PDF</translation>
+<translation id="6429213933892582367">Buksan ang Mga Opsyon sa Password</translation>
 <translation id="6434591244308415567">Nagkaroon ng error. Subukang muli sa ibang pagkakataon.</translation>
 <translation id="6435236283694032571">Idagdag sa Listahan ng Babasahin</translation>
 <translation id="6439338047467462846">Payagan Lahat</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">Bigkasin ang Mga Sagot</translation>
 <translation id="7207023858769244910">Mag-sync para makakuha ng content batay sa iyong mga interes.</translation>
 <translation id="721597782417389033">Invalid ang Nickname ng Card</translation>
+<translation id="7221173315674413369">Mag-explore ng mga bagong feature at tip sa Ano’ng Bago</translation>
 <translation id="722454870747268814">Bagong Tab na Incognito</translation>
 <translation id="7265758999917665941">Hindi Kailanman Para sa Site na Ito</translation>
 <translation id="7272437679830969316">Hindi ma-verify ang iyong pagkakakilanlan. Hindi nakopya ang password.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">I-download</translation>
 <translation id="7531345132340165516">Kasalukuyang Site</translation>
 <translation id="7537586195939242955">Paumahin, hindi ma-install ngayon ang Pass mo sa Passbook.</translation>
+<translation id="7553234618121028547">Para ma-off, buksan ang <ph name="BEGIN_LINK" />Mga Setting<ph name="END_LINK" /> at pumunta sa Mga Opsyon sa Password.</translation>
 <translation id="7554791636758816595">Bagong Tab</translation>
 <translation id="7561196759112975576">Palagi</translation>
 <translation id="7583004045319035904">Gamitin ang <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> para i-unlock ang iyong mga tab na Incognito.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">Gawin, i-save, at pamahalaan ang iyong mga password para madali kang makapag-sign in sa mga site at app. <ph name="BEGIN_LINK" />Matuto pa<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">I-off</translation>
 <translation id="8114753159095730575">Available ang pag-download ng file. Available ang mga opsyon malapit sa ibaba ng screen.</translation>
+<translation id="81313319706244542">2. I-tap ang Mga Password</translation>
 <translation id="8132598642024322408"><ph name="PRICE" /> na lang ngayon ang dating <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Gagamitin ito para gumawa ng mga event sa iyong Apple Calendar mula sa Chrome at Google Lens.</translation>
 <translation id="8156478151976189188">Hindi Gumagana ang Password Sync</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> (na) account</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Ang iyong mga device<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">Bagong Paghahanap</translation>
 <translation id="8323906514956095947">Pindutin nang matagal para sa higit pang opsyon sa tab</translation>
 <translation id="8328777765163860529">Isara Lahat</translation>
+<translation id="8343993175958086504">I-back up ang iyong mga file at gamitin ito sa anumang device.</translation>
 <translation id="8378714024927312812">Pinapamahalaan ng iyong organisasyon</translation>
 <translation id="8386068868580335421">I-reset</translation>
 <translation id="8407669440184693619">Walang nahanap na password para sa site na ito</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
index 0f5aa8b..db49dd67 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Touchez Navigateur par défaut</translation>
 <translation id="2820289420301699633">L'administrateur peut gérer Chrome et accéder à ses données</translation>
 <translation id="2830972654601096923">Gérer les adresses…</translation>
+<translation id="2834399722155632105">3. Appuyez sur Options de mot de passe</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Réinit. param. Traduction</translation>
 <translation id="2848086008667475748">Définir par défaut dans Paramètres…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Pour partager du contenu avec des personnes à proximité, faites-leur numériser ce code QR avec leur appareil photo ou une application de numérisation de code QR</translation>
 <translation id="5911030830365207728">Google Traduction</translation>
 <translation id="5913600720976431809">Options pour traduire la page</translation>
+<translation id="5933515656458364246">Synchronisez vos données sur tous les appareils.</translation>
 <translation id="5938160824633642847">Votre appareil est presque plein. Libérez de l'espace et réessayez.</translation>
 <translation id="5948291296578561264">Cela vous permet d'enregistrer vos photos dans votre bibliothèque de photos.</translation>
 <translation id="5951816930277761335">Partager le lien</translation>
@@ -713,6 +715,7 @@
 
 Vos données ont été chiffrées avec votre phrase de passe le <ph name="TIME" />. Veuillez l'entrer pour commencer la synchronisation.</translation>
 <translation id="6418346271604475326">Prép. du PDF</translation>
+<translation id="6429213933892582367">Ouvrez les options de mot de passe</translation>
 <translation id="6434591244308415567">Une erreur s'est produite. Réessayez plus tard.</translation>
 <translation id="6435236283694032571">Ajouter à la liste de lecture</translation>
 <translation id="6439338047467462846">Tout autoriser</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Réponses vocales</translation>
 <translation id="7207023858769244910">Activez la synchronisation pour voir du contenu en fonction de vos centres d'intérêt.</translation>
 <translation id="721597782417389033">Pseudo de carte incorrect</translation>
+<translation id="7221173315674413369">Explorez les nouvelles fonctionnalités et astuces dans Nouveautés</translation>
 <translation id="722454870747268814">Nouvel onglet de navigation privée</translation>
 <translation id="7265758999917665941">Jamais pour ce site</translation>
 <translation id="7272437679830969316">Impossible de vérifier votre identité. Le mot de passe n'a pas été copié.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Télécharger</translation>
 <translation id="7531345132340165516">Site actuel</translation>
 <translation id="7537586195939242955">Imposs. d'install. votre pass. pour Passbook pour le moment.</translation>
+<translation id="7553234618121028547">Pour désactiver cette fonctionnalité, ouvrez <ph name="BEGIN_LINK" />Paramètres<ph name="END_LINK" /> et accédez à Options de mot de passe.</translation>
 <translation id="7554791636758816595">Nouvel onglet</translation>
 <translation id="7561196759112975576">Toujours</translation>
 <translation id="7583004045319035904">Utiliser <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> pour déverrouiller vos onglets de navigation privée.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Créez, enregistrez et gérez vos mots de passe pour pouvoir vous connecter facilement aux sites et aux applications. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Désactiver</translation>
 <translation id="8114753159095730575">Le téléchargement du fichier est disponible. Options présentées vers le bas de l’écran.</translation>
+<translation id="81313319706244542">2. Appuyez sur Mots de passe</translation>
 <translation id="8132598642024322408">Prix actuel : <ph name="PRICE" />; ancien prix : <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Cela sera utilisé pour créer des événements dans votre agenda Apple à partir de Chrome et de la lentille Google.</translation>
 <translation id="8156478151976189188">La synchronisation de mots de passe ne fonctionne pas</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Nouvelle recherche</translation>
 <translation id="8323906514956095947">Maintenez le doigt sur le bouton pour afficher plus d'options d'onglets</translation>
 <translation id="8328777765163860529">Tout fermer</translation>
+<translation id="8343993175958086504">Sauvegardez vos données et utilisez-les sur n'importe quel appareil</translation>
 <translation id="8378714024927312812">Géré par votre organisation</translation>
 <translation id="8386068868580335421">Réinitialiser</translation>
 <translation id="8407669440184693619">Aucun mot de passé trouvé pour ce site</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index 0ef110f..6bad7943 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">अनफ़ॉलो करें</translation>
 <translation id="3863769054730344136">अपने डिवाइसों पर भेजें</translation>
 <translation id="387280738075653372">Chrome यहां से डाउनलोड करें.</translation>
+<translation id="3888863481921783344">इसका इस्तेमाल, आपको इवेंट में बुलाए गए संभावित लोगों की जानकारी को दिखाने के लिए किया जाएगा.</translation>
 <translation id="3892144330757387737">आपको अपनी गतिविधि का इतिहास यहां मिलेगा</translation>
 <translation id="3897092660631435901">मेन्यू</translation>
 <translation id="3904829425754749514">आपके संगठन ने सिंक करने की सुविधा बंद कर दी है. इस डिवाइस पर आपके सभी बुकमार्क, इतिहास, पासवर्ड, और अन्य सेटिंग अब भी देखी जा सकती हैं. अगर इनमें कोई बदलाव किया जाता है, तो उसे आपके खाते में सिंक नहीं किया जाएगा.</translation>
@@ -940,6 +941,7 @@
 <translation id="8105368624971345109">बंद करें</translation>
 <translation id="8114753159095730575">फ़ाइल डाउनलोड करने की सुविधा उपलब्ध है. विकल्प स्क्रीन के नीचे उपलब्ध हैं.</translation>
 <translation id="8132598642024322408">अब <ph name="PRICE" /> में, पहले कीमत <ph name="PREVIOUS_PRICE" /> थी.</translation>
+<translation id="8136856065410661948">Chrome और Google Lens में मौजूद इवेंट को आपके Apple Calendar में जोड़ने के लिए, इसका इस्तेमाल किया जाएगा.</translation>
 <translation id="8156478151976189188">पासवर्ड को सिंक करने की सुविधा काम नहीं कर रही</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> खाते</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />आपके डिवाइस<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index 65d0a6f0..65cd676 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Dodirnite opciju Zadana aplikacija preglednika</translation>
 <translation id="2820289420301699633">Vaš administrator ima kontrolu nad Chromeom i može pristupiti njegovim podacima</translation>
 <translation id="2830972654601096923">Upravljanje adresama...</translation>
+<translation id="2834399722155632105">3. Dodirnite Opcije zaporke</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Vrati Prevoditelj na zadano</translation>
 <translation id="2848086008667475748">Postavi kao zadano u Postavkama…</translation>
@@ -631,6 +632,7 @@
 <translation id="5899314093904173337">Za dijeljenje s osobama u blizini dopustite im da skeniraju ovaj QR kôd pomoću kamere ili aplikacije za skeniranje QR kodova</translation>
 <translation id="5911030830365207728">Google prevoditelj</translation>
 <translation id="5913600720976431809">Opcije prevođenja stranice</translation>
+<translation id="5933515656458364246">Sinkronizirajte svoje podatke na svim uređajima.</translation>
 <translation id="5938160824633642847">Uređaj je gotovo pun. Oslobodite prostor i pokušajte ponovo.</translation>
 <translation id="5948291296578561264">To vam omogućuje da spremite fotografije u zbirku fotografija.</translation>
 <translation id="5951816930277761335">Dijelite vezu</translation>
@@ -712,6 +714,7 @@
 
 Vaši su podaci šifrirani vašom šifrom za sinkronizaciju <ph name="TIME" />. Unesite je da biste pokrenuli sinkronizaciju.</translation>
 <translation id="6418346271604475326">Priprema PDF-a</translation>
+<translation id="6429213933892582367">Otvorite Opcije zaporke</translation>
 <translation id="6434591244308415567">Došlo je do pogreške. Pokušajte ponovo kasnije.</translation>
 <translation id="6435236283694032571">Dodaj na popis za čitanje</translation>
 <translation id="6439338047467462846">Dopusti sve</translation>
@@ -827,6 +830,7 @@
 <translation id="7203585745079012652">Izgovaranje odgovora</translation>
 <translation id="7207023858769244910">Omogućite sinkronizaciju da biste dobivali sadržaj na temelju svojih interesa.</translation>
 <translation id="721597782417389033">Nadimak kartice nije važeći</translation>
+<translation id="7221173315674413369">Istražite nove značajke i savjete u odjeljku Novosti</translation>
 <translation id="722454870747268814">Nova anonimna kartica</translation>
 <translation id="7265758999917665941">Nikad za ovu web lokaciju</translation>
 <translation id="7272437679830969316">Potvrda identiteta nije moguća. Zaporka nije kopirana.</translation>
@@ -860,6 +864,7 @@
 <translation id="7514365320538308">Preuzmi</translation>
 <translation id="7531345132340165516">Trenutačna web-lokacija</translation>
 <translation id="7537586195939242955">Žao nam je, pristupna riječ trenutačno se ne može instalirati u Passbook.</translation>
+<translation id="7553234618121028547">Da biste isključili značajku, otvorite <ph name="BEGIN_LINK" />Postavke<ph name="END_LINK" />, a zatim Opcije zaporke.</translation>
 <translation id="7554791636758816595">Nova kartica</translation>
 <translation id="7561196759112975576">Uvijek</translation>
 <translation id="7583004045319035904">Koristite <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> za otključavanje anonimnih kartica.</translation>
@@ -941,6 +946,7 @@
 <translation id="8101409298456377967">Izradite i spremite zaporke te upravljajte njima kako biste se lako prijavljivali na web-lokacije i u aplikacije. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Isključi</translation>
 <translation id="8114753159095730575">Dostupno je preuzimanje datoteka. Opcije su dostupne pri dnu zaslona.</translation>
+<translation id="81313319706244542">2. Dodirnite Zaporke</translation>
 <translation id="8132598642024322408">Sad <ph name="PRICE" /> umjesto <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8156478151976189188">Sinkronizacija zaporki ne radi</translation>
 <translation id="8157532349231307196">Broj računa: <ph name="NUMBER_OF_ACCOUNTS" /></translation>
@@ -962,6 +968,7 @@
 <translation id="8319076807703933069">Novo pretraživanje</translation>
 <translation id="8323906514956095947">Dodirnite i držite za više opcija za kartice</translation>
 <translation id="8328777765163860529">Zatvori sve</translation>
+<translation id="8343993175958086504">Sigurnosno kopirajte svoje sadržaje i upotrebljavajte ih na bilo kojem uređaju.</translation>
 <translation id="8378714024927312812">Pod upravljanjem vaše organizacije</translation>
 <translation id="8386068868580335421">Vrati</translation>
 <translation id="8407669440184693619">Nije pronađena nijedna zaporka za ovu web-lokaciju</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index df2382b..35435d7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Berhenti mengikuti</translation>
 <translation id="3863769054730344136">Kirim ke Perangkat Anda</translation>
 <translation id="387280738075653372">Download Chrome di sini.</translation>
+<translation id="3888863481921783344">Ini akan digunakan untuk menampilkan calon tamu undangan untuk acara Anda.</translation>
 <translation id="3892144330757387737">Histori Anda akan ditampilkan di sini</translation>
 <translation id="3897092660631435901">Menu</translation>
 <translation id="3904829425754749514">Organisasi Anda menonaktifkan sinkronisasi. Anda tetap dapat melihat bookmark, histori, sandi, dan setelan lainnya di perangkat ini. Jika Anda membuat perubahan, perubahan tersebut tidak akan disinkronkan ke akun Anda.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Nonaktifkan</translation>
 <translation id="8114753159095730575">Download file tersedia. Opsi tersedia di dekat bagian bawah layar.</translation>
 <translation id="8132598642024322408">Sekarang <ph name="PRICE" />, sebelumnya <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Ini akan digunakan untuk mengambil acara dari Chrome dan Google Lens lalu membuatnya di Apple Calendar.</translation>
 <translation id="8156478151976189188">Sinkronisasi Sandi Tidak Berfungsi</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> akun</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Perangkat Anda<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb
index d40c642..bd7503d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_is.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Hætta að fylgjast með</translation>
 <translation id="3863769054730344136">Senda í tækin þín</translation>
 <translation id="387280738075653372">Sæktu Chrome hér.</translation>
+<translation id="3888863481921783344">Þetta verður notað til að sýna þér hugsanlega boðsgesti á viðburðinn þinn.</translation>
 <translation id="3892144330757387737">Þú finnur ferilinn þinn hér</translation>
 <translation id="3897092660631435901">Valmynd</translation>
 <translation id="3904829425754749514">Fyrirtækið þitt slökkti á samstillingu. Þú getur áfram séð bókamerki, feril, aðgangsorð og aðrar stillingar í þessu tæki. Breytingar verða ekki samstilltar við reikninginn þinn.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Slökkva</translation>
 <translation id="8114753159095730575">Hægt er að sækja skrá. Valkostir eru í boði neðarlega á skjánum.</translation>
 <translation id="8132598642024322408">Verð nú <ph name="PRICE" />, verð áður <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Þetta verður notað til að búa til viðburði í Apple Calendar frá Chrome og Google-linsu.</translation>
 <translation id="8156478151976189188">Samstilling aðgangsorða virkar ekki</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> reikningar</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Tækin þín<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
index 1379e6a..5f2ba3f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -102,6 +102,7 @@
 <translation id="1657641691196698092">‏קובצי Cookie חסומים</translation>
 <translation id="165877110639533037">אין כרטיסיות פתוחות</translation>
 <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> ל<ph name="TARGET_LANGUAGE" /></translation>
+<translation id="1683483432843341018">בקשת אתר שמותאם לנייד</translation>
 <translation id="168715261339224929">כדי שהסימניות שלך יופיעו בכל המכשירים, יש להפעיל סנכרון.</translation>
 <translation id="1687475363370981210">סימון הכול כ'נקרא'</translation>
 <translation id="1689333818294560261">כינוי</translation>
@@ -243,6 +244,7 @@
 <translation id="288655811176831528">סגירת הכרטיסייה</translation>
 <translation id="2890171748217283516">‏אתרים שנמצאים במעקב נשמרים בחשבון Google שלך. ניתן לנהל אותם בהגדרות של Discover.</translation>
 <translation id="2898963176829412617">תיקייה חדשה…</translation>
+<translation id="2902684821701498619">הוספה לרשימת הקריאה</translation>
 <translation id="2916171785467530738">השלמה אוטומטית של חיפושים וכתובות אתרים</translation>
 <translation id="291754862089661335">‏יש למקם את קוד ה-QR או הברקוד במסגרת זו</translation>
 <translation id="2920866371965792875">כאן אפשר לעקוב אחר האתר הזה כדי לקבל ממנו עדכונים.</translation>
@@ -319,6 +321,7 @@
 <translation id="3478058380795961209">חודש פקיעת התוקף</translation>
 <translation id="3482959374254649722">מתבצע סנכרון של הכרטיסיות שלך...</translation>
 <translation id="3484946776651937681">פתיחה ב'הורדות'</translation>
+<translation id="3485558910355485767">חלון פרטי חדש</translation>
 <translation id="3493531032208478708"><ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /> על הצעות לתוכן</translation>
 <translation id="3494788280727468875">אישור הניקוי של נתוני הגלישה</translation>
 <translation id="35083190962747987">‏פתיחה של ${url}</translation>
@@ -365,7 +368,9 @@
 <translation id="385051799172605136">חזרה</translation>
 <translation id="3858860766373142691">שם</translation>
 <translation id="3861486700625780712">ביטול המעקב</translation>
+<translation id="3863769054730344136">שליחה אל המכשירים שלך</translation>
 <translation id="387280738075653372">‏ניתן להוריד את Chrome כאן.</translation>
+<translation id="3888863481921783344">הפרטים האלה ישמשו להצגת מוזמנים אפשריים לאירוע.</translation>
 <translation id="3892144330757387737">ההיסטוריה זמינה כאן</translation>
 <translation id="3897092660631435901">תפריט</translation>
 <translation id="3904829425754749514">הארגון שלך השבית את הסנכרון. יש לך עדיין אפשרות לראות את הסימניות, ההיסטוריה, הסיסמאות והגדרות נוספות במכשיר הזה. שינויים שיתבצעו על ידך לא יסונכרנו בחשבון שלך.</translation>
@@ -587,6 +592,7 @@
 <translation id="5659593005791499971">אימייל</translation>
 <translation id="5669335982068190158">‏יצאת מהחשבון במהלך האיפוס של iPhone. כדי להיכנס שוב לחשבון, יש להקיש על 'המשך' למטה.</translation>
 <translation id="5669528293118408608">www</translation>
+<translation id="5669617676038747374">‏יצירת קוד QR</translation>
 <translation id="567881659373499783">גרסה <ph name="PRODUCT_VERSION" /></translation>
 <translation id="5690398455483874150">{count,plural, =1{‏כרגע מוצג חלון Chrome אחד}two{‏כרגע מוצגים {count} חלונות Chrome}many{‏כרגע מוצגים {count} חלונות Chrome}other{‏כרגע מוצגים {count} חלונות Chrome}}</translation>
 <translation id="5701270923492462699">יש הרשאת גישה למצלמה</translation>
@@ -670,6 +676,7 @@
 <translation id="6219550825416862075">שמחים שחזרת</translation>
 <translation id="6219688215832490856">לא לתרגם אף פעם</translation>
 <translation id="6223816392543092032">קבלת הסימניות, ההיסטוריה, הסיסמאות והגדרות נוספות בכל המכשירים.</translation>
+<translation id="6229318421047648685">בקשת אתר שמותאם למחשב</translation>
 <translation id="6231782223312638214">מוצע</translation>
 <translation id="6232329973559504466">חיפוש במצב אנונימי</translation>
 <translation id="6247557882553405851">‏מנהל הסיסמאות של Google</translation>
@@ -934,6 +941,7 @@
 <translation id="8105368624971345109">כיבוי</translation>
 <translation id="8114753159095730575">יש קובץ זמין להורדה. האפשרויות זמינות בחלק התחתון של המסך.</translation>
 <translation id="8132598642024322408">עכשיו במחיר <ph name="PRICE" />, היה <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">‏הנתונים מ-Chrome ומ-Google Lens ישמשו ליצירת אירועים ב-Apple Calendar.</translation>
 <translation id="8156478151976189188">סנכרון הסיסמאות לא פועל</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> חשבונות</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />המכשירים שלך<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb
index 4e58b42..b3713d0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">ឈប់​តាមដាន</translation>
 <translation id="3863769054730344136">ផ្ញើ​ទៅ​ឧបករណ៍​របស់អ្នក</translation>
 <translation id="387280738075653372">ទាញយក Chrome នៅទីនេះ។</translation>
+<translation id="3888863481921783344">សកម្មភាពនេះ​នឹង​ត្រូវបាន​ប្រើ ដើម្បីបង្ហាញ​ដល់អ្នកនូវអ្នក​ដែលអាច​ទទួលការអញ្ជើញ​ឱ្យចូលរួមព្រឹត្តិការណ៍​របស់អ្នក។</translation>
 <translation id="3892144330757387737">អ្នក​នឹងឃើញ​ប្រវត្តិ​របស់អ្នក​នៅទីនេះ</translation>
 <translation id="3897092660631435901">ម៉ឺនុយ</translation>
 <translation id="3904829425754749514">ស្ថាប័នរបស់អ្នកបានបិទការធ្វើសមកាលកម្ម។ អ្នកនៅតែ​អាចមើលឃើញ​ចំណាំ ប្រវត្តិ ពាក្យសម្ងាត់ និងការកំណត់​ផ្សេងទៀត​របស់អ្នក​នៅលើ​ឧបករណ៍នេះដដែល។ ប្រសិនបើ​អ្នកធ្វើការផ្លាស់ប្ដូរ នោះចំណាំ ប្រវត្តិ ពាក្យសម្ងាត់ និងការកំណត់​ផ្សេងទៀត​របស់អ្នកនឹងមិនធ្វើសមកាលកម្ម​ទៅគណនី​របស់អ្នកទេ។</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">បិទ</translation>
 <translation id="8114753159095730575">អាចទាញយកឯកសារ​បានហើយ។ មានជម្រើស​នៅ​ក្បែរ​ផ្នែកខាងក្រោមនៃ​អេក្រង់។</translation>
 <translation id="8132598642024322408">ឥឡូវ <ph name="PRICE" /> ពីមុន <ph name="PREVIOUS_PRICE" />។</translation>
+<translation id="8136856065410661948">សកម្មភាពនេះ​នឹង​ត្រូវបាន​ប្រើ ដើម្បីបង្កើត​ព្រឹត្តិការណ៍​នៅក្នុង Apple Calendar របស់អ្នកពី Chrome និង Google Lens។</translation>
 <translation id="8156478151976189188">សមកាលកម្ម​ពាក្យសម្ងាត់​មិនដំណើរការទេ</translation>
 <translation id="8157532349231307196">គណនីចនួន <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />ឧបករណ៍របស់អ្នក<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
index 874e8a4a..cc16137 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">ಅನುಸರಿಸಬೇಡಿ</translation>
 <translation id="3863769054730344136">ನಿಮ್ಮ ಸಾಧನಗಳಿಗೆ ಕಳುಹಿಸಿ</translation>
 <translation id="387280738075653372">Chrome ಅನ್ನು ಇಲ್ಲಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ.</translation>
+<translation id="3888863481921783344">ನಿಮ್ಮ ಈವೆಂಟ್‌ಗೆ ಆಗಮಿಸುವ ಸಂಭವನೀಯ ಆಹ್ವಾನಿತರನ್ನು ತೋರಿಸಲು ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="3892144330757387737">ನಿಮ್ಮ ಇತಿಹಾಸವನ್ನು ನೀವು ಇಲ್ಲಿ ಕಾಣಬಹುದು</translation>
 <translation id="3897092660631435901">ಮೆನು</translation>
 <translation id="3904829425754749514">ನಿಮ್ಮ ಸಂಸ್ಥೆ ಸಿಂಕ್ ಅನ್ನು ಆಫ್ ಮಾಡಿದೆ. ನೀವು ಈಗಲೂ ಈ ಸಾಧನದಲ್ಲಿ ನಿಮ್ಮ ಎಲ್ಲಾ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನೋಡಬಹುದು. ನೀವು ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಿದರೆ, ಅವುಗಳು ನಿಮ್ಮ ಖಾತೆಗೆ ಸಿಂಕ್ ಆಗುವುದಿಲ್ಲ.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">ಆಫ್ ಮಾಡು</translation>
 <translation id="8114753159095730575">ಫೈಲ್‌ ಅನ್ನು ಡೌನ್‌ಲೋಡ್‌ ಮಾಡುವ ಸೌಲಭ್ಯ ಲಭ್ಯವಿದೆ. ಪರದೆಯ ಕೆಳಗಿನ ಭಾಗದಲ್ಲಿ ಆಯ್ಕೆಗಳು ಲಭ್ಯವಿವೆ.</translation>
 <translation id="8132598642024322408">ಈಗಿನ ಬೆಲೆ <ph name="PRICE" />, ಹಿಂದಿನ ಬೆಲೆ <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Chrome ಮತ್ತು Google Lens ಸಹಾಯದಿಂದ ನಿಮ್ಮ Apple Calendar ನಲ್ಲಿ ಈವೆಂಟ್‌ಗಳನ್ನು ರಚಿಸಲು ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="8156478151976189188">ಪಾಸ್‌ವರ್ಡ್ ಸಿಂಕ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿಲ್ಲ</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> ಖಾತೆಗಳು</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />ನಿಮ್ಮ ಸಾಧನಗಳು<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
index f5e2503..a293cbb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">팔로우 해제</translation>
 <translation id="3863769054730344136">기기로 전송</translation>
 <translation id="387280738075653372">여기에서 Chrome을 다운로드하세요.</translation>
+<translation id="3888863481921783344">일정에 초대할 수 있는 사람을 표시하는 데 사용됩니다.</translation>
 <translation id="3892144330757387737">여기에서 방문 기록을 확인할 수 있습니다</translation>
 <translation id="3897092660631435901">메뉴</translation>
 <translation id="3904829425754749514">조직에서 동기화를 사용 중지했습니다. 북마크, 방문 기록, 비밀번호, 기타 설정은 이 기기에서 계속 확인할 수 있습니다. 변경할 경우 변경사항이 내 계정에 동기화되지는 않습니다.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">사용 중지</translation>
 <translation id="8114753159095730575">파일을 다운로드할 수 있습니다. 화면 하단에서 옵션을 선택할 수 있습니다.</translation>
 <translation id="8132598642024322408">정가 <ph name="PREVIOUS_PRICE" />인 제품을 <ph name="PRICE" />에 판매 중</translation>
+<translation id="8136856065410661948">Chrome 및 Google 렌즈에서 Apple 캘린더 일정을 만들 때 사용됩니다.</translation>
 <translation id="8156478151976189188">비밀번호 동기화가 작동하지 않음</translation>
 <translation id="8157532349231307196">계정 <ph name="NUMBER_OF_ACCOUNTS" />개</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />내 기기<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
index a70a4b06..1ba43bb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Nesekot</translation>
 <translation id="3863769054730344136">Sūtīt uz jūsu ierīcēm</translation>
 <translation id="387280738075653372">Lejupielādējiet lietotni Chrome šeit.</translation>
+<translation id="3888863481921783344">Piekļuve tiks izmantota, lai rādītu jums lietotājus, ko varat ielūgt uz savu pasākumu.</translation>
 <translation id="3892144330757387737">Šeit varēsiet skatīt savu vēsturi</translation>
 <translation id="3897092660631435901">Izvēlne</translation>
 <translation id="3904829425754749514">Jūsu organizācija izslēdza sinhronizāciju Šajā ierīcē joprojām varat skatīt savas grāmatzīmes, vēsturi, paroles un citus iestatījumus. Ja veiksiet izmaiņas, tās netiks sinhronizētas ar jūsu kontu.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Izslēgt</translation>
 <translation id="8114753159095730575">Pieejama failu lejupielāde. Pieejamās opcijas redzamas ekrāna apakšdaļā.</translation>
 <translation id="8132598642024322408">Pašreizējā cena: <ph name="PRICE" />; iepriekšējā cena: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Piekļuve tiks izmantota, lai jūsu Apple kalendārā veidotu pasākumus no pārlūka Chrome un funkcijas Google Lens.</translation>
 <translation id="8156478151976189188">Paroļu sinhronizācija nedarbojas</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> konti</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Jūsu ierīces<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
index afa4096..bf75cae 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Дагахаа болих</translation>
 <translation id="3863769054730344136">Төхөөрөмжүүддээ илгээх</translation>
 <translation id="387280738075653372">Эндээс Chrome-г татна уу.</translation>
+<translation id="3888863481921783344">Үүнийг таны арга хэмжээнд урих боломжтой хүмүүсийг харуулахад ашиглана.</translation>
 <translation id="3892144330757387737">Та түүхээ эндээс олох болно</translation>
 <translation id="3897092660631435901">Цэс</translation>
 <translation id="3904829425754749514">Танай байгууллага синк хийхийг унтраасан. Та энэ төхөөрөмж дээрх хавчуурганууд, түүх, нууц үгнүүд болон бусад тохиргоог харах боломжтой хэвээр байна. Хэрэв та өөрчлөлтүүд хийвэл тэдгээрийг таны бүртгэлд синк хийхгүй.</translation>
@@ -941,6 +942,7 @@
 <translation id="8105368624971345109">Унтраах</translation>
 <translation id="8114753159095730575">Файл татаж авах боломжтой. Дэлгэцийн доод хэсгийн сонголтууд боломжтой.</translation>
 <translation id="8132598642024322408">Одоо <ph name="PRICE" /> болсон бөгөөд өмнө нь <ph name="PREVIOUS_PRICE" /> байсан.</translation>
+<translation id="8136856065410661948">Үүнийг таны Apple Calendar-т Chrome болон Google Lens-с үйл явдал үүсгэхэд ашиглана.</translation>
 <translation id="8156478151976189188">Нууц үг синк хийх ажиллахгүй байна</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> хаяг</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Таны төхөөрөмжүүд<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index 0305145..609f0b0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">अनफॉलो करा</translation>
 <translation id="3863769054730344136">तुमच्या डिव्हाइस वर पाठवा</translation>
 <translation id="387280738075653372">Chrome येथे डाउनलोड करा.</translation>
+<translation id="3888863481921783344">हे तुम्हाला तुमच्या इव्हेंटसाठी संभाव्य निमंत्रितांना दाखवण्यासाठी वापरले जाईल.</translation>
 <translation id="3892144330757387737">तुमचा इतिहास तुम्हाला येथे सापडेल</translation>
 <translation id="3897092660631435901">मेनू</translation>
 <translation id="3904829425754749514">तुमच्या संस्थेने सिंक करणे बंद केले आहे. तुम्ही तरीही या डिव्हाइसवर तुमचे बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज पाहू शकता. तुम्ही बदल केल्यास, ते तुमच्या खात्याशी सिंक केले जाणार नाहीत.</translation>
@@ -944,6 +945,7 @@
 <translation id="8105368624971345109">बंद करा</translation>
 <translation id="8114753159095730575">फाइल डाउनलोड उपलब्ध आहे. स्क्रीनच्या तळाशी पर्याय उपलब्ध आहेत.</translation>
 <translation id="8132598642024322408">आता <ph name="PRICE" /> आहे, आधी <ph name="PREVIOUS_PRICE" /> होती.</translation>
+<translation id="8136856065410661948">हे Chrome आणि Google Lens वरून तुमच्या Apple Calendar मध्ये इव्हेंट तयार करण्यासाठी वापरले जाईल.</translation>
 <translation id="8156478151976189188">पासवर्ड सिंक काम करत नाही</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> खाती</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />तुमची डिव्हाइस<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
index cab333f..de06dda 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Nyahikut</translation>
 <translation id="3863769054730344136">Hantar kepada Peranti Anda</translation>
 <translation id="387280738075653372">Muat turun Chrome di sini.</translation>
+<translation id="3888863481921783344">Ini akan digunakan untuk menunjukkan kepada anda kenalan yang mungkin diundang ke acara anda.</translation>
 <translation id="3892144330757387737">Anda dapat menemukan sejarah anda di sini</translation>
 <translation id="3897092660631435901">Menu</translation>
 <translation id="3904829425754749514">Organisasi anda mematikan penyegerakan. Anda masih boleh melihat penanda halaman, sejarah, kata laluan dan tetapan anda yang lain pada peranti ini. Jika perubahan dibuat, perubahan itu tidak akan disegerakkan ke akaun anda.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Matikan</translation>
 <translation id="8114753159095730575">Muat turun fail tersedia. Pilihan tersedia di bahagian bawah skrin.</translation>
 <translation id="8132598642024322408">Kini <ph name="PRICE" />, sebelum ini <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Ini akan digunakan untuk membuat acara dalam Apple Calendar anda daripada Chrome dan Google Lens.</translation>
 <translation id="8156478151976189188">Penyegerakan Kata Laluan Tidak Berfungsi</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> akaun</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Peranti anda<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb
index 55b5edc..d4ac555a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">လိုက်မကြည့်တော့ရန်</translation>
 <translation id="3863769054730344136">‘သင့်စက်များ’ သို့ ပို့ရန်</translation>
 <translation id="387280738075653372">ဤနေရာတွင် Chrome ဒေါင်းလုဒ်လုပ်နိုင်သည်။</translation>
+<translation id="3888863481921783344">သင့်အစီအစဉ်သို့ ဖိတ်ကြားနိုင်ဖွယ်ရှိသူများ ပြရန် ၎င်းကိုသုံးမည်။</translation>
 <translation id="3892144330757387737">သင့်မှတ်တမ်းကို ဤနေရာတွင် ပြပါမည်</translation>
 <translation id="3897092660631435901">မီနျူး</translation>
 <translation id="3904829425754749514">သင့်အဖွဲ့အစည်းက စင့်ခ်လုပ်ခြင်း ပိတ်ထားသည်။ ဤစက်ပေါ်တွင် သင့်လိပ်စာ၊ မှတ်တမ်း၊ စကားဝှက်နှင့် အခြားဆက်တင်များကို ကြည့်နိုင်ပါသေးသည်။ အပြောင်းအလဲများ ပြုလုပ်ပါက ၎င်းတို့ကို သင်၏အကောင့်နှင့် စင့်ခ်လုပ်မည်မဟုတ်ပါ။</translation>
@@ -941,6 +942,7 @@
 <translation id="8105368624971345109">ပိတ်ပါ</translation>
 <translation id="8114753159095730575">ဖိုင်ကို ဒေါင်းလုဒ်လုပ်နိုင်ပါပြီ။ မျက်နှာပြင်အောက်ခြေနားတွင် ရွေးချယ်စရာများ ရှိပါသည်။</translation>
 <translation id="8132598642024322408">ယခင် <ph name="PREVIOUS_PRICE" /> ယခု <ph name="PRICE" />။</translation>
+<translation id="8136856065410661948">Apple Calendar တွင် Chrome နှင့် Google Lens မှ အစီအစဉ်များ ပြုလုပ်ရန် ၎င်းကိုသုံးမည်။</translation>
 <translation id="8156478151976189188">‘စကားဝှက်စင့်ခ်လုပ်ခြင်း’ ကို သုံး၍မရပါ</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> အကောင့်များ</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />သင့်စက်ပစ္စည်းများ<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
index 6e438f97..ebd334f7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">अनफलो गर्नुहोस्</translation>
 <translation id="3863769054730344136">आफ्ना डिभाइसहरूमा पठाउनुहोस्</translation>
 <translation id="387280738075653372">यहाँ गई Chrome डाउनलोड गर्नुहोस्।</translation>
+<translation id="3888863481921783344">तपाईंलाई तपाईंको कार्यक्रममा जुन जुन मान्छेलाई निम्तो गरिएको हुन सक्छ ती मान्छेहरूको सूची देखाउने प्रयोजनका लागि यो एप प्रयोग गरिने छ।</translation>
 <translation id="3892144330757387737">तपाईंले गर्नुभएका क्रियाकलापको इतिहास यहाँ देखिने छ</translation>
 <translation id="3897092660631435901">मेनु</translation>
 <translation id="3904829425754749514">तपाईंको सङ्गठनले सिंक गर्ने सुविधा अफ गरेको छ। तपाईं यो डिभाइसमा आफ्ना बुकमार्क, हिस्ट्री, पासवर्ड र अन्य सेटिङ देखिरहनु हुने छ। तपाईंले यी कुरा परिवर्तन गर्नुभयो भने ती परिवर्तन तपाईंको खातामा सिंक हुने छैनन्।</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">निष्क्रिय पार्नुहोस्</translation>
 <translation id="8114753159095730575">डाउनलोड गर्न फाइल उपलब्ध छ। स्क्रिनको फेदनजिकै विकल्पहरू उपलब्ध छन्।</translation>
 <translation id="8132598642024322408">अहिले <ph name="PRICE" /> पर्छ, पहिले <ph name="PREVIOUS_PRICE" /> पर्थ्यो।</translation>
+<translation id="8136856065410661948">Chrome तथा Google लेन्समार्फत Apple पात्रोमा कार्यक्रमहरू बनाउने प्रयोजनका लागि यो एप प्रयोग गरिने छ।</translation>
 <translation id="8156478151976189188">पासवर्ड सिंक गर्ने सुविधाले काम गरिरहेको छैन</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> खाताहरू</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />तपाईंका डिभाइसहरू<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
index cbc7364..1bd16a4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Tik op Standaard browser-app</translation>
 <translation id="2820289420301699633">Je beheerder beheert Chrome en heeft toegang tot de bijbehorende gegevens</translation>
 <translation id="2830972654601096923">Adressen beheren...</translation>
+<translation id="2834399722155632105">3. Tik op Wachtwoordopties.</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Vertaalinstellingen opnieuw instellen</translation>
 <translation id="2848086008667475748">Als standaard instellen in Instellingen…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Als je wilt delen met mensen in de buurt, laat je ze deze QR-code scannen met hun camera of een QR-scannerapp.</translation>
 <translation id="5911030830365207728">Google Translate</translation>
 <translation id="5913600720976431809">Opties om de pagina te vertalen</translation>
+<translation id="5933515656458364246">Synchroniseer je gegevens op alle apparaten.</translation>
 <translation id="5938160824633642847">Je apparaat is bijna vol. Maak ruimte vrij en probeer het opnieuw.</translation>
 <translation id="5948291296578561264">Hiermee kun je foto's opslaan in je fotobibliotheek.</translation>
 <translation id="5951816930277761335">Deel de link</translation>
@@ -713,6 +715,7 @@
 
 Je gegevens zijn op <ph name="TIME" /> versleuteld met je wachtwoordzin voor synchronisatie. Geef deze op om de synchronisatie te starten.</translation>
 <translation id="6418346271604475326">Pdf voorbereiden</translation>
+<translation id="6429213933892582367">Wachtwoordopties openen</translation>
 <translation id="6434591244308415567">Er is een fout opgetreden. Probeer het later opnieuw.</translation>
 <translation id="6435236283694032571">Toevoegen aan leeslijst</translation>
 <translation id="6439338047467462846">Alles toestaan</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Antwoorden uitspreken</translation>
 <translation id="7207023858769244910">Synchroniseer om content op basis van je interesses te krijgen.</translation>
 <translation id="721597782417389033">Ongeldige bijnaam kaart</translation>
+<translation id="7221173315674413369">Ontdek nieuwe functies en tips in Wat is er nieuw</translation>
 <translation id="722454870747268814">Nieuw incognitotabblad</translation>
 <translation id="7265758999917665941">Nooit voor deze site</translation>
 <translation id="7272437679830969316">Kan je identiteit niet verifiëren. Wachtwoord niet gekopieerd.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Downloaden</translation>
 <translation id="7531345132340165516">Huidige site</translation>
 <translation id="7537586195939242955">Je pas kan momenteel niet worden geïnstalleerd in Passbook.</translation>
+<translation id="7553234618121028547">Open <ph name="BEGIN_LINK" />Instellingen<ph name="END_LINK" /> en ga naar Wachtwoordopties om dit uit te zetten.</translation>
 <translation id="7554791636758816595">Nieuw tabblad</translation>
 <translation id="7561196759112975576">Altijd</translation>
 <translation id="7583004045319035904">Gebruik <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> om je incognitotabbladen te ontgrendelen.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Maak, bewaar en beheer je wachtwoorden zodat je makkelijk kunt inloggen bij sites en apps. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Uitzetten</translation>
 <translation id="8114753159095730575">Bestand downloaden is beschikbaar. Opties beschikbaar onderaan het scherm.</translation>
+<translation id="81313319706244542">2. Tik op Wachtwoorden.</translation>
 <translation id="8132598642024322408">Nu <ph name="PRICE" />, was eerder <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Hiermee worden afspraken gemaakt in je Apple-agenda vanuit Chrome en Google Lens.</translation>
 <translation id="8156478151976189188">Password Sync werkt niet</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Nieuwe zoekopdracht</translation>
 <translation id="8323906514956095947">Tik en houd vast voor meer tabbladopties</translation>
 <translation id="8328777765163860529">Alles sluiten</translation>
+<translation id="8343993175958086504">Maak een back-up van je gegevens en gebruik deze op elk apparaat.</translation>
 <translation id="8378714024927312812">Beheerd door je organisatie</translation>
 <translation id="8386068868580335421">Resetten</translation>
 <translation id="8407669440184693619">Geen wachtwoorden gevonden voor deze site</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index 0b36418..97c59e6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Trykk på Standard nettleserapp.</translation>
 <translation id="2820289420301699633">Administratoren din har kontroll over Chrome og tilgang til de tilhørende dataene</translation>
 <translation id="2830972654601096923">Administrer adresser</translation>
+<translation id="2834399722155632105">3. Trykk på Passordvalg</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Tilbakestill innstillingene for Oversetter</translation>
 <translation id="2848086008667475748">Angi som standard i innstillingene …</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">Slutt å følge</translation>
 <translation id="3863769054730344136">Send til enhetene dine</translation>
 <translation id="387280738075653372">Last ned Chrome her.</translation>
+<translation id="3888863481921783344">Dette brukes til å vise deg mulige personer du kan invitere til aktiviteten din.</translation>
 <translation id="3892144330757387737">Her finner du loggen din</translation>
 <translation id="3897092660631435901">Meny</translation>
 <translation id="3904829425754749514">Organisasjonen din har slått av synkronisering. Du kan fremdeles se bokmerkene dine, loggen din, passordene dine og andre innstillinger på denne enheten. Hvis du gjør endringer, blir de ikke synkronisert med kontoen din.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">For å dele med personer i nærheten, la dem skanne denne QR-koden med kameraet sitt eller en QR-skanningsapp</translation>
 <translation id="5911030830365207728">Google Oversetter</translation>
 <translation id="5913600720976431809">Alternativer for oversetting av siden</translation>
+<translation id="5933515656458364246">Synkroniser dataene dine på alle enheter.</translation>
 <translation id="5938160824633642847">Enheten er nesten full. Frigjør plass og prøv på nytt.</translation>
 <translation id="5948291296578561264">Da kan du lagre bilder i bildebiblioteket ditt.</translation>
 <translation id="5951816930277761335">Del linken</translation>
@@ -712,6 +715,7 @@
 
 Dataene dine er kryptert med passordfrasen din for synkronisering <ph name="TIME" />. Skriv den inn for å starte synkroniseringen.</translation>
 <translation id="6418346271604475326">Forbereder PDF</translation>
+<translation id="6429213933892582367">Åpne Passordvalg</translation>
 <translation id="6434591244308415567">Det oppsto en feil. Prøv på nytt senere.</translation>
 <translation id="6435236283694032571">Legg til på leselisten</translation>
 <translation id="6439338047467462846">Tillat alle</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">Svar med tale</translation>
 <translation id="7207023858769244910">Synkroniser for å få innhold basert på interessene dine.</translation>
 <translation id="721597782417389033">Ugyldig kallenavn på kortet</translation>
+<translation id="7221173315674413369">Utforsk nye funksjoner og tips i Nyheter</translation>
 <translation id="722454870747268814">Ny inkognitofane</translation>
 <translation id="7265758999917665941">Aldri for dette nettstedet</translation>
 <translation id="7272437679830969316">Kan ikke bekrefte identiteten din. Passordet er ikke kopiert.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">Last ned</translation>
 <translation id="7531345132340165516">Gjeldende nettsted</translation>
 <translation id="7537586195939242955">Tillatelsen din kan for øyeblikket ikke installeres i Passbook.</translation>
+<translation id="7553234618121028547">For å slå av funksjonen, åpne <ph name="BEGIN_LINK" />Innstillinger<ph name="END_LINK" /> og gå til Passordvalg.</translation>
 <translation id="7554791636758816595">Ny fane</translation>
 <translation id="7561196759112975576">Alltid</translation>
 <translation id="7583004045319035904">Bruk <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> for å låse opp inkognitofanene dine.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">Opprett, lagre og administrer passordene dine, slik at det blir enkelt å logge på nettsteder og apper. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Slå av</translation>
 <translation id="8114753159095730575">Filnedlasting er tilgjengelig. Du finner alternativer på nedre del av skjermen.</translation>
+<translation id="81313319706244542">2. Trykk på Passord</translation>
 <translation id="8132598642024322408">Nå <ph name="PRICE" /> – før <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Dette brukes til å opprette aktiviteter i Apple-kalenderen din fra Chrome og Google Lens.</translation>
 <translation id="8156478151976189188">Passordsynkronisering fungerer ikke</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> kontoer</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Enhetene dine<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">Nytt søk</translation>
 <translation id="8323906514956095947">Trykk og hold inne for flere fanealternativer</translation>
 <translation id="8328777765163860529">Lukk alle</translation>
+<translation id="8343993175958086504">Sikkerhetskopier tingene dine, og bruk dem på alle enheter.</translation>
 <translation id="8378714024927312812">Administreres av organisasjonen din</translation>
 <translation id="8386068868580335421">Tilbakestill</translation>
 <translation id="8407669440184693619">Fant ingen passord for dette nettstedet</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb
index 209d537..13e9a3e2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_or.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. ଡିଫଲ୍ଟ ବ୍ରାଉଜର୍ ଆପକୁ ଟାପ୍ କରନ୍ତୁ</translation>
 <translation id="2820289420301699633">ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ପାଖରେ Chromeର ନିୟନ୍ତ୍ରଣ ଅଛି ଏବଂ ସେ ଏହାର ଡାଟାକୁ ଆକ୍ସେସ୍ କରିପାରିବେ</translation>
 <translation id="2830972654601096923">ଠିକଣାଗୁଡ଼ିକ ପରିଚାଳନା କରନ୍ତୁ...</translation>
+<translation id="2834399722155632105">3. ପାସୱାର୍ଡ ବିକଳ୍ପଗୁଡ଼ିକରେ ଟାପ କରନ୍ତୁ</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />:<ph name="STATE" />:<ph name="URL" /></translation>
 <translation id="2843803966603263712">ଅନୁବାଦ ସେଟିଂସ୍ ରିସେଟ୍ କରନ୍ତୁ</translation>
 <translation id="2848086008667475748">ସେଟିଂସରେ ଡିଫଲ୍ଟ ଭାବେ ସେଟ୍ କରନ୍ତୁ…</translation>
@@ -630,6 +631,7 @@
 <translation id="5899314093904173337">ନିକଟରେ ଥିବା ଲୋକମାନଙ୍କ ସହ ସେୟାର୍ କରିବାକୁ, ସେମାନଙ୍କୁ ତାଙ୍କ କ୍ୟାମେରା କିମ୍ବା QR ସ୍କାନର୍ ଆପ୍ ମାଧ୍ୟମରେ ଏହି QR କୋଡ୍ ସ୍କାନ୍ କରିବାକୁ ଦିଅନ୍ତୁ</translation>
 <translation id="5911030830365207728">Google Translate</translation>
 <translation id="5913600720976431809">ପୃଷ୍ଠା ଅନୁବାଦ କରିବା ପାଇଁ ବିକଳ୍ପଗୁଡ଼ିକ</translation>
+<translation id="5933515656458364246">ସମସ୍ତ ଡିଭାଇସରେ ଆପଣଙ୍କ ଡାଟା ସିଙ୍କ କରନ୍ତୁ।</translation>
 <translation id="5938160824633642847">ଆପଣଙ୍କର ଡିଭାଇସ୍ ପ୍ରାୟ ପୂର୍ଣ୍ଣ ହୋଇଆସିଲାଣି। ଜାଗା ଖାଲି କରନ୍ତୁ ଏବଂ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="5948291296578561264">ଏହା ଆପଣଙ୍କର ଫଟୋ ଲାଇବ୍ରେରୀରେ ଫଟୋଗୁଡ଼ିକ ସେଭ୍‍ କରିବାକୁ ଦେଇଥାଏ।</translation>
 <translation id="5951816930277761335">ଲିଙ୍କ ସେୟାର କରନ୍ତୁ</translation>
@@ -711,6 +713,7 @@
 
 <ph name="TIME" /> ବେଳେ ଆପଣଙ୍କ ସିଙ୍କ୍ ପାସ୍‌ଫ୍ରେଜ୍ ସହିତ ଆପଣଙ୍କର ଡାଟାକୁ ଏନକ୍ରିପ୍ଟ କରାଗଲା। ସିଙ୍କ୍ କରିବା ପାଇଁ ତାହା ଲେଖନ୍ତୁ।</translation>
 <translation id="6418346271604475326">PDF ପ୍ରସ୍ତୁତ କରୁଛି</translation>
+<translation id="6429213933892582367">ପାସୱାର୍ଡ ବିକଳ୍ପଗୁଡ଼ିକୁ ଖୋଲନ୍ତୁ</translation>
 <translation id="6434591244308415567">ଏକ ତ୍ରୁଟି ଦେଖାଦେଲା। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="6435236283694032571">ପଢ଼ିବା ତାଲିକାରେ ଯୋଗ କରନ୍ତୁ</translation>
 <translation id="6439338047467462846">ସବୁକୁ ଅନୁମତି ଦିଅନ୍ତୁ</translation>
@@ -826,6 +829,7 @@
 <translation id="7203585745079012652">ପୁଣିଥରେ ଉତ୍ତର କୁହନ୍ତୁ</translation>
 <translation id="7207023858769244910">ଆପଣଙ୍କ ରୁଚି ଆଧାରରେ ବିଷୟବସ୍ତୁ ପାଇବା ପାଇଁ ସିଙ୍କ କରନ୍ତୁ।</translation>
 <translation id="721597782417389033">କାର୍ଡର ଅବୈଧ ଡାକନାମ</translation>
+<translation id="7221173315674413369">'ନୂଆ କଣ ଅଛି'ରେ ନୂଆ ଫିଚର ଏବଂ ଟିପ୍ସ ଏକ୍ସପ୍ଲୋର କରନ୍ତୁ</translation>
 <translation id="722454870747268814">ନୂଆ ଇନକଗ୍ନିଟୋ ଟାବ୍</translation>
 <translation id="7265758999917665941">ଏହି ସାଇଟ୍ ପାଇଁ ଆଦୌ ନୁହେଁ</translation>
 <translation id="7272437679830969316">ଆପଣଙ୍କର ପରିଚୟ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। ପାସ୍‍ୱର୍ଡ କପି ହୋ‍ଇନାହିଁ।</translation>
@@ -859,6 +863,7 @@
 <translation id="7514365320538308">ଡାଉନ୍‌‌ଲୋଡ୍‌ କରନ୍ତୁ</translation>
 <translation id="7531345132340165516">ବର୍ତ୍ତମାନର ସାଇଟ</translation>
 <translation id="7537586195939242955">କ୍ଷମାକରନ୍ତୁ, ଏହି ସମୟରେ ପାସ୍‌ବୁକ୍‌ରେ ଆପଣଙ୍କର ପାସ୍ ଇନ୍‌ଷ୍ଟଲ୍ କରାଯାଇପାରିବ ନାହିଁ।</translation>
+<translation id="7553234618121028547">ବନ୍ଦ କରିବାକୁ, <ph name="BEGIN_LINK" />ସେଟିଂସ<ph name="END_LINK" /> ଖୋଲି ପାସୱାର୍ଡ ବିକଳ୍ପଗୁଡ଼ିକୁ ଯାଆନ୍ତୁ।</translation>
 <translation id="7554791636758816595">ନୂତନ ଟ୍ୟାବ୍</translation>
 <translation id="7561196759112975576">ସର୍ବଦା</translation>
 <translation id="7583004045319035904">ଆପଣଙ୍କର ଇନକଗ୍ନିଟୋ ଟାବଗୁଡ଼ିକୁ ଅନଲକ୍ କରିବା ପାଇଁ <ph name="BIOMETRIC_AUTHENITCATION_TYPE" />କୁ ବ୍ୟବହାର କରନ୍ତୁ।</translation>
@@ -940,6 +945,7 @@
 <translation id="8101409298456377967">ଆପଣଙ୍କ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ତିଆରି କରନ୍ତୁ, ସେଭ କରନ୍ତୁ ଏବଂ ପରିଚାଳନା କରନ୍ତୁ, ଯାହା ଫଳରେ ଆପଣ ସାଇଟ ଏବଂ ଆପଗୁଡ଼ିକରେ ସହଜରେ ସାଇନ ଇନ କରିପାରିବେ। <ph name="BEGIN_LINK" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">ବନ୍ଦ କରନ୍ତୁ</translation>
 <translation id="8114753159095730575">ଫାଇଲ୍‍ ଡାଉନ୍‌ଲୋଡ୍‌ କରିବା ଉପଲବ୍ଧ ଅଛି। ସ୍କ୍ରିନ୍‌ର ତଳ ପାର୍ଶ୍ୱରେ ବିକଳ୍ପ ଉପଲବ୍ଧ ଅଛି।</translation>
+<translation id="81313319706244542">2. ପାସୱାର୍ଡଗୁଡ଼ିକରେ ଟାପ କରନ୍ତୁ</translation>
 <translation id="8132598642024322408">ବର୍ତ୍ତମାନ <ph name="PRICE" /> ପୂର୍ବରୁ <ph name="PREVIOUS_PRICE" /> ଥିଲା।</translation>
 <translation id="8136856065410661948">Chrome ଏବଂ Google Lensରୁ ଆପଣଙ୍କ Apple Calendarରେ ଇଭେଣ୍ଟଗୁଡ଼ିକୁ ତିଆରି କରିବା ପାଇଁ ଏହାକୁ ବ୍ୟବହାର କରାଯିବ।</translation>
 <translation id="8156478151976189188">ପାସୱାର୍ଡ ସିଙ୍କ୍ କାମ କରୁ ନାହିଁ</translation>
@@ -962,6 +968,7 @@
 <translation id="8319076807703933069">ନୂଆ ସନ୍ଧାନ</translation>
 <translation id="8323906514956095947">ଅଧିକ ଟାବ୍ ବିକଳ୍ପ ପାଇଁ ସ୍ପର୍ଶ କରି ଧରି ରଖନ୍ତୁ</translation>
 <translation id="8328777765163860529">ସବୁଗୁଡ଼ିକ ବନ୍ଦ କରନ୍ତୁ</translation>
+<translation id="8343993175958086504">ଆପଣଙ୍କ ଷ୍ଟଫର ବେକଅପ ନେଇ ଯେ କୌଣସି ଡିଭାଇସରେ ଏହାକୁ ବ୍ୟବହାର କରନ୍ତୁ।</translation>
 <translation id="8378714024927312812">ଆପଣଙ୍କର ସଂସ୍ଥା ଦ୍ୱାରା ପରିଚାଳିତ</translation>
 <translation id="8386068868580335421">ରିସେଟ୍ କରନ୍ତୁ</translation>
 <translation id="8407669440184693619">ଏହି ସାଇଟ୍‌ ପାଇଁ କୌଣସି ପାସ୍‍ୱର୍ଡ ମିଳିଲା ନାହିଁ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
index 91ec29d..6d8c973 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. ਪੂਰਵ-ਨਿਰਧਾਰਤ ਬ੍ਰਾਊਜ਼ਰ ਐਪ 'ਤੇ ਟੈਪ ਕਰੋ</translation>
 <translation id="2820289420301699633">ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਕੋਲ Chrome ਦਾ ਕੰਟਰੋਲ ਹੈ ਅਤੇ ਉਹ ਇਸਦੇ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕਦਾ ਹੈ</translation>
 <translation id="2830972654601096923">ਪਤਿਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ...</translation>
+<translation id="2834399722155632105">3. ਪਾਸਵਰਡ ਵਿਕਲਪਾਂ 'ਤੇ ਟੈਪ ਕਰੋ</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">ਅਨੁਵਾਦ ਸੈਟਿੰਗਾਂ ਰੀਸੈੱਟ ਕਰੋ</translation>
 <translation id="2848086008667475748">ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਇਸਨੂੰ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਬਣਾਓ…</translation>
@@ -631,6 +632,7 @@
 <translation id="5899314093904173337">ਨਜ਼ਦੀਕੀ ਲੋਕਾਂ ਨਾਲ ਸਾਂਝਾ ਕਰਨ ਲਈ, ਉਹਨਾਂ ਨੂੰ ਆਪਣੇ ਕੈਮਰੇ ਜਾਂ QR ਸਕੈਨਰ ਐਪ ਨਾਲ ਇਹ QR ਕੋਡ ਸਕੈਨ ਕਰਨ ਦਿਓ</translation>
 <translation id="5911030830365207728">Google Translate</translation>
 <translation id="5913600720976431809">ਪੰਨੇ ਦਾ ਅਨੁਵਾਦ ਕਰਨ ਦੇ ਵਿਕਲਪ</translation>
+<translation id="5933515656458364246">ਸਾਰੇ ਡੀਵਾਈਸਾਂ 'ਤੇ ਆਪਣਾ ਡਾਟਾ ਸਿੰਕ ਕਰੋ।</translation>
 <translation id="5938160824633642847">ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੀ ਸਟੋਰੇਜ ਲਗਭਗ ਭਰੀ ਹੋਈ ਹੈ। ਜਗ੍ਹਾ ਖਾਲੀ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="5948291296578561264">ਇਹ ਤੁਹਾਨੂੰ ਤੁਹਾਡੀ ਫ਼ੋਟੋ ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚ ਫ਼ੋਟੋਆਂ ਨੂੰ ਰੱਖਿਅਤ ਕਰਨ ਦਿੰਦਾ ਹੈ।</translation>
 <translation id="5951816930277761335">ਲਿੰਕ ਸਾਂਝਾ ਕਰੋ</translation>
@@ -712,6 +714,7 @@
 
 ਤੁਹਾਡਾ ਡਾਟਾ ਤੁਹਾਡੇ ਸਿੰਕ ਪਾਸਫਰੇਜ਼ ਨਾਲ <ph name="TIME" /> ਨੂੰ ਇਨਕ੍ਰਿਪਟ ਕੀਤਾ ਗਿਆ ਸੀ। ਸਿੰਕ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਇਸਨੂੰ ਦਾਖਲ ਕਰੋ।</translation>
 <translation id="6418346271604475326">PDF ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation>
+<translation id="6429213933892582367">ਪਾਸਵਰਡ ਵਿਕਲਪ ਖੋਲ੍ਹੋ</translation>
 <translation id="6434591244308415567">ਇੱਕ ਗੜਬੜ ਹੋ ਗਈ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="6435236283694032571">ਪੜ੍ਹਨ-ਸੂਚੀ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ</translation>
 <translation id="6439338047467462846">ਸਭ ਨੂੰ ਇਜਾਜ਼ਤ ਦਿਓ</translation>
@@ -827,6 +830,7 @@
 <translation id="7203585745079012652">ਜਵਾਬ ਦੁਬਾਰਾ ਬੋਲੋ</translation>
 <translation id="7207023858769244910">ਆਪਣੀਆਂ ਦਿਲਚਸਪੀਆਂ ਦੇ ਆਧਾਰ 'ਤੇ ਸਮੱਗਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਸਿੰਕ ਕਰੋ।</translation>
 <translation id="721597782417389033">ਕਾਰਡ ਦਾ ਉਪਨਾਮ ਅਵੈਧ ਹੈ</translation>
+<translation id="7221173315674413369">'ਨਵਾਂ ਕੀ ਹੈ' ਵਿੱਚ ਨਵੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਅਤੇ ਨੁਕਤਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰੋ</translation>
 <translation id="722454870747268814">ਨਵੀਂ ਇਨਕੋਗਨਿਟੋ ਟੈਬ</translation>
 <translation id="7265758999917665941">ਇਸ ਸਾਈਟ ਲਈ ਕਦੇ ਵੀ ਨਹੀਂ</translation>
 <translation id="7272437679830969316">ਤੁਹਾਡੀ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਪਾਸਵਰਡ ਕਾਪੀ ਨਹੀਂ ਕੀਤਾ ਗਿਆ।</translation>
@@ -860,6 +864,7 @@
 <translation id="7514365320538308">ਡਾਊਨਲੋਡ ਕਰੋ</translation>
 <translation id="7531345132340165516">ਮੌਜੂਦਾ ਸਾਈਟ</translation>
 <translation id="7537586195939242955">ਮਾਫ਼ ਕਰਨਾ, ਤੁਹਾਡਾ ਪਾਸ ਇਸ ਵੇਲੇ ਪਾਸਬੁੱਕ ਤੇ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।</translation>
+<translation id="7553234618121028547">ਬੰਦ ਕਰਨ ਲਈ, <ph name="BEGIN_LINK" />ਸੈਟਿੰਗਾਂ<ph name="END_LINK" /> ਨੂੰ ਖੋਲ੍ਹੋ ਅਤੇ ਪਾਸਵਰਡ ਵਿਕਲਪਾਂ 'ਤੇ ਜਾਓ।</translation>
 <translation id="7554791636758816595">ਨਵੀਂ ਟੈਬ</translation>
 <translation id="7561196759112975576">ਹਮੇਸ਼ਾਂ</translation>
 <translation id="7583004045319035904">ਆਪਣੀਆਂ ਇਨਕੋਗਨਿਟੋ ਟੈਬਾਂ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> ਦੀ ਵਰਤੋਂ ਕਰੋ।</translation>
@@ -941,6 +946,7 @@
 <translation id="8101409298456377967">ਆਪਣੇ ਪਾਸਵਰਡਾਂ ਨੂੰ ਬਣਾਓ, ਰੱਖਿਅਤ ਕਰੋ ਅਤੇ ਉਨ੍ਹਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ ਤਾਂ ਜੋ ਤੁਸੀਂ ਆਸਾਨੀ ਨਾਲ ਸਾਈਟਾਂ ਅਤੇ ਐਪਾਂ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰ ਸਕੋ। <ph name="BEGIN_LINK" />ਹੋਰ ਜਾਣੋ<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">ਬੰਦ ਕਰੋ</translation>
 <translation id="8114753159095730575">ਫ਼ਾਈਲ ਡਾਊਨਲੋਡ ਕਰਨਾ ਉਪਲਬਧ ਹੈ। ਵਿਕਲਪ ਸਕ੍ਰੀਨ ਦੇ ਹੇਠਲੇ ਪਾਸੇ ਕੋਲ ਉਪਲਬਧ ਹਨ।</translation>
+<translation id="81313319706244542">2. ਪਾਸਵਰਡਾਂ 'ਤੇ ਟੈਪ ਕਰੋ</translation>
 <translation id="8132598642024322408">ਹੁਣ <ph name="PRICE" /> ਹੈ, ਪਹਿਲਾਂ <ph name="PREVIOUS_PRICE" /> ਸੀ।</translation>
 <translation id="8156478151976189188">ਪਾਸਵਰਡ ਸਿੰਕ ਕੰਮ ਨਹੀਂ ਕਰ ਰਿਹਾ ਹੈ</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> ਖਾਤੇ</translation>
@@ -962,6 +968,7 @@
 <translation id="8319076807703933069">ਨਵੀਂ ਖੋਜ</translation>
 <translation id="8323906514956095947">ਹੋਰ ਟੈਬ ਵਿਕਲਪਾਂ ਲਈ ਸਪਰਸ਼ ਕਰਕੇ ਰੱਖੋ</translation>
 <translation id="8328777765163860529">ਸਭ ਬੰਦ ਕਰੋ</translation>
+<translation id="8343993175958086504">ਆਪਣੀ ਸਮੱਗਰੀ ਦਾ ਬੈਕਅੱਪ ਲਓ ਅਤੇ ਇਸਨੂੰ ਕਿਸੇ ਵੀ ਡੀਵਾਈਸ 'ਤੇ ਵਰਤੋ।</translation>
 <translation id="8378714024927312812">ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਪ੍ਰਬੰਧਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation>
 <translation id="8386068868580335421">ਰੀਸੈੱਟ ਕਰੋ</translation>
 <translation id="8407669440184693619">ਇਸ ਸਾਈਟ ਲਈ ਕੋਈ ਪਾਸਵਰਡ ਨਹੀਂ ਲੱਭਿਆ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
index 1bd85e9..f6553056 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Parar de seguir</translation>
 <translation id="3863769054730344136">Enviar para seus dispositivos</translation>
 <translation id="387280738075653372">Faça o download do Chrome aqui.</translation>
+<translation id="3888863481921783344">Essa informação vai ser usada para mostrar possíveis convidados para seu evento.</translation>
 <translation id="3892144330757387737">Você verá seu histórico aqui</translation>
 <translation id="3897092660631435901">Menu</translation>
 <translation id="3904829425754749514">Sua organização desativou a sincronização. Ainda é possível ver seus favoritos, seu histórico, suas senhas e outras configurações neste dispositivo. Se você fizer mudanças, elas não serão sincronizadas com sua conta.</translation>
@@ -940,6 +941,7 @@
 <translation id="8105368624971345109">Desativar</translation>
 <translation id="8114753159095730575">O download de arquivo está disponível. Opções disponíveis perto da parte inferior da tela.</translation>
 <translation id="8132598642024322408">De <ph name="PREVIOUS_PRICE" /> por <ph name="PRICE" />.</translation>
+<translation id="8136856065410661948">Eventos vão ser criados no Calendário da Apple com o conteúdo do Chrome e do Google Lens.</translation>
 <translation id="8156478151976189188">O Password Sync não está funcionando</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> contas</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Seus dispositivos<ph name="END_LINK" /> · <ph name="EMAIL" /></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 f8fed9ea..2806038 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -573,6 +573,7 @@
 <translation id="5489208564673669003">Para gerir cookies de todos os sites, veja <ph name="BEGIN_LINK" />Definições de cookies<ph name="END_LINK" />.</translation>
 <translation id="5490005495580364134">Bloquear todos os cookies (não recomendado).</translation>
 <translation id="5513681519188741830">Há <ph name="TIME" /> h</translation>
+<translation id="5520466080178053306">Toque em Gestor de Palavras-passe e, de seguida, em Adicionar</translation>
 <translation id="5525095647255982834">Para enviar este separador para outro dispositivo, inicie sessão no Chrome nesse dispositivo.</translation>
 <translation id="5525269841082836315">Criar Frase de Acesso</translation>
 <translation id="5542540507657872337"><ph name="COUNT" /> encontrado(s)</translation>
@@ -884,6 +885,7 @@
 <translation id="7726702057919861819">Menu → Histórico → Limpar dados de navegação</translation>
 <translation id="7738120385185846461">Comunicar um problema…</translation>
 <translation id="7741325291586284254">Página Novo separador anónimo</translation>
+<translation id="7744394900930577716">Palavras-passe noutras apps</translation>
 <translation id="7756478488453921771">Menu → Definições → Métodos de pagamento</translation>
 <translation id="7765158879357617694">Mover</translation>
 <translation id="7772032839648071052">Confirmar frase de acesso</translation>
@@ -1063,6 +1065,7 @@
 <translation id="9081058212938299310">Pretende atualizar a palavra-passe de <ph name="USERNAME" />?</translation>
 <translation id="9083838294503912307">Para sincronizar e personalizar dados entre dispositivos, ative a sincronização.</translation>
 <translation id="9087108903408689779">Palavra-passe sugerida do Chrome:</translation>
+<translation id="9093271241977565440">Na parte superior do ecrã, toque no ícone de pesquisa</translation>
 <translation id="9094033019050270033">Atualizar a palavra-passe</translation>
 <translation id="9097506547406246598">Não é possível deixar de seguir. Algo correu mal.</translation>
 <translation id="9100610230175265781">Frase de acesso obrigatória</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
index 2928882..05c58735 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. atinge Aplicația browser prestabilită;</translation>
 <translation id="2820289420301699633">Administratorul deține controlul asupra browserului Chrome și poate accesa datele asociate</translation>
 <translation id="2830972654601096923">Gestionează adresele…</translation>
+<translation id="2834399722155632105">3. Atinge Opțiuni pentru parolă</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Resetează Traducere</translation>
 <translation id="2848086008667475748">Setează ca prestabilit în Setări…</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">Anulează urmărirea</translation>
 <translation id="3863769054730344136">Trimite pe dispozitivele tale</translation>
 <translation id="387280738075653372">Descarcă Chrome de aici.</translation>
+<translation id="3888863481921783344">Aceasta se va folosi pentru a-ți arăta posibilii invitați la eveniment.</translation>
 <translation id="3892144330757387737">Aici vei vedea istoricul</translation>
 <translation id="3897092660631435901">Meniu</translation>
 <translation id="3904829425754749514">Organizația ta a dezactivat sincronizarea. Poți vedea în continuare marcajele, istoricul, parolele și alte setări pe acest dispozitiv. Dacă faci modificări, ele nu se vor sincroniza cu contul.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">Ca să le permiți accesul persoanelor din apropiere, solicită-le să scaneze acest cod QR folosind camera sau aplicația de scanat coduri QR</translation>
 <translation id="5911030830365207728">Google Traducere</translation>
 <translation id="5913600720976431809">Opțiuni pentru a traduce pagina</translation>
+<translation id="5933515656458364246">Sincronizează-ți datele pe toate dispozitivele.</translation>
 <translation id="5938160824633642847">Dispozitivul este aproape plin. Eliberează spațiu și încearcă din nou.</translation>
 <translation id="5948291296578561264">Astfel, poți să salvezi fotografiile în fototecă.</translation>
 <translation id="5951816930277761335">Trimite linkul</translation>
@@ -712,6 +715,7 @@
 
 Datele au fost criptate cu expresia de acces pentru sincronizare la <ph name="TIME" />. Introdu-o pentru a începe sincronizarea.</translation>
 <translation id="6418346271604475326">Se pregătește fișierul PDF</translation>
+<translation id="6429213933892582367">Deschide Opțiuni pentru parolă</translation>
 <translation id="6434591244308415567">A apărut o eroare, încearcă mai târziu.</translation>
 <translation id="6435236283694032571">Adaugă în Lista de lecturi</translation>
 <translation id="6439338047467462846">Permite-le pe toate</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">Primești răspunsuri vocale</translation>
 <translation id="7207023858769244910">Sincronizează pentru a obține conținut în funcție de interesele tale.</translation>
 <translation id="721597782417389033">Pseudonimul cardului nu este valid</translation>
+<translation id="7221173315674413369">Explorează noile funcții și sfaturi în secțiunea Noutăți</translation>
 <translation id="722454870747268814">Filă incognito nouă</translation>
 <translation id="7265758999917665941">Niciodată pentru acest site</translation>
 <translation id="7272437679830969316">Nu ți se poate confirma identitatea. Parola nu a fost copiată.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">Descarcă</translation>
 <translation id="7531345132340165516">Site-ul actual</translation>
 <translation id="7537586195939242955">Momentan, parola nu poate fi instalată în Agenda de parole.</translation>
+<translation id="7553234618121028547">Pentru dezactivare, deschide <ph name="BEGIN_LINK" />Setări<ph name="END_LINK" /> și accesează Opțiuni pentru parolă.</translation>
 <translation id="7554791636758816595">Filă nouă</translation>
 <translation id="7561196759112975576">Întotdeauna</translation>
 <translation id="7583004045319035904">Folosește <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> pentru a debloca filele incognito.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">Creează, salvează și gestionează parolele ca să te poți conecta cu ușurință la site-uri și aplicații. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Dezactivează</translation>
 <translation id="8114753159095730575">Descărcarea fișierelor este disponibilă. Opțiunile sunt disponibile în partea de jos a ecranului.</translation>
+<translation id="81313319706244542">2. Atinge Parole</translation>
 <translation id="8132598642024322408">Acum <ph name="PRICE" />, a fost <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Acesta se va folosi pentru a crea evenimente în Apple Calendar din Chrome și Google Lens.</translation>
 <translation id="8156478151976189188">Sincronizarea parolelor nu funcționează</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> (de) conturi</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Dispozitivele tale<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">Căutare nouă</translation>
 <translation id="8323906514956095947">Atinge lung pentru mai multe opțiuni de file</translation>
 <translation id="8328777765163860529">Închideți toate</translation>
+<translation id="8343993175958086504">Fă backup datelor și folosește-le pe orice dispozitiv.</translation>
 <translation id="8378714024927312812">Gestionat de organizația ta</translation>
 <translation id="8386068868580335421">Resetează</translation>
 <translation id="8407669440184693619">Nu s-au găsit parole pentru acest site</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
index 0a9cc1a..cc3c33d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Отменить подписку</translation>
 <translation id="3863769054730344136">Отправить на свои устройства</translation>
 <translation id="387280738075653372">Скачать Chrome</translation>
+<translation id="3888863481921783344">Эти данные будут использоваться для показа пользователей, которых можно пригласить на мероприятие.</translation>
 <translation id="3892144330757387737">Здесь вы найдете свою историю</translation>
 <translation id="3897092660631435901">Меню</translation>
 <translation id="3904829425754749514">В вашей организации синхронизация отключена. На этом устройстве по-прежнему доступны закладки, история, пароли и другие настройки. Однако изменения не сохраняются в вашем аккаунте.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Отключить</translation>
 <translation id="8114753159095730575">Файл доступен для скачивания. Параметры указаны в нижней части экрана.</translation>
 <translation id="8132598642024322408">Новая цена: <ph name="PRICE" />, старая цена: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Эти данные будут использоваться для создания мероприятий в календаре Apple непосредственно из Chrome и Google Объектива.</translation>
 <translation id="8156478151976189188">Синхронизация паролей не работает</translation>
 <translation id="8157532349231307196">Аккаунты: <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Ваши устройства<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index df8e0b3..a4e02cf 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Klepnite na položku Predvolená aplikácia prehliadača</translation>
 <translation id="2820289420301699633">Chrome ovláda váš správca a má aj prístup k jeho údajom</translation>
 <translation id="2830972654601096923">Spravovať adresy…</translation>
+<translation id="2834399722155632105">3. Klepnite na Možnosti hesiel</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Obnoviť nastavenia Prekladača</translation>
 <translation id="2848086008667475748">Nastaviť ako predvolený v Nastaveniach…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Ak chcete zdieľať s ľuďmi nablízku, nechajte ich naskenovať tento QR kód fotoaparátom alebo aplikáciou skenera QR kódov</translation>
 <translation id="5911030830365207728">Prekladač Google</translation>
 <translation id="5913600720976431809">Možnosti prekladu stránky</translation>
+<translation id="5933515656458364246">Synchronizujte údaje vo všetkých zariadeniach.</translation>
 <translation id="5938160824633642847">Vaše zariadenie je takmer plné. Uvoľnite miesto a skúste to znova.</translation>
 <translation id="5948291296578561264">Umožňuje ukladať fotky do knižnice fotiek.</translation>
 <translation id="5951816930277761335">Zdieľajte odkaz</translation>
@@ -713,6 +715,7 @@
 
 Vaše údaje boli <ph name="TIME" /> zašifrované pomocou vlastnej prístupovej frázy synchronizácie. Keď ju zadáte, synchronizácia sa spustí.</translation>
 <translation id="6418346271604475326">Príprava PDF</translation>
+<translation id="6429213933892582367">Otvorte Možnosti hesiel</translation>
 <translation id="6434591244308415567">Vyskytla sa chyba. Skúste to neskôr.</translation>
 <translation id="6435236283694032571">Pridať do čitateľského zoznamu</translation>
 <translation id="6439338047467462846">Povoliť všetky</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Vysloviť odpovede</translation>
 <translation id="7207023858769244910">Synchronizujte a získavajte tak obsah na základe svojich záujmov.</translation>
 <translation id="721597782417389033">Neplatná prezývka karty</translation>
+<translation id="7221173315674413369">Preskúmajte nové funkcie a tipy v sekcii Novinky</translation>
 <translation id="722454870747268814">Nová karta inkognito</translation>
 <translation id="7265758999917665941">Nikdy pre tento web</translation>
 <translation id="7272437679830969316">Vašu totožnosť nie je možné overiť. Heslo sa neskopírovalo.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Stiahnuť</translation>
 <translation id="7531345132340165516">Aktuálny web</translation>
 <translation id="7537586195939242955">Kupón Pass sa momentálne nedá do aplikácie Passbook nainštalovať.</translation>
+<translation id="7553234618121028547">Ak chcete túto možnosť vypnúť, otvorte <ph name="BEGIN_LINK" />Nastavenia<ph name="END_LINK" /> a prejdite do sekcie Možnosti hesiel.</translation>
 <translation id="7554791636758816595">Nová karta</translation>
 <translation id="7561196759112975576">Vždy</translation>
 <translation id="7583004045319035904">Odomknite karty inkognito funkciou <ph name="BIOMETRIC_AUTHENITCATION_TYPE" />.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Vytvárajte, ukladajte a spravujte svoje heslá, aby ste sa mohli jednoducho prihlasovať na weboch a v aplikáciách. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Vypnúť</translation>
 <translation id="8114753159095730575">Súbor je k dispozícii na stiahnutie. Možnosti sú k dispozícii v dolnej časti obrazovky.</translation>
+<translation id="81313319706244542">2. Klepnite na Heslá</translation>
 <translation id="8132598642024322408">Teraz za <ph name="PRICE" />, predtým <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Táto možnosť sa použije na vytváranie udalostí vo vašom Kalendári Apple v Chrome a pomocou funkcie Google Lens.</translation>
 <translation id="8156478151976189188">Synchronizácia hesiel nefunguje</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Nové vyhľadávanie</translation>
 <translation id="8323906514956095947">Pridržaním zobrazíte ďalšie možnosti karty</translation>
 <translation id="8328777765163860529">Zavrieť všetky</translation>
+<translation id="8343993175958086504">Zálohujte svoj obsah a používajte ho v ľubovoľnom zariadení.</translation>
 <translation id="8378714024927312812">Spravované vašou organizáciou</translation>
 <translation id="8386068868580335421">Resetovať</translation>
 <translation id="8407669440184693619">Nenašli sa žiadne heslá tohto webu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
index 91bdb3c..da650d0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Opozovi praćenje</translation>
 <translation id="3863769054730344136">Pošalji na uređaje</translation>
 <translation id="387280738075653372">Preuzmite Chrome ovde.</translation>
+<translation id="3888863481921783344">To će se koristiti da bi vam se prikazivale osobe koje možete da pozovete na događaj.</translation>
 <translation id="3892144330757387737">Ovde ćete pronaći istoriju</translation>
 <translation id="3897092660631435901">Meni</translation>
 <translation id="3904829425754749514">Vaša organizacije je isključila sinhronizaciju. I dalje možete da vidite obeleživače, istoriju, lozinke i druga podešavanja na ovom uređaju. Ako unesete promene, one se neće sinhronizovati sa nalogom.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Isključi</translation>
 <translation id="8114753159095730575">Preuzimanje datoteke nije dostupno. Opcije su navedene u dnu ekrana.</translation>
 <translation id="8132598642024322408">Cena je <ph name="PRICE" />, a bila je <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Ovo će se koristiti za pravljenje događaja u Apple Calendar-u iz Chrome-a i Google objektiva.</translation>
 <translation id="8156478151976189188">Sinhronizacija lozinki ne radi</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> naloga</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Uređaji<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index 91eca1f..9a1277c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Опозови праћење</translation>
 <translation id="3863769054730344136">Пошаљи на уређаје</translation>
 <translation id="387280738075653372">Преузмите Chrome овде.</translation>
+<translation id="3888863481921783344">То ће се користити да би вам се приказивале особе које можете да позовете на догађај.</translation>
 <translation id="3892144330757387737">Овде ћете пронаћи историју</translation>
 <translation id="3897092660631435901">Мени</translation>
 <translation id="3904829425754749514">Ваша организације је искључила синхронизацију. И даље можете да видите обележиваче, историју, лозинке и друга подешавања на овом уређају. Ако унесете промене, оне се неће синхронизовати са налогом.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Искључи</translation>
 <translation id="8114753159095730575">Преузимање датотеке није доступно. Опције су наведене у дну екрана.</translation>
 <translation id="8132598642024322408">Цена је <ph name="PRICE" />, а била је <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Ово ће се користити за прављење догађаја у Apple Calendar-у из Chrome-а и Google објектива.</translation>
 <translation id="8156478151976189188">Синхронизација лозинки не ради</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> налога</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Уређаји<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
index 899238d8..503aa98 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Acha kufuata</translation>
 <translation id="3863769054730344136">Tuma kwenye Vifaa Vyako</translation>
 <translation id="387280738075653372">Pakua Chrome hapa.</translation>
+<translation id="3888863481921783344">Hii itatumika kukuonyesha watu unaoweza kuwaalika kwenye tukio lako.</translation>
 <translation id="3892144330757387737">Utapata historia yako hapa</translation>
 <translation id="3897092660631435901">Menyu</translation>
 <translation id="3904829425754749514">Shirika lako limezima kipengele cha kusawazisha. Bado unaweza kuona alamisho, historia, manenosiri na mipangilio mingine kwenye kifaa hiki. Iwapo utafanya mabadiliko, hayatasawazishwa kwenye akaunti yako.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Zima</translation>
 <translation id="8114753159095730575">Unaweza kupakua faili. Chaguo zinapatikana karibu na sehemu ya chini ya skrini.</translation>
 <translation id="8132598642024322408">Bei ya sasa ni <ph name="PRICE" />, awali ilikuwa <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Hii itatumika kuunda matukio kwenye Kalenda yako ya Apple kutoka kwenye Chrome na Lenzi ya Google.</translation>
 <translation id="8156478151976189188">Kipengele cha Kusawazisha manenosiri hakifanyi kazi</translation>
 <translation id="8157532349231307196">Akaunti <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Vifaa vyako<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb
index e50b81b..69a2c1e2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_te.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">అన్-ఫాలో చేయండి</translation>
 <translation id="3863769054730344136">మీ పరికరాలకు పంపండి</translation>
 <translation id="387280738075653372">Chromeను ఇక్కడ డౌన్‌లోడ్ చేయండి.</translation>
+<translation id="3888863481921783344">మీ ఈవెంట్‌కు హాజరయ్యే అవకాశం ఉన్న ఆహ్వానితులను చూపడానికి ఇది ఉపయోగించబడుతుంది.</translation>
 <translation id="3892144330757387737">మీ హిస్టరీని ఇక్కడ చూడగలరు</translation>
 <translation id="3897092660631435901">మెనూ</translation>
 <translation id="3904829425754749514">మీ సంస్థ సింక్‌ను ఆఫ్ చేసింది. ఈ పరికరంలో మీరు ఇప్పటికీ మీ బుక్‌మార్క్‌లు, హిస్టరీ, పాస్‌వర్డ్‌లు, అలాగే ఇతర సెట్టింగ్‌లను చూడవచ్చు. మీరు మార్పులు చేస్తే, అవి మీ ఖాతాకు సింక్ చేయబడవు.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">ఆఫ్ చేయి</translation>
 <translation id="8114753159095730575">ఫైల్ డౌన్‌లోడ్ అందుబాటులో ఉంది. ఎంపికలు స్క్రీన్ దిగువ భాగంలో అందుబాటులో ఉంటాయి.</translation>
 <translation id="8132598642024322408">ఇప్పుడు <ph name="PRICE" />, మునుపు <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Chrome, Google Lens నుండి మీ Apple క్యాలెండర్‌లో ఈవెంట్‌లను క్రియేట్ చేయడానికి ఇది ఉపయోగించబడుతుంది.</translation>
 <translation id="8156478151976189188">పాస్‌వర్డ్ సింక్ పనిచేయడం లేదు</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> ఖాతాలు</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />మీ పరికరాలు<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index 3aa50a7..7cefea3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. แตะแอปเบราว์เซอร์เริ่มต้น</translation>
 <translation id="2820289420301699633">ผู้ดูแลระบบเป็นผู้ควบคุม Chrome และเข้าถึงข้อมูลของ Chrome ได้</translation>
 <translation id="2830972654601096923">จัดการที่อยู่...</translation>
+<translation id="2834399722155632105">3. แตะตัวเลือกรหัสผ่าน</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">รีเซ็ตการตั้งค่าการแปล</translation>
 <translation id="2848086008667475748">ตั้งเป็นค่าเริ่มต้นในการตั้งค่า…</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">เลิกติดตาม</translation>
 <translation id="3863769054730344136">ส่งไปยังอุปกรณ์</translation>
 <translation id="387280738075653372">ดาวน์โหลด Chrome ที่นี่</translation>
+<translation id="3888863481921783344">ระบบจะใช้เพื่อแสดงว่าผู้ใดสามารถได้รับเชิญให้เข้าร่วมกิจกรรมของคุณ</translation>
 <translation id="3892144330757387737">คุณจะเห็นประวัติการเข้าชมที่นี่</translation>
 <translation id="3897092660631435901">เมนู</translation>
 <translation id="3904829425754749514">องค์กรของคุณปิดการซิงค์ คุณจะยังคงเห็นบุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ ในอุปกรณ์นี้ หากทำการเปลี่ยนแปลง ระบบจะไม่ซิงค์การเปลี่ยนแปลงนั้นกับบัญชี</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">ให้คนที่อยู่ใกล้ๆ สแกนคิวอาร์โค้ดนี้โดยใช้กล้องหรือแอปสแกนคิวอาร์โค้ดเพื่อแชร์</translation>
 <translation id="5911030830365207728">Google แปลภาษา</translation>
 <translation id="5913600720976431809">ตัวเลือกในการแปลหน้า</translation>
+<translation id="5933515656458364246">ซิงค์ข้อมูลในอุปกรณ์ทุกเครื่อง</translation>
 <translation id="5938160824633642847">พื้นที่ในอุปกรณ์เกือบเต็มแล้ว เพิ่มพื้นที่ว่างแล้วลองอีกครั้ง</translation>
 <translation id="5948291296578561264">ช่วยให้คุณบันทึกรูปภาพในคลังภาพได้</translation>
 <translation id="5951816930277761335">แชร์ลิงก์</translation>
@@ -712,6 +715,7 @@
 
 ข้อมูลของคุณได้รับการเข้ารหัสด้วยรหัสผ่านการซิงค์เมื่อวันที่ <ph name="TIME" /> โปรดป้อนรหัสผ่านเพื่อเริ่มซิงค์</translation>
 <translation id="6418346271604475326">กำลังเตรียม PDF</translation>
+<translation id="6429213933892582367">เปิดตัวเลือกรหัสผ่าน</translation>
 <translation id="6434591244308415567">เกิดข้อผิดพลาด โปรดลองอีกครั้งในภายหลัง</translation>
 <translation id="6435236283694032571">เพิ่มไปยังเรื่องรออ่าน</translation>
 <translation id="6439338047467462846">อนุญาตทั้งหมด</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">พูดคำตอบกลับ</translation>
 <translation id="7207023858769244910">ซิงค์เพื่อรับเนื้อหาตามความสนใจของคุณ</translation>
 <translation id="721597782417389033">ชื่อเล่นของบัตรไม่ถูกต้อง</translation>
+<translation id="7221173315674413369">สำรวจฟีเจอร์และเคล็ดลับใหม่ๆ ใน "มีอะไรใหม่"</translation>
 <translation id="722454870747268814">แท็บที่ไม่ระบุตัวตนใหม่</translation>
 <translation id="7265758999917665941">ไม่จดจำสำหรับเว็บไซต์นี้</translation>
 <translation id="7272437679830969316">ยืนยันตัวตนของคุณไม่ได้ คัดลอกรหัสผ่านไม่สำเร็จ</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">ดาวน์โหลด</translation>
 <translation id="7531345132340165516">เว็บไซต์ปัจจุบัน</translation>
 <translation id="7537586195939242955">ขออภัย ไม่สามารถติดตั้ง Pass ของคุณใน Passbook ในขณะนี้</translation>
+<translation id="7553234618121028547">หากต้องการปิด ให้เปิด<ph name="BEGIN_LINK" />การตั้งค่า<ph name="END_LINK" />แล้วไปที่ตัวเลือกรหัสผ่าน</translation>
 <translation id="7554791636758816595">แท็บใหม่</translation>
 <translation id="7561196759112975576">ทุกครั้ง</translation>
 <translation id="7583004045319035904">ใช้ <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> เพื่อปลดล็อกแท็บที่ไม่ระบุตัวตน</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">สร้าง บันทึก และจัดการรหัสผ่านเพื่อจะได้ลงชื่อเข้าใช้เว็บไซต์และแอปได้โดยง่าย <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">ปิด</translation>
 <translation id="8114753159095730575">การดาวน์โหลดไฟล์พร้อมใช้งาน มีตัวเลือกอยู่ทางด้านล่างของหน้าจอ</translation>
+<translation id="81313319706244542">2. แตะรหัสผ่าน</translation>
 <translation id="8132598642024322408">ลดจาก <ph name="PREVIOUS_PRICE" /> เหลือ <ph name="PRICE" /></translation>
+<translation id="8136856065410661948">ระบบจะใช้เพื่อสร้างกิจกรรมจาก Chrome และ Google Lens ในปฏิทินของ Apple</translation>
 <translation id="8156478151976189188">Password Sync ไม่ทำงาน</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> บัญชี</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />อุปกรณ์ของคุณ<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">ค้นหาใหม่</translation>
 <translation id="8323906514956095947">แตะค้างไว้เพื่อดูตัวเลือกแท็บเพิ่มเติม</translation>
 <translation id="8328777765163860529">ปิดทั้งหมด</translation>
+<translation id="8343993175958086504">สำรองข้อมูลและใช้ในอุปกรณ์เครื่องใดก็ได้</translation>
 <translation id="8378714024927312812">จัดการโดยองค์กร</translation>
 <translation id="8386068868580335421">รีเซ็ต</translation>
 <translation id="8407669440184693619">ไม่พบรหัสผ่านสำหรับเว็บไซต์นี้</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
index 4a7e593..80a7000d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Натисніть "Веб-переглядач за умовчанням"</translation>
 <translation id="2820289420301699633">Адміністратор зможе контролювати Chrome і отримувати доступ до даних</translation>
 <translation id="2830972654601096923">Керувати адресами…</translation>
+<translation id="2834399722155632105">3. Натисніть "Параметри паролів"</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Скинути налаштування</translation>
 <translation id="2848086008667475748">Вибрати за умовчанням у налаштуваннях…</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">Скасувати підписку</translation>
 <translation id="3863769054730344136">Надіслати на пристрої</translation>
 <translation id="387280738075653372">Завантажте Chrome тут.</translation>
+<translation id="3888863481921783344">Ці дані застосовуватимуться, щоб показувати вам користувачів, яких можна запросити на подію.</translation>
 <translation id="3892144330757387737">Тут відображатиметься ваша історія</translation>
 <translation id="3897092660631435901">Меню</translation>
 <translation id="3904829425754749514">Адміністратор вашої організації вимкнув синхронізацію. Ви все ще можете переглядати свої закладки, історію, паролі й інші налаштування на цьому пристрої. Якщо ви внесете зміни, вони не синхронізуватимуться з обліковим записом.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">Щоб отримати доступ до контенту, люди поруч можуть зісканувати цей QR-код за допомогою камери або QR-сканера</translation>
 <translation id="5911030830365207728">Google Перекладач</translation>
 <translation id="5913600720976431809">Опції перекладу сторінки</translation>
+<translation id="5933515656458364246">Синхронізуйте дані на всіх пристроях.</translation>
 <translation id="5938160824633642847">Пам’ять на пристрої майже заповнено. Звільніть місце та повторіть спробу.</translation>
 <translation id="5948291296578561264">Ви зможете зберігати знімки в бібліотеці фотографій.</translation>
 <translation id="5951816930277761335">Поділіться посиланням</translation>
@@ -712,6 +715,7 @@
 
 Ваші дані було зашифровано <ph name="TIME" /> за допомогою парольної фрази для синхронізації. Введіть її, щоб почати синхронізацію.</translation>
 <translation id="6418346271604475326">Підготовка PDF</translation>
+<translation id="6429213933892582367">Відкрийте розділ "Параметри паролів"</translation>
 <translation id="6434591244308415567">Сталася помилка. Спробуйте пізніше.</translation>
 <translation id="6435236283694032571">Додати в список читання</translation>
 <translation id="6439338047467462846">Дозволити всі</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">Озвучувати відповіді</translation>
 <translation id="7207023858769244910">Увімкніть синхронізацію, щоб отримувати контент на основі ваших інтересів.</translation>
 <translation id="721597782417389033">Недійсний псевдонім картки</translation>
+<translation id="7221173315674413369">Дізнайтеся про нові функції та поради в розділі "Що нового"</translation>
 <translation id="722454870747268814">Нова анонімна вкладка</translation>
 <translation id="7265758999917665941">Ніколи для цього сайту</translation>
 <translation id="7272437679830969316">Не вдалося підтвердити особу. Пароль не скопійовано.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">Завантажити</translation>
 <translation id="7531345132340165516">Поточний сайт</translation>
 <translation id="7537586195939242955">Не вдалося внести дані в Passbook.</translation>
+<translation id="7553234618121028547">Щоб вимкнути, відкрийте <ph name="BEGIN_LINK" />Параметри<ph name="END_LINK" /> та перейдіть у розділ "Параметри паролів".</translation>
 <translation id="7554791636758816595">Нова вкладка</translation>
 <translation id="7561196759112975576">Завжди</translation>
 <translation id="7583004045319035904">Використовуйте <ph name="BIOMETRIC_AUTHENITCATION_TYPE" />, щоб розблоковувати анонімні вкладки.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">Створюйте та зберігайте паролі й керуйте ними, щоб було простіше входити в обліковий запис на сайтах і в додатках. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Вимкнути</translation>
 <translation id="8114753159095730575">Доступне завантаження файлу. Параметри можна знайти внизу екрана.</translation>
+<translation id="81313319706244542">2. Натисніть "Паролі"</translation>
 <translation id="8132598642024322408">Поточна ціна – <ph name="PRICE" />, попередня – <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Ці дані використовуватимуться, щоб створювати події в Календарі Apple на основі даних у Chrome і Google Об’єктиві.</translation>
 <translation id="8156478151976189188">Синхронізація паролів не працює</translation>
 <translation id="8157532349231307196">Облікових записів: <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Ваші пристрої<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">Новий пошук</translation>
 <translation id="8323906514956095947">Натисніть і утримуйте, щоб відкрити більше параметрів вкладок</translation>
 <translation id="8328777765163860529">Закрити всі</translation>
+<translation id="8343993175958086504">Створюйте резервні копії даних і використовуйте їх на будь-якому пристрої.</translation>
 <translation id="8378714024927312812">Профілем керує ваша організація</translation>
 <translation id="8386068868580335421">Скинути</translation>
 <translation id="8407669440184693619">Немає паролів для цього сайту</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
index 86e70a4..05246425 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">پیروی ختم کریں</translation>
 <translation id="3863769054730344136">اپنے آلات پر بھیجیں</translation>
 <translation id="387280738075653372">‏یہاں Chrome ڈاؤن لوڈ کریں۔</translation>
+<translation id="3888863481921783344">اس کا استعمال آپ کو آپ کے ایونٹ کے ممکنہ مدعو کنندگان دکھانے کے لیے کیا جائے گا۔</translation>
 <translation id="3892144330757387737">آپ کو اپنی سرگزشت یہاں ملے گی</translation>
 <translation id="3897092660631435901">مینو</translation>
 <translation id="3904829425754749514">آپ کی تنظیم نے مطابقت پذیری کی سہولت کو غیر فعال کر دیا۔ آپ ابھی بھی اپنے بک مارکس، سرگزشت، پاس ورڈز اور دیگر ترتیبات کو اس آلے پر دیکھ سکتے ہیں۔ اگر آپ تبدیلیاں کرتے ہیں تو وہ آپ کے اکاؤنٹ کے ساتھ مطابقت پذیر نہیں ہوں گی۔</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">آف کریں</translation>
 <translation id="8114753159095730575">فائل ڈاؤن لوڈ دستیاب ہے۔ اختیارات اسکرین کے نچلے حصے کے قریب دستیاب ہیں۔</translation>
 <translation id="8132598642024322408">اب <ph name="PRICE" /> پہلے <ph name="PREVIOUS_PRICE" /> تھی۔</translation>
+<translation id="8136856065410661948">‏اس کا استعمال Chrome اور Google لینز سے آپ کے Apple کیلنڈر میں ایونٹس تخلیق کرنے کے لیے کیا جائے گا۔</translation>
 <translation id="8156478151976189188">پاس ورڈ کی مطابقت پذیری کام نہیں کر رہی ہے</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> اکاؤنٹس</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />آپ کے آلات<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
index a13ad92..df4153a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. 輕按 [預設瀏覽器應用程式]</translation>
 <translation id="2820289420301699633">管理員可控制 Chrome,並存取其中的資料</translation>
 <translation id="2830972654601096923">管理地址…</translation>
+<translation id="2834399722155632105">3. 輕觸「密碼選項」</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />,<ph name="STATE" />,<ph name="URL" /></translation>
 <translation id="2843803966603263712">重設翻譯設定</translation>
 <translation id="2848086008667475748">在「設定」中設定為「預設」…</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">取消追蹤</translation>
 <translation id="3863769054730344136">傳送至您的裝置</translation>
 <translation id="387280738075653372">在此下載 Chrome。</translation>
+<translation id="3888863481921783344">系統會使用這些資料向你顯示活動的可能邀請對象。</translation>
 <translation id="3892144330757387737">您可在此查看記錄</translation>
 <translation id="3897092660631435901">選單</translation>
 <translation id="3904829425754749514">您的機構已關閉同步功能。您仍可在此裝置上查看自己的書籤、記錄、密碼和其他設定,但作出的變更將不會同步到您的帳戶。</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">如要與附近的使用者分享,請讓對方以相機或二維條碼掃瞄應用程式來掃瞄此二維條碼</translation>
 <translation id="5911030830365207728">Google 翻譯</translation>
 <translation id="5913600720976431809">網頁翻譯選項</translation>
+<translation id="5933515656458364246">同步處理所有裝置上的資料。</translation>
 <translation id="5938160824633642847">您裝置上的儲存空間即將用完。請釋放空間並再試一次。</translation>
 <translation id="5948291296578561264">這樣您便可將相片儲存至相片庫。</translation>
 <translation id="5951816930277761335">分享連結</translation>
@@ -712,6 +715,7 @@
 
 您已於 <ph name="TIME" />使用同步密碼短語加密資料,請輸入密碼短語開始同步資料。</translation>
 <translation id="6418346271604475326">正在準備 PDF</translation>
+<translation id="6429213933892582367">開啟「密碼選項」</translation>
 <translation id="6434591244308415567">發生錯誤,請稍後再試。</translation>
 <translation id="6435236283694032571">加入閱讀清單</translation>
 <translation id="6439338047467462846">全部允許</translation>
@@ -825,6 +829,7 @@
 <translation id="7203585745079012652">語音答覆</translation>
 <translation id="7207023858769244910">啟用同步功能,以便系統根據您的興趣提供內容。</translation>
 <translation id="721597782417389033">無效的信用卡暱稱</translation>
+<translation id="7221173315674413369">你可以前往「新功能」頁面探索新功能及相關提示</translation>
 <translation id="722454870747268814">新增無痕式分頁</translation>
 <translation id="7265758999917665941">一律不儲存此網站的密碼</translation>
 <translation id="7272437679830969316">無法驗證您的身分。未複製密碼。</translation>
@@ -858,6 +863,7 @@
 <translation id="7514365320538308">下載</translation>
 <translation id="7531345132340165516">目前網站</translation>
 <translation id="7537586195939242955">很抱歉,目前無法將您的通行票證加到 Passbook。</translation>
+<translation id="7553234618121028547">如要關閉,請開啟<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />並前往「密碼選項」部分。</translation>
 <translation id="7554791636758816595">新分頁</translation>
 <translation id="7561196759112975576">永遠使用</translation>
 <translation id="7583004045319035904">使用 <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> 解鎖無痕式分頁。</translation>
@@ -939,7 +945,9 @@
 <translation id="8101409298456377967">建立、儲存及管理密碼,讓您輕鬆登入網站和應用程式。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">關閉</translation>
 <translation id="8114753159095730575">您可以下載檔案。可用選項喺螢幕底部附近。</translation>
+<translation id="81313319706244542">2. 輕觸「密碼」</translation>
 <translation id="8132598642024322408">原價係 <ph name="PREVIOUS_PRICE" />,現售 <ph name="PRICE" />。</translation>
+<translation id="8136856065410661948">系統將使用 Chrome 和 Google 智慧鏡頭中的內容在 Apple 行事曆中建立活動。</translation>
 <translation id="8156478151976189188">密碼同步功能無法正常運作</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> 個帳戶</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />您的裝置<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -960,6 +968,7 @@
 <translation id="8319076807703933069">新搜尋</translation>
 <translation id="8323906514956095947">輕觸並按住即可查看更多標籤選項</translation>
 <translation id="8328777765163860529">關閉全部</translation>
+<translation id="8343993175958086504">備份資料即可在任何裝置上使用。</translation>
 <translation id="8378714024927312812">由您的機構管理</translation>
 <translation id="8386068868580335421">重設</translation>
 <translation id="8407669440184693619">找不到此網站的密碼</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
index 710f98c..dd45e45 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. 輕觸 [預設的瀏覽器應用程式]</translation>
 <translation id="2820289420301699633">管理員可以控管 Chrome,並存取該瀏覽器的資料</translation>
 <translation id="2830972654601096923">管理地址...</translation>
+<translation id="2834399722155632105">3. 輕觸「密碼選項」</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />,<ph name="STATE" />,<ph name="URL" /></translation>
 <translation id="2843803966603263712">重設翻譯設定</translation>
 <translation id="2848086008667475748">在「設定」中設為預設…</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">取消追蹤</translation>
 <translation id="3863769054730344136">傳送到你的裝置</translation>
 <translation id="387280738075653372">在這裡下載 Chrome。</translation>
+<translation id="3888863481921783344">系統會使用這些資料向你顯示活動的可能邀請對象。</translation>
 <translation id="3892144330757387737">這裡會顯示你的歷史記錄</translation>
 <translation id="3897092660631435901">選單</translation>
 <translation id="3904829425754749514">貴機構已關閉同步功能。你仍然可以在這部裝置上查看自己的書籤、歷史記錄、密碼和其他設定,但你所做的變更將不會同步到帳戶。</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">如要與附近的使用者分享,請讓對方使用相機或 QR 掃描器應用程式掃描這個 QR code</translation>
 <translation id="5911030830365207728">Google 翻譯</translation>
 <translation id="5913600720976431809">網頁翻譯選項</translation>
+<translation id="5933515656458364246">同步處理所有裝置上的資料。</translation>
 <translation id="5938160824633642847">你的裝置空間即將用盡,請在釋出空間後再試一次。</translation>
 <translation id="5948291296578561264">可讓你將相片儲存至相片庫。</translation>
 <translation id="5951816930277761335">分享連結</translation>
@@ -712,6 +715,7 @@
 
 您已在 <ph name="TIME" />使用同步通關密語對資料進行加密,請輸入通關密語開始進行同步。</translation>
 <translation id="6418346271604475326">正在準備 PDF</translation>
+<translation id="6429213933892582367">開啟「密碼選項」</translation>
 <translation id="6434591244308415567">發生錯誤,請稍後再試。</translation>
 <translation id="6435236283694032571">加入閱讀清單</translation>
 <translation id="6439338047467462846">全部允許</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">語音答覆</translation>
 <translation id="7207023858769244910">系統會根據你的興趣提供內容。</translation>
 <translation id="721597782417389033">卡片暱稱無效</translation>
+<translation id="7221173315674413369">你可以前往「新功能」頁面探索新功能及相關提示</translation>
 <translation id="722454870747268814">新無痕式分頁</translation>
 <translation id="7265758999917665941">一律不儲存這個網站的密碼</translation>
 <translation id="7272437679830969316">無法驗證你的身分,因此未複製密碼。</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">下載</translation>
 <translation id="7531345132340165516">目前網站</translation>
 <translation id="7537586195939242955">很抱歉,目前無法將您的通行票證加到 Passbook。</translation>
+<translation id="7553234618121028547">如要關閉,請開啟<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />並前往「密碼選項」部分。</translation>
 <translation id="7554791636758816595">新分頁</translation>
 <translation id="7561196759112975576">一律使用</translation>
 <translation id="7583004045319035904">使用 <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> 解鎖無痕分頁。</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">建立、儲存及管理密碼,讓你輕鬆登入網站和應用程式。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">關閉</translation>
 <translation id="8114753159095730575">可下載檔案,相關選項位於畫面底部。</translation>
+<translation id="81313319706244542">2. 輕觸「密碼」</translation>
 <translation id="8132598642024322408">原價 <ph name="PREVIOUS_PRICE" />,現在只要 <ph name="PRICE" />,</translation>
+<translation id="8136856065410661948">系統將使用 Chrome 和 Google 智慧鏡頭中的內容在 Apple 行事曆中建立活動。</translation>
 <translation id="8156478151976189188">Password Sync 無法正常運作</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> 個帳戶</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />你的裝置<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">新搜尋</translation>
 <translation id="8323906514956095947">輕觸並按住即可查看更多分頁選項</translation>
 <translation id="8328777765163860529">關閉全部</translation>
+<translation id="8343993175958086504">備份資料即可在任何裝置上使用。</translation>
 <translation id="8378714024927312812">由貴機構管理</translation>
 <translation id="8386068868580335421">重設</translation>
 <translation id="8407669440184693619">找不到這個網站的密碼</translation>
diff --git a/ios/chrome/app/variations_app_state_agent+testing.h b/ios/chrome/app/variations_app_state_agent+testing.h
index fe7a855..5a7df66 100644
--- a/ios/chrome/app/variations_app_state_agent+testing.h
+++ b/ios/chrome/app/variations_app_state_agent+testing.h
@@ -20,6 +20,9 @@
 // Name for the enabled group.
 extern const char kIOSChromeVariationsTrialEnabledGroup[];
 
+// Histogram name for seed expiry.
+extern const char kIOSSeedExpiryHistogram[];
+
 @interface VariationsAppStateAgent (Testing)
 
 // Initializer that takes an existing fetcher and the enabled and control
diff --git a/ios/chrome/app/variations_app_state_agent.mm b/ios/chrome/app/variations_app_state_agent.mm
index c9e62dd4..83d39c93 100644
--- a/ios/chrome/app/variations_app_state_agent.mm
+++ b/ios/chrome/app/variations_app_state_agent.mm
@@ -7,10 +7,12 @@
 
 #import "base/mac/foundation_util.h"
 #import "base/metrics/field_trial.h"
+#import "base/metrics/histogram_functions.h"
 #import "base/rand_util.h"
 #import "base/time/time.h"
 #import "components/prefs/pref_registry_simple.h"
 #import "components/prefs/pref_service.h"
+#import "components/variations/service/variations_field_trial_creator.h"
 #import "components/variations/service/variations_service_utils.h"
 #import "components/variations/variations_seed_store.h"
 #import "components/version_info/version_info.h"
@@ -32,9 +34,16 @@
 const char kIOSChromeVariationsTrialDefaultGroup[] = "Default";
 const char kIOSChromeVariationsTrialControlGroup[] = "Control-v1";
 const char kIOSChromeVariationsTrialEnabledGroup[] = "Enabled-v1";
+// Histogram name for seed expiry.
+const char kIOSSeedExpiryHistogram[] = "IOS.Variations.CreateTrials.SeedExpiry";
 
 namespace {
 
+using ::variations::HasSeedExpiredSinceTime;
+using ::variations::VariationsSeedExpiry;
+using ::variations::VariationsSeedStore;
+using ::version_info::Channel;
+
 // The NSUserDefault key to store the time the last seed is fetched.
 NSString* kLastVariationsSeedFetchTimeKey = @"kLastVariationsSeedFetchTime";
 
@@ -58,12 +67,12 @@
 // NOTE: The value will be updated during the incremental rollout period.
 int GetGroupWeight() {
   switch (GetChannel()) {
-    case version_info::Channel::UNKNOWN:
-    case version_info::Channel::CANARY:
-    case version_info::Channel::DEV:
-    case version_info::Channel::BETA:
+    case Channel::UNKNOWN:
+    case Channel::CANARY:
+    case Channel::DEV:
+    case Channel::BETA:
       return 0;
-    case version_info::Channel::STABLE:
+    case Channel::STABLE:
       return 0;
   }
 }
@@ -76,18 +85,19 @@
   return base::Time::FromDoubleT(timestamp);
 }
 
-// Record Variations.SeedFreshness metric according whether there is a seed in
-// the variations seed store fetched by a previous run, and if there is, whether
-// it is expired.
-// TODO(crbug.com/1380164): Implement this method.
-void RecordSeedFreshness(base::Time time) {
+// Records metric for `kIOSSeedExpiryHistogram` according whether there is a
+// seed in the variations seed store fetched by a previous run, and if there is,
+// whether it is expired.
+void RecordSeedExpiry(base::Time time) {
+  VariationsSeedExpiry expiry;
   if (time.is_null()) {
-    // TODO(crbug.com/1380164): Seed doesn't exist. Log metric.
-  } else if (variations::HasSeedExpiredSinceTime(time)) {
-    // TODO(crbug.com/1380164): Seed expired. Log metric.
+    expiry = VariationsSeedExpiry::kFetchTimeMissing;
+  } else if (HasSeedExpiredSinceTime(time)) {
+    expiry = VariationsSeedExpiry::kExpired;
   } else {
-    // TODO(crbug.com/1380164): Seed unexpired. Log metric.
+    expiry = VariationsSeedExpiry::kNotExpired;
   }
+  base::UmaHistogramEnumeration(kIOSSeedExpiryHistogram, expiry);
 }
 
 // Creates and returns a one-time randomized trial group assignment with regards
@@ -222,7 +232,7 @@
     _group = firstRun ? CreateOneTimeExperimentGroupAssignment(
                             enabledGroupWeight, controlGroupWeight)
                       : IOSChromeVariationsGroup::kNotFirstRun;
-    RecordSeedFreshness(lastSeedFetchTime);
+    RecordSeedExpiry(lastSeedFetchTime);
     if (_group == IOSChromeVariationsGroup::kEnabled) {
       _fetcher = fetcher;
       _fetcher.delegate = self;
diff --git a/ios/chrome/app/variations_app_state_agent_unittest.mm b/ios/chrome/app/variations_app_state_agent_unittest.mm
index 15c93d0..d08cb9fc 100644
--- a/ios/chrome/app/variations_app_state_agent_unittest.mm
+++ b/ios/chrome/app/variations_app_state_agent_unittest.mm
@@ -7,9 +7,11 @@
 
 #import "base/metrics/field_trial.h"
 #import "base/test/ios/wait_util.h"
+#import "base/test/metrics/histogram_tester.h"
 #import "base/test/task_environment.h"
 #import "base/time/time.h"
 #import "components/variations/pref_names.h"
+#import "components/variations/service/variations_field_trial_creator.h"
 #import "ios/chrome/app/application_delegate/app_state.h"
 #import "ios/chrome/app/application_delegate/app_state_observer.h"
 #import "ios/chrome/app/application_delegate/startup_information.h"
@@ -28,11 +30,6 @@
 #error "This file requires ARC support."
 #endif
 
-// TODO(crbug.com/1380164): Remove after freshness logging is implemented.
-namespace {
-NSString* kLastVariationsSeedFetchTimeKey = @"kLastVariationsSeedFetchTime";
-}  // namespace
-
 // Helper object that manages initStage transitions for the mock app state used
 // in VariationsAppStateAgentTest.
 @interface StateForMockAppState : NSObject
@@ -76,7 +73,7 @@
   ~VariationsAppStateAgentTest() override {
     @autoreleasepool {
       [[NSUserDefaults standardUserDefaults]
-          removeObjectForKey:kLastVariationsSeedFetchTimeKey];
+          removeObjectForKey:@"kLastVariationsSeedFetchTime"];
       state_ = nil;
       mock_fetcher_ = nil;
       [mock_app_state_ stopMocking];
@@ -161,6 +158,12 @@
               group_name);
   }
 
+  // Verify that the expiry status is logged in UMA.
+  void ExpectThatSeedExpiryMetricLogged(
+      variations::VariationsSeedExpiry expiry) {
+    histogram_tester_.ExpectUniqueSample(kIOSSeedExpiryHistogram, expiry, 1);
+  }
+
   // Gets the current scene state to simulate activation level transitions.
   SceneState* GetSceneState() { return scene_state_; }
 
@@ -173,6 +176,7 @@
   SceneState* scene_state_;
   id mock_app_state_;
   StateForMockAppState* state_;
+  base::HistogramTester histogram_tester_;
 };
 
 #pragma mark - Test cases
@@ -184,6 +188,8 @@
 TEST_F(VariationsAppStateAgentTest, EnableSeedFetchOnFirstRun) {
   // Start the agent.
   VariationsAppStateAgent* agent = CreateAgentThatFetches();
+  ExpectThatSeedExpiryMetricLogged(
+      variations::VariationsSeedExpiry::kFetchTimeMissing);
   TransitionAgentToStage(agent, InitStageVariationsSeed);
   // Verify that the app agent would NOT transitioned to the next init stage if
   // the seed fetch hasn't completed.
@@ -192,7 +198,6 @@
   // seed fetch has completed.
   SimulateFetchCompletion(agent);
   EXPECT_TRUE(IsAppStateQueueTransitionToNextInitStageInvoked());
-  // TODO(crbug.com/1380164): Test that first run metric is logged.
   TransitionAgentToStage(
       agent,
       static_cast<InitStage>(InitStageBrowserObjectsForBackgroundHandlers + 1));
@@ -211,11 +216,12 @@
   VariationsAppStateAgent* agent =
       CreateAgent(/*fre=*/false, /*lastSeedFetchTime=*/base::Time(),
                   /*percentage_enabled=*/100, /*percentage_control=*/0);
+  ExpectThatSeedExpiryMetricLogged(
+      variations::VariationsSeedExpiry::kFetchTimeMissing);
   TransitionAgentToStage(agent, InitStageVariationsSeed);
   // Verify that the app agent would transitioned to the next init stage even if
   // the seed fetch hasn't completed.
   EXPECT_TRUE(IsAppStateQueueTransitionToNextInitStageInvoked());
-  // TODO(crbug.com/1380164): Test that first run metric is logged.
   EXPECT_FALSE(
       base::FieldTrialList::IsTrialActive(kIOSChromeVariationsTrialName));
 }
@@ -229,11 +235,12 @@
   VariationsAppStateAgent* agent =
       CreateAgent(/*fre=*/true, /*lastSeedFetchTime=*/base::Time(),
                   /*percentage_enabled=*/0, /*percentage_control=*/100);
+  ExpectThatSeedExpiryMetricLogged(
+      variations::VariationsSeedExpiry::kFetchTimeMissing);
   TransitionAgentToStage(agent, InitStageVariationsSeed);
   // Verify that the app agent would transitioned to the next init stage even if
   // the seed fetch hasn't completed.
   EXPECT_TRUE(IsAppStateQueueTransitionToNextInitStageInvoked());
-  // TODO(crbug.com/1380164): Test that first run metric is logged.
   TransitionAgentToStage(
       agent,
       static_cast<InitStage>(InitStageBrowserObjectsForBackgroundHandlers + 1));
@@ -250,11 +257,12 @@
   VariationsAppStateAgent* agent =
       CreateAgent(/*fre=*/true, /*lastSeedFetchTime=*/base::Time(),
                   /*percentage_enabled=*/0, /*percentage_control=*/0);
+  ExpectThatSeedExpiryMetricLogged(
+      variations::VariationsSeedExpiry::kFetchTimeMissing);
   TransitionAgentToStage(agent, InitStageVariationsSeed);
   // Verify that the app agent would transitioned to the next init stage even if
   // the seed fetch hasn't completed.
   EXPECT_TRUE(IsAppStateQueueTransitionToNextInitStageInvoked());
-  // TODO(crbug.com/1380164): Test that first run metric is logged.
   TransitionAgentToStage(
       agent,
       static_cast<InitStage>(InitStageBrowserObjectsForBackgroundHandlers + 1));
@@ -272,11 +280,12 @@
       /*fre=*/true,
       /*lastSeedFetchTime=*/base::Time::NowFromSystemTime() - base::Days(1),
       /*percentage_enabled=*/100, /*percentage_control=*/0);
+  ExpectThatSeedExpiryMetricLogged(
+      variations::VariationsSeedExpiry::kNotExpired);
   TransitionAgentToStage(agent, InitStageVariationsSeed);
   // Verify that the app agent would transitioned to the next init stage even if
   // the seed fetch hasn't completed.
   EXPECT_TRUE(IsAppStateQueueTransitionToNextInitStageInvoked());
-  // TODO(crbug.com/1380164): Test that first run metric is logged.
 }
 
 // Tests that the agent immediately transitions to the next stage from
@@ -365,10 +374,8 @@
   //  Simulate backgrounding and launch again.
   [agent sceneState:GetSceneState()
       transitionedToActivationLevel:SceneActivationLevelBackground];
-  agent = CreateAgentThatDoesNotFetch();
-  TransitionAgentToStage(agent, InitStageVariationsSeed);
-  double stored_value = [[NSUserDefaults standardUserDefaults]
-      doubleForKey:kLastVariationsSeedFetchTimeKey];
-  EXPECT_EQ(base::Time::FromDoubleT(stored_value), last_fetch_time);
-  // TODO(crbug.com/1380164): Test freshness logging.
+  agent = [[VariationsAppStateAgent alloc] init];
+  histogram_tester_.ExpectUniqueSample(
+      kIOSSeedExpiryHistogram, variations::VariationsSeedExpiry::kNotExpired,
+      2);
 }
diff --git a/ios/chrome/browser/crash_report/crash_helper.mm b/ios/chrome/browser/crash_report/crash_helper.mm
index 3399740..84b491ebe 100644
--- a/ios/chrome/browser/crash_report/crash_helper.mm
+++ b/ios/chrome/browser/crash_report/crash_helper.mm
@@ -145,11 +145,6 @@
   });
 }
 
-// Called after Breakpad finishes uploading each report.
-void UploadResultHandler(NSString* report_id, NSError* error) {
-  base::UmaHistogramSparse("CrashReport.BreakpadIOSUploadOutcome", error.code);
-}
-
 // Returns the uptime, the difference between now and start time.
 int64_t GetUptimeMilliseconds() {
   struct timeval tv;
@@ -271,9 +266,6 @@
   if (crash_reporter::IsBreakpadRunning()) {
     static dispatch_once_t once_token;
     dispatch_once(&once_token, ^{
-      [[BreakpadController sharedInstance]
-          setUploadCallback:UploadResultHandler];
-
       // Clean old breakpad files here. Breakpad-only as Crashpad has it's own
       // database cleaner.
       base::FilePath crash_directory;
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 4f97b3a..e588df4 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -1002,12 +1002,6 @@
     {"enable-password-grouping", flag_descriptions::kPasswordsGroupingName,
      flag_descriptions::kPasswordsGroupingDescription, flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(password_manager::features::kPasswordsGrouping)},
-    {"autofill-enable-sending-bcn-in-get-upload-details",
-     flag_descriptions::kAutofillEnableSendingBcnInGetUploadDetailsName,
-     flag_descriptions::kAutofillEnableSendingBcnInGetUploadDetailsDescription,
-     flags_ui::kOsIos,
-     FEATURE_VALUE_TYPE(
-         autofill::features::kAutofillEnableSendingBcnInGetUploadDetails)},
     {"enable-fullscreen-api", flag_descriptions::kEnableFullscreenAPIName,
      flag_descriptions::kEnableFullscreenAPIDescription, flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(web::features::kEnableFullscreenAPI)},
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
index 1c944ff2..4de084c 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -50,12 +50,6 @@
     "When enabled, some extra metrics logging for Autofill Downstream will "
     "start.";
 
-const char kAutofillEnableSendingBcnInGetUploadDetailsName[] =
-    "Enable sending billing customer number in GetUploadDetails";
-const char kAutofillEnableSendingBcnInGetUploadDetailsDescription[] =
-    "When enabled the billing customer number will be sent in the "
-    "GetUploadDetails preflight calls.";
-
 const char kAutofillEnableUnmaskCardRequestSetInstrumentIdName[] =
     "When enabled, sets non-legacy instrument ID in UnmaskCardRequest";
 const char kAutofillEnableUnmaskCardRequestSetInstrumentIdDescription[] =
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
index 99982a35..957b335 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -46,11 +46,6 @@
 extern const char kAutofillEnableRemadeDownstreamMetricsName[];
 extern const char kAutofillEnableRemadeDownstreamMetricsDescription[];
 
-// Title and description for the flag enable sending billing customer number in
-// GetUploadDetails preflight call.
-extern const char kAutofillEnableSendingBcnInGetUploadDetailsName[];
-extern const char kAutofillEnableSendingBcnInGetUploadDetailsDescription[];
-
 // Title and description for flag to enable sending non-legacy instrument ID in
 // UnmaskCardRequest.
 extern const char kAutofillEnableUnmaskCardRequestSetInstrumentIdName[];
diff --git a/ios/chrome/browser/sessions/BUILD.gn b/ios/chrome/browser/sessions/BUILD.gn
index a11603c..0690c172 100644
--- a/ios/chrome/browser/sessions/BUILD.gn
+++ b/ios/chrome/browser/sessions/BUILD.gn
@@ -174,6 +174,16 @@
   ]
 }
 
+source_set("fake") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  testonly = true
+  sources = [
+    "fake_tab_restore_service.h",
+    "fake_tab_restore_service.mm",
+  ]
+  deps = [ "//components/sessions" ]
+}
+
 source_set("unit_tests") {
   configs += [ "//build/config/compiler:enable_arc" ]
   testonly = true
diff --git a/ios/chrome/browser/sessions/fake_tab_restore_service.h b/ios/chrome/browser/sessions/fake_tab_restore_service.h
new file mode 100644
index 0000000..222b14d
--- /dev/null
+++ b/ios/chrome/browser/sessions/fake_tab_restore_service.h
@@ -0,0 +1,48 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_SESSIONS_FAKE_TAB_RESTORE_SERVICE_H_
+#define IOS_CHROME_BROWSER_SESSIONS_FAKE_TAB_RESTORE_SERVICE_H_
+
+#import "components/sessions/core/tab_restore_service.h"
+
+// A Fake restore service that just store and returns tabs.
+class FakeTabRestoreService : public sessions::TabRestoreService {
+ public:
+  explicit FakeTabRestoreService();
+  ~FakeTabRestoreService() override;
+
+  void AddObserver(sessions::TabRestoreServiceObserver* observer) override;
+  void RemoveObserver(sessions::TabRestoreServiceObserver* observer) override;
+  absl::optional<SessionID> CreateHistoricalTab(sessions::LiveTab* live_tab,
+                                                int index) override;
+  void BrowserClosing(sessions::LiveTabContext* context) override;
+  void BrowserClosed(sessions::LiveTabContext* context) override;
+  void CreateHistoricalGroup(sessions::LiveTabContext* context,
+                             const tab_groups::TabGroupId& group) override;
+  void GroupClosed(const tab_groups::TabGroupId& group) override;
+  void GroupCloseStopped(const tab_groups::TabGroupId& group) override;
+  void ClearEntries() override;
+  void DeleteNavigationEntries(const DeletionPredicate& predicate) override;
+  const Entries& entries() const override;
+  std::vector<sessions::LiveTab*> RestoreMostRecentEntry(
+      sessions::LiveTabContext* context) override;
+  void RemoveTabEntryById(SessionID session_id) override;
+  std::vector<sessions::LiveTab*> RestoreEntryById(
+      sessions::LiveTabContext* context,
+      SessionID session_id,
+      WindowOpenDisposition disposition) override;
+  void LoadTabsFromLastSession() override;
+  bool IsLoaded() const override;
+  void DeleteLastSession() override;
+  bool IsRestoring() const override;
+
+ private:
+  // Returns an iterator to the entry with id `session_id`.
+  Entries::iterator GetEntryIteratorById(SessionID session_id);
+
+  Entries entries_;
+};
+
+#endif  // IOS_CHROME_BROWSER_SESSIONS_FAKE_TAB_RESTORE_SERVICE_H_
diff --git a/ios/chrome/browser/sessions/fake_tab_restore_service.mm b/ios/chrome/browser/sessions/fake_tab_restore_service.mm
new file mode 100644
index 0000000..3072fc1
--- /dev/null
+++ b/ios/chrome/browser/sessions/fake_tab_restore_service.mm
@@ -0,0 +1,127 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/sessions/fake_tab_restore_service.h"
+
+#import "base/run_loop.h"
+#import "components/sessions/core/live_tab.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+FakeTabRestoreService::FakeTabRestoreService() {}
+FakeTabRestoreService::~FakeTabRestoreService() {}
+
+void FakeTabRestoreService::AddObserver(
+    sessions::TabRestoreServiceObserver* observer) {
+  NOTREACHED();
+}
+
+void FakeTabRestoreService::RemoveObserver(
+    sessions::TabRestoreServiceObserver* observer) {
+  NOTREACHED();
+}
+
+absl::optional<SessionID> FakeTabRestoreService::CreateHistoricalTab(
+    sessions::LiveTab* live_tab,
+    int index) {
+  auto tab = std::make_unique<Tab>();
+  int entry_count =
+      live_tab->IsInitialBlankNavigation() ? 0 : live_tab->GetEntryCount();
+  tab->navigations.resize(static_cast<int>(entry_count));
+  for (int i = 0; i < entry_count; ++i) {
+    sessions::SerializedNavigationEntry entry = live_tab->GetEntryAtIndex(i);
+    tab->navigations[i] = entry;
+  }
+  entries_.push_front(std::move(tab));
+  return absl::nullopt;
+}
+
+void FakeTabRestoreService::BrowserClosing(sessions::LiveTabContext* context) {
+  NOTREACHED();
+}
+
+void FakeTabRestoreService::BrowserClosed(sessions::LiveTabContext* context) {
+  NOTREACHED();
+}
+
+void FakeTabRestoreService::CreateHistoricalGroup(
+    sessions::LiveTabContext* context,
+    const tab_groups::TabGroupId& group) {
+  NOTREACHED();
+}
+
+void FakeTabRestoreService::GroupClosed(const tab_groups::TabGroupId& group) {
+  NOTREACHED();
+}
+
+void FakeTabRestoreService::GroupCloseStopped(
+    const tab_groups::TabGroupId& group) {
+  NOTREACHED();
+}
+
+void FakeTabRestoreService::ClearEntries() {
+  NOTREACHED();
+}
+
+void FakeTabRestoreService::DeleteNavigationEntries(
+    const DeletionPredicate& predicate) {
+  NOTREACHED();
+}
+
+const FakeTabRestoreService::Entries& FakeTabRestoreService::entries() const {
+  return entries_;
+}
+
+std::vector<sessions::LiveTab*> FakeTabRestoreService::RestoreMostRecentEntry(
+    sessions::LiveTabContext* context) {
+  NOTREACHED();
+  return std::vector<sessions::LiveTab*>();
+}
+
+void FakeTabRestoreService::RemoveTabEntryById(SessionID session_id) {
+  FakeTabRestoreService::Entries::iterator it =
+      GetEntryIteratorById(session_id);
+  if (it == entries_.end()) {
+    return;
+  }
+  entries_.erase(it);
+}
+
+std::vector<sessions::LiveTab*> FakeTabRestoreService::RestoreEntryById(
+    sessions::LiveTabContext* context,
+    SessionID session_id,
+    WindowOpenDisposition disposition) {
+  NOTREACHED();
+  return std::vector<sessions::LiveTab*>();
+}
+
+void FakeTabRestoreService::LoadTabsFromLastSession() {
+  NOTREACHED();
+}
+
+bool FakeTabRestoreService::IsLoaded() const {
+  NOTREACHED();
+  return false;
+}
+
+void FakeTabRestoreService::DeleteLastSession() {
+  NOTREACHED();
+}
+
+bool FakeTabRestoreService::IsRestoring() const {
+  NOTREACHED();
+  return false;
+}
+
+FakeTabRestoreService::Entries::iterator
+FakeTabRestoreService::GetEntryIteratorById(SessionID session_id) {
+  for (auto i = entries_.begin(); i != entries_.end(); ++i) {
+    if ((*i)->id == session_id) {
+      return i;
+    }
+  }
+  return entries_.end();
+}
diff --git a/ios/chrome/browser/ui/browser_view/BUILD.gn b/ios/chrome/browser/ui/browser_view/BUILD.gn
index 6f6c261..1580538b 100644
--- a/ios/chrome/browser/ui/browser_view/BUILD.gn
+++ b/ios/chrome/browser/ui/browser_view/BUILD.gn
@@ -272,6 +272,7 @@
     "//ios/chrome/browser/prerender:test_support",
     "//ios/chrome/browser/search_engines",
     "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/sessions:fake",
     "//ios/chrome/browser/sessions:restoration_agent",
     "//ios/chrome/browser/sessions:test_support",
     "//ios/chrome/browser/signin:signin",
diff --git a/ios/chrome/browser/ui/browser_view/key_commands_provider.mm b/ios/chrome/browser/ui/browser_view/key_commands_provider.mm
index bce73e1..b571c20c 100644
--- a/ios/chrome/browser/ui/browser_view/key_commands_provider.mm
+++ b/ios/chrome/browser/ui/browser_view/key_commands_provider.mm
@@ -230,6 +230,12 @@
       sel_isEqual(action, @selector(keyCommand_addToReadingList))) {
     return [self isHTTPOrHTTPSPage];
   }
+  if (sel_isEqual(action, @selector(keyCommand_reopenLastClosedTab))) {
+    sessions::TabRestoreService* const tabRestoreService =
+        IOSChromeTabRestoreServiceFactory::GetForBrowserState(
+            self.browser->GetBrowserState());
+    return tabRestoreService && !tabRestoreService->entries().empty();
+  }
   return [super canPerformAction:action withSender:sender];
 }
 
diff --git a/ios/chrome/browser/ui/browser_view/key_commands_provider_unittest.mm b/ios/chrome/browser/ui/browser_view/key_commands_provider_unittest.mm
index 6ce37a7..51ff165 100644
--- a/ios/chrome/browser/ui/browser_view/key_commands_provider_unittest.mm
+++ b/ios/chrome/browser/ui/browser_view/key_commands_provider_unittest.mm
@@ -12,6 +12,9 @@
 #import "ios/chrome/browser/main/test_browser.h"
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper_delegate.h"
+#import "ios/chrome/browser/sessions/fake_tab_restore_service.h"
+#import "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
+#import "ios/chrome/browser/tabs/closing_web_state_observer_browser_agent.h"
 #import "ios/chrome/browser/ui/commands/bookmarks_commands.h"
 #import "ios/chrome/browser/ui/commands/open_new_tab_command.h"
 #import "ios/chrome/browser/ui/commands/reading_list_add_command.h"
@@ -42,10 +45,18 @@
 
 namespace {
 
+std::unique_ptr<KeyedService> BuildFakeTabRestoreService(
+    web::BrowserState* browser_state) {
+  return std::make_unique<FakeTabRestoreService>();
+}
+
 class KeyCommandsProviderTest : public PlatformTest {
  protected:
   KeyCommandsProviderTest() {
-    browser_state_ = TestChromeBrowserState::Builder().Build();
+    TestChromeBrowserState::Builder builder;
+    builder.AddTestingFactory(IOSChromeTabRestoreServiceFactory::GetInstance(),
+                              base::BindRepeating(BuildFakeTabRestoreService));
+    browser_state_ = builder.Build();
     browser_ = std::make_unique<TestBrowser>(browser_state_.get());
     web_state_list_ = browser_->GetWebStateList();
     WebNavigationBrowserAgent::CreateForBrowser(browser_.get());
@@ -67,7 +78,7 @@
 
   void CloseWebState(int index) {
     web_state_list_->CloseWebStateAt(
-        0, WebStateList::ClosingFlags::CLOSE_NO_FLAGS);
+        index, WebStateList::ClosingFlags::CLOSE_NO_FLAGS);
   }
 
   // Checks that `view_controller_` can perform the `action` with the given
@@ -105,6 +116,22 @@
         web_state_list_->GetWebStateAt(insertedIndex));
   }
 
+  // Creates a FakeWebState with a navigation history containing exactly only
+  // the given `url`.
+  std::unique_ptr<web::FakeWebState> CreateFakeWebStateWithURL(
+      const GURL& url) {
+    auto web_state = std::make_unique<web::FakeWebState>();
+    auto navigation_manager = std::make_unique<web::FakeNavigationManager>();
+    navigation_manager->AddItem(url, ui::PAGE_TRANSITION_LINK);
+    navigation_manager->SetLastCommittedItem(
+        navigation_manager->GetItemAtIndex(0));
+    web_state->SetNavigationManager(std::move(navigation_manager));
+    web_state->SetBrowserState(browser_state_.get());
+    web_state->SetNavigationItemCount(1);
+    web_state->SetCurrentURL(url);
+    return web_state;
+  }
+
   void ExpectUMA(NSString* action, const std::string& user_action) {
     ASSERT_EQ(user_action_tester_.GetActionCount(user_action), 0);
 #pragma clang diagnostic push
@@ -184,7 +211,6 @@
   EXPECT_TRUE(CanPerform(@"keyCommand_openNewIncognitoTab"));
   EXPECT_TRUE(CanPerform(@"keyCommand_openNewWindow"));
   EXPECT_TRUE(CanPerform(@"keyCommand_openNewIncognitoWindow"));
-  EXPECT_TRUE(CanPerform(@"keyCommand_reopenLastClosedTab"));
   EXPECT_TRUE(CanPerform(@"keyCommand_showSettings"));
   EXPECT_TRUE(CanPerform(@"keyCommand_reportAnIssue"));
   EXPECT_TRUE(CanPerform(@"keyCommand_showReadingList"));
@@ -450,6 +476,35 @@
   EXPECT_FALSE(CanPerform(goForwardActions));
 }
 
+// Checks whether KeyCommandsProvider can perform the actions that are only
+// available when there are at least one closed tab.
+TEST_F(KeyCommandsProviderTest, CanPerform_ReopenLastClosedTab) {
+  ClosingWebStateObserverBrowserAgent::CreateForBrowser(browser_.get());
+  // No tabs.
+  ASSERT_EQ(web_state_list_->count(), 0);
+  EXPECT_FALSE(CanPerform(@"keyCommand_reopenLastClosedTab"));
+
+  // Add three new tabs.
+  auto web_state1 = CreateFakeWebStateWithURL(GURL("https://test/url1"));
+  browser_->GetWebStateList()->InsertWebState(0, std::move(web_state1),
+                                              WebStateList::INSERT_FORCE_INDEX,
+                                              WebStateOpener());
+  auto web_state2 = CreateFakeWebStateWithURL(GURL("https://test/url2"));
+  browser_->GetWebStateList()->InsertWebState(1, std::move(web_state2),
+                                              WebStateList::INSERT_FORCE_INDEX,
+                                              WebStateOpener());
+  auto web_state3 = CreateFakeWebStateWithURL(GURL("https://test/url3"));
+  browser_->GetWebStateList()->InsertWebState(2, std::move(web_state3),
+                                              WebStateList::INSERT_FORCE_INDEX,
+                                              WebStateOpener());
+  browser_->GetWebStateList()->ActivateWebStateAt(0);
+  EXPECT_FALSE(CanPerform(@"keyCommand_reopenLastClosedTab"));
+
+  // Close a tab.
+  CloseWebState(1);
+  EXPECT_TRUE(CanPerform(@"keyCommand_reopenLastClosedTab"));
+}
+
 #pragma mark - Metrics Tests
 
 // Checks that metrics are correctly reported.
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
index 247f828..7c3f976 100644
--- a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
+++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
@@ -133,6 +133,12 @@
   [super tearDown];
 }
 
+// TODO(crbug.com/1379289): Test fails on simulator.
+#if TARGET_IPHONE_SIMULATOR
+#define MAYBE_testTrendingQueries DISABLED_testTrendingQueries
+#else
+#define MAYBE_testTrendingQueries testTrendingQueries
+#endif
 - (AppLaunchConfiguration)appConfigurationForTestCase {
   // Use commandline args to enable the Discover feed for this test case.
   // Disabled elsewhere to account for possible flakiness.
@@ -142,7 +148,7 @@
   config.features_enabled.push_back(kDiscoverFeedInNtp);
 
   config.features_enabled.push_back(kContentSuggestionsUIModuleRefresh);
-  if ([self isRunningTest:@selector(testTrendingQueries)]) {
+  if ([self isRunningTest:@selector(MAYBE_testTrendingQueries)]) {
     // Enable arm that does not hide shortcuts.
     config.features_enabled.push_back(kTrendingQueriesModule);
     config.variations_enabled = {3350760};
@@ -485,7 +491,8 @@
 
 // Tests that the trending queries module header is visible and all four
 // trending queries are interactable.
-- (void)testTrendingQueries {
+// TODO(crbug.com/1379289): Test fails on simulator.
+- (void)MAYBE_testTrendingQueries {
   [[EarlGrey
       selectElementWithMatcher:
           grey_accessibilityID([NSString
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_cell.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_cell.mm
index 3e1f122..f5ed9fcc 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_cell.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_cell.mm
@@ -24,7 +24,7 @@
 // Margin of the StackView.
 const CGFloat kStackMargin = 8.0f;
 // Minimum spacing between items in the StackView.
-const CGFloat kMinStackSpacing = 6.0f;
+const CGFloat kMinStackSpacing = 8.0f;
 // Width of the gradient applied at the end of the carousel.
 const CGFloat kGradientWidth = 20.0f;
 
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_control.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_control.mm
index c79fa4c..c7f4468 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_control.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_control.mm
@@ -20,7 +20,7 @@
 // Size of the view behind the icon.
 const CGFloat kBackgroundViewSize = 56.0f;
 // Top, leading and trailing margins of `ImageView`.
-const CGFloat kBackgroundViewMargin = 8.0f;
+const CGFloat kBackgroundViewMargin = 7.0f;
 // Padding between the icon and the label.
 const CGFloat kBackgroundLabelSpacing = 10.0f;
 // Size of the view containing the favicon.
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm
index 4e3cb09..22e96554 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm
@@ -41,7 +41,7 @@
 
 namespace {
 const CGFloat kTopAndBottomPadding = 8.0;
-const CGFloat kTopPaddingVariation1 = 8.0;
+const CGFloat kTopPaddingVariation1 = 0.0;
 const CGFloat kTopPaddingVariation2 = 10.0;
 const CGFloat kTopBottomPaddingVariation2Ipad = 16.0;
 const CGFloat kFooterHeightVariation1 = 12.0;
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn b/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn
index 12f04d7b..bdc0c748 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn
@@ -191,6 +191,7 @@
     "//ios/chrome/browser/main:test_support",
     "//ios/chrome/browser/ntp",
     "//ios/chrome/browser/sessions",
+    "//ios/chrome/browser/sessions:fake",
     "//ios/chrome/browser/sessions:restoration_agent",
     "//ios/chrome/browser/sessions:test_support",
     "//ios/chrome/browser/signin",
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
index b3ae759d..c439504 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
@@ -28,6 +28,7 @@
 #import "ios/chrome/browser/main/test_browser.h"
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper_delegate.h"
+#import "ios/chrome/browser/sessions/fake_tab_restore_service.h"
 #import "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
 #import "ios/chrome/browser/sessions/session_restoration_browser_agent.h"
 #import "ios/chrome/browser/sessions/test_session_service.h"
@@ -85,109 +86,6 @@
 // Timeout for waiting for the GridConsumer updates.
 constexpr base::TimeDelta kWaitForGridConsumerUpdateTimeout = base::Seconds(1);
 
-// A Fake restore service that just store and returns tabs.
-class FakeTabRestoreService : public sessions::TabRestoreService {
- public:
-  void AddObserver(sessions::TabRestoreServiceObserver* observer) override {
-    NOTREACHED();
-  }
-
-  void RemoveObserver(sessions::TabRestoreServiceObserver* observer) override {
-    NOTREACHED();
-  }
-
-  absl::optional<SessionID> CreateHistoricalTab(sessions::LiveTab* live_tab,
-                                                int index) override {
-    auto tab = std::make_unique<Tab>();
-    int entry_count =
-        live_tab->IsInitialBlankNavigation() ? 0 : live_tab->GetEntryCount();
-    tab->navigations.resize(static_cast<int>(entry_count));
-    for (int i = 0; i < entry_count; ++i) {
-      sessions::SerializedNavigationEntry entry = live_tab->GetEntryAtIndex(i);
-      tab->navigations[i] = entry;
-    }
-    entries_.push_front(std::move(tab));
-    return absl::nullopt;
-  }
-
-  void BrowserClosing(sessions::LiveTabContext* context) override {
-    NOTREACHED();
-  }
-
-  void BrowserClosed(sessions::LiveTabContext* context) override {
-    NOTREACHED();
-  }
-
-  void CreateHistoricalGroup(sessions::LiveTabContext* context,
-                             const tab_groups::TabGroupId& group) override {
-    NOTREACHED();
-  }
-
-  void GroupClosed(const tab_groups::TabGroupId& group) override {
-    NOTREACHED();
-  }
-
-  void GroupCloseStopped(const tab_groups::TabGroupId& group) override {
-    NOTREACHED();
-  }
-
-  void ClearEntries() override { NOTREACHED(); }
-
-  void DeleteNavigationEntries(const DeletionPredicate& predicate) override {
-    NOTREACHED();
-  }
-
-  const Entries& entries() const override { return entries_; }
-
-  std::vector<sessions::LiveTab*> RestoreMostRecentEntry(
-      sessions::LiveTabContext* context) override {
-    NOTREACHED();
-    return std::vector<sessions::LiveTab*>();
-  }
-
-  void RemoveTabEntryById(SessionID session_id) override {
-    Entries::iterator it = GetEntryIteratorById(session_id);
-    if (it == entries_.end()) {
-      return;
-    }
-    entries_.erase(it);
-  }
-
-  std::vector<sessions::LiveTab*> RestoreEntryById(
-      sessions::LiveTabContext* context,
-      SessionID session_id,
-      WindowOpenDisposition disposition) override {
-    NOTREACHED();
-    return std::vector<sessions::LiveTab*>();
-  }
-
-  void LoadTabsFromLastSession() override { NOTREACHED(); }
-
-  bool IsLoaded() const override {
-    NOTREACHED();
-    return false;
-  }
-
-  void DeleteLastSession() override { NOTREACHED(); }
-
-  bool IsRestoring() const override {
-    NOTREACHED();
-    return false;
-  }
-
- private:
-  // Returns an iterator to the entry with id `session_id`.
-  Entries::iterator GetEntryIteratorById(SessionID session_id) {
-    for (auto i = entries_.begin(); i != entries_.end(); ++i) {
-      if ((*i)->id == session_id) {
-        return i;
-      }
-    }
-    return entries_.end();
-  }
-  Entries entries_;
-};
-
 std::unique_ptr<KeyedService> BuildFakeTabRestoreService(
     web::BrowserState* browser_state) {
   return std::make_unique<FakeTabRestoreService>();
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
index faca71c7..0df272d 100644
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -907,7 +907,12 @@
 // Enable hardware AV1 decoder on ChromeOS.
 BASE_FEATURE(kChromeOSHWAV1Decoder,
              "ChromeOSHWAV1Decoder",
-             base::FEATURE_ENABLED_BY_DEFAULT);
+#if defined(ARCH_CPU_X86_FAMILY)
+             base::FEATURE_ENABLED_BY_DEFAULT
+#else
+             base::FEATURE_DISABLED_BY_DEFAULT
+#endif  // defined(ARCH_CPU_X86_FAMILY)
+);
 
 // Enable Variable Bitrate encoding with hardware accelerated encoders on
 // ChromeOS.
@@ -1179,11 +1184,6 @@
              "MediaPowerExperiment",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-// Enable WebRTC actions for the Media Session API.
-BASE_FEATURE(kMediaSessionWebRTC,
-             "MediaSessionWebRTC",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 // Enables flash to be ducked by audio focus. This is enabled on Chrome OS which
 // has audio focus enabled.
 BASE_FEATURE(kAudioFocusDuckFlash,
diff --git a/media/base/media_switches.h b/media/base/media_switches.h
index a2ec91e..ac95d984 100644
--- a/media/base/media_switches.h
+++ b/media/base/media_switches.h
@@ -183,7 +183,6 @@
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kMediaLearningSmoothnessExperiment);
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kMediaOptimizer);
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kMediaPowerExperiment);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kMediaSessionWebRTC);
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kMemoryPressureBasedSourceBufferGC);
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kMultiPlaneVideoCaptureSharedImages);
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kOpenscreenCastStreamingSession);
diff --git a/media/capture/video/mac/video_capture_device_avfoundation_mac_unittest.mm b/media/capture/video/mac/video_capture_device_avfoundation_mac_unittest.mm
index aeac926f..b7eb159 100644
--- a/media/capture/video/mac/video_capture_device_avfoundation_mac_unittest.mm
+++ b/media/capture/video/mac/video_capture_device_avfoundation_mac_unittest.mm
@@ -28,8 +28,9 @@
 
 namespace media {
 
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
 TEST(VideoCaptureDeviceAVFoundationMacTest,
-     OutputsNv12WithoutScalingByDefault) {
+     DISABLED_OutputsNv12WithoutScalingByDefault) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(kInCapturerScaling);
 
@@ -74,8 +75,9 @@
   }));
 }
 
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
 TEST(VideoCaptureDeviceAVFoundationMacTest,
-     SpecifiedScalingIsIgnoredWhenInCapturerScalingIsNotEnabled) {
+     DISABLED_SpecifiedScalingIsIgnoredWhenInCapturerScalingIsNotEnabled) {
   base::test::ScopedFeatureList scoped_feature_list;
   // By default, kInCapturerScaling is false.
   EXPECT_FALSE(base::FeatureList::IsEnabled(kInCapturerScaling));
@@ -125,7 +127,9 @@
   }));
 }
 
-TEST(VideoCaptureDeviceAVFoundationMacTest, SpecifiedScalingOutputsNv12) {
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
+TEST(VideoCaptureDeviceAVFoundationMacTest,
+     DISABLED_SpecifiedScalingOutputsNv12) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(kInCapturerScaling);
 
@@ -179,8 +183,9 @@
   }));
 }
 
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
 TEST(VideoCaptureDeviceAVFoundationMacTest,
-     SpecifiedScalingCanChangeDuringCapture) {
+     DISABLED_SpecifiedScalingCanChangeDuringCapture) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(kInCapturerScaling);
 
@@ -249,8 +254,9 @@
   }));
 }
 
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
 TEST(VideoCaptureDeviceAVFoundationMacTest,
-     SpecifiedScalingUsesGoodSizesButNotBadSizes) {
+     DISABLED_SpecifiedScalingUsesGoodSizesButNotBadSizes) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(kInCapturerScaling);
 
@@ -339,9 +345,11 @@
 
 // This is approximately the same test as the one above except it does not rely
 // on having a camera. Instead we mock-invoke processPixelBufferNV12IOSurface
-// from the test as-if a camera had produced a frame.
+
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.// from the
+// test as-if a camera had produced a frame.
 TEST(VideoCaptureDeviceAVFoundationMacTest,
-     ProcessPixelBufferNV12IOSurfaceWithGoodAndBadScaling) {
+     DISABLED_ProcessPixelBufferNV12IOSurfaceWithGoodAndBadScaling) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(kInCapturerScaling);
 
@@ -411,7 +419,8 @@
   }));
 }
 
-TEST(VideoCaptureDeviceAVFoundationMacTest, TakePhoto) {
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
+TEST(VideoCaptureDeviceAVFoundationMacTest, DISABLED_TakePhoto) {
   RunTestCase(base::BindOnce([] {
     NSString* deviceId = GetFirstDeviceId();
     if (!deviceId) {
@@ -438,7 +447,9 @@
   }));
 }
 
-TEST(VideoCaptureDeviceAVFoundationMacTest, StopCaptureWhileTakingPhoto) {
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
+TEST(VideoCaptureDeviceAVFoundationMacTest,
+     DISABLED_StopCaptureWhileTakingPhoto) {
   RunTestCase(base::BindOnce([] {
     NSString* deviceId = GetFirstDeviceId();
     if (!deviceId) {
@@ -469,7 +480,9 @@
   }));
 }
 
-TEST(VideoCaptureDeviceAVFoundationMacTest, MultiplePendingTakePhotos) {
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
+TEST(VideoCaptureDeviceAVFoundationMacTest,
+     DISABLED_MultiplePendingTakePhotos) {
   RunTestCase(base::BindOnce([] {
     NSString* deviceId = GetFirstDeviceId();
     if (!deviceId) {
@@ -504,8 +517,9 @@
   }));
 }
 
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
 TEST(VideoCaptureDeviceAVFoundationMacTest,
-     StopCaptureWhileMultiplePendingTakePhotos) {
+     DISABLED_StopCaptureWhileMultiplePendingTakePhotos) {
   RunTestCase(base::BindOnce([] {
     NSString* deviceId = GetFirstDeviceId();
     if (!deviceId) {
@@ -544,8 +558,9 @@
   }));
 }
 
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
 TEST(VideoCaptureDeviceAVFoundationMacTest,
-     StopStillImageOutputWhenNoLongerTakingPhotos) {
+     DISABLED_StopStillImageOutputWhenNoLongerTakingPhotos) {
   RunTestCase(base::BindOnce([] {
     NSString* deviceId = GetFirstDeviceId();
     if (!deviceId) {
@@ -580,9 +595,10 @@
   }));
 }
 
-// This test ensures we don't crash even if we leave operations pending.
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.// This test
+// ensures we don't crash even if we leave operations pending.
 TEST(VideoCaptureDeviceAVFoundationMacTest,
-     TakePhotoAndShutDownWithoutWaiting) {
+     DISABLED_TakePhotoAndShutDownWithoutWaiting) {
   RunTestCase(base::BindOnce([] {
     NSString* deviceId = GetFirstDeviceId();
     if (!deviceId) {
@@ -605,7 +621,9 @@
   }));
 }
 
-TEST(VideoCaptureDeviceAVFoundationMacTest, ForwardsOddPixelBufferResolution) {
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
+TEST(VideoCaptureDeviceAVFoundationMacTest,
+     DISABLED_ForwardsOddPixelBufferResolution) {
   // See crbug/1168112.
   RunTestCase(base::BindOnce([] {
     testing::NiceMock<MockVideoCaptureDeviceAVFoundationFrameReceiver>
@@ -630,7 +648,9 @@
   }));
 }
 
-TEST(VideoCaptureDeviceAVFoundationMacTest, FrameRateFloatInaccuracyIsHandled) {
+// TODO(https://crbug.com/1383901): Fix and re-enable these tests.
+TEST(VideoCaptureDeviceAVFoundationMacTest,
+     DISABLED_FrameRateFloatInaccuracyIsHandled) {
   // See crbug/1299812.
   RunTestCase(base::BindOnce([] {
     double max_frame_rate = 30.000030;
diff --git a/media/gpu/test/video_player/video_player_test_environment.cc b/media/gpu/test/video_player/video_player_test_environment.cc
index 00d4acf8..7348fb6 100644
--- a/media/gpu/test/video_player/video_player_test_environment.cc
+++ b/media/gpu/test/video_player/video_player_test_environment.cc
@@ -55,6 +55,10 @@
   combined_disabled_features.push_back(
       media::kVaapiEnforceVideoMinMaxResolution);
 #endif
+#if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
+  // TODO(b/255626192): remove once enabled by default.
+  combined_enabled_features.push_back(media::kChromeOSHWAV1Decoder);
+#endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
 
   return new VideoPlayerTestEnvironment(
       std::move(video), validator_type, implementation, linear_output,
diff --git a/media/gpu/v4l2/test/h264_decoder.cc b/media/gpu/v4l2/test/h264_decoder.cc
index 27764ad..419c850 100644
--- a/media/gpu/v4l2/test/h264_decoder.cc
+++ b/media/gpu/v4l2/test/h264_decoder.cc
@@ -210,6 +210,38 @@
   return v4l2_decode_param;
 }
 
+// Determines whether the current slice is part of the same
+// frame as the previous slice.
+// From h264 specification 7.4.1.2.4
+bool IsNewFrame(H264SliceHeader* prev_slice,
+                H264SliceHeader* curr_slice,
+                const H264SPS* sps) {
+  bool nalu_size_error = prev_slice->nalu_size < 1;
+
+  bool slice_changed =
+      curr_slice->frame_num != prev_slice->frame_num ||
+      curr_slice->pic_parameter_set_id != prev_slice->pic_parameter_set_id ||
+      curr_slice->nal_ref_idc != prev_slice->nal_ref_idc ||
+      curr_slice->idr_pic_flag != prev_slice->idr_pic_flag ||
+      curr_slice->idr_pic_id != prev_slice->idr_pic_id;
+
+  bool slice_pic_order_changed = false;
+
+  if (sps->pic_order_cnt_type == 0) {
+    slice_pic_order_changed =
+        curr_slice->pic_order_cnt_lsb != prev_slice->pic_order_cnt_lsb ||
+        curr_slice->delta_pic_order_cnt_bottom !=
+            prev_slice->delta_pic_order_cnt_bottom;
+
+  } else if (sps->pic_order_cnt_type == 1) {
+    slice_pic_order_changed =
+        curr_slice->delta_pic_order_cnt0 != prev_slice->delta_pic_order_cnt0 ||
+        curr_slice->delta_pic_order_cnt1 != prev_slice->delta_pic_order_cnt1;
+  }
+
+  return (nalu_size_error || slice_changed || slice_pic_order_changed);
+}
+
 }  // namespace
 
 VideoDecoder::Result H264Decoder::StartNewFrame(const int sps_id,
@@ -243,31 +275,67 @@
   return VideoDecoder::kOk;
 }
 
-H264Parser::Result H264Decoder::ProcessNextFrame(H264SliceHeader* curr_slice) {
-  H264NALU nalu;
+// Processes NALU's until reaching the end of the current frame.  To
+// know the end of the current frame it may be necessary to start parsing
+// the next frame.  If this occurs the NALU that was parsed needs to be
+// held over until the next frame.  This is done in |pending_nalu_|
+// Not every frame has a SPS/PPS associated with it.  The SPS/PPS must
+// occur on an IDR frame.  Store the last seen slice header in
+// |pending_slice_header_| so it will be available for the next frame.
+H264Parser::Result H264Decoder::ProcessNextFrame(
+    std::unique_ptr<H264SliceHeader>* resulting_slice_header) {
   bool reached_end_of_frame = false;
+  std::unique_ptr<H264SliceHeader> curr_slice_header =
+      std::move(pending_slice_header_);
+  std::unique_ptr<H264NALU> nalu = std::move(pending_nalu_);
   while (!reached_end_of_frame) {
-    if (parser_->AdvanceToNextNALU(&nalu) == H264Parser::kEOStream)
-      return H264Parser::kEOStream;
+    if (!nalu) {
+      nalu = std::make_unique<H264NALU>();
+      if (parser_->AdvanceToNextNALU(nalu.get()) == H264Parser::kEOStream)
+        break;
+    }
 
-    VLOG(4) << "NALU ID: " << nalu.nal_unit_type;
+    switch (nalu->nal_unit_type) {
+      case H264NALU::kIDRSlice:
+      case H264NALU::kNonIDRSlice: {
+        if (!curr_slice_header) {
+          curr_slice_header = std::make_unique<H264SliceHeader>();
+          if (parser_->ParseSliceHeader(*nalu, curr_slice_header.get()) !=
+              H264Parser::kOk)
+            return H264Parser::kInvalidStream;
+        }
 
-    switch (nalu.nal_unit_type) {
-      case H264NALU::kNonIDRSlice:
-      case H264NALU::kIDRSlice: {
-        if (parser_->ParseSliceHeader(nalu, curr_slice) != H264Parser::kOk)
-          return H264Parser::kInvalidStream;
+        const int pps_id = curr_slice_header->pic_parameter_set_id;
+        const int sps_id =
+            parser_->GetPPS(curr_slice_header->pic_parameter_set_id)
+                ->seq_parameter_set_id;
 
-        const int pps_id = curr_slice->pic_parameter_set_id;
-        const int sps_id = parser_->GetPPS(curr_slice->pic_parameter_set_id)
-                               ->seq_parameter_set_id;
+        if (!pending_slice_header_) {
+          if (StartNewFrame(sps_id, pps_id) != VideoDecoder::kOk)
+            return H264Parser::kInvalidStream;
 
+          pending_slice_header_ = std::move(curr_slice_header);
+          break;
+        }
+
+        if (IsNewFrame(pending_slice_header_.get(), curr_slice_header.get(),
+                       parser_->GetSPS(sps_id))) {
+          // The parser has read into the next frame.  This is the only
+          // way that the end of the current frame is indicated.  The
+          // parser can not be rewound, so the decoder needs to execute
+          // the end of this frame and save the next frames nalu data.
+          reached_end_of_frame = true;
+          *resulting_slice_header = std::move(pending_slice_header_);
+          pending_slice_header_ = std::move(curr_slice_header);
+          pending_nalu_ = std::move(nalu);
+
+          // |pending_slice_header_| needs to be set after
+          // |resulting_slice_header| which can't be done at the end of the
+          // function, so return here.
+          return H264Parser::kOk;
+        }
         // TODO(bchoobineh): Add additional logic for when
         // there are multiple slices per frame.
-
-        if (StartNewFrame(sps_id, pps_id) != VideoDecoder::kOk)
-          return H264Parser::kInvalidStream;
-
         break;
       }
       case H264NALU::kSPS: {
@@ -275,7 +343,7 @@
         if (parser_->ParseSPS(&sps_id) != H264Parser::kOk)
           return H264Parser::kInvalidStream;
 
-        if (curr_slice->nalu_size > 0)
+        if (pending_slice_header_)
           reached_end_of_frame = true;
         break;
       }
@@ -284,21 +352,20 @@
         if (parser_->ParsePPS(&pps_id) != H264Parser::kOk)
           return H264Parser::kInvalidStream;
 
-        if (curr_slice->nalu_size > 0)
+        if (pending_slice_header_)
           reached_end_of_frame = true;
         break;
       }
-      case H264NALU::kAUD:
-      case H264NALU::kEOSeq:
-      case H264NALU::kEOStream: {
-        break;
-      }
       default: {
+        reached_end_of_frame = true;
         break;
       }
     }
+
+    nalu = nullptr;
   }
 
+  *resulting_slice_header = std::move(pending_slice_header_);
   return H264Parser::kOk;
 }
 
@@ -425,16 +492,16 @@
                                                   std::vector<char>& v_plane,
                                                   gfx::Size& size,
                                                   const int frame_number) {
-  H264SliceHeader slice;
-  if (ProcessNextFrame(&slice) == H264Parser::kInvalidStream) {
+  std::unique_ptr<H264SliceHeader> resulting_slice_header;
+  if (ProcessNextFrame(&resulting_slice_header) != H264Parser::kOk) {
     VLOG(4) << "Frame Processing Failed";
     return VideoDecoder::kError;
   }
 
-  if (slice.nalu_size <= 0)
+  if (!resulting_slice_header)
     return VideoDecoder::kEOStream;
 
-  if (SubmitSlice(slice, frame_number) != VideoDecoder::kOk) {
+  if (SubmitSlice(*resulting_slice_header, frame_number) != VideoDecoder::kOk) {
     VLOG(4) << "Slice Submission Failed";
     return VideoDecoder::kError;
   }
diff --git a/media/gpu/v4l2/test/h264_decoder.h b/media/gpu/v4l2/test/h264_decoder.h
index 5f475de..3b1f424 100644
--- a/media/gpu/v4l2/test/h264_decoder.h
+++ b/media/gpu/v4l2/test/h264_decoder.h
@@ -22,7 +22,7 @@
   static std::unique_ptr<H264Decoder> Create(
       const base::MemoryMappedFile& stream);
 
-  // Parses next frame from IVF stream and decodes the frame. This method will
+  // Parses next frame from IVF stream and decodes the frame.  This method will
   // place the Y, U, and V values into the respective vectors and update the
   // size with the display area size of the decoded frame.
   VideoDecoder::Result DecodeNextFrame(std::vector<char>& y_plane,
@@ -37,20 +37,24 @@
               std::unique_ptr<V4L2Queue> OUTPUT_queue,
               std::unique_ptr<V4L2Queue> CAPTURE_queue);
 
-  // Processes NALU's until reaching the end of the current frame. This method
+  // Processes NALU's until reaching the end of the current frame.  This method
   // will send Ext Ctrls via IOCTL calls to indicate the start of a frame.
-  H264Parser::Result ProcessNextFrame(H264SliceHeader* curr_slice);
+  H264Parser::Result ProcessNextFrame(
+      std::unique_ptr<H264SliceHeader>* resulting_slice_header);
 
   // Sends IOCTL call to device with the frame's SPS, PPS, and Scaling Matrix
   // data which indicates the beginning of a new frame.
   VideoDecoder::Result StartNewFrame(int sps_id, int pps_id);
 
   // Transmits each H264 Slice associated with the current frame to the
-  // device. Additionally sends Decode Parameters and Decode Mode
+  // device.  Additionally sends Decode Parameters and Decode Mode
   // via IOCTL Ext Ctrls.
   VideoDecoder::Result SubmitSlice(H264SliceHeader curr_slice, int frame_num);
 
   const std::unique_ptr<H264Parser> parser_;
+
+  std::unique_ptr<H264NALU> pending_nalu_;
+  std::unique_ptr<H264SliceHeader> pending_slice_header_;
 };
 
 }  // namespace v4l2_test
diff --git a/media/gpu/v4l2/v4l2_device.cc b/media/gpu/v4l2/v4l2_device.cc
index e6d1b1927..3a95b3c 100644
--- a/media/gpu/v4l2/v4l2_device.cc
+++ b/media/gpu/v4l2/v4l2_device.cc
@@ -2148,6 +2148,13 @@
         pixelformats + num_formats)
       continue;
 
+    // Skip AV1 decoder profiles if kChromeOSHWAV1Decoder is disabled.
+    if ((pixelformat == V4L2_PIX_FMT_AV1 ||
+         pixelformat == V4L2_PIX_FMT_AV1_FRAME) &&
+        !base::FeatureList::IsEnabled(kChromeOSHWAV1Decoder)) {
+      continue;
+    }
+
     VideoDecodeAccelerator::SupportedProfile profile;
     GetSupportedResolution(pixelformat, &profile.min_resolution,
                            &profile.max_resolution);
diff --git a/media/gpu/v4l2/v4l2_video_decoder.cc b/media/gpu/v4l2/v4l2_video_decoder.cc
index 2963f8d..fef4b144 100644
--- a/media/gpu/v4l2/v4l2_video_decoder.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder.cc
@@ -240,6 +240,14 @@
             .AddCause(V4L2Status(V4L2Status::Codes::kNoProfile)));
     return;
   }
+  if (VideoCodecProfileToVideoCodec(profile_) == VideoCodec::kAV1 &&
+      !base::FeatureList::IsEnabled(kChromeOSHWAV1Decoder)) {
+    VLOGF(1) << "AV1 hardware video decoding is disabled";
+    std::move(init_cb).Run(
+        DecoderStatus(DecoderStatus::Codes::kNotInitialized)
+            .AddCause(V4L2Status(V4L2Status::Codes::kNoProfile)));
+    return;
+  }
 
   // Call init_cb
   output_cb_ = std::move(output_cb);
@@ -923,15 +931,17 @@
       break;
   }
 
+  // |StopStreamV4L2Queue()| can call |SetState()|.  Update |state_|
+  // before calling so that calls to |SetState()| from
+  // |StopStreamV4L2Queue()| return quickly.
+  state_ = new_state;
+
   if (new_state == State::kError) {
     VLOGF(1) << "Error occurred, stopping queues.";
     StopStreamV4L2Queue(true);
     if (backend_)
       backend_->ClearPendingRequests(DecoderStatus::Codes::kFailed);
-    return;
   }
-  state_ = new_state;
-  return;
 }
 
 void V4L2VideoDecoder::OnBackendError() {
diff --git a/media/webrtc/audio_delay_stats_reporter.cc b/media/webrtc/audio_delay_stats_reporter.cc
index 1a2571a3..901bca2 100644
--- a/media/webrtc/audio_delay_stats_reporter.cc
+++ b/media/webrtc/audio_delay_stats_reporter.cc
@@ -41,15 +41,12 @@
   capture_delays_ms_.reserve(variance_window_size_);
   render_delays_ms_.reserve(variance_window_size_);
   total_delays_ms_.reserve(variance_window_size_);
-  DETACH_FROM_THREAD(thread_checker_);
 }
 
 AudioDelayStatsReporter::~AudioDelayStatsReporter() {}
 
 void AudioDelayStatsReporter::ReportDelay(base::TimeDelta capture_delay,
                                           base::TimeDelta render_delay) {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-
   const base::TimeDelta total_delay = capture_delay + render_delay;
 
   UMA_HISTOGRAM_CUSTOM_TIMES("Media.Audio.Processing.CaptureDelayMs",
diff --git a/media/webrtc/audio_delay_stats_reporter.h b/media/webrtc/audio_delay_stats_reporter.h
index 3107bd7..71ce639c 100644
--- a/media/webrtc/audio_delay_stats_reporter.h
+++ b/media/webrtc/audio_delay_stats_reporter.h
@@ -8,13 +8,12 @@
 #include <vector>
 
 #include "base/component_export.h"
-#include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 
 namespace media {
 
 // Reports UMA stats for audio delays. The class may be created, deleted and
-// called on different threads, though all calls must be on the same thread. The
+// called on different threads, but all calls must happen sequentially. The
 // user must ensure that no calls are made after destruction.
 class COMPONENT_EXPORT(MEDIA_WEBRTC) AudioDelayStatsReporter {
  public:
@@ -42,9 +41,6 @@
   std::vector<int> capture_delays_ms_;
   std::vector<int> render_delays_ms_;
   std::vector<int> total_delays_ms_;
-
-  // Ensures that all function calls are done on the same thread.
-  THREAD_CHECKER(thread_checker_);
 };
 
 }  // namespace media
diff --git a/mojo/core/channel_mac.cc b/mojo/core/channel_mac.cc
index dc02c48..adbcdc6 100644
--- a/mojo/core/channel_mac.cc
+++ b/mojo/core/channel_mac.cc
@@ -25,6 +25,7 @@
 #include "base/mac/scoped_mach_vm.h"
 #include "base/message_loop/message_pump_for_io.h"
 #include "base/task/current_thread.h"
+#include "base/thread_annotations.h"
 #include "base/trace_event/typed_macros.h"
 
 extern "C" {
@@ -182,7 +183,10 @@
         vm_allocate(mach_task_self(), &address, size,
                     VM_MAKE_TAG(VM_MEMORY_MACH_MSG) | VM_FLAGS_ANYWHERE);
     MACH_CHECK(kr == KERN_SUCCESS, kr) << "vm_allocate";
-    send_buffer_.reset(address, size);
+    {
+      base::AutoLock lock(write_lock_);
+      send_buffer_.reset(address, size);
+    }
 
     kr = vm_allocate(mach_task_self(), &address, size,
                      VM_MAKE_TAG(VM_MEMORY_MACH_MSG) | VM_FLAGS_ANYWHERE);
@@ -222,10 +226,13 @@
 
     watch_controller_.StopWatchingMachPort();
 
-    send_buffer_.reset();
+    {
+      base::AutoLock lock(write_lock_);
+      send_buffer_.reset();
+      reject_writes_ = true;
+    }
     receive_buffer_.reset();
     incoming_handles_.clear();
-    reject_writes_ = true;
 
     if (leak_handles_) {
       std::ignore = receive_port_.release();
@@ -331,7 +338,7 @@
     SendPendingMessagesLocked();
   }
 
-  void SendPendingMessagesLocked() {
+  void SendPendingMessagesLocked() EXCLUSIVE_LOCKS_REQUIRED(write_lock_) {
     // If a previous send failed due to the receiver's kernel message queue
     // being full, attempt to send that failed message first.
     if (send_buffer_contains_message_ && !reject_writes_) {
@@ -358,7 +365,8 @@
     }
   }
 
-  bool SendMessageLocked(MessagePtr message) {
+  bool SendMessageLocked(MessagePtr message)
+      EXCLUSIVE_LOCKS_REQUIRED(write_lock_) {
     DCHECK(!send_buffer_contains_message_);
     base::BufferIterator<char> buffer(
         reinterpret_cast<char*>(send_buffer_.address()), send_buffer_.size());
@@ -453,7 +461,8 @@
     return MachMessageSendLocked(header);
   }
 
-  bool MachMessageSendLocked(mach_msg_header_t* header) {
+  bool MachMessageSendLocked(mach_msg_header_t* header)
+      EXCLUSIVE_LOCKS_REQUIRED(write_lock_) {
     kern_return_t kr = mach_msg(header, MACH_SEND_MSG | MACH_SEND_TIMEOUT,
                                 header->msgh_size, 0, MACH_PORT_NULL,
                                 /*timeout=*/0, MACH_PORT_NULL);
@@ -675,7 +684,7 @@
   }
 
   // Marks the channel as unaccepting of new messages and shuts it down.
-  void OnWriteErrorLocked(Error error) {
+  void OnWriteErrorLocked(Error error) EXCLUSIVE_LOCKS_REQUIRED(write_lock_) {
     reject_writes_ = true;
     io_task_runner_->PostTask(
         FROM_HERE, base::BindOnce(&ChannelMac::OnError, this, error));
@@ -718,17 +727,17 @@
   base::Lock write_lock_;
   // Whether writes should be rejected due to an internal error or channel
   // shutdown.
-  bool reject_writes_ = false;
+  bool reject_writes_ GUARDED_BY(write_lock_) = false;
   // IO buffer for sending Mach messages.
-  base::mac::ScopedMachVM send_buffer_;
+  base::mac::ScopedMachVM send_buffer_ GUARDED_BY(write_lock_);
   // If a message timed out during send in MachMessageSendLocked(), this will
   // be true to indicate that |send_buffer_| contains a message that must
   // be sent. If this is true, then other calls to Write() queue messages onto
   // |pending_messages_|.
-  bool send_buffer_contains_message_ = false;
+  bool send_buffer_contains_message_ GUARDED_BY(write_lock_) = false;
   // When |handshake_done_| is false or |send_buffer_contains_message_| is true,
   // calls to Write() will enqueue messages here.
-  base::circular_deque<MessagePtr> pending_messages_;
+  base::circular_deque<MessagePtr> pending_messages_ GUARDED_BY(write_lock_);
 };
 
 }  // namespace
diff --git a/mojo/core/channel_unittest.cc b/mojo/core/channel_unittest.cc
index 4a7e0daa..4046528 100644
--- a/mojo/core/channel_unittest.cc
+++ b/mojo/core/channel_unittest.cc
@@ -714,6 +714,69 @@
 }
 #endif  // BUILDFLAG(IS_MAC)
 
+TEST(ChannelTest, ShutDownStress) {
+  base::test::SingleThreadTaskEnvironment task_environment(
+      base::test::TaskEnvironment::MainThreadType::IO);
+
+  // Create a second IO thread for Channel B.
+  base::Thread peer_thread("channel_b_io");
+  peer_thread.StartWithOptions(
+      base::Thread::Options(base::MessagePumpType::IO, 0));
+
+  // Create two channels, A and B, which run on different threads.
+  PlatformChannel platform_channel;
+
+  CallbackChannelDelegate delegate_a;
+  scoped_refptr<Channel> channel_a = Channel::Create(
+      &delegate_a, ConnectionParams(platform_channel.TakeLocalEndpoint()),
+      Channel::HandlePolicy::kRejectHandles,
+      task_environment.GetMainThreadTaskRunner());
+  channel_a->Start();
+
+  scoped_refptr<Channel> channel_b = Channel::Create(
+      nullptr, ConnectionParams(platform_channel.TakeRemoteEndpoint()),
+      Channel::HandlePolicy::kRejectHandles, peer_thread.task_runner());
+  channel_b->Start();
+
+  base::WaitableEvent go_event;
+
+  // Warm up the channel to ensure that A and B are connected, then quit.
+  channel_b->Write(Channel::Message::CreateMessage(0, 0));
+  {
+    base::RunLoop run_loop;
+    delegate_a.set_on_message(run_loop.QuitClosure());
+    run_loop.Run();
+  }
+
+  // Block the peer thread while some tasks are queued up from the test main
+  // thread.
+  peer_thread.task_runner()->PostTask(
+      FROM_HERE,
+      base::BindOnce(&base::WaitableEvent::Wait, base::Unretained(&go_event)));
+
+  // First, write some messages for Channel B.
+  for (int i = 0; i < 500; ++i) {
+    channel_b->Write(Channel::Message::CreateMessage(0, 0));
+  }
+
+  // Then shut down channel B.
+  channel_b->ShutDown();
+
+  // Un-block the peer thread.
+  go_event.Signal();
+
+  // And then flood the channel with messages. This will suss out data races
+  // during Channel B's shutdown, since Writes can happen across threads
+  // without a PostTask.
+  for (int i = 0; i < 1000; ++i) {
+    channel_b->Write(Channel::Message::CreateMessage(0, 0));
+  }
+
+  // Explicitly join the thread to wait for pending tasks, which may reference
+  // stack variables, to complete.
+  peer_thread.Stop();
+}
+
 }  // namespace
 }  // namespace core
 }  // namespace mojo
diff --git a/mojo/core/embedder/features.cc b/mojo/core/embedder/features.cc
index ecb53afbd..6037f9c 100644
--- a/mojo/core/embedder/features.cc
+++ b/mojo/core/embedder/features.cc
@@ -33,7 +33,7 @@
 
 BASE_FEATURE(kMojoAvoidRandomPipeId,
              "MojoAvoidRandomPipeId",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 BASE_FEATURE(kMojoIpcz, "MojoIpcz", base::FEATURE_DISABLED_BY_DEFAULT);
 
diff --git a/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc b/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
index bd37d24..a330769 100644
--- a/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
+++ b/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc
@@ -913,6 +913,9 @@
                   }
                 }
 
+                info->set_payload_size(message->payload_num_bytes());
+                info->set_data_num_bytes(message->data_num_bytes());
+
                 static const uint8_t* flow_enabled =
                     TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED("toplevel.flow");
                 if (!*flow_enabled)
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc
index 58a88da..17503fd 100644
--- a/net/cert/cert_verify_proc_unittest.cc
+++ b/net/cert/cert_verify_proc_unittest.cc
@@ -492,6 +492,16 @@
     return false;
   }
 
+  bool VerifyProcTypeIsMacAtMostOS12() const {
+#if BUILDFLAG(IS_MAC)
+    if (verify_proc_type() == CERT_VERIFY_PROC_MAC &&
+        base::mac::IsAtMostOS12()) {
+      return true;
+    }
+#endif
+    return false;
+  }
+
   bool VerifyProcTypeIsIOSAtMostOS14() const {
 #if BUILDFLAG(IS_IOS)
     if (verify_proc_type() == CERT_VERIFY_PROC_IOS &&
@@ -502,6 +512,16 @@
     return false;
   }
 
+  bool VerifyProcTypeIsIOSAtMostOS15() const {
+#if BUILDFLAG(IS_IOS)
+    if (verify_proc_type() == CERT_VERIFY_PROC_IOS &&
+        !base::ios::IsRunningOnIOS16OrLater()) {
+      return true;
+    }
+#endif
+    return false;
+  }
+
   CertVerifyProc* verify_proc() const { return verify_proc_.get(); }
 
  private:
@@ -4487,6 +4507,43 @@
   EXPECT_THAT(Verify(), IsOk());
 }
 
+TEST_P(CertVerifyProcConstraintsTest, ExtendedKeyUsageNoServerAuthRoot) {
+  chain_[3]->SetExtendedKeyUsages({der::Input(kCodeSigning)});
+
+  if (VerifyProcTypeIsBuiltin() ||
+      verify_proc_type() == CERT_VERIFY_PROC_ANDROID ||
+      verify_proc_type() == CERT_VERIFY_PROC_MAC ||
+      verify_proc_type() == CERT_VERIFY_PROC_IOS) {
+    EXPECT_THAT(Verify(), IsOk());
+  } else {
+    EXPECT_THAT(Verify(), IsError(ERR_CERT_INVALID));
+  }
+}
+
+TEST_P(CertVerifyProcConstraintsTest, ExtendedKeyUsageServerAuthRoot) {
+  chain_[3]->SetExtendedKeyUsages({der::Input(kServerAuth)});
+
+  EXPECT_THAT(Verify(), IsOk());
+}
+
+TEST_P(CertVerifyProcConstraintsTest,
+       ExtendedKeyUsageNoServerAuthIntermediate) {
+  chain_[2]->SetExtendedKeyUsages({der::Input(kCodeSigning)});
+
+  if (verify_proc_type() == CERT_VERIFY_PROC_ANDROID ||
+      VerifyProcTypeIsMacAtMostOS12() || VerifyProcTypeIsIOSAtMostOS15()) {
+    EXPECT_THAT(Verify(), IsOk());
+  } else {
+    EXPECT_THAT(Verify(), IsError(ERR_CERT_INVALID));
+  }
+}
+
+TEST_P(CertVerifyProcConstraintsTest, ExtendedKeyUsageServerAuthIntermediate) {
+  chain_[2]->SetExtendedKeyUsages({der::Input(kServerAuth)});
+
+  EXPECT_THAT(Verify(), IsOk());
+}
+
 TEST(CertVerifyProcTest, RejectsPublicSHA1Leaves) {
   scoped_refptr<X509Certificate> cert(
       ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"));
diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc
index 92174b6..2fff8ce 100644
--- a/net/cookies/canonical_cookie.cc
+++ b/net/cookies/canonical_cookie.cc
@@ -1174,6 +1174,24 @@
     UMA_HISTOGRAM_ENUMERATION(
         "Cookie.CrossSiteRedirectDowngradeChangesInclusion2.Read",
         CookieSameSiteToCookieSameSiteForMetrics(SameSite()));
+
+    using HttpMethod =
+        CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod;
+
+    HttpMethod http_method_enum = options.same_site_cookie_context()
+                                      .GetMetadataForCurrentSchemefulMode()
+                                      .http_method_bug_1221316;
+
+    DCHECK(http_method_enum != HttpMethod::kUnset);
+
+    UMA_HISTOGRAM_ENUMERATION(
+        "Cookie.CrossSiteRedirectDowngradeChangesInclusionHttpMethod",
+        http_method_enum);
+
+    base::TimeDelta cookie_age = base::Time::Now() - creation_date_;
+    UMA_HISTOGRAM_EXACT_LINEAR(
+        "Cookie.CrossSiteRedirectDowngradeChangesInclusionAge",
+        cookie_age.InMinutes(), 30);
   }
 
   return CookieAccessResult(effective_same_site, status,
diff --git a/net/cookies/canonical_cookie_unittest.cc b/net/cookies/canonical_cookie_unittest.cc
index f15ceab..0215533 100644
--- a/net/cookies/canonical_cookie_unittest.cc
+++ b/net/cookies/canonical_cookie_unittest.cc
@@ -2185,6 +2185,13 @@
   strict_cross_downgrade_metadata.cross_site_redirect_downgrade =
       Context::ContextMetadata::ContextDowngradeType::kStrictToCross;
 
+  // Because there are downgrades we need to set the HTTP method as well, since
+  // some metrics code expects that. The actual method doesn't matter here.
+  strict_lax_downgrade_metadata.http_method_bug_1221316 =
+      Context::ContextMetadata::HttpMethod::kGet;
+  strict_cross_downgrade_metadata.http_method_bug_1221316 =
+      Context::ContextMetadata::HttpMethod::kGet;
+
   GURL url("https://www.example.test/test");
   GURL insecure_url("http://www.example.test/test");
 
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc
index 87c6a18..ca14c252 100644
--- a/net/cookies/cookie_monster.cc
+++ b/net/cookies/cookie_monster.cc
@@ -2281,9 +2281,6 @@
       RecordPeriodicFirstPartySetsStats(maybe_sets.value());
   }
 
-  // Can be up to kMaxDomainPurgedKeys.
-  UMA_HISTOGRAM_COUNTS_100("Cookie.NumDomainPurgedKeys",
-                           domain_purged_keys_.size());
   // Can be up to kMaxCookies.
   UMA_HISTOGRAM_COUNTS_10000("Cookie.NumKeys", num_keys_);
 
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc
index dc774b5..b6bf4f6 100644
--- a/net/cookies/cookie_monster_unittest.cc
+++ b/net/cookies/cookie_monster_unittest.cc
@@ -385,7 +385,6 @@
   }
 
   void TestHostGarbageCollectHelper() {
-    const char kHistogramName[] = "Cookie.NumDomainPurgedKeys";
     int domain_max_cookies = CookieMonster::kDomainMaxCookies;
     int domain_purge_cookies = CookieMonster::kDomainPurgeCookies;
     const int more_than_enough_cookies = domain_max_cookies + 10;
@@ -401,10 +400,6 @@
         // Count the number of cookies.
         EXPECT_LE(base::ranges::count(cookies, '='), domain_max_cookies);
       }
-      base::HistogramTester histogram_tester;
-      EXPECT_TRUE(cm->DoRecordPeriodicStatsForTesting());
-      histogram_tester.ExpectUniqueSample(kHistogramName, 1 /* sample */,
-                                          1 /* count */);
     }
 
     // Add a bunch of cookies on multiple hosts within a single eTLD.
@@ -438,11 +433,6 @@
                            base::ranges::count(cookies_specific, '='));
       EXPECT_GE(total_cookies, domain_max_cookies - domain_purge_cookies);
       EXPECT_LE(total_cookies, domain_max_cookies);
-
-      base::HistogramTester histogram_tester;
-      EXPECT_TRUE(cm->DoRecordPeriodicStatsForTesting());
-      histogram_tester.ExpectUniqueSample(kHistogramName, 1 /* sample */,
-                                          1 /* count */);
     }
 
     // Test histogram for the number of registrable domains affected by domain
@@ -461,10 +451,6 @@
           // Count the number of cookies.
           EXPECT_LE(base::ranges::count(cookies, '='), domain_max_cookies);
         }
-        base::HistogramTester histogram_tester;
-        EXPECT_TRUE(cm->DoRecordPeriodicStatsForTesting());
-        histogram_tester.ExpectUniqueSample(
-            kHistogramName, domain_num + 1 /* sample */, 1 /* count */);
       }
 
       // Triggering eviction again for a previously affected registrable domain
@@ -479,10 +465,6 @@
         // Count the number of cookies.
         EXPECT_LE(base::ranges::count(cookies, '='), domain_max_cookies);
       }
-      base::HistogramTester histogram_tester;
-      EXPECT_TRUE(cm->DoRecordPeriodicStatsForTesting());
-      histogram_tester.ExpectUniqueSample(kHistogramName, 3 /* sample */,
-                                          1 /* count */);
     }
   }
 
diff --git a/net/cookies/cookie_options.h b/net/cookies/cookie_options.h
index 3cd66df..fc7cdda 100644
--- a/net/cookies/cookie_options.h
+++ b/net/cookies/cookie_options.h
@@ -8,6 +8,7 @@
 #define NET_COOKIES_COOKIE_OPTIONS_H_
 
 #include <ostream>
+#include <string>
 
 #include "net/base/net_export.h"
 #include "net/cookies/cookie_constants.h"
@@ -88,6 +89,26 @@
         kMaxValue = kAllSameSiteRedirect
       };
 
+      // These values are persisted to logs. Entries should not be renumbered
+      // and numeric values should never be reused.
+      enum class HttpMethod {
+        // kUnset indicates this enum wasn't applicable in the context.
+        kUnset = -1,
+        // kUnknown indicates we were unable to convert the method string to
+        // this enum.
+        kUnknown = 0,
+        kGet = 1,
+        kHead = 2,
+        kPost = 3,
+        KPut = 4,
+        kDelete = 5,
+        kConnect = 6,
+        kOptions = 7,
+        kTrace = 8,
+        kPatch = 9,
+        kMaxValue = kPatch
+      };
+
       // Records the type of any context downgrade due to a cross-site redirect,
       // i.e. whether the spec change in
       // https://github.com/httpwg/http-extensions/pull/1348 changed the result
@@ -102,6 +123,15 @@
 
       ContextRedirectTypeBug1221316 redirect_type_bug_1221316 =
           ContextRedirectTypeBug1221316::kUnset;
+
+      // Records the HTTP method of requests that result in a cross-site
+      // redirect downgrade. May be kUnset if there wasn't a downgrade or if the
+      // cookie access wasn't due to a request.
+      //
+      // Note that this field is always set when there was a context
+      // downgrade but the associated histrogram is only recorded when that
+      // context downgrade results in a change in inclusion status.
+      HttpMethod http_method_bug_1221316 = HttpMethod::kUnset;
     };
 
     // The following three constructors apply default values for the metadata
@@ -312,6 +342,8 @@
       << static_cast<int>(m.cross_site_redirect_downgrade);
   *os << ", redirect_type_bug_1221316: "
       << static_cast<int>(m.redirect_type_bug_1221316);
+  *os << ", http_method_bug_1221316: "
+      << static_cast<int>(m.http_method_bug_1221316);
   *os << " }";
 }
 
diff --git a/net/cookies/cookie_options_unittest.cc b/net/cookies/cookie_options_unittest.cc
index d40eaeb..c4b050d9 100644
--- a/net/cookies/cookie_options_unittest.cc
+++ b/net/cookies/cookie_options_unittest.cc
@@ -40,11 +40,15 @@
       ContextMetadata::ContextDowngradeType::kStrictToLax;
   metadata1.redirect_type_bug_1221316 = SameSiteCookieContext::ContextMetadata::
       ContextRedirectTypeBug1221316::kPartialSameSiteRedirect;
+  metadata1.http_method_bug_1221316 =
+      SameSiteCookieContext::ContextMetadata::HttpMethod::kGet;
   SameSiteCookieContext::ContextMetadata metadata2;
   metadata2.cross_site_redirect_downgrade = SameSiteCookieContext::
       ContextMetadata::ContextDowngradeType::kStrictToLax;
   metadata2.redirect_type_bug_1221316 = SameSiteCookieContext::ContextMetadata::
       ContextRedirectTypeBug1221316::kPartialSameSiteRedirect;
+  metadata2.http_method_bug_1221316 =
+      SameSiteCookieContext::ContextMetadata::HttpMethod::kPost;
   SameSiteCookieContext context_with_metadata(
       SameSiteCookieContext::ContextType::SAME_SITE_STRICT,
       SameSiteCookieContext::ContextType::SAME_SITE_STRICT, metadata1,
@@ -53,51 +57,65 @@
   EXPECT_EQ(
       "{ context: 0, schemeful_context: 0, "
       "metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 }, "
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 }, "
       "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 } }",
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 } }",
       ::testing::PrintToString(cross_cross));
   EXPECT_EQ(
       "{ context: 2, schemeful_context: 2, "
       "metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 }, "
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 }, "
       "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 } }",
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 } }",
       ::testing::PrintToString(lax_lax));
   EXPECT_EQ(
       "{ context: 3, schemeful_context: 3, "
       "metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 }, "
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 }, "
       "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 } }",
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 } }",
       ::testing::PrintToString(strict_strict));
   EXPECT_EQ(
       "{ context: 3, schemeful_context: 0, "
       "metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 }, "
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 }, "
       "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 } }",
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 } }",
       ::testing::PrintToString(strict_cross));
   EXPECT_EQ(
       "{ context: 3, schemeful_context: 2, "
       "metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 }, "
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 }, "
       "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 } }",
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 } }",
       ::testing::PrintToString(strict_lax));
   EXPECT_EQ(
       "{ context: 2, schemeful_context: 0, "
       "metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 }, "
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 }, "
       "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
-      "redirect_type_bug_1221316: 0 } }",
+      "redirect_type_bug_1221316: 0, "
+      "http_method_bug_1221316: -1 } }",
       ::testing::PrintToString(lax_cross));
   EXPECT_EQ(
       "{ context: 3, schemeful_context: 3, "
       "metadata: { cross_site_redirect_downgrade: 1, "
-      "redirect_type_bug_1221316: 3 }, "
+      "redirect_type_bug_1221316: 3, "
+      "http_method_bug_1221316: 1 }, "
       "schemeful_metadata: { cross_site_redirect_downgrade: 1, "
-      "redirect_type_bug_1221316: 3 } }",
+      "redirect_type_bug_1221316: 3, "
+      "http_method_bug_1221316: 3 } }",
       ::testing::PrintToString(context_with_metadata));
 }
 
diff --git a/net/cookies/cookie_util.cc b/net/cookies/cookie_util.cc
index 3f1a9a9..91a8d2d 100644
--- a/net/cookies/cookie_util.cc
+++ b/net/cookies/cookie_util.cc
@@ -6,6 +6,7 @@
 
 #include <cstdio>
 #include <cstdlib>
+#include <string>
 #include <utility>
 
 #include "base/bind.h"
@@ -681,6 +682,19 @@
       schemeful_result.context_type = ContextType::SAME_SITE_LAX_METHOD_UNSAFE;
   }
 
+  ContextMetadata::HttpMethod http_method_enum =
+      HttpMethodStringToEnum(http_method);
+
+  if (result.metadata.cross_site_redirect_downgrade !=
+      ContextMetadata::ContextDowngradeType::kNoDowngrade) {
+    result.metadata.http_method_bug_1221316 = http_method_enum;
+  }
+
+  if (schemeful_result.metadata.cross_site_redirect_downgrade !=
+      ContextMetadata::ContextDowngradeType::kNoDowngrade) {
+    schemeful_result.metadata.http_method_bug_1221316 = http_method_enum;
+  }
+
   return MakeSameSiteCookieContext(result, schemeful_result);
 }
 
@@ -825,6 +839,32 @@
   return FirstPartySetMetadata();
 }
 
+CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod
+HttpMethodStringToEnum(const std::string& in) {
+  using HttpMethod =
+      CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod;
+  if (in == "GET")
+    return HttpMethod::kGet;
+  if (in == "HEAD")
+    return HttpMethod::kHead;
+  if (in == "POST")
+    return HttpMethod::kPost;
+  if (in == "PUT")
+    return HttpMethod::KPut;
+  if (in == "DELETE")
+    return HttpMethod::kDelete;
+  if (in == "CONNECT")
+    return HttpMethod::kConnect;
+  if (in == "OPTIONS")
+    return HttpMethod::kOptions;
+  if (in == "TRACE")
+    return HttpMethod::kTrace;
+  if (in == "PATCH")
+    return HttpMethod::kPatch;
+
+  return HttpMethod::kUnknown;
+}
+
 CookieSamePartyStatus GetSamePartyStatus(
     const CanonicalCookie& cookie,
     const CookieOptions& options,
diff --git a/net/cookies/cookie_util.h b/net/cookies/cookie_util.h
index 112bb34..9bc75891 100644
--- a/net/cookies/cookie_util.h
+++ b/net/cookies/cookie_util.h
@@ -259,6 +259,11 @@
     bool force_ignore_top_frame_party,
     base::OnceCallback<void(FirstPartySetMetadata)> callback);
 
+// Converts a string representing the http request method to its enum
+// representation.
+NET_EXPORT CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod
+HttpMethodStringToEnum(const std::string& in);
+
 // Get the SameParty inclusion status. If the cookie is not SameParty, returns
 // kNoSamePartyEnforcement; if the cookie is SameParty but does not have a
 // valid context, returns kEnforceSamePartyExclude.
diff --git a/net/cookies/cookie_util_unittest.cc b/net/cookies/cookie_util_unittest.cc
index 801a9b6..a6c9a2788 100644
--- a/net/cookies/cookie_util_unittest.cc
+++ b/net/cookies/cookie_util_unittest.cc
@@ -361,6 +361,8 @@
 using ContextType = CookieOptions::SameSiteCookieContext::ContextType;
 using ContextRedirectTypeBug1221316 = CookieOptions::SameSiteCookieContext::
     ContextMetadata::ContextRedirectTypeBug1221316;
+using HttpMethod =
+    CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod;
 
 MATCHER_P2(ContextTypeIsWithSchemefulMode, context_type, schemeful, "") {
   return context_type == (schemeful ? arg.schemeful_context() : arg.context());
@@ -368,7 +370,8 @@
 
 // Checks for the expected metadata related to context downgrades from
 // cross-site redirects.
-MATCHER_P4(CrossSiteRedirectMetadataCorrectWithSchemefulMode,
+MATCHER_P5(CrossSiteRedirectMetadataCorrectWithSchemefulMode,
+           method,
            context_type_without_chain,
            context_type_with_chain,
            redirect_type_with_chain,
@@ -382,6 +385,13 @@
   if (metadata.redirect_type_bug_1221316 != redirect_type_with_chain)
     return false;
 
+  // http_method_bug_1221316 is only set when there is a context downgrade.
+  if (metadata.cross_site_redirect_downgrade !=
+          ContextDowngradeType::kNoDowngrade &&
+      metadata.http_method_bug_1221316 != method) {
+    return false;
+  }
+
   switch (metadata.cross_site_redirect_downgrade) {
     case ContextDowngradeType::kNoDowngrade:
       return context_type_without_chain == context_type_with_chain;
@@ -440,11 +450,12 @@
   }
 
   auto CrossSiteRedirectMetadataCorrect(
+      HttpMethod method,
       ContextType context_type_without_chain,
       ContextType context_type_with_chain,
       ContextRedirectTypeBug1221316 redirect_type_with_chain) const {
     return CrossSiteRedirectMetadataCorrectWithSchemefulMode(
-        context_type_without_chain, context_type_with_chain,
+        method, context_type_without_chain, context_type_with_chain,
         redirect_type_with_chain, IsSchemeful());
   }
 
@@ -1091,15 +1102,17 @@
     for (const std::vector<GURL>& url_chain : url_chains) {
       for (const SiteForCookies& site_for_cookies : sites_for_cookies) {
         for (const absl::optional<url::Origin>& initiator : initiators) {
-          EXPECT_THAT(cookie_util::ComputeSameSiteContextForRequest(
-                          test_case.method, url_chain, site_for_cookies,
-                          initiator, false /* is_main_frame_navigation */,
-                          false /* force_ignore_site_for_cookies */),
-                      AllOf(ContextTypeIs(expected_context_type),
-                            CrossSiteRedirectMetadataCorrect(
-                                test_case.expected_context_type_without_chain,
-                                test_case.expected_context_type,
-                                test_case.expected_redirect_type_with_chain)))
+          EXPECT_THAT(
+              cookie_util::ComputeSameSiteContextForRequest(
+                  test_case.method, url_chain, site_for_cookies, initiator,
+                  false /* is_main_frame_navigation */,
+                  false /* force_ignore_site_for_cookies */),
+              AllOf(ContextTypeIs(expected_context_type),
+                    CrossSiteRedirectMetadataCorrect(
+                        cookie_util::HttpMethodStringToEnum(test_case.method),
+                        test_case.expected_context_type_without_chain,
+                        test_case.expected_context_type,
+                        test_case.expected_redirect_type_with_chain)))
               << UrlChainToString(url_chain) << " "
               << site_for_cookies.ToDebugString() << " "
               << (initiator ? initiator->Serialize() : "nullopt");
@@ -1114,6 +1127,7 @@
                   ContextTypeIs(
                       expected_context_type_for_main_frame_navigation),
                   CrossSiteRedirectMetadataCorrect(
+                      cookie_util::HttpMethodStringToEnum(test_case.method),
                       test_case
                           .expected_context_type_for_main_frame_navigation_without_chain,
                       test_case.expected_context_type_for_main_frame_navigation,
@@ -1359,7 +1373,11 @@
                           false /* is_main_frame_navigation */,
                           false /* force_ignore_site_for_cookies */),
                       AllOf(ContextTypeIs(expected_context_type),
+                            // The 'method' field is kept empty because it's
+                            // only used to check http_method_bug_1221316 which
+                            // is always empty for responses.
                             CrossSiteRedirectMetadataCorrect(
+                                HttpMethod::kUnset,
                                 test_case.expected_context_type_without_chain,
                                 test_case.expected_context_type,
                                 test_case.expected_redirect_type_with_chain)))
@@ -1377,6 +1395,7 @@
                   ContextTypeIs(
                       expected_context_type_for_main_frame_navigation),
                   CrossSiteRedirectMetadataCorrect(
+                      HttpMethod::kUnset,
                       test_case
                           .expected_context_type_for_main_frame_navigation_without_chain,
                       test_case.expected_context_type_for_main_frame_navigation,
diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store.cc b/net/extras/sqlite/sqlite_persistent_cookie_store.cc
index a166254..cea0648 100644
--- a/net/extras/sqlite/sqlite_persistent_cookie_store.cc
+++ b/net/extras/sqlite/sqlite_persistent_cookie_store.cc
@@ -329,13 +329,11 @@
 
  private:
   // Creates or loads the SQLite database on background runner.
-  void LoadAndNotifyInBackground(LoadedCallback loaded_callback,
-                                 const base::Time& posted_at);
+  void LoadAndNotifyInBackground(LoadedCallback loaded_callback);
 
   // Loads cookies for the domain key (eTLD+1) on background runner.
   void LoadKeyAndNotifyInBackground(const std::string& domains,
-                                    LoadedCallback loaded_callback,
-                                    const base::Time& posted_at);
+                                    LoadedCallback loaded_callback);
 
   // Notifies the CookieMonster when loading completes for a specific domain key
   // or for all domain keys. Triggers the callback and passes it all cookies
@@ -351,8 +349,7 @@
   // Sends notification when a single priority load completes. Updates priority
   // load metric data. The data is sent only after the final load completes.
   void CompleteLoadForKeyInForeground(LoadedCallback loaded_callback,
-                                      bool load_success,
-                                      const base::Time& requested_at);
+                                      bool load_success);
 
   // Initialize the Cookies table.
   bool CreateDatabaseSchema() override;
@@ -734,9 +731,9 @@
 
 void SQLitePersistentCookieStore::Backend::Load(
     LoadedCallback loaded_callback) {
-  PostBackgroundTask(
-      FROM_HERE, base::BindOnce(&Backend::LoadAndNotifyInBackground, this,
-                                std::move(loaded_callback), base::Time::Now()));
+  PostBackgroundTask(FROM_HERE,
+                     base::BindOnce(&Backend::LoadAndNotifyInBackground, this,
+                                    std::move(loaded_callback)));
 }
 
 void SQLitePersistentCookieStore::Backend::LoadCookiesForKey(
@@ -751,14 +748,12 @@
   }
 
   PostBackgroundTask(
-      FROM_HERE,
-      base::BindOnce(&Backend::LoadKeyAndNotifyInBackground, this, key,
-                     std::move(loaded_callback), base::Time::Now()));
+      FROM_HERE, base::BindOnce(&Backend::LoadKeyAndNotifyInBackground, this,
+                                key, std::move(loaded_callback)));
 }
 
 void SQLitePersistentCookieStore::Backend::LoadAndNotifyInBackground(
-    LoadedCallback loaded_callback,
-    const base::Time& posted_at) {
+    LoadedCallback loaded_callback) {
   DCHECK(background_task_runner()->RunsTasksInCurrentSequence());
   IncrementTimeDelta increment(&cookie_load_duration_);
 
@@ -773,8 +768,7 @@
 
 void SQLitePersistentCookieStore::Backend::LoadKeyAndNotifyInBackground(
     const std::string& key,
-    LoadedCallback loaded_callback,
-    const base::Time& posted_at) {
+    LoadedCallback loaded_callback) {
   DCHECK(background_task_runner()->RunsTasksInCurrentSequence());
   IncrementTimeDelta increment(&cookie_load_duration_);
 
@@ -793,19 +787,14 @@
       FROM_HERE,
       base::BindOnce(
           &SQLitePersistentCookieStore::Backend::CompleteLoadForKeyInForeground,
-          this, std::move(loaded_callback), success, posted_at));
+          this, std::move(loaded_callback), success));
 }
 
 void SQLitePersistentCookieStore::Backend::CompleteLoadForKeyInForeground(
     LoadedCallback loaded_callback,
-    bool load_success,
-    const ::Time& requested_at) {
+    bool load_success) {
   DCHECK(client_task_runner()->RunsTasksInCurrentSequence());
 
-  UMA_HISTOGRAM_CUSTOM_TIMES("Cookie.TimeKeyLoadTotalWait",
-                             base::Time::Now() - requested_at,
-                             base::Milliseconds(1), base::Minutes(1), 50);
-
   Notify(std::move(loaded_callback), load_success);
 
   {
diff --git a/net/extras/sqlite/sqlite_persistent_store_backend_base.cc b/net/extras/sqlite/sqlite_persistent_store_backend_base.cc
index c9fc04d..1299593a 100644
--- a/net/extras/sqlite/sqlite_persistent_store_backend_base.cc
+++ b/net/extras/sqlite/sqlite_persistent_store_backend_base.cc
@@ -251,8 +251,7 @@
   if (db_) {
     // This Backend will now be in-memory only. In a future run we will recreate
     // the database. Hopefully things go better then!
-    bool success = db_->RazeAndClose();
-    base::UmaHistogramBoolean(histogram_tag_ + ".KillDatabaseResult", success);
+    db_->RazeAndClose();
     meta_table_.Reset();
     db_.reset();
   }
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index c82d0c5..c83c142 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2022-11-14 12:54 UTC
+# Last updated: 2022-11-15 12:55 UTC
 PinsListTimestamp
-1668430477
+1668516909
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index f27b0a5..661b057 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -715,7 +715,6 @@
     if (!maybe_included_cookies.empty()) {
       std::string cookie_line =
           CanonicalCookie::BuildCookieLine(maybe_included_cookies);
-      UMA_HISTOGRAM_COUNTS_10000("Cookie.HeaderLength", cookie_line.length());
       request_info_.extra_headers.SetHeader(HttpRequestHeaders::kCookie,
                                             cookie_line);
 
diff --git a/remoting/host/BUILD.gn b/remoting/host/BUILD.gn
index 576423a..3ab85e8 100644
--- a/remoting/host/BUILD.gn
+++ b/remoting/host/BUILD.gn
@@ -517,6 +517,12 @@
     defines += [ "REMOTING_USE_WAYLAND" ]
     sources += [
       "input_injector_constants_linux.h",
+      "linux/clipboard_portal.cc",
+      "linux/clipboard_portal.h",
+      "linux/clipboard_portal_injector.cc",
+      "linux/clipboard_portal_injector.h",
+      "linux/clipboard_wayland.cc",
+      "linux/clipboard_wayland.h",
       "linux/desktop_display_info_loader_wayland.cc",
       "linux/desktop_resizer_wayland.cc",
       "linux/input_injector_wayland.cc",
diff --git a/remoting/host/linux/clipboard_portal.cc b/remoting/host/linux/clipboard_portal.cc
new file mode 100644
index 0000000..b76d359
--- /dev/null
+++ b/remoting/host/linux/clipboard_portal.cc
@@ -0,0 +1,141 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "remoting/host/linux/clipboard_portal.h"
+
+#include <gio/gio.h>
+#include <gio/gunixfdlist.h>
+#include <glib-object.h>
+
+#include "base/check.h"
+#include "remoting/base/logging.h"
+#include "third_party/webrtc/modules/desktop_capture/linux/wayland/portal_request_response.h"
+#include "third_party/webrtc/modules/desktop_capture/linux/wayland/scoped_glib.h"
+#include "third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_desktop_portal_utils.h"
+
+namespace remoting::xdg_portal {
+namespace {
+
+constexpr char kClipboardInterfaceName[] = "org.freedesktop.portal.Clipboard";
+
+using webrtc::Scoped;
+using webrtc::xdg_portal::RequestResponse;
+using webrtc::xdg_portal::RequestSessionProxy;
+using webrtc::xdg_portal::SessionDetails;
+
+}  // namespace
+
+ClipboardPortal::ClipboardPortal(PortalNotifier* notifier)
+    : notifier_(notifier) {
+  DETACH_FROM_SEQUENCE(sequence_checker_);
+}
+
+ClipboardPortal::~ClipboardPortal() {
+  if (cancellable_) {
+    g_cancellable_cancel(cancellable_);
+    g_object_unref(cancellable_);
+  }
+
+  // connection_ is owned by proxy_ and does not need to be freed.
+  if (proxy_) {
+    g_object_unref(proxy_);
+  }
+}
+
+void ClipboardPortal::SetSessionDetails(const SessionDetails& session_details) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  HOST_LOG << "Desktop portal session details received on the clipboard portal";
+
+  if (session_details.proxy) {
+    proxy_ = session_details.proxy;
+    connection_ = g_dbus_proxy_get_connection(proxy_);
+  }
+  if (session_details.cancellable) {
+    cancellable_ = session_details.cancellable;
+  }
+  if (!session_details.session_handle.empty()) {
+    session_handle_ = session_details.session_handle;
+  }
+}
+
+void ClipboardPortal::Start() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  cancellable_ = g_cancellable_new();
+  RequestSessionProxy(kClipboardInterfaceName, OnClipboardPortalProxyRequested,
+                      cancellable_, this);
+}
+
+// static
+void ClipboardPortal::OnClipboardPortalProxyRequested(GObject* /* object */,
+                                                      GAsyncResult* result,
+                                                      gpointer user_data) {
+  ClipboardPortal* that = static_cast<ClipboardPortal*>(user_data);
+  DCHECK(that);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(that->sequence_checker_);
+
+  Scoped<GError> error;
+  GDBusProxy* proxy = g_dbus_proxy_new_finish(result, error.receive());
+  if (!proxy) {
+    if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED))
+      return;
+    LOG(ERROR) << "Failed to create a proxy for the clipboard portal: "
+               << error->message;
+    that->OnPortalDone(RequestResponse::kError);
+    return;
+  }
+  that->SetSessionDetails({.proxy = proxy});
+
+  HOST_LOG << "Successfully created proxy for clipboard portal.";
+}
+
+void ClipboardPortal::OnPortalDone(RequestResponse result) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  HOST_LOG << "Clipboard portal is done setting up.";
+
+  notifier_->OnClipboardPortalDone(result);
+}
+
+void ClipboardPortal::RequestClipboard() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  HOST_LOG << "Request clipboard for the remote desktop session.";
+
+  g_dbus_proxy_call(
+      proxy_, "RequestClipboard", g_variant_new("(o)", session_handle_.c_str()),
+      G_DBUS_CALL_FLAGS_NONE, /*timeout=*/-1, cancellable_,
+      reinterpret_cast<GAsyncReadyCallback>(OnClipboardRequest), this);
+}
+
+// static
+void ClipboardPortal::OnClipboardRequest(GDBusProxy* proxy,
+                                         GAsyncResult* result,
+                                         gpointer user_data) {
+  ClipboardPortal* that = static_cast<ClipboardPortal*>(user_data);
+  DCHECK(that);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(that->sequence_checker_);
+
+  Scoped<GError> error;
+  Scoped<GVariant> variant(
+      g_dbus_proxy_call_finish(proxy, result, error.receive()));
+  if (!variant) {
+    LOG(ERROR) << "Failed to request clipboard: " << error->message;
+    that->OnPortalDone(RequestResponse::kError);
+    return;
+  }
+
+  that->OnPortalDone(RequestResponse::kSuccess);
+}
+
+SessionDetails ClipboardPortal::GetSessionDetails() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(proxy_);
+  DCHECK(cancellable_);
+  DCHECK(!session_handle_.empty());
+  HOST_LOG << "Getting session details from the wayland clipboard";
+
+  return {.proxy = proxy_.get(),
+          .cancellable = cancellable_.get(),
+          .session_handle = session_handle_};
+}
+
+}  // namespace remoting::xdg_portal
diff --git a/remoting/host/linux/clipboard_portal.h b/remoting/host/linux/clipboard_portal.h
new file mode 100644
index 0000000..6c9b618a
--- /dev/null
+++ b/remoting/host/linux/clipboard_portal.h
@@ -0,0 +1,80 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef REMOTING_HOST_LINUX_CLIPBOARD_PORTAL_H_
+#define REMOTING_HOST_LINUX_CLIPBOARD_PORTAL_H_
+
+#include <gio/gio.h>
+
+#include "base/functional/callback.h"
+#include "base/memory/raw_ptr.h"
+#include "third_party/webrtc/modules/desktop_capture/linux/wayland/portal_request_response.h"
+#include "third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h"
+
+namespace remoting::xdg_portal {
+
+// Helper class to setup an XDG clipboard portal. It uses the same session
+// handle as the remote desktop and screencast portals (hence they should have
+// the same lifetime.) The methods on this class are called from the capturer
+// thread.
+class ClipboardPortal {
+ public:
+  // |notifier| must outlive |ClipboardPortal| instance and will be called
+  // into from the capturer thread.
+  class PortalNotifier {
+   public:
+    // Called when the clipboard portal has been instantiated.
+    virtual void OnClipboardPortalDone(
+        webrtc::xdg_portal::RequestResponse result) = 0;
+
+   protected:
+    PortalNotifier() = default;
+    virtual ~PortalNotifier() = default;
+  };
+
+  explicit ClipboardPortal(PortalNotifier* notifier);
+
+  ClipboardPortal(const ClipboardPortal&) = delete;
+  ClipboardPortal& operator=(const ClipboardPortal&) = delete;
+  ~ClipboardPortal();
+
+  // Starts the portal setup.
+  void Start();
+
+  // Sets details about the remote desktop session being used.
+  void SetSessionDetails(
+      const webrtc::xdg_portal::SessionDetails& session_details);
+  webrtc::xdg_portal::SessionDetails GetSessionDetails();
+
+  // Sends a request for clipboard access to portal.  Must be called after the
+  // session details have been set and the proxy requested.
+  void RequestClipboard();
+
+ private:
+  void OnPortalDone(webrtc::xdg_portal::RequestResponse result);
+
+  static void OnClipboardRequest(GDBusProxy* proxy,
+                                 GAsyncResult* result,
+                                 gpointer user_data);
+  static void OnClipboardPortalProxyRequested(GObject* object,
+                                              GAsyncResult* result,
+                                              gpointer user_data);
+
+  raw_ptr<GDBusConnection> connection_ GUARDED_BY_CONTEXT(sequence_checker_) =
+      nullptr;
+  raw_ptr<GDBusProxy> proxy_ GUARDED_BY_CONTEXT(sequence_checker_) = nullptr;
+  raw_ptr<GCancellable> cancellable_ GUARDED_BY_CONTEXT(sequence_checker_) =
+      nullptr;
+
+  std::string session_handle_ GUARDED_BY_CONTEXT(sequence_checker_);
+  raw_ptr<PortalNotifier> notifier_ GUARDED_BY_CONTEXT(sequence_checker_);
+  base::RepeatingCallback<webrtc::xdg_portal::SessionDetails()>
+      clipboard_session_details_callback_ GUARDED_BY_CONTEXT(sequence_checker_);
+
+  SEQUENCE_CHECKER(sequence_checker_);
+};
+
+}  // namespace remoting::xdg_portal
+
+#endif  // REMOTING_HOST_LINUX_CLIPBOARD_PORTAL_H_
diff --git a/remoting/host/linux/clipboard_portal_injector.cc b/remoting/host/linux/clipboard_portal_injector.cc
new file mode 100644
index 0000000..72675be
--- /dev/null
+++ b/remoting/host/linux/clipboard_portal_injector.cc
@@ -0,0 +1,381 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "remoting/host/linux/clipboard_portal_injector.h"
+
+#include <gio/gio.h>
+#include <gio/gunixfdlist.h>
+
+#include <stdio.h>
+#include <unistd.h>
+
+#include "base/files/file_util.h"
+#include "base/files/scoped_file.h"
+#include "base/posix/eintr_wrapper.h"
+#include "base/strings/string_util.h"
+#include "remoting/base/constants.h"
+#include "remoting/base/logging.h"
+#include "third_party/webrtc/modules/desktop_capture/linux/wayland/scoped_glib.h"
+#include "third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_desktop_portal_utils.h"
+
+namespace remoting::xdg_portal {
+namespace {
+
+constexpr char kClipboardInterfaceName[] = "org.freedesktop.portal.Clipboard";
+constexpr char kPortalMimeTypeTextUtf8[] = "text/plain;charset=utf-8";
+
+using webrtc::Scoped;
+using webrtc::xdg_portal::kDesktopBusName;
+using webrtc::xdg_portal::kDesktopObjectPath;
+using webrtc::xdg_portal::SessionDetails;
+
+void UnsubscribeSignalHandler(GDBusConnection* connection, guint& signal_id) {
+  if (signal_id) {
+    g_dbus_connection_signal_unsubscribe(connection, signal_id);
+    signal_id = 0;
+  }
+}
+
+// portal expects 'text/plain;charset=utf-8' while we use 'text/plain;
+// charset=UTF-8'
+static std::string TranslateMimeTypeForPortal(std::string mime_type) {
+  if (mime_type == kMimeTypeTextUtf8)
+    return kPortalMimeTypeTextUtf8;
+
+  return mime_type;
+}
+
+}  // namespace
+
+ClipboardPortalInjector::ClipboardPortalInjector(
+    ClipboardChangedCallback clipboard_changed_back)
+    : clipboard_changed_callback_(clipboard_changed_back) {
+  readable_mime_type_set_.insert(kPortalMimeTypeTextUtf8);
+  DETACH_FROM_SEQUENCE(sequence_checker_);
+}
+
+ClipboardPortalInjector::~ClipboardPortalInjector() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  UnsubscribeSignalHandlers();
+}
+
+void ClipboardPortalInjector::UnsubscribeSignalHandlers() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  UnsubscribeSignalHandler(connection_, selection_owner_changed_signal_id_);
+  UnsubscribeSignalHandler(connection_, selection_transfer_signal_id_);
+}
+
+void ClipboardPortalInjector::SetSessionDetails(
+    const webrtc::xdg_portal::SessionDetails& session_details) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  HOST_LOG << "Desktop portal session details received";
+  if (session_details.proxy) {
+    proxy_ = session_details.proxy;
+    connection_ = g_dbus_proxy_get_connection(proxy_);
+  }
+  if (session_details.cancellable) {
+    cancellable_ = session_details.cancellable;
+  }
+  if (!session_details.session_handle.empty()) {
+    session_handle_ = session_details.session_handle;
+  }
+
+  SubscribeClipboardSignals();
+}
+
+void ClipboardPortalInjector::SetSelection(std::string mime_type,
+                                           std::string data) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(proxy_);
+  DCHECK(cancellable_);
+  DCHECK(!session_handle_.empty());
+
+  // Currently only UTF-8 is supported (which is consistent with x11.)
+  if (mime_type != kMimeTypeTextUtf8) {
+    LOG(ERROR)
+        << "ClipboardEvent: data should be UTF-8, but an unexpected mime "
+           "type was received: "
+        << mime_type;
+    return;
+  }
+
+  if (!base::IsStringUTF8AllowingNoncharacters(data)) {
+    LOG(ERROR) << "ClipboardEvent: data is not UTF-8 encoded";
+    return;
+  }
+
+  mime_type = TranslateMimeTypeForPortal(mime_type);
+  write_data_ = data;
+
+  if (!writable_mime_type_set_.contains(mime_type))
+    writable_mime_type_set_.insert(mime_type);
+
+  GVariantBuilder options_builder;
+  GVariantBuilder mime_types_string_builder;
+
+  g_variant_builder_init(&options_builder, G_VARIANT_TYPE_VARDICT);
+  g_variant_builder_init(&mime_types_string_builder,
+                         G_VARIANT_TYPE_STRING_ARRAY);
+
+  for (auto it : writable_mime_type_set_)
+    g_variant_builder_add(&mime_types_string_builder, "s", it.c_str());
+
+  g_variant_builder_add(&options_builder, "{sv}", "mime_types",
+                        g_variant_builder_end(&mime_types_string_builder));
+
+  g_dbus_proxy_call(
+      proxy_, "SetSelection",
+      g_variant_new("(oa{sv})", session_handle_.c_str(), &options_builder),
+      G_DBUS_CALL_FLAGS_NONE, /*timeout=*/-1, cancellable_,
+      reinterpret_cast<GAsyncReadyCallback>(OnSetSelectionCallback), this);
+}
+
+// static
+void ClipboardPortalInjector::OnSetSelectionCallback(GDBusProxy* proxy,
+                                                     GAsyncResult* result,
+                                                     gpointer user_data) {
+  ClipboardPortalInjector* that =
+      static_cast<ClipboardPortalInjector*>(user_data);
+  DCHECK(that);
+
+  Scoped<GError> error;
+  Scoped<GVariant> variant(
+      g_dbus_proxy_call_finish(proxy, result, error.receive()));
+  if (!variant) {
+    LOG(ERROR) << "Failed to set selection: " << error->message;
+    return;
+  }
+}
+
+void ClipboardPortalInjector::SelectionWrite() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(proxy_);
+  DCHECK(cancellable_);
+  DCHECK(!session_handle_.empty());
+  DCHECK(write_serial_);
+  DCHECK(!write_data_.empty());
+
+  Scoped<GError> error;
+  g_dbus_proxy_call_with_unix_fd_list(
+      proxy_, "SelectionWrite",
+      g_variant_new("(ou)", session_handle_.c_str(), write_serial_),
+      G_DBUS_CALL_FLAGS_NONE, /*timeout=*/-1, nullptr, cancellable_,
+      reinterpret_cast<GAsyncReadyCallback>(OnSelectionWriteCallback), this);
+}
+
+// static
+void ClipboardPortalInjector::OnSelectionWriteCallback(GDBusProxy* proxy,
+                                                       GAsyncResult* result,
+                                                       gpointer user_data) {
+  ClipboardPortalInjector* that =
+      static_cast<ClipboardPortalInjector*>(user_data);
+  DCHECK(that);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(that->sequence_checker_);
+
+  Scoped<GError> error;
+  Scoped<GUnixFDList> outlist;
+
+  Scoped<GVariant> variant(g_dbus_proxy_call_with_unix_fd_list_finish(
+      proxy, outlist.receive(), result, error.receive()));
+  if (!variant) {
+    LOG(ERROR) << "Failed to write selection: " << error->message;
+    return;
+  }
+
+  int32_t index;
+  g_variant_get(variant.get(), "(h)", &index);
+
+  base::ScopedFD fd(g_unix_fd_list_get(outlist.get(), index, error.receive()));
+
+  gboolean write_succeeded = false;
+  if (!fd.is_valid()) {
+    LOG(ERROR) << "Failed to get file descriptor from the list: "
+               << error->message;
+  } else {
+    write_succeeded = base::WriteFileDescriptor(fd.get(), that->write_data_);
+  }
+
+  that->SelectionWriteDone(write_succeeded);
+}
+
+void ClipboardPortalInjector::SelectionWriteDone(gboolean success) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(proxy_);
+  DCHECK(cancellable_);
+  DCHECK(!session_handle_.empty());
+  DCHECK(write_serial_);
+
+  g_dbus_proxy_call(
+      proxy_, "SelectionWriteDone",
+      g_variant_new("(oub)", session_handle_.c_str(), write_serial_, success),
+      G_DBUS_CALL_FLAGS_NONE, /*timeout=*/-1, cancellable_,
+      reinterpret_cast<GAsyncReadyCallback>(OnSelectionWriteDoneCallback),
+      this);
+}
+
+// static
+void ClipboardPortalInjector::OnSelectionWriteDoneCallback(GDBusProxy* proxy,
+                                                           GAsyncResult* result,
+                                                           gpointer user_data) {
+  ClipboardPortalInjector* that =
+      static_cast<ClipboardPortalInjector*>(user_data);
+  DCHECK(that);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(that->sequence_checker_);
+
+  Scoped<GError> error;
+  Scoped<GVariant> variant(
+      g_dbus_proxy_call_finish(proxy, result, error.receive()));
+  if (!variant) {
+    LOG(ERROR) << "Failed selection write done: " << error->message;
+    return;
+  }
+}
+
+void ClipboardPortalInjector::SelectionRead(std::string mime_type) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(proxy_);
+  DCHECK(cancellable_);
+  DCHECK(!session_handle_.empty());
+
+  g_dbus_proxy_call_with_unix_fd_list(
+      proxy_, "SelectionRead",
+      g_variant_new("(os)", session_handle_.c_str(), mime_type.c_str()),
+      G_DBUS_CALL_FLAGS_NONE, /*timeout=*/-1, nullptr, cancellable_,
+      reinterpret_cast<GAsyncReadyCallback>(OnSelectionReadCallback), this);
+}
+
+// static
+void ClipboardPortalInjector::OnSelectionReadCallback(GDBusProxy* proxy,
+                                                      GAsyncResult* result,
+                                                      gpointer user_data) {
+  ClipboardPortalInjector* that =
+      static_cast<ClipboardPortalInjector*>(user_data);
+  DCHECK(that);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(that->sequence_checker_);
+
+  Scoped<GError> error;
+  Scoped<GUnixFDList> outlist;
+
+  Scoped<GVariant> variant(g_dbus_proxy_call_with_unix_fd_list_finish(
+      proxy, outlist.receive(), result, error.receive()));
+  if (!variant) {
+    LOG(ERROR) << "Failed to read selection: " << error->message;
+    return;
+  }
+
+  int32_t index;
+  g_variant_get(variant.get(), "(h)", &index);
+
+  base::ScopedFD fd(g_unix_fd_list_get(outlist.get(), index, error.receive()));
+
+  if (!fd.is_valid()) {
+    LOG(ERROR) << "Failed to get file descriptor from the list: "
+               << error->message;
+    return;
+  }
+
+  std::string read_data;
+  base::ScopedFILE stream(fdopen(fd.release(), "rb"));
+  if (!stream.get())
+    return;
+
+  if (base::ReadStreamToString(stream.get(), &read_data))
+    that->clipboard_changed_callback_.Run(kMimeTypeTextUtf8, read_data);
+}
+
+void ClipboardPortalInjector::SubscribeClipboardSignals() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  // The 'SelectionOwnerChanged' signal is sent anytime the selection changes.
+  // We listen for notifications on it to know when we should copy the
+  // selection.
+  selection_owner_changed_signal_id_ = g_dbus_connection_signal_subscribe(
+      connection_, kDesktopBusName, kClipboardInterfaceName,
+      "SelectionOwnerChanged", kDesktopObjectPath, nullptr,
+      G_DBUS_SIGNAL_FLAGS_NONE,
+      static_cast<GDBusSignalCallback>(OnSelectionOwnerChangedSignal), this,
+      nullptr);
+
+  // The 'SelectionTransfer' signal is sent to request for our selection data.
+  // We use it whenever we want to update the current selection.
+  selection_transfer_signal_id_ = g_dbus_connection_signal_subscribe(
+      connection_, kDesktopBusName, kClipboardInterfaceName,
+      "SelectionTransfer", kDesktopObjectPath, nullptr,
+      G_DBUS_SIGNAL_FLAGS_NONE,
+      static_cast<GDBusSignalCallback>(OnSelectionTransferSignal), this,
+      nullptr);
+}
+
+// static
+void ClipboardPortalInjector::OnSelectionTransferSignal(
+    GDBusConnection* connection,
+    const char* sender_name,
+    const char* object_path,
+    const char* interface_name,
+    const char* signal_name,
+    GVariant* parameters,
+    gpointer user_data) {
+  ClipboardPortalInjector* that =
+      static_cast<ClipboardPortalInjector*>(user_data);
+  DCHECK(that);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(that->sequence_checker_);
+
+  HOST_LOG << "Received transfer selection signal from session";
+
+  guint serial;
+  g_variant_get(parameters, "(osu)", /*session_handle*/ nullptr,
+                /*mime_type*/ nullptr, &serial);
+
+  that->write_serial_ = serial;
+
+  that->SelectionWrite();
+}
+
+// static
+void ClipboardPortalInjector::OnSelectionOwnerChangedSignal(
+    GDBusConnection* connection,
+    const char* sender_name,
+    const char* object_path,
+    const char* interface_name,
+    const char* signal_name,
+    GVariant* parameters,
+    gpointer user_data) {
+  ClipboardPortalInjector* that =
+      static_cast<ClipboardPortalInjector*>(user_data);
+  DCHECK(that);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(that->sequence_checker_);
+
+  HOST_LOG << "Received selection owner changed signal from session";
+
+  uint32_t session_handle;
+  Scoped<GVariant> options;
+
+  g_variant_get(parameters, "(o@a{sv})", &session_handle, options.receive());
+
+  Scoped<GVariant> session_is_owner(g_variant_lookup_value(
+      options.get(), "session_is_owner", G_VARIANT_TYPE_BOOLEAN));
+  if (session_is_owner && g_variant_get_boolean(session_is_owner.get()))
+    return;
+
+  Scoped<GVariant> mime_types(g_variant_lookup_value(
+      options.get(), "mime_types", G_VARIANT_TYPE("(as)")));
+  if (!mime_types)
+    return;
+
+  GVariantIter iterator;
+  gchar* mime_type;
+
+  g_variant_iter_init(&iterator,
+                      g_variant_get_child_value(mime_types.get(), 0));
+
+  while (g_variant_iter_loop(&iterator, "s", &mime_type)) {
+    if (that->readable_mime_type_set_.contains(mime_type)) {
+      that->SelectionRead(mime_type);
+      g_free(mime_type);
+      break;
+    }
+  }
+}
+
+}  // namespace remoting::xdg_portal
diff --git a/remoting/host/linux/clipboard_portal_injector.h b/remoting/host/linux/clipboard_portal_injector.h
new file mode 100644
index 0000000..7e0566b
--- /dev/null
+++ b/remoting/host/linux/clipboard_portal_injector.h
@@ -0,0 +1,102 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef REMOTING_HOST_LINUX_CLIPBOARD_PORTAL_INJECTOR_H_
+#define REMOTING_HOST_LINUX_CLIPBOARD_PORTAL_INJECTOR_H_
+
+#include <gio/gio.h>
+
+#include <unordered_set>
+
+#include "base/callback.h"
+#include "base/memory/raw_ptr.h"
+#include "base/sequence_checker.h"
+#include "third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h"
+
+namespace remoting::xdg_portal {
+
+// This class is used by the `ChromotingInputThread` to inject input into the
+// wayland remote host using XDG desktop portal APIs.
+class ClipboardPortalInjector {
+ public:
+  using ClipboardChangedCallbackSignature = void(const std::string& mime_type,
+                                                 const std::string& data);
+  using ClipboardChangedCallback =
+      base::RepeatingCallback<ClipboardChangedCallbackSignature>;
+
+  explicit ClipboardPortalInjector(
+      ClipboardChangedCallback clipboard_changed_callback);
+  ClipboardPortalInjector(const ClipboardPortalInjector&) = delete;
+  ClipboardPortalInjector& operator=(const ClipboardPortalInjector&) = delete;
+  ~ClipboardPortalInjector();
+
+  // This method populates the session details for this object. Session details
+  // are borrowed from the clipboard portal running under the wayland capturer
+  void SetSessionDetails(
+      const webrtc::xdg_portal::SessionDetails& session_details);
+
+  // SetSelection starts the process of pasting content. It prompts the portal
+  // backend to send a 'SelectionTransfer' signal, to which we will reply with a
+  // 'SelectionWrite' and 'SelectionWriteDone'
+  void SetSelection(std::string mime_type, std::string data);
+
+ private:
+  void SelectionRead(std::string mime_type);
+  void SelectionWrite();
+  void SelectionWriteDone(gboolean success);
+  void SubscribeClipboardSignals();
+  void UnsubscribeSignalHandlers();
+
+  static void OnSelectionReadCallback(GDBusProxy* proxy,
+                                      GAsyncResult* result,
+                                      gpointer user_data);
+  static void OnSelectionWriteCallback(GDBusProxy* proxy,
+                                       GAsyncResult* result,
+                                       gpointer user_data);
+  static void OnSetSelectionCallback(GDBusProxy* proxy,
+                                     GAsyncResult* result,
+                                     gpointer user_data);
+  static void OnSelectionWriteDoneCallback(GDBusProxy* proxy,
+                                           GAsyncResult* result,
+                                           gpointer user_data);
+  static void OnSelectionTransferSignal(GDBusConnection* connection,
+                                        const char* sender_name,
+                                        const char* object_path,
+                                        const char* interface_name,
+                                        const char* signal_name,
+                                        GVariant* parameters,
+                                        gpointer user_data);
+  static void OnSelectionOwnerChangedSignal(GDBusConnection* connection,
+                                            const char* sender_name,
+                                            const char* object_path,
+                                            const char* interface_name,
+                                            const char* signal_name,
+                                            GVariant* parameters,
+                                            gpointer user_data);
+
+  SEQUENCE_CHECKER(sequence_checker_);
+  raw_ptr<GDBusConnection> connection_ GUARDED_BY_CONTEXT(sequence_checker_) =
+      nullptr;
+  raw_ptr<GDBusProxy> proxy_ GUARDED_BY_CONTEXT(sequence_checker_) = nullptr;
+  raw_ptr<GCancellable> cancellable_ GUARDED_BY_CONTEXT(sequence_checker_) =
+      nullptr;
+  std::string session_handle_ GUARDED_BY_CONTEXT(sequence_checker_);
+
+  ClipboardChangedCallback clipboard_changed_callback_
+      GUARDED_BY_CONTEXT(sequence_checker_);
+
+  std::unordered_set<std::string> writable_mime_type_set_
+      GUARDED_BY_CONTEXT(sequence_checker_);
+  std::string write_data_ GUARDED_BY_CONTEXT(sequence_checker_);
+  guint write_serial_ GUARDED_BY_CONTEXT(sequence_checker_);
+  std::unordered_set<std::string> readable_mime_type_set_
+      GUARDED_BY_CONTEXT(sequence_checker_);
+
+  guint selection_owner_changed_signal_id_ = 0;
+  guint selection_transfer_signal_id_ = 0;
+};
+
+}  // namespace remoting::xdg_portal
+
+#endif  // REMOTING_HOST_LINUX_CLIPBOARD_PORTAL_INJECTOR_H_
diff --git a/remoting/host/linux/clipboard_wayland.cc b/remoting/host/linux/clipboard_wayland.cc
new file mode 100644
index 0000000..3fccb3bd
--- /dev/null
+++ b/remoting/host/linux/clipboard_wayland.cc
@@ -0,0 +1,49 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "remoting/host/linux/clipboard_wayland.h"
+
+#include <memory>
+
+#include "remoting/host/linux/clipboard_portal_injector.h"
+#include "remoting/proto/event.pb.h"
+#include "remoting/protocol/clipboard_stub.h"
+
+namespace remoting {
+
+ClipboardWayland::ClipboardWayland()
+    : clipboard_portal_(xdg_portal::ClipboardPortalInjector(
+          base::BindRepeating(&ClipboardWayland::OnClipboardChanged,
+                              base::Unretained(this)))) {}
+
+ClipboardWayland::~ClipboardWayland() {}
+
+void ClipboardWayland::Start(
+    std::unique_ptr<protocol::ClipboardStub> client_clipboard) {
+  client_clipboard_.swap(client_clipboard);
+}
+
+void ClipboardWayland::InjectClipboardEvent(
+    const protocol::ClipboardEvent& event) {
+  clipboard_portal_.SetSelection(event.mime_type(), event.data());
+}
+
+void ClipboardWayland::SetSessionDetails(
+    const webrtc::xdg_portal::SessionDetails& session_details) {
+  clipboard_portal_.SetSessionDetails(session_details);
+}
+
+void ClipboardWayland::OnClipboardChanged(const std::string& mime_type,
+                                          const std::string& data) {
+  if (!client_clipboard_)
+    return;
+
+  protocol::ClipboardEvent event;
+  event.set_mime_type(mime_type);
+  event.set_data(data);
+
+  client_clipboard_->InjectClipboardEvent(event);
+}
+
+}  // namespace remoting
diff --git a/remoting/host/linux/clipboard_wayland.h b/remoting/host/linux/clipboard_wayland.h
new file mode 100644
index 0000000..2845bed
--- /dev/null
+++ b/remoting/host/linux/clipboard_wayland.h
@@ -0,0 +1,45 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef REMOTING_HOST_LINUX_CLIPBOARD_WAYLAND_H_
+#define REMOTING_HOST_LINUX_CLIPBOARD_WAYLAND_H_
+
+#include "remoting/host/clipboard.h"
+
+#include <memory>
+
+#include "remoting/host/linux/clipboard_portal_injector.h"
+#include "remoting/proto/event.pb.h"
+#include "remoting/protocol/clipboard_stub.h"
+
+namespace remoting {
+
+class ClipboardWayland : public Clipboard {
+ public:
+  explicit ClipboardWayland();
+
+  ClipboardWayland(const ClipboardWayland&) = delete;
+  ClipboardWayland& operator=(const ClipboardWayland&) = delete;
+
+  ~ClipboardWayland() override;
+
+  // Clipboard interface.
+  void Start(
+      std::unique_ptr<protocol::ClipboardStub> client_clipboard) override;
+  void InjectClipboardEvent(const protocol::ClipboardEvent& event) override;
+
+  void SetSessionDetails(
+      const webrtc::xdg_portal::SessionDetails& session_details);
+
+ private:
+  void OnClipboardChanged(const std::string& mime_type,
+                          const std::string& data);
+
+  std::unique_ptr<protocol::ClipboardStub> client_clipboard_;
+  xdg_portal::ClipboardPortalInjector clipboard_portal_;
+};
+
+}  // namespace remoting
+
+#endif  // REMOTING_HOST_LINUX_CLIPBOARD_WAYLAND_H_
diff --git a/remoting/host/linux/input_injector_wayland.cc b/remoting/host/linux/input_injector_wayland.cc
index b8fac88..b242092d 100644
--- a/remoting/host/linux/input_injector_wayland.cc
+++ b/remoting/host/linux/input_injector_wayland.cc
@@ -26,6 +26,7 @@
 #include "remoting/host/clipboard.h"
 #include "remoting/host/input_injector_constants_linux.h"
 #include "remoting/host/input_injector_metadata.h"
+#include "remoting/host/linux/clipboard_wayland.h"
 #include "remoting/host/linux/remote_desktop_portal_injector.h"
 #include "remoting/host/linux/unicode_to_keysym.h"
 #include "remoting/host/linux/wayland_manager.h"
@@ -146,8 +147,9 @@
     void InjectTextEvent(const protocol::TextEvent& event);
     void InjectMouseEvent(const protocol::MouseEvent& event);
 
-    void SetSessionDetails(
-        const webrtc::xdg_portal::SessionDetails& session_details);
+    void SetRemoteDesktopSessionDetails(const SessionDetails& session_details);
+
+    void SetClipboardSessionDetails(const SessionDetails& session_details);
 
     // Mirrors the InputInjector interface.
     void Start(std::unique_ptr<protocol::ClipboardStub> client_clipboard);
@@ -179,15 +181,21 @@
 #if BUILDFLAG(IS_CHROMEOS_ASH)
     PointTransformer point_transformer_;
 #endif
-
+    ClipboardWayland clipboard_;
     xdg_portal::RemoteDesktopPortalInjector remotedesktop_portal_;
 
     // If input is injected before complete initialization then some portal
     // APIs can crash. This flag is marked to track initialization,
     // and all inputs before the initialization is complete are added to
     // |pending_tasks| queue and injected upon initialization.
-    bool initialized_ = false;
-    base::queue<base::OnceClosure> pending_tasks_;
+    bool remote_desktop_initialized_ = false;
+    base::queue<base::OnceClosure> pending_remote_desktop_tasks_;
+
+    // Similar to remote_desktop_initialized_, we keep the last clipboard event
+    // but separated so that the remote desktop isn't blocked waiting for the
+    // clipboard.
+    bool clipboard_initialized_ = false;
+    absl::optional<ClipboardEvent> pending_clipboard_event_;
   };
 
   scoped_refptr<Core> core_;
@@ -204,8 +212,10 @@
       base::BindRepeating([](const webrtc::DesktopCaptureMetadata metadata) {
         return metadata.session_details;
       });
-  WaylandManager::Get()->AddCapturerMetadataCallback(
-      converting_cb.Then(base::BindRepeating(&Core::SetSessionDetails, core_)));
+  WaylandManager::Get()->AddCapturerMetadataCallback(converting_cb.Then(
+      base::BindRepeating(&Core::SetRemoteDesktopSessionDetails, core_)));
+  WaylandManager::Get()->AddClipboardMetadataCallback(converting_cb.Then(
+      base::BindRepeating(&Core::SetClipboardSessionDetails, core_)));
 }
 
 InputInjectorWayland::~InputInjectorWayland() {}
@@ -237,7 +247,7 @@
 }
 
 void InputInjectorWayland::SetMetadata(InputInjectorMetadata metadata) {
-  core_->SetSessionDetails(std::move(metadata.session_details));
+  core_->SetRemoteDesktopSessionDetails(std::move(metadata.session_details));
 }
 
 InputInjectorWayland::Core::Core(
@@ -246,7 +256,18 @@
 
 void InputInjectorWayland::Core::InjectClipboardEvent(
     const ClipboardEvent& event) {
-  NOTIMPLEMENTED() << "Clipboard injection is not implemented for wayland.";
+  if (!input_task_runner_->BelongsToCurrentThread()) {
+    input_task_runner_->PostTask(
+        FROM_HERE, base::BindOnce(&Core::InjectClipboardEvent, this, event));
+    return;
+  }
+  DCHECK(input_task_runner_->BelongsToCurrentThread());
+  if (!clipboard_initialized_) {
+    pending_clipboard_event_ = absl::make_optional(event);
+    return;
+  }
+
+  clipboard_.InjectClipboardEvent(event);
 }
 
 void InputInjectorWayland::Core::InjectKeyEvent(const KeyEvent& event) {
@@ -256,8 +277,9 @@
     return;
   }
   DCHECK(input_task_runner_->BelongsToCurrentThread());
-  if (!initialized_) {
-    pending_tasks_.push(base::BindOnce(&Core::InjectKeyEvent, this, event));
+  if (!remote_desktop_initialized_) {
+    pending_remote_desktop_tasks_.push(
+        base::BindOnce(&Core::InjectKeyEvent, this, event));
     return;
   }
   // HostEventDispatcher should filter events missing the pressed field.
@@ -322,8 +344,9 @@
     return;
   }
   DCHECK(input_task_runner_->BelongsToCurrentThread());
-  if (!initialized_) {
-    pending_tasks_.push(base::BindOnce(&Core::InjectMouseEvent, this, event));
+  if (!remote_desktop_initialized_) {
+    pending_remote_desktop_tasks_.push(
+        base::BindOnce(&Core::InjectMouseEvent, this, event));
     return;
   }
 
@@ -442,24 +465,44 @@
   }
 }
 
-void InputInjectorWayland::Core::SetSessionDetails(
+void InputInjectorWayland::Core::SetRemoteDesktopSessionDetails(
     const SessionDetails& session_details) {
   if (!input_task_runner_->BelongsToCurrentThread()) {
     input_task_runner_->PostTask(
-        FROM_HERE,
-        base::BindOnce(&Core::SetSessionDetails, this, session_details));
+        FROM_HERE, base::BindOnce(&Core::SetRemoteDesktopSessionDetails, this,
+                                  session_details));
     return;
   }
   DCHECK(input_task_runner_->BelongsToCurrentThread());
   remotedesktop_portal_.SetSessionDetails(session_details);
-  initialized_ = true;
-  while (!pending_tasks_.empty()) {
-    base::OnceClosure task = std::move(pending_tasks_.front());
-    pending_tasks_.pop();
+  remote_desktop_initialized_ = true;
+
+  while (!pending_remote_desktop_tasks_.empty()) {
+    base::OnceClosure task = std::move(pending_remote_desktop_tasks_.front());
+    pending_remote_desktop_tasks_.pop();
     std::move(task).Run();
   }
 }
 
+void InputInjectorWayland::Core::SetClipboardSessionDetails(
+    const SessionDetails& session_details) {
+  if (!input_task_runner_->BelongsToCurrentThread()) {
+    input_task_runner_->PostTask(
+        FROM_HERE, base::BindOnce(&Core::SetClipboardSessionDetails, this,
+                                  session_details));
+    return;
+  }
+
+  DCHECK(input_task_runner_->BelongsToCurrentThread());
+  clipboard_.SetSessionDetails(session_details);
+  clipboard_initialized_ = true;
+
+  // rerun the last pending clipboard task
+  if (pending_clipboard_event_.has_value()) {
+    clipboard_.InjectClipboardEvent(pending_clipboard_event_.value());
+  }
+}
+
 void InputInjectorWayland::Core::InjectMouseButton(unsigned int code,
                                                    bool pressed) {
   DCHECK(input_task_runner_->BelongsToCurrentThread());
@@ -498,6 +541,7 @@
     return;
   }
   DCHECK(input_task_runner_->BelongsToCurrentThread());
+  clipboard_.Start(std::move(client_clipboard));
 }
 
 }  // namespace
diff --git a/remoting/host/linux/remote_desktop_portal.cc b/remoting/host/linux/remote_desktop_portal.cc
index ecad878..3d35bee 100644
--- a/remoting/host/linux/remote_desktop_portal.cc
+++ b/remoting/host/linux/remote_desktop_portal.cc
@@ -14,10 +14,11 @@
 #include "base/strings/stringprintf.h"
 #include "base/time/time.h"
 #include "remoting/base/logging.h"
+#include "remoting/host/linux/clipboard_portal.h"
+#include "remoting/host/linux/wayland_manager.h"
 #include "third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_desktop_portal_utils.h"
 
-namespace remoting {
-namespace xdg_portal {
+namespace remoting::xdg_portal {
 namespace {
 
 constexpr char kRemoteDesktopInterfaceName[] =
@@ -44,6 +45,7 @@
   screencast_portal_ = std::make_unique<webrtc::ScreenCastPortal>(
       webrtc::CaptureType::kScreen, this, OnScreenCastPortalProxyRequested,
       OnSourcesRequestResponseSignal, this);
+  clipboard_portal_ = std::make_unique<xdg_portal::ClipboardPortal>(this);
   DETACH_FROM_SEQUENCE(sequence_checker_);
 }
 
@@ -59,6 +61,8 @@
   }
   if (screencast_portal_)
     screencast_portal_.reset();
+  if (clipboard_portal_)
+    clipboard_portal_.reset();
   UnsubscribeSignalHandlers();
   webrtc::xdg_portal::TearDownSession(std::move(session_handle_), proxy_,
                                       cancellable_, connection_);
@@ -88,6 +92,8 @@
   cancellable_ = g_cancellable_new();
   screencast_portal_->SetSessionDetails({.cancellable = cancellable_});
   screencast_portal_->Start();
+  clipboard_portal_->SetSessionDetails({.cancellable = cancellable_});
+  clipboard_portal_->Start();
 
   HOST_LOG << "Starting remote desktop portal";
   webrtc::xdg_portal::RequestSessionProxy(kRemoteDesktopInterfaceName,
@@ -216,6 +222,11 @@
   screencast_portal_->SourcesRequest();
 }
 
+void RemoteDesktopPortal::RequestClipboard() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  clipboard_portal_->RequestClipboard();
+}
+
 // static
 void RemoteDesktopPortal::OnDevicesRequestImpl(GDBusConnection* connection,
                                                const gchar* sender_name,
@@ -236,7 +247,7 @@
     return;
   }
 
-  that->RequestSources();
+  that->RequestClipboard();
 }
 
 void RemoteDesktopPortal::SelectDevices() {
@@ -282,6 +293,9 @@
       that->session_handle_, that->session_closed_signal_id_);
   that->screencast_portal_->SetSessionDetails(
       {.session_handle = that->session_handle_});
+  that->clipboard_portal_->SetSessionDetails(
+      {.session_handle = that->session_handle_});
+
   that->SelectDevices();
 }
 
@@ -423,5 +437,17 @@
   notifier_->OnScreenCastSessionClosed();
 }
 
-}  // namespace xdg_portal
-}  // namespace remoting
+void RemoteDesktopPortal::OnClipboardPortalDone(
+    webrtc::xdg_portal::RequestResponse result) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  clipboard_portal_status_ = result;
+
+  if (result == RequestResponse::kSuccess) {
+    WaylandManager::Get()->OnClipboardMetadata(
+        {.session_details = clipboard_portal_->GetSessionDetails()});
+  }
+
+  RequestSources();
+}
+
+}  // namespace remoting::xdg_portal
diff --git a/remoting/host/linux/remote_desktop_portal.h b/remoting/host/linux/remote_desktop_portal.h
index e72d0887..560d656 100644
--- a/remoting/host/linux/remote_desktop_portal.h
+++ b/remoting/host/linux/remote_desktop_portal.h
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
+#include "clipboard_portal.h"
 #include "third_party/webrtc/modules/desktop_capture/linux/wayland/portal_request_response.h"
 #include "third_party/webrtc/modules/desktop_capture/linux/wayland/scoped_glib.h"
 #include "third_party/webrtc/modules/desktop_capture/linux/wayland/screen_capture_portal_interface.h"
@@ -20,20 +21,20 @@
 #include "third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_desktop_portal_utils.h"
 #include "third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h"
 
-namespace remoting {
-namespace xdg_portal {
+namespace remoting::xdg_portal {
 
 // Helper class to setup an XDG remote desktop portal session. An instance of
 // this class is owned by the wayland capturer. The methods on this class are
 // called from the capturer thread.
 class RemoteDesktopPortal
     : public webrtc::xdg_portal::ScreenCapturePortalInterface,
-      public webrtc::ScreenCastPortal::PortalNotifier {
+      public webrtc::ScreenCastPortal::PortalNotifier,
+      public xdg_portal::ClipboardPortal::PortalNotifier {
  public:
   // |notifier| must outlive |RemoteDesktopPortal| instance and will be called
   // into from the capturer thread.
   explicit RemoteDesktopPortal(
-      webrtc::ScreenCastPortal::PortalNotifier* notifier);
+      webrtc::ScreenCastPortal::PortalNotifier* screencast_notifier);
   RemoteDesktopPortal(const RemoteDesktopPortal&) = delete;
   RemoteDesktopPortal& operator=(const RemoteDesktopPortal&) = delete;
   ~RemoteDesktopPortal() override;
@@ -45,15 +46,20 @@
   webrtc::xdg_portal::SessionDetails GetSessionDetails() override;
   void RequestSession(GDBusProxy* proxy) override;
 
-  // PortalNotifier interface.
+  // ScreenCast PortalNotifier interface.
   void OnScreenCastRequestResult(webrtc::xdg_portal::RequestResponse result,
                                  uint32_t stream_node_id,
                                  int fd) override;
   void OnScreenCastSessionClosed() override;
 
+  // Clipboard PortalNotifier interface.
+  void OnClipboardPortalDone(
+      webrtc::xdg_portal::RequestResponse result) override;
+
  private:
   void UnsubscribeSignalHandlers();
   void RequestSources();
+  void RequestClipboard();
   void SelectDevices();
   void StartRequest();
   uint32_t pipewire_stream_node_id();
@@ -111,6 +117,9 @@
   webrtc::xdg_portal::RequestResponse screencast_portal_status_
       GUARDED_BY_CONTEXT(sequence_checker_) =
           webrtc::xdg_portal::RequestResponse::kUnknown;
+  webrtc::xdg_portal::RequestResponse clipboard_portal_status_
+      GUARDED_BY_CONTEXT(sequence_checker_) =
+          webrtc::xdg_portal::RequestResponse::kUnknown;
   raw_ptr<GDBusConnection> connection_ GUARDED_BY_CONTEXT(sequence_checker_) =
       nullptr;
   raw_ptr<GDBusProxy> proxy_ GUARDED_BY_CONTEXT(sequence_checker_) = nullptr;
@@ -129,12 +138,13 @@
   guint devices_request_signal_id_ GUARDED_BY_CONTEXT(sequence_checker_) = 0;
   std::unique_ptr<webrtc::ScreenCastPortal> screencast_portal_
       GUARDED_BY_CONTEXT(sequence_checker_);
+  std::unique_ptr<ClipboardPortal> clipboard_portal_
+      GUARDED_BY_CONTEXT(sequence_checker_);
 
   GMainContext* context_ GUARDED_BY_CONTEXT(sequence_checker_) = nullptr;
   SEQUENCE_CHECKER(sequence_checker_);
 };
 
-}  // namespace xdg_portal
-}  // namespace remoting
+}  // namespace remoting::xdg_portal
 
 #endif  // REMOTING_HOST_LINUX_REMOTE_DESKTOP_PORTAL_H_
diff --git a/remoting/host/linux/remote_desktop_portal_injector.cc b/remoting/host/linux/remote_desktop_portal_injector.cc
index c63d4ea..d1f92ef 100644
--- a/remoting/host/linux/remote_desktop_portal_injector.cc
+++ b/remoting/host/linux/remote_desktop_portal_injector.cc
@@ -16,8 +16,7 @@
 #include "third_party/webrtc/modules/desktop_capture/linux/wayland/scoped_glib.h"
 #include "third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_desktop_portal_utils.h"
 
-namespace remoting {
-namespace xdg_portal {
+namespace remoting::xdg_portal {
 
 using webrtc::Scoped;
 
@@ -145,5 +144,4 @@
   pipewire_stream_node_id_ = session_details.pipewire_stream_node_id;
 }
 
-}  // namespace xdg_portal
-}  // namespace remoting
+}  // namespace remoting::xdg_portal
diff --git a/remoting/host/linux/remote_desktop_portal_injector.h b/remoting/host/linux/remote_desktop_portal_injector.h
index 815c799..a5c6548 100644
--- a/remoting/host/linux/remote_desktop_portal_injector.h
+++ b/remoting/host/linux/remote_desktop_portal_injector.h
@@ -18,8 +18,7 @@
 #include "third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_desktop_portal_utils.h"
 #include "third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h"
 
-namespace remoting {
-namespace xdg_portal {
+namespace remoting::xdg_portal {
 
 // This class is used by the `ChromotingInputThread` to inject input into the
 // wayland remote host using XDG desktop portal APIs.
@@ -60,7 +59,6 @@
   std::string session_handle_ GUARDED_BY_CONTEXT(sequence_checker_);
 };
 
-}  // namespace xdg_portal
-}  // namespace remoting
+}  // namespace remoting::xdg_portal
 
 #endif  // REMOTING_HOST_LINUX_REMOTE_DESKTOP_PORTAL_INJECTOR_H_
diff --git a/remoting/host/linux/wayland_manager.cc b/remoting/host/linux/wayland_manager.cc
index c445a6e..99fd635 100644
--- a/remoting/host/linux/wayland_manager.cc
+++ b/remoting/host/linux/wayland_manager.cc
@@ -51,11 +51,44 @@
     return;
   }
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (capturer_metadata_callback_)
+  if (capturer_metadata_callback_) {
     capturer_metadata_callback_.Run(std::move(metadata));
-  else
+  } else {
     LOG(ERROR) << "Expected the capturer metadata observer to have register "
                << "a callback by now";
+  }
+}
+
+void WaylandManager::AddClipboardMetadataCallback(
+    DesktopMetadataCallback callback) {
+  if (!ui_task_runner_->RunsTasksInCurrentSequence()) {
+    ui_task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(&WaylandManager::AddClipboardMetadataCallback,
+                       base::Unretained(this),
+                       base::BindPostTask(base::ThreadTaskRunnerHandle::Get(),
+                                          std::move(callback))));
+    return;
+  }
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  clipboard_metadata_callback_ = std::move(callback);
+}
+
+void WaylandManager::OnClipboardMetadata(
+    webrtc::DesktopCaptureMetadata metadata) {
+  if (!ui_task_runner_->RunsTasksInCurrentSequence()) {
+    ui_task_runner_->PostTask(
+        FROM_HERE, base::BindOnce(&WaylandManager::OnClipboardMetadata,
+                                  base::Unretained(this), std::move(metadata)));
+    return;
+  }
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  if (clipboard_metadata_callback_) {
+    clipboard_metadata_callback_.Run(std::move(metadata));
+  } else {
+    LOG(WARNING) << "Expected the clipboard observer to have registered "
+                 << "a callback by now";
+  }
 }
 
 void WaylandManager::AddUpdateScreenResolutionCallback(
@@ -83,11 +116,12 @@
     return;
   }
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (screen_resolution_callback_)
+  if (screen_resolution_callback_) {
     screen_resolution_callback_.Run(std::move(resolution), screen_id);
-  else
+  } else {
     LOG(WARNING) << "Expected the screen resolution observer to have register "
                  << "a callback by now";
+  }
 }
 
 void WaylandManager::SetKeyboardLayoutCallback(
diff --git a/remoting/host/linux/wayland_manager.h b/remoting/host/linux/wayland_manager.h
index 09f1c4ab..874c5f0 100644
--- a/remoting/host/linux/wayland_manager.h
+++ b/remoting/host/linux/wayland_manager.h
@@ -37,6 +37,10 @@
   using KeyboardModifiersCallbackSignature = void(uint32_t group);
   using KeyboardModifiersCallback =
       base::RepeatingCallback<KeyboardModifiersCallbackSignature>;
+  using ClipboardMetadataCallbackSignature =
+      void(webrtc::DesktopCaptureMetadata);
+  using ClipboardMetadataCallback =
+      base::RepeatingCallback<ClipboardMetadataCallbackSignature>;
 
   WaylandManager();
   ~WaylandManager();
@@ -55,6 +59,12 @@
   // Invoked by the desktop capturer(s), upon successful start.
   void OnDesktopCapturerMetadata(webrtc::DesktopCaptureMetadata metadata);
 
+  // Adds callback to be invoked when clipboard has metadata available.
+  void AddClipboardMetadataCallback(DesktopMetadataCallback callback);
+
+  // Invoked by the clipboard portal upon a successful start.
+  void OnClipboardMetadata(webrtc::DesktopCaptureMetadata metadata);
+
   // Adds callback to be invoked when screen resolution is updated by the
   // desktop resizer.
   void AddUpdateScreenResolutionCallback(
@@ -95,6 +105,8 @@
       GUARDED_BY_CONTEXT(sequence_checker_);
   base::RepeatingCallbackList<KeyboardModifiersCallbackSignature>
       keyboard_modifier_callbacks_ GUARDED_BY_CONTEXT(sequence_checker_);
+  ClipboardMetadataCallback clipboard_metadata_callback_
+      GUARDED_BY_CONTEXT(sequence_checker_);
 
   // Keeps track of the latest keymap for the case where the keyboard layout
   // monitor has not yet registered a callback.
diff --git a/services/network/public/cpp/cookie_manager_mojom_traits.cc b/services/network/public/cpp/cookie_manager_mojom_traits.cc
index eb87ab2..2505b01 100644
--- a/services/network/public/cpp/cookie_manager_mojom_traits.cc
+++ b/services/network/public/cpp/cookie_manager_mojom_traits.cc
@@ -364,6 +364,105 @@
   return false;
 }
 
+network::mojom::HttpMethod EnumTraits<
+    network::mojom::HttpMethod,
+    net::CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod>::
+    ToMojom(
+        net::CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod
+            input) {
+  switch (input) {
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::kUnset:
+      return network::mojom::HttpMethod::kUnset;
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::kUnknown:
+      return network::mojom::HttpMethod::kUnknown;
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::kGet:
+      return network::mojom::HttpMethod::kGet;
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::kHead:
+      return network::mojom::HttpMethod::kHead;
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::kPost:
+      return network::mojom::HttpMethod::kPost;
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::KPut:
+      return network::mojom::HttpMethod::KPut;
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::kDelete:
+      return network::mojom::HttpMethod::kDelete;
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::kConnect:
+      return network::mojom::HttpMethod::kConnect;
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::kOptions:
+      return network::mojom::HttpMethod::kOptions;
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::kTrace:
+      return network::mojom::HttpMethod::kTrace;
+    case net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+        HttpMethod::kPatch:
+      return network::mojom::HttpMethod::kPatch;
+  }
+}
+
+bool EnumTraits<
+    network::mojom::HttpMethod,
+    net::CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod>::
+    FromMojom(
+        network::mojom::HttpMethod input,
+        net::CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod*
+            output) {
+  switch (input) {
+    case network::mojom::HttpMethod::kUnset:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::kUnset;
+      return true;
+    case network::mojom::HttpMethod::kUnknown:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::kUnknown;
+      return true;
+    case network::mojom::HttpMethod::kGet:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::kGet;
+      return true;
+    case network::mojom::HttpMethod::kHead:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::kHead;
+      return true;
+    case network::mojom::HttpMethod::kPost:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::kPost;
+      return true;
+    case network::mojom::HttpMethod::KPut:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::KPut;
+      return true;
+    case network::mojom::HttpMethod::kDelete:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::kDelete;
+      return true;
+    case network::mojom::HttpMethod::kConnect:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::kConnect;
+      return true;
+    case network::mojom::HttpMethod::kOptions:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::kOptions;
+      return true;
+    case network::mojom::HttpMethod::kTrace:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::kTrace;
+      return true;
+    case network::mojom::HttpMethod::kPatch:
+      *output = net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+          HttpMethod::kPatch;
+      return true;
+  }
+  return false;
+}
+
 network::mojom::CookieChangeCause
 EnumTraits<network::mojom::CookieChangeCause, net::CookieChangeCause>::ToMojom(
     net::CookieChangeCause input) {
@@ -429,6 +528,9 @@
   if (!data.ReadRedirectTypeBug1221316(&out->redirect_type_bug_1221316))
     return false;
 
+  if (!data.ReadHttpMethodBug1221316(&out->http_method_bug_1221316))
+    return false;
+
   return true;
 }
 
diff --git a/services/network/public/cpp/cookie_manager_mojom_traits.h b/services/network/public/cpp/cookie_manager_mojom_traits.h
index dcee49a8..d562b70 100644
--- a/services/network/public/cpp/cookie_manager_mojom_traits.h
+++ b/services/network/public/cpp/cookie_manager_mojom_traits.h
@@ -95,6 +95,19 @@
 };
 
 template <>
+struct EnumTraits<
+    network::mojom::HttpMethod,
+    net::CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod> {
+  static network::mojom::HttpMethod ToMojom(
+      net::CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod
+          input);
+  static bool FromMojom(
+      network::mojom::HttpMethod input,
+      net::CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod*
+          output);
+};
+
+template <>
 struct EnumTraits<network::mojom::CookieSourceScheme, net::CookieSourceScheme> {
   static network::mojom::CookieSourceScheme ToMojom(
       net::CookieSourceScheme input);
@@ -130,6 +143,12 @@
     return m.redirect_type_bug_1221316;
   }
 
+  static net::CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod
+  http_method_bug_1221316(
+      const net::CookieOptions::SameSiteCookieContext::ContextMetadata& m) {
+    return m.http_method_bug_1221316;
+  }
+
   static bool Read(network::mojom::CookieSameSiteContextMetadataDataView,
                    net::CookieOptions::SameSiteCookieContext::ContextMetadata*);
 };
diff --git a/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc b/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc
index cc62c38..70d9323 100644
--- a/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc
+++ b/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc
@@ -313,6 +313,8 @@
   metadata.redirect_type_bug_1221316 =
       net::CookieOptions::SameSiteCookieContext::ContextMetadata::
           ContextRedirectTypeBug1221316::kPartialSameSiteRedirect;
+  metadata.http_method_bug_1221316 = net::CookieOptions::SameSiteCookieContext::
+      ContextMetadata::HttpMethod::kPost;
   ASSERT_TRUE(
       mojo::test::SerializeAndDeserialize<mojom::CookieSameSiteContextMetadata>(
           metadata, roundtrip));
@@ -333,11 +335,15 @@
       ContextMetadata::ContextDowngradeType::kStrictToLax;
   metadata1.redirect_type_bug_1221316 =
       ContextMetadata::ContextRedirectTypeBug1221316::kCrossSiteRedirect;
+  metadata1.http_method_bug_1221316 = net::CookieOptions::
+      SameSiteCookieContext::ContextMetadata::HttpMethod::kGet;
   ContextMetadata metadata2;
   metadata2.cross_site_redirect_downgrade =
       ContextMetadata::ContextDowngradeType::kLaxToCross;
   metadata2.redirect_type_bug_1221316 =
       ContextMetadata::ContextRedirectTypeBug1221316::kNoRedirect;
+  metadata2.http_method_bug_1221316 = net::CookieOptions::
+      SameSiteCookieContext::ContextMetadata::HttpMethod::kGet;
 
   const ContextMetadata metadatas[]{ContextMetadata(), metadata1, metadata2};
 
@@ -530,6 +536,39 @@
   EXPECT_EQ(original.cause, copied.cause);
 }
 
+TEST(CookieManagerTraitsTest, Roundtrips_HttpMethod) {
+  for (auto type : {
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::kUnset,
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::kUnknown,
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::kGet,
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::kHead,
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::kPost,
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::KPut,
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::kDelete,
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::kConnect,
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::kOptions,
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::kTrace,
+           net::CookieOptions::SameSiteCookieContext::ContextMetadata::
+               HttpMethod::kPatch,
+       }) {
+    net::CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod
+        roundtrip;
+    ASSERT_TRUE(mojo::test::SerializeAndDeserialize<mojom::HttpMethod>(
+        type, roundtrip));
+    EXPECT_EQ(type, roundtrip);
+  }
+}
+
 // TODO: Add tests for CookiePriority, more extensive CookieOptions ones
 
 }  // namespace
diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn
index c396d13..6f57813 100644
--- a/services/network/public/mojom/BUILD.gn
+++ b/services/network/public/mojom/BUILD.gn
@@ -1053,6 +1053,10 @@
           mojom = "network.mojom.CookieSourceScheme"
           cpp = "::net::CookieSourceScheme"
         },
+        {
+          mojom = "network.mojom.HttpMethod"
+          cpp = "::net::CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod"
+        },
       ]
       traits_headers =
           [ "//services/network/public/cpp/cookie_manager_mojom_traits.h" ]
diff --git a/services/network/public/mojom/cookie_manager.mojom b/services/network/public/mojom/cookie_manager.mojom
index 02026ed..3b851b4 100644
--- a/services/network/public/mojom/cookie_manager.mojom
+++ b/services/network/public/mojom/cookie_manager.mojom
@@ -113,10 +113,25 @@
   kAllSameSiteRedirect,
 };
 
+enum HttpMethod {
+  kUnset,
+  kUnknown,
+  kGet,
+  kHead,
+  kPost,
+  KPut,
+  kDelete,
+  kConnect,
+  kOptions,
+  kTrace,
+  kPatch,
+};
+
 // Keep defaults here in sync with net/cookies/cookie_options.h.
 struct CookieSameSiteContextMetadata {
   CookieSameSiteContextMetadataDowngradeType cross_site_redirect_downgrade = kNoDowngrade;
   ContextRedirectTypeBug1221316 redirect_type_bug_1221316 = kUnset;
+  HttpMethod http_method_bug_1221316 = kUnset;
 };
 
 // Keep defaults here in sync with net/cookies/cookie_options.h.
diff --git a/services/tracing/public/cpp/perfetto/custom_event_recorder.cc b/services/tracing/public/cpp/perfetto/custom_event_recorder.cc
index 979f516..8bdd4a0 100644
--- a/services/tracing/public/cpp/perfetto/custom_event_recorder.cc
+++ b/services/tracing/public/cpp/perfetto/custom_event_recorder.cc
@@ -12,6 +12,7 @@
 #include "base/metrics/user_metrics.h"
 #include "base/no_destructor.h"
 #include "base/pickle.h"
+#include "base/process/current_process.h"
 #include "base/synchronization/lock.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_config.h"
@@ -101,8 +102,7 @@
   }
 #if BUILDFLAG(IS_ANDROID)
   static const ChromeProcessDescriptor::ProcessType process_type =
-      GetProcessType(
-          base::trace_event::TraceLog::GetInstance()->process_name());
+      base::CurrentProcess::GetInstance().GetType({});
   if (process_type == ChromeProcessDescriptor::PROCESS_BROWSER) {
     auto state = base::android::ApplicationStatusListener::GetState();
     TRACE_APPLICATION_STATE(state);
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source.cc
index 6e425ea..a0ac255 100644
--- a/services/tracing/public/cpp/perfetto/trace_event_data_source.cc
+++ b/services/tracing/public/cpp/perfetto/trace_event_data_source.cc
@@ -18,6 +18,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/no_destructor.h"
+#include "base/process/current_process.h"
 #include "base/sequence_checker.h"
 #include "base/strings/pattern.h"
 #include "base/strings/string_number_conversions.h"
@@ -1275,7 +1276,7 @@
     return;
   }
 
-  std::string process_name = TraceLog::GetInstance()->process_name();
+  std::string process_name = base::CurrentProcess::GetInstance().GetName({});
 
   TracePacketHandle trace_packet = writer->NewTracePacket();
 
@@ -1307,7 +1308,7 @@
 
   ChromeProcessDescriptor* chrome_process =
       track_descriptor->set_chrome_process();
-  auto process_type = GetProcessType(process_name);
+  auto process_type = base::CurrentProcess::GetInstance().GetType({});
   if (process_type != ChromeProcessDescriptor::PROCESS_UNSPECIFIED) {
     chrome_process->set_process_type(process_type);
   }
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
index 4c4f5165..df530710 100644
--- a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
+++ b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
@@ -18,6 +18,8 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/metrics_hashes.h"
 #include "base/metrics/user_metrics.h"
+#include "base/process/current_process.h"
+#include "base/process/current_process_test.h"
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/common/task_annotator.h"
@@ -68,6 +70,8 @@
 namespace {
 
 constexpr char kTestProcess[] = "Browser";
+base::CurrentProcessType kTestProcessType =
+    base::CurrentProcessType::PROCESS_BROWSER;
 constexpr char kTestThread[] = "CrTestMain";
 constexpr const char kCategoryGroup[] = "browser";
 
@@ -101,9 +105,10 @@
     old_thread_name_ =
         base::ThreadIdNameManager::GetInstance()->GetNameForCurrentThread();
     base::ThreadIdNameManager::GetInstance()->SetName(kTestThread);
-    old_process_name_ =
-        base::trace_event::TraceLog::GetInstance()->process_name();
-    base::trace_event::TraceLog::GetInstance()->set_process_name(kTestProcess);
+    old_process_name_ = base::test::CurrentProcessForTest::GetName();
+    old_process_type_ = base::test::CurrentProcessForTest::GetType();
+    base::CurrentProcess::GetInstance().SetProcessNameAndType(kTestProcess,
+                                                              kTestProcessType);
     base::trace_event::TraceLog::GetInstance()->SetRecordHostAppPackageName(
         false);
 
@@ -143,8 +148,8 @@
 #endif  // !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
 
     base::ThreadIdNameManager::GetInstance()->SetName(old_thread_name_);
-    base::trace_event::TraceLog::GetInstance()->set_process_name(
-        old_process_name_);
+    base::CurrentProcess::GetInstance().SetProcessNameAndType(
+        old_process_name_, old_process_type_);
 
 #if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
     TracingUnitTest::TearDown();
@@ -873,6 +878,7 @@
 
   std::string old_thread_name_;
   std::string old_process_name_;
+  base::CurrentProcessType old_process_type_;
 };
 
 void HasMetadataValue(const perfetto::protos::ChromeMetadata& entry,
diff --git a/services/tracing/public/cpp/perfetto/trace_string_lookup.cc b/services/tracing/public/cpp/perfetto/trace_string_lookup.cc
index b279056..d43e4aa 100644
--- a/services/tracing/public/cpp/perfetto/trace_string_lookup.cc
+++ b/services/tracing/public/cpp/perfetto/trace_string_lookup.cc
@@ -6,90 +6,10 @@
 
 #include "base/strings/pattern.h"
 
-using ::perfetto::protos::pbzero::ChromeProcessDescriptor;
 using ::perfetto::protos::pbzero::ChromeThreadDescriptor;
 
 namespace tracing {
 
-struct ProcessType {
-  const char* name;
-  ChromeProcessDescriptor::ProcessType type;
-};
-
-constexpr ProcessType kProcessTypes[] = {
-    {"Browser", ChromeProcessDescriptor::PROCESS_BROWSER},
-    {"Renderer", ChromeProcessDescriptor::PROCESS_RENDERER},
-    {"Extension Renderer", ChromeProcessDescriptor::PROCESS_RENDERER_EXTENSION},
-    {"GPU Process", ChromeProcessDescriptor::PROCESS_GPU},
-    {"HeadlessBrowser", ChromeProcessDescriptor::PROCESS_BROWSER},
-    {"PPAPI Process", ChromeProcessDescriptor::PROCESS_PPAPI_PLUGIN},
-    {"PPAPI Broker Process", ChromeProcessDescriptor::PROCESS_PPAPI_BROKER},
-    {"Service: network.mojom.NetworkService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_NETWORK},
-    {"Service: tracing.mojom.TracingService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_TRACING},
-    {"Service: storage.mojom.StorageService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_STORAGE},
-    {"Service: audio.mojom.AudioService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_AUDIO},
-    {"Service: data_decoder.mojom.DataDecoderService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_DATA_DECODER},
-    {"Service: chrome.mojom.UtilWin",
-     ChromeProcessDescriptor::PROCESS_SERVICE_UTIL_WIN},
-    {"Service: proxy_resolver.mojom.ProxyResolverFactory",
-     ChromeProcessDescriptor::PROCESS_SERVICE_PROXY_RESOLVER},
-    {"Service: media.mojom.CdmService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_CDM},
-    {"Service: video_capture.mojom.VideoCaptureService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_VIDEO_CAPTURE},
-    {"Service: unzip.mojom.Unzipper",
-     ChromeProcessDescriptor::PROCESS_SERVICE_UNZIPPER},
-    {"Service: mirroring.mojom.MirroringService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_MIRRORING},
-    {"Service: patch.mojom.FilePatcher",
-     ChromeProcessDescriptor::PROCESS_SERVICE_FILEPATCHER},
-    {"Service: chromeos.tts.mojom.TtsService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_TTS},
-    {"Service: printing.mojom.PrintingService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_PRINTING},
-    {"Service: quarantine.mojom.Quarantine",
-     ChromeProcessDescriptor::PROCESS_SERVICE_QUARANTINE},
-    {"Service: ash.local_search_service.mojom.LocalSearchService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_CROS_LOCALSEARCH},
-    {"Service: ash.assistant.mojom.AssistantAudioDecoderFactory",
-     ChromeProcessDescriptor::PROCESS_SERVICE_CROS_ASSISTANT_AUDIO_DECODER},
-    {"Service: chrome.mojom.FileUtilService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_FILEUTIL},
-    {"Service: printing.mojom.PrintCompositor",
-     ChromeProcessDescriptor::PROCESS_SERVICE_PRINTCOMPOSITOR},
-    {"Service: paint_preview.mojom.PaintPreviewCompositorCollection",
-     ChromeProcessDescriptor::PROCESS_SERVICE_PAINTPREVIEW},
-    {"Service: media.mojom.SpeechRecognitionService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_SPEECHRECOGNITION},
-    {"Service: device.mojom.XRDeviceService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_XRDEVICE},
-    {"Service: chrome.mojom.UtilReadIcon",
-     ChromeProcessDescriptor::PROCESS_SERVICE_READICON},
-    {"Service: language_detection.mojom.LanguageDetectionService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_LANGUAGEDETECTION},
-    {"Service: sharing.mojom.Sharing",
-     ChromeProcessDescriptor::PROCESS_SERVICE_SHARING},
-    {"Service: chrome.mojom.MediaParserFactory",
-     ChromeProcessDescriptor::PROCESS_SERVICE_MEDIAPARSER},
-    {"Service: qrcode_generator.mojom.QRCodeGeneratorService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_QRCODEGENERATOR},
-    {"Service: chrome.mojom.ProfileImport",
-     ChromeProcessDescriptor::PROCESS_SERVICE_PROFILEIMPORT},
-    {"Service: ash.ime.mojom.ImeService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_IME},
-    {"Service: recording.mojom.RecordingService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_RECORDING},
-    {"Service: shape_detection.mojom.ShapeDetectionService",
-     ChromeProcessDescriptor::PROCESS_SERVICE_SHAPEDETECTION},
-    // Catch-all, should be after all the "Service:" entries.
-    {"Service:*", ChromeProcessDescriptor::PROCESS_UTILITY},
-};
-
 struct ThreadType {
   const char* name;
   ChromeThreadDescriptor::ThreadType type;
@@ -150,16 +70,6 @@
     {"LoaderLockSampler", ChromeThreadDescriptor::THREAD_LOADER_LOCK_SAMPLER},
 };
 
-ChromeProcessDescriptor::ProcessType GetProcessType(const std::string& name) {
-  for (size_t i = 0; i < std::size(kProcessTypes); ++i) {
-    if (base::MatchPattern(name, kProcessTypes[i].name)) {
-      return kProcessTypes[i].type;
-    }
-  }
-
-  return ChromeProcessDescriptor::PROCESS_UNSPECIFIED;
-}
-
 ChromeThreadDescriptor::ThreadType GetThreadType(
     const char* const thread_name) {
   for (size_t i = 0; i < std::size(kThreadTypes); ++i) {
diff --git a/services/tracing/public/cpp/perfetto/trace_string_lookup.h b/services/tracing/public/cpp/perfetto/trace_string_lookup.h
index 3e32b85..7ae382fc 100644
--- a/services/tracing/public/cpp/perfetto/trace_string_lookup.h
+++ b/services/tracing/public/cpp/perfetto/trace_string_lookup.h
@@ -5,17 +5,12 @@
 #ifndef SERVICES_TRACING_PUBLIC_CPP_PERFETTO_TRACE_STRING_LOOKUP_H_
 #define SERVICES_TRACING_PUBLIC_CPP_PERFETTO_TRACE_STRING_LOOKUP_H_
 
-#include <string>
-
-#include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_process_descriptor.pbzero.h"
 #include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_thread_descriptor.pbzero.h"
 
 namespace tracing {
 
 perfetto::protos::pbzero::ChromeThreadDescriptor::ThreadType GetThreadType(
     const char* const thread_name);
-perfetto::protos::pbzero::ChromeProcessDescriptor::ProcessType GetProcessType(
-    const std::string& name);
 
 }  // namespace tracing
 
diff --git a/services/tracing/public/cpp/perfetto/track_name_recorder.cc b/services/tracing/public/cpp/perfetto/track_name_recorder.cc
index 5f6329f..27a5d33 100644
--- a/services/tracing/public/cpp/perfetto/track_name_recorder.cc
+++ b/services/tracing/public/cpp/perfetto/track_name_recorder.cc
@@ -6,6 +6,7 @@
 
 #include "base/debug/crash_logging.h"
 #include "base/no_destructor.h"
+#include "base/process/current_process.h"
 #include "base/rand_util.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
@@ -21,7 +22,6 @@
 #endif
 
 namespace tracing {
-namespace {
 
 #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
 // Set the track descriptor for the current process.
@@ -30,9 +30,9 @@
 
   const auto* trace_log = base::trace_event::TraceLog::GetInstance();
   int process_id = trace_log->process_id();
-  std::string process_name = trace_log->process_name();
+  std::string process_name = base::CurrentProcess::GetInstance().GetName({});
   auto process_type = static_cast<ChromeProcessDescriptor::ProcessType>(
-      GetProcessType(process_name));
+      base::CurrentProcess::GetInstance().GetType({}));
 
   // We record a few (string) fields here that are stripped for background
   // tracing. We rely on the post-process privacy filtering to remove them.
@@ -80,6 +80,8 @@
                                            std::move(process_track_desc));
 }
 
+namespace {
+
 void FillThreadTrack(const perfetto::ThreadTrack& track, const char* name) {
   using perfetto::protos::gen::ChromeThreadDescriptor;
 
@@ -115,10 +117,10 @@
   auto thread_track = perfetto::ThreadTrack::Current();
   FillThreadTrack(thread_track, thread_name);
 }
-#endif  // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
-
 }  // namespace
 
+#endif  // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
+
 absl::optional<uint64_t> GetTraceCrashId() {
   static base::debug::CrashKeyString* key = base::debug::AllocateCrashKeyString(
       "chrome-trace-id", base::debug::CrashKeySize::Size32);
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json
index 8c573a1..8cc4ef24 100644
--- a/testing/buildbot/chrome.json
+++ b/testing/buildbot/chrome.json
@@ -1898,7 +1898,7 @@
       {
         "args": [],
         "cros_board": "dedede",
-        "cros_img": "dedede-release/R109-15227.0.0",
+        "cros_img": "dedede-release/R109-15236.2.0",
         "name": "lacros_all_tast_tests DEDEDE_RELEASE_DEV",
         "resultdb": {
           "enable": true,
@@ -1962,7 +1962,7 @@
       {
         "args": [],
         "cros_board": "eve",
-        "cros_img": "eve-release/R109-15227.0.0",
+        "cros_img": "eve-release/R109-15236.2.0",
         "name": "lacros_all_tast_tests EVE_RELEASE_DEV",
         "resultdb": {
           "enable": true,
@@ -2105,7 +2105,7 @@
       {
         "args": [],
         "cros_board": "jacuzzi",
-        "cros_img": "jacuzzi-release/R109-15231.0.0",
+        "cros_img": "jacuzzi-release/R109-15236.2.0",
         "name": "lacros_all_tast_tests JACUZZI_RELEASE_DEV",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index b61f26f..5359d3d 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -31653,36 +31653,6 @@
     "isolated_scripts": [
       {
         "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/android.nougat-x86-rel.chrome_junit_tests.filter"
-        ],
-        "isolate_name": "chrome_junit_tests",
-        "isolate_profile_data": true,
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "chrome_junit_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cores": "8",
-              "cpu": "x86-64",
-              "os": "Ubuntu-18.04",
-              "pool": "chromium.tests"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/android:chrome_junit_tests/",
-        "use_isolated_scripts_api": true
-      },
-      {
-        "args": [
           "--gtest-benchmark-name=components_perftests",
           "--avd-config=../../tools/android/avd/proto/generic_android24.textpb"
         ],
@@ -31972,6 +31942,17 @@
       },
       {
         "isolate_profile_data": true,
+        "name": "chrome_junit_tests",
+        "resultdb": {
+          "enable": true,
+          "has_native_resultdb_integration": true
+        },
+        "swarming": {},
+        "test": "chrome_junit_tests",
+        "test_id_prefix": "ninja://chrome/android:chrome_junit_tests/"
+      },
+      {
+        "isolate_profile_data": true,
         "name": "components_junit_tests",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index dc29ca5..fd4d056 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5875,9 +5875,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -5889,8 +5889,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
@@ -6041,9 +6041,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -6055,8 +6055,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
@@ -6192,9 +6192,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -6206,8 +6206,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 99a5c9f..91219c7 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -78620,12 +78620,6 @@
       }
     ]
   },
-  "linux-ash-chromium-builder-fyi-rel": {
-    "additional_compile_targets": [
-      "chrome",
-      "test_ash_chrome"
-    ]
-  },
   "linux-backuprefptr-x64-fyi-rel": {
     "gtest_tests": [
       {
@@ -88089,9 +88083,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -88103,8 +88097,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -88225,9 +88219,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -88239,8 +88233,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -88351,9 +88345,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -88365,8 +88359,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -89706,9 +89700,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -89719,8 +89713,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
@@ -89872,9 +89866,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -89885,8 +89879,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
@@ -90023,9 +90017,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -90036,8 +90030,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
@@ -91558,9 +91552,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -91571,8 +91565,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
@@ -91724,9 +91718,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -91737,8 +91731,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
@@ -91875,9 +91869,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -91888,8 +91882,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
@@ -92687,9 +92681,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -92700,8 +92694,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index 5400f7e..30ff4d2 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -5363,7 +5363,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=validating",
         "merge": {
           "args": [],
@@ -5393,7 +5393,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc",
         "merge": {
           "args": [],
@@ -5423,7 +5423,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc",
         "merge": {
           "args": [],
@@ -5457,7 +5457,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --force_high_performance_gpu",
         "merge": {
           "args": [],
@@ -5491,7 +5491,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=validating",
         "merge": {
           "args": [],
@@ -5526,7 +5526,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --force_higher_performance_gpu --use-cmd-decoder=validating",
         "merge": {
           "args": [],
@@ -5560,7 +5560,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=validating",
         "merge": {
           "args": [],
@@ -5596,7 +5596,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=validating",
         "merge": {
           "args": [],
@@ -5626,7 +5626,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc",
         "merge": {
           "args": [],
@@ -5656,7 +5656,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=validating",
         "merge": {
           "args": [],
@@ -5689,7 +5689,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-gl=angle --use-angle=gles --use-cmd-decoder=passthrough --force_high_performance_gpu",
         "merge": {
           "args": [],
@@ -5722,7 +5722,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
         "merge": {
           "args": [],
@@ -5754,7 +5754,7 @@
         "autotest_name": "chromium_GPU",
         "bucket": "chromiumos-image-archive",
         "cros_board": "kevin",
-        "cros_img": "kevin-public/R105-14988.0.0",
+        "cros_img": "kevin-public/R109-15237.0.0",
         "extra_browser_args": "--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=validating --force_high_performance_gpu",
         "merge": {
           "args": [],
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json
index 1e8b99c..6d189d34 100644
--- a/testing/buildbot/chromium.mac.json
+++ b/testing/buildbot/chromium.mac.json
@@ -8902,7 +8902,8 @@
         "args": [
           "--num-retries=3",
           "--write-run-histories-to=${ISOLATED_OUTDIR}/run_histories.json",
-          "--git-revision=${got_revision}"
+          "--git-revision=${got_revision}",
+          "--driver-logging"
         ],
         "check_flakiness_for_new_tests": false,
         "isolate_name": "blink_wpt_tests",
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index c46b0325..6a7710b 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -18562,10 +18562,10 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18577,8 +18577,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
@@ -18736,10 +18736,10 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18751,8 +18751,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
@@ -18892,10 +18892,10 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always"
         ],
-        "description": "Run with ash-chrome version 110.0.5420.0",
+        "description": "Run with ash-chrome version 110.0.5421.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18907,8 +18907,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v110.0.5420.0",
-              "revision": "version:110.0.5420.0"
+              "location": "lacros_version_skew_tests_v110.0.5421.0",
+              "revision": "version:110.0.5421.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/filters/BUILD.gn b/testing/buildbot/filters/BUILD.gn
index e77bab30..c93951d 100644
--- a/testing/buildbot/filters/BUILD.gn
+++ b/testing/buildbot/filters/BUILD.gn
@@ -71,7 +71,7 @@
 source_set("chrome_junit_tests_filters") {
   testonly = true
 
-  data = [ "//testing/buildbot/filters/android.nougat-x86-rel.chrome_junit_tests.filter" ]
+  data = []
 }
 
 source_set("chrome_public_test_apk_filters") {
diff --git a/testing/buildbot/filters/android.nougat-x86-rel.chrome_junit_tests.filter b/testing/buildbot/filters/android.nougat-x86-rel.chrome_junit_tests.filter
deleted file mode 100644
index c4215eb6..0000000
--- a/testing/buildbot/filters/android.nougat-x86-rel.chrome_junit_tests.filter
+++ /dev/null
@@ -1,6 +0,0 @@
-# crbug.com/1378315
--org.chromium.chrome.browser.subscriptions.ImplicitPriceDropSubscriptionsManagerUnitTest*
-
-# crbug.com/1378779
--org.chromium.chrome.browser.share.link_to_text.LinkToTextHelperTest.hasTextFragment
--org.chromium.chrome.browser.share.link_to_text.LinkToTextHelperTest.hasTextFragment_URLWithNoTextSelector
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl
index c26264f..7d047af 100644
--- a/testing/buildbot/gn_isolate_map.pyl
+++ b/testing/buildbot/gn_isolate_map.pyl
@@ -443,7 +443,7 @@
   },
   "chrome_junit_tests": {
     "label": "//chrome/android:chrome_junit_tests",
-    "type": "generated_script",
+    "type": "junit_test",
   },
   "chrome_modern_public_bundle_smoke_test": {
     "label": "//chrome/android:chrome_modern_public_bundle_smoke_test",
@@ -1793,10 +1793,6 @@
     "script": "//testing/scripts/run_telemetry_as_googletest.py",
     "type": "script",
   },
-  "test_ash_chrome": {
-    "label": "//chrome/test:test_ash_chrome",
-    "type": "additional_compile_target",
-  },
   "test_cpp_including_rust_unittests": {
     "label": "//build/rust/tests/test_cpp_including_rust:test_cpp_including_rust_unittests",
     "type": "console_test_launcher",
diff --git a/testing/buildbot/internal.chromeos.fyi.json b/testing/buildbot/internal.chromeos.fyi.json
index 2b9aaff..f7fb55a 100644
--- a/testing/buildbot/internal.chromeos.fyi.json
+++ b/testing/buildbot/internal.chromeos.fyi.json
@@ -1108,7 +1108,7 @@
       {
         "args": [],
         "cros_board": "octopus",
-        "cros_img": "octopus-release/R109-15231.0.0",
+        "cros_img": "octopus-release/R109-15236.2.0",
         "name": "lacros_fyi_tast_tests OCTOPUS_RELEASE_DEV",
         "swarming": {},
         "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)",
@@ -1155,7 +1155,7 @@
       {
         "args": [],
         "cros_board": "octopus",
-        "cros_img": "octopus-release/R109-15231.0.0",
+        "cros_img": "octopus-release/R109-15236.2.0",
         "name": "ozone_unittests OCTOPUS_RELEASE_DEV",
         "swarming": {},
         "test": "ozone_unittests",
@@ -1207,7 +1207,7 @@
       {
         "args": [],
         "cros_board": "hana",
-        "cros_img": "hana-release/R109-15231.0.0",
+        "cros_img": "hana-release/R109-15236.2.0",
         "name": "lacros_all_tast_tests HANA_RELEASE_DEV",
         "swarming": {},
         "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)",
@@ -1255,7 +1255,7 @@
       {
         "args": [],
         "cros_board": "strongbad",
-        "cros_img": "strongbad-release/R109-15231.0.0",
+        "cros_img": "strongbad-release/R109-15236.2.0",
         "name": "lacros_all_tast_tests strongbad_RELEASE_DEV",
         "swarming": {},
         "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)",
@@ -1302,7 +1302,7 @@
       {
         "args": [],
         "cros_board": "hana",
-        "cros_img": "hana-release/R109-15231.0.0",
+        "cros_img": "hana-release/R109-15236.2.0",
         "name": "ozone_unittests HANA_RELEASE_DEV",
         "swarming": {},
         "test": "ozone_unittests",
@@ -1346,7 +1346,7 @@
       {
         "args": [],
         "cros_board": "strongbad",
-        "cros_img": "strongbad-release/R109-15231.0.0",
+        "cros_img": "strongbad-release/R109-15236.2.0",
         "name": "ozone_unittests strongbad_RELEASE_DEV",
         "swarming": {},
         "test": "ozone_unittests",
@@ -1390,7 +1390,7 @@
       {
         "args": [],
         "cros_board": "hana",
-        "cros_img": "hana-release/R109-15231.0.0",
+        "cros_img": "hana-release/R109-15236.2.0",
         "name": "viz_unittests HANA_RELEASE_DEV",
         "swarming": {},
         "test": "viz_unittests",
@@ -1434,7 +1434,7 @@
       {
         "args": [],
         "cros_board": "strongbad",
-        "cros_img": "strongbad-release/R109-15231.0.0",
+        "cros_img": "strongbad-release/R109-15236.2.0",
         "name": "viz_unittests strongbad_RELEASE_DEV",
         "swarming": {},
         "test": "viz_unittests",
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl
index 7258609..64b0240 100644
--- a/testing/buildbot/mixins.pyl
+++ b/testing/buildbot/mixins.pyl
@@ -360,7 +360,7 @@
   },
   'chromeos-kevin-skylab': {
     'cros_board': 'kevin',
-    'cros_img': 'kevin-public/R105-14988.0.0',
+    'cros_img': 'kevin-public/R109-15237.0.0',
     'bucket': 'chromiumos-image-archive',
   },
   'chromeos-octopus': {
@@ -635,14 +635,6 @@
   'isolate_profile_data': {
     'isolate_profile_data': True,
   },
-  'junit-swarming': {
-    'swarming': {
-      'dimensions': {
-        'cores': '8',
-        'pool': 'chromium.tests',
-      },
-    },
-  },
   'kitkat-x86-emulator': {
     '$mixin_append': {
       'args': [
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 89acb6f..3bfccf7 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -608,6 +608,9 @@
         },
       },
       'Mac12 Tests': {
+        'args': [
+          '--driver-logging',
+        ],
         'swarming': {
           'dimension_sets': [
             {
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index d887333..cd09482 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -993,7 +993,7 @@
     'chromium_gtests_for_win_and_linux_only': {
     },
 
-    'chromium_junit_tests_no_swarming': {
+    'chromium_junit_tests': {
       'android_webview_junit_tests': {
         'remove_mixins': [
           'nougat-x86-emulator',
@@ -1106,133 +1106,6 @@
       },
     },
 
-    'chromium_junit_tests_scripts': {
-      'chrome_junit_tests': {
-        'args': [
-          '--test-launcher-filter-file=../../testing/buildbot/filters/android.nougat-x86-rel.chrome_junit_tests.filter',
-        ],
-        'mixins': [
-          'x86-64',
-          'linux-bionic',
-          'junit-swarming',
-        ],
-        'remove_mixins': [
-          'emulator-4-cores',
-          'nougat-x86-emulator',
-        ],
-        'use_isolated_scripts_api': True,
-      },
-    },
-
-    # TODO(crbug.com/1320434): remove this once all junit tests are migrated
-    'chromium_junit_tests_some_swarming': {
-      'android_webview_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'base_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'build_junit_tests':{
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'chrome_java_test_pagecontroller_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'components_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'content_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'device_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'junit_unit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'keyboard_accessory_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'media_base_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'module_installer_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'net_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'paint_preview_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'password_check_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'password_manager_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'services_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'touch_to_fill_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'ui_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'webapk_client_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'webapk_shell_apk_h2o_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-      'webapk_shell_apk_junit_tests': {
-        'remove_mixins': [
-          'nougat-x86-emulator',
-        ],
-      },
-    },
-
     'chromium_linux_scripts': {
       'check_network_annotations': {
         'script': 'check_network_annotations.py',
@@ -6480,7 +6353,6 @@
 
     'nougat_isolated_scripts': [
       'android_isolated_scripts',
-      'chromium_junit_tests_scripts',
       'components_perftests_isolated_scripts',
       'monochrome_public_apk_checker_isolated_script',
       'telemetry_android_minidump_unittests_isolated_scripts',
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 9527c48..e57715c 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -22,16 +22,16 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5420.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v110.0.5421.0/test_ash_chrome',
     ],
-    'description': 'Run with ash-chrome version 110.0.5420.0',
+    'description': 'Run with ash-chrome version 110.0.5421.0',
     'identifier': 'Lacros version skew testing ash canary',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v110.0.5420.0',
-          'revision': 'version:110.0.5420.0',
+          'location': 'lacros_version_skew_tests_v110.0.5421.0',
+          'revision': 'version:110.0.5421.0',
         },
       ],
     },
@@ -476,8 +476,8 @@
   'CROS_DEDEDE_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'dedede',
-      'cros_chrome_version': '109.0.5391.0',
-      'cros_img': 'dedede-release/R109-15227.0.0',
+      'cros_chrome_version': '109.0.5412.2',
+      'cros_img': 'dedede-release/R109-15236.2.0',
     },
     'enabled': True,
     'identifier': 'DEDEDE_RELEASE_DEV',
@@ -512,8 +512,8 @@
   'CROS_EVE_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'eve',
-      'cros_chrome_version': '109.0.5391.0',
-      'cros_img': 'eve-release/R109-15227.0.0',
+      'cros_chrome_version': '109.0.5412.2',
+      'cros_img': 'eve-release/R109-15236.2.0',
     },
     'enabled': True,
     'identifier': 'EVE_RELEASE_DEV',
@@ -558,8 +558,8 @@
   'CROS_HANA_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'hana',
-      'cros_chrome_version': '109.0.5399.0',
-      'cros_img': 'hana-release/R109-15231.0.0',
+      'cros_chrome_version': '109.0.5412.2',
+      'cros_img': 'hana-release/R109-15236.2.0',
     },
     'enabled': True,
     'identifier': 'HANA_RELEASE_DEV',
@@ -603,8 +603,8 @@
   'CROS_JACUZZI_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'jacuzzi',
-      'cros_chrome_version': '109.0.5399.0',
-      'cros_img': 'jacuzzi-release/R109-15231.0.0',
+      'cros_chrome_version': '109.0.5412.2',
+      'cros_img': 'jacuzzi-release/R109-15236.2.0',
     },
     'enabled': True,
     'identifier': 'JACUZZI_RELEASE_DEV',
@@ -669,8 +669,8 @@
   'CROS_OCTOPUS_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'octopus',
-      'cros_chrome_version': '109.0.5399.0',
-      'cros_img': 'octopus-release/R109-15231.0.0',
+      'cros_chrome_version': '109.0.5412.2',
+      'cros_img': 'octopus-release/R109-15236.2.0',
     },
     'enabled': True,
     'identifier': 'OCTOPUS_RELEASE_DEV',
@@ -705,8 +705,8 @@
   'CROS_STRONGBAD_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'strongbad',
-      'cros_chrome_version': '109.0.5399.0',
-      'cros_img': 'strongbad-release/R109-15231.0.0',
+      'cros_chrome_version': '109.0.5412.2',
+      'cros_img': 'strongbad-release/R109-15236.2.0',
     },
     'enabled': True,
     'identifier': 'strongbad_RELEASE_DEV',
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 44edc7c..75fbb5d 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -574,7 +574,7 @@
           'microdump_stackwalk',
         ],
         'test_suites': {
-          'junit_tests': 'chromium_junit_tests_no_swarming',
+          'junit_tests': 'chromium_junit_tests',
         },
       },
       'Android arm64 Builder (dbg)': {},
@@ -740,7 +740,7 @@
         ],
         'test_suites': {
           'gtest_tests': 'android_marshmallow_gtests',
-          'junit_tests': 'chromium_junit_tests_no_swarming',
+          'junit_tests': 'chromium_junit_tests',
           'isolated_scripts': 'monochrome_public_apk_checker_isolated_script',
         },
         'os_type': 'android',
@@ -968,7 +968,7 @@
         'os_type': 'android',
         'test_suites': {
           'gtest_tests': 'android_nougat_emulator_gtests',
-          'junit_tests': 'chromium_junit_tests_some_swarming',
+          'junit_tests': 'chromium_junit_tests',
           'isolated_scripts': 'nougat_isolated_scripts',
           'scripts': 'chromium_android_scripts',
         },
@@ -1542,7 +1542,7 @@
         # This mirrors 'android-lollipop-arm-rel'.
         'test_suites': {
           'gtest_tests': 'chromium_android_gtests',
-          'junit_tests': 'chromium_junit_tests_no_swarming',
+          'junit_tests': 'chromium_junit_tests',
           'isolated_scripts': 'monochrome_public_apk_checker_isolated_script_and_sizes',
         },
         'os_type': 'android',
@@ -2958,7 +2958,7 @@
         ],
         'test_suites': {
           'gtest_tests': 'android_pie_coverage_gtests',
-          'junit_tests': 'chromium_junit_tests_no_swarming',
+          'junit_tests': 'chromium_junit_tests',
         },
         'os_type': 'android',
       },
@@ -3297,12 +3297,6 @@
           'scripts': 'test_traffic_annotation_auditor_script',
         },
       },
-      'linux-ash-chromium-builder-fyi-rel': {
-        'additional_compile_targets': [
-          'chrome',
-          'test_ash_chrome',
-        ],
-      },
       'linux-backuprefptr-x64-fyi-rel': {
         'test_suites': {
           'gtest_tests': 'chromium_linux_and_dangling_pointer_detection_gtests',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index d9b6b00..50453e4 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -163,21 +163,6 @@
             ]
         }
     ],
-    "AndroidContextualSearchForceCaption": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "ContextualSearchForceCaption"
-                    ]
-                }
-            ]
-        }
-    ],
     "AndroidDiscardOccludedBitmaps": [
         {
             "platforms": [
@@ -1167,29 +1152,6 @@
             ]
         }
     ],
-    "AutofillEnableSendingBcnInGetUploadDetails": [
-        {
-            "platforms": [
-                "android",
-                "android_webview",
-                "chromeos",
-                "chromeos_lacros",
-                "fuchsia",
-                "ios",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "AutofillEnableSendingBcnInGetUploadDetails"
-                    ]
-                }
-            ]
-        }
-    ],
     "AutofillEnableSupportForParsingWithSharedLabels": [
         {
             "platforms": [
@@ -2313,23 +2275,6 @@
             ]
         }
     ],
-    "CacheSiteIsolationMemoryThreshold": [
-        {
-            "platforms": [
-                "android",
-                "android_webview",
-                "android_weblayer"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "CacheSiteIsolationMemoryThreshold"
-                    ]
-                }
-            ]
-        }
-    ],
     "CacheTransparency": [
         {
             "platforms": [
@@ -7053,21 +6998,6 @@
             ]
         }
     ],
-    "MojoAvoidRandomPipeId": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "MojoAvoidRandomPipeId"
-                    ]
-                }
-            ]
-        }
-    ],
     "MojoInlineMessagePayloads": [
         {
             "platforms": [
@@ -7217,27 +7147,6 @@
             ]
         }
     ],
-    "NewSigninRequestHeaderCheckOrder": [
-        {
-            "platforms": [
-                "android",
-                "chromeos",
-                "chromeos_lacros",
-                "fuchsia",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "NewSigninRequestHeaderCheckOrder"
-                    ]
-                }
-            ]
-        }
-    ],
     "NoCentralWebCacheLimitControl": [
         {
             "platforms": [
@@ -10714,6 +10623,25 @@
             ]
         }
     ],
+    "SplitUserMediaQueues": [
+        {
+            "platforms": [
+                "chromeos",
+                "chromeos_lacros",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "SplitUserMediaQueues"
+                    ]
+                }
+            ]
+        }
+    ],
     "StartAssistantAudioDecoderOnDemandStudy": [
         {
             "platforms": [
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index c169fea..95072ddb 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -1065,14 +1065,6 @@
              "DelayLowPriorityRequestsAccordingToNetworkState",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-BASE_FEATURE(kIncludeInitiallyInvisibleImagesInLCP,
-             "IncludeInitiallyInvisibleImagesInLCP",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
-BASE_FEATURE(kIncludeBackgroundSVGInLCP,
-             "IncludeBackgroundSVGInLCP",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 const base::FeatureParam<int> kMaxNumOfThrottleableRequestsInTightMode{
     &kDelayLowPriorityRequestsAccordingToNetworkState,
     "MaxNumOfThrottleableRequestsInTightMode", 5};
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index 3f0fee9..c58a285 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -465,14 +465,6 @@
 BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(
     kDelayLowPriorityRequestsAccordingToNetworkState);
 
-// When enabled, this turns off an LCP calculation optimization that's ignoring
-// initially invisible images, and resulting in LCP correctness issues. See
-// https://crbug.com/1249622
-BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kIncludeInitiallyInvisibleImagesInLCP);
-
-// When enabled, this includes SVG background images in LCP calculation.
-BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kIncludeBackgroundSVGInLCP);
-
 // Number of the requests that can be handled in the tight mode.
 BLINK_COMMON_EXPORT
 extern const base::FeatureParam<int> kMaxNumOfThrottleableRequestsInTightMode;
diff --git a/third_party/blink/public/mojom/webid/federated_auth_request.mojom b/third_party/blink/public/mojom/webid/federated_auth_request.mojom
index f7742fd..0d58393 100644
--- a/third_party/blink/public/mojom/webid/federated_auth_request.mojom
+++ b/third_party/blink/public/mojom/webid/federated_auth_request.mojom
@@ -58,19 +58,31 @@
   string nonce;
 };
 
+// The parameters for a get call for identity provider(s).
+struct IdentityProviderGetParameters {
+  // Details of identity provider(s).
+  array<IdentityProvider> providers;
+
+  // Whether auto sign in is preferred by the caller.
+  bool prefer_auto_sign_in;
+};
+
 // Create a federated sign-in request using the specified provider.
 // This interface is called from a renderer process and implemented in the
 // browser process.
 interface FederatedAuthRequest {
-  // Requests a token to be generated, given an array of IdentityProviders.
+  // Requests a token to be generated, given an array of
+  // IdentityProviderGetParameters.
   // Returns:
+  // - Status of token request.
   // - Configuration URL of the identity provider that the user selected.
   //   A null URL is returned if the token request failed or did not occur due
   //   to an error earlier in the flow.
   // - Raw content of the token.
-  RequestToken(array<IdentityProvider> identity_providers,
-               bool prefer_auto_sign_in) =>
-      (RequestTokenStatus status, url.mojom.Url? selected_identity_provider_config_url, string? token);
+  RequestToken(array<IdentityProviderGetParameters> idp_get_params) =>
+      (RequestTokenStatus status,
+      url.mojom.Url? selected_identity_provider_config_url,
+      string? token);
 
   // Cancels the pending token request, if any.
   CancelTokenRequest();
diff --git a/third_party/blink/renderer/core/css/style_recalc_root.cc b/third_party/blink/renderer/core/css/style_recalc_root.cc
index 06738ef9..0fb7e283 100644
--- a/third_party/blink/renderer/core/css/style_recalc_root.cc
+++ b/third_party/blink/renderer/core/css/style_recalc_root.cc
@@ -96,9 +96,12 @@
   // next style recalc.
   auto opt_ancestor = FirstFlatTreeAncestorForChildDirty(parent);
   if (!opt_ancestor) {
-    Update(&parent, &parent);
+    ContainerNode* new_root = IsFlatTreeConnected(parent)
+                                  ? &parent
+                                  : parent.GetDocument().documentElement();
+    Update(new_root, new_root);
     DCHECK(!IsSingleRoot());
-    DCHECK_EQ(GetRootNode(), &parent);
+    DCHECK_EQ(GetRootNode(), new_root);
     return;
   }
   for (Element* ancestor = opt_ancestor.value(); ancestor;
diff --git a/third_party/blink/renderer/core/dom/popover_data.h b/third_party/blink/renderer/core/dom/popover_data.h
index 3d4e3b94..96e1cd0 100644
--- a/third_party/blink/renderer/core/dom/popover_data.h
+++ b/third_party/blink/renderer/core/dom/popover_data.h
@@ -26,11 +26,6 @@
   PopoverData(const PopoverData&) = delete;
   PopoverData& operator=(const PopoverData&) = delete;
 
-  bool hadDefaultOpenWhenParsed() const { return had_defaultopen_when_parsed_; }
-  void setHadDefaultOpenWhenParsed(bool value) {
-    had_defaultopen_when_parsed_ = value;
-  }
-
   PopoverVisibilityState visibilityState() const { return visibility_state_; }
   void setVisibilityState(PopoverVisibilityState visibility_state) {
     visibility_state_ = visibility_state;
@@ -91,7 +86,6 @@
   }
 
  private:
-  bool had_defaultopen_when_parsed_ = false;
   PopoverVisibilityState visibility_state_ = PopoverVisibilityState::kHidden;
   PopoverValueType type_ = PopoverValueType::kNone;
   WeakMember<Element> invoker_;
diff --git a/third_party/blink/renderer/core/exported/web_media_player_impl_unittest.cc b/third_party/blink/renderer/core/exported/web_media_player_impl_unittest.cc
index 3fb42981..d3e0088 100644
--- a/third_party/blink/renderer/core/exported/web_media_player_impl_unittest.cc
+++ b/third_party/blink/renderer/core/exported/web_media_player_impl_unittest.cc
@@ -690,25 +690,11 @@
   }
 
   bool ShouldCancelUponDefer() const {
-    CHECK_NE(wmpi_->data_source_, nullptr);
-    CHECK_NE(wmpi_->data_source_->GetAsCrossOriginDataSource(), nullptr);
-    // Right now, the only implementation of DataSource that WMPI can get
-    // which returns non-null from GetAsCrossOriginDataSource is
-    // MultiBufferDataSource, so the CHECKs above allow us to be safe casting
-    // this here.
-    // TODO(crbug/1377053): Can we add |cancel_on_defer_for_testing| to
-    // CrossOriginDataSource? We can't do a |GetAsMultiBufferDataSource| since
-    // MBDS is in blink, and we can't import that into media.
-    return static_cast<MultiBufferDataSource*>(wmpi_->data_source_.get())
-        ->cancel_on_defer_for_testing();
+    return wmpi_->mb_data_source_->cancel_on_defer_for_testing();
   }
 
   bool IsDataSourceMarkedAsPlaying() const {
-    CHECK_NE(wmpi_->data_source_, nullptr);
-    CHECK_NE(wmpi_->data_source_->GetAsCrossOriginDataSource(), nullptr);
-    // See comment in |ShouldCancelUponDefer|.
-    return static_cast<MultiBufferDataSource*>(wmpi_->data_source_.get())
-        ->media_has_played();
+    return wmpi_->mb_data_source_->media_has_played();
   }
 
   scoped_refptr<media::VideoFrame> CreateFrame() {
diff --git a/third_party/blink/renderer/core/html/build.gni b/third_party/blink/renderer/core/html/build.gni
index d649209..3ffd006 100644
--- a/third_party/blink/renderer/core/html/build.gni
+++ b/third_party/blink/renderer/core/html/build.gni
@@ -576,6 +576,7 @@
   "parser/atomic_html_token.h",
   "parser/css_preload_scanner.cc",
   "parser/css_preload_scanner.h",
+  "parser/html_attributes_ranges.h",
   "parser/html_construction_site.cc",
   "parser/html_construction_site.h",
   "parser/html_document_parser.cc",
diff --git a/third_party/blink/renderer/core/html/html_attribute_names.json5 b/third_party/blink/renderer/core/html/html_attribute_names.json5
index af82232..aa0cc925 100644
--- a/third_party/blink/renderer/core/html/html_attribute_names.json5
+++ b/third_party/blink/renderer/core/html/html_attribute_names.json5
@@ -111,7 +111,6 @@
     "imagesrcset",
     "incremental",
     "inert",
-    "defaultopen",
     "inputmode",
     "integrity",
     "is",
diff --git a/third_party/blink/renderer/core/html/html_element.cc b/third_party/blink/renderer/core/html/html_element.cc
index a24636c5..e508d73 100644
--- a/third_party/blink/renderer/core/html/html_element.cc
+++ b/third_party/blink/renderer/core/html/html_element.cc
@@ -773,13 +773,6 @@
     EnsureElementInternals().ReadonlyAttributeChanged();
     return;
   }
-  if (params.reason == AttributeModificationReason::kByParser &&
-      params.name == html_names::kDefaultopenAttr && HasPopoverAttribute()) {
-    DCHECK(RuntimeEnabledFeatures::HTMLPopoverAttributeEnabled(
-        GetDocument().GetExecutionContext()));
-    DCHECK(!isConnected());
-    GetPopoverData()->setHadDefaultOpenWhenParsed(true);
-  }
 
   if (params.reason != AttributeModificationReason::kDirectly)
     return;
@@ -2375,31 +2368,6 @@
   if (IsFormAssociatedCustomElement())
     EnsureElementInternals().InsertedInto(insertion_point);
 
-  if (GetPopoverData() && GetPopoverData()->hadDefaultOpenWhenParsed()) {
-    // If a Popover element has the `defaultopen` attribute upon page
-    // load, and it is the *first* such popover, show it.
-    DCHECK(RuntimeEnabledFeatures::HTMLPopoverAttributeEnabled(
-        GetDocument().GetExecutionContext()));
-    DCHECK(isConnected());
-    GetPopoverData()->setHadDefaultOpenWhenParsed(false);
-    auto maybe_show_popover = [](HTMLElement* popover) {
-      // The `defaultopen` attribute can only be used on popover=manual and
-      // popover=auto popovers.
-      bool is_open_dialog = popover && IsA<HTMLDialogElement>(popover) &&
-                            popover->hasAttribute(html_names::kOpenAttr);
-      if (popover && popover->isConnected() && !is_open_dialog &&
-          (popover->PopoverType() == PopoverValueType::kManual ||
-           (popover->PopoverType() == PopoverValueType::kAuto &&
-            !popover->GetDocument().PopoverAutoShowing()))) {
-        popover->showPopover(ASSERT_NO_EXCEPTION);
-      }
-    };
-    GetDocument()
-        .GetTaskRunner(TaskType::kDOMManipulation)
-        ->PostTask(FROM_HERE,
-                   WTF::BindOnce(maybe_show_popover, WrapWeakPersistent(this)));
-  }
-
   return kInsertionDone;
 }
 
diff --git a/third_party/blink/renderer/core/html/html_element.idl b/third_party/blink/renderer/core/html/html_element.idl
index a64f0a5..0ed88dc4 100644
--- a/third_party/blink/renderer/core/html/html_element.idl
+++ b/third_party/blink/renderer/core/html/html_element.idl
@@ -70,7 +70,6 @@
     [MeasureAs=ElementShowPopover,RuntimeEnabled=HTMLPopoverAttribute,RaisesException] void showPopover();
     [MeasureAs=ElementHidePopover,RuntimeEnabled=HTMLPopoverAttribute,RaisesException] void hidePopover();
     [CEReactions,RuntimeEnabled=HTMLPopoverAttribute,MeasureAs=AnyPopoverAttribute,Reflect,ReflectOnly=("auto","manual"),ReflectEmpty="auto",ReflectInvalid="manual"] attribute DOMString? popover;
-    [CEReactions,RuntimeEnabled=HTMLPopoverAttribute,Reflect] attribute boolean defaultOpen;
 
     // Non-standard APIs
     [CEReactions, RaisesException=Setter, MeasureAs=HTMLElementInnerText, ImplementedAs=innerTextForBinding] attribute ([TreatNullAs=EmptyString] DOMString or TrustedScript) innerText;
diff --git a/third_party/blink/renderer/core/html/html_view_source_document.cc b/third_party/blink/renderer/core/html/html_view_source_document.cc
index f71898c9..bc795ffe 100644
--- a/third_party/blink/renderer/core/html/html_view_source_document.cc
+++ b/third_party/blink/renderer/core/html/html_view_source_document.cc
@@ -137,7 +137,11 @@
   body->ParserAppendChild(table);
 }
 
-void HTMLViewSourceDocument::AddSource(const String& source, HTMLToken& token) {
+void HTMLViewSourceDocument::AddSource(
+    const String& source,
+    HTMLToken& token,
+    const HTMLAttributesRanges& attributes_ranges,
+    int token_start) {
   if (!current_)
     CreateContainingTable();
 
@@ -153,7 +157,7 @@
       break;
     case HTMLToken::kStartTag:
     case HTMLToken::kEndTag:
-      ProcessTagToken(source, token);
+      ProcessTagToken(source, token, attributes_ranges, token_start);
       break;
     case HTMLToken::kComment:
       ProcessCommentToken(source, token);
@@ -178,51 +182,60 @@
   current_ = td_;
 }
 
-void HTMLViewSourceDocument::ProcessTagToken(const String& source,
-                                             HTMLToken& token) {
+void HTMLViewSourceDocument::ProcessTagToken(
+    const String& source,
+    const HTMLToken& token,
+    const HTMLAttributesRanges& attributes_ranges,
+    int token_start) {
   current_ = AddSpanWithClassName("html-tag");
 
   AtomicString tag_name = token.GetName().AsAtomicString();
 
   unsigned index = 0;
-  HTMLToken::AttributeList::const_iterator iter = token.Attributes().begin();
+  wtf_size_t attribute_index = 0;
+  DCHECK_EQ(token.Attributes().size(), attributes_ranges.attributes().size());
   while (index < source.length()) {
-    if (iter == token.Attributes().end()) {
+    if (attribute_index == attributes_ranges.attributes().size()) {
       // We want to show the remaining characters in the token.
       index = AddRange(source, index, source.length(), g_empty_atom);
       DCHECK_EQ(index, source.length());
       break;
     }
 
-    AtomicString name(iter->GetName());
-    AtomicString value(iter->Value8BitIfNecessary());
+    const HTMLToken::Attribute& attribute = token.Attributes()[attribute_index];
+    const AtomicString name(attribute.GetName());
+    const AtomicString value(attribute.GetValue());
+
+    const HTMLAttributesRanges::Attribute& attribute_range =
+        attributes_ranges.attributes()[attribute_index];
 
     index =
-        AddRange(source, index, iter->NameRange().start - token.StartIndex(),
+        AddRange(source, index, attribute_range.name_range.start - token_start,
                  g_empty_atom);
-    index = AddRange(source, index, iter->NameRange().end - token.StartIndex(),
-                     "html-attribute-name");
+    index =
+        AddRange(source, index, attribute_range.name_range.end - token_start,
+                 "html-attribute-name");
 
     if (tag_name == html_names::kBaseTag && name == html_names::kHrefAttr)
       AddBase(value);
 
     index =
-        AddRange(source, index, iter->ValueRange().start - token.StartIndex(),
+        AddRange(source, index, attribute_range.value_range.start - token_start,
                  g_empty_atom);
 
     if (name == html_names::kSrcsetAttr) {
-      index =
-          AddSrcset(source, index, iter->ValueRange().end - token.StartIndex());
+      index = AddSrcset(source, index,
+                        attribute_range.value_range.end - token_start);
     } else {
       bool is_link =
           name == html_names::kSrcAttr || name == html_names::kHrefAttr;
       index =
-          AddRange(source, index, iter->ValueRange().end - token.StartIndex(),
+          AddRange(source, index, attribute_range.value_range.end - token_start,
                    "html-attribute-value", is_link,
                    tag_name == html_names::kATag, value);
     }
 
-    ++iter;
+    ++attribute_index;
   }
   current_ = td_;
 }
diff --git a/third_party/blink/renderer/core/html/html_view_source_document.h b/third_party/blink/renderer/core/html/html_view_source_document.h
index 7076c61..cb814f2e 100644
--- a/third_party/blink/renderer/core/html/html_view_source_document.h
+++ b/third_party/blink/renderer/core/html/html_view_source_document.h
@@ -30,6 +30,7 @@
 
 namespace blink {
 
+class HTMLAttributesRanges;
 class HTMLTableCellElement;
 class HTMLTableSectionElement;
 class HTMLToken;
@@ -38,7 +39,11 @@
  public:
   HTMLViewSourceDocument(const DocumentInit&);
 
-  void AddSource(const String&, HTMLToken&);
+  // `token_start` is the offset into the document the token started at.
+  void AddSource(const String&,
+                 HTMLToken&,
+                 const HTMLAttributesRanges& attributes_ranges,
+                 int token_start);
 
   void Trace(Visitor*) const override;
 
@@ -47,7 +52,10 @@
 
   void ProcessDoctypeToken(const String& source, HTMLToken&);
   void ProcessEndOfFileToken(const String& source, HTMLToken&);
-  void ProcessTagToken(const String& source, HTMLToken&);
+  void ProcessTagToken(const String& source,
+                       const HTMLToken& token,
+                       const HTMLAttributesRanges& attributes_ranges,
+                       int token_start);
   void ProcessCommentToken(const String& source, HTMLToken&);
   void ProcessCharacterToken(const String& source, HTMLToken&);
 
diff --git a/third_party/blink/renderer/core/html/parser/atomic_html_token.h b/third_party/blink/renderer/core/html/parser/atomic_html_token.h
index bc3abda..1577349 100644
--- a/third_party/blink/renderer/core/html/parser/atomic_html_token.h
+++ b/third_party/blink/renderer/core/html/parser/atomic_html_token.h
@@ -336,11 +336,6 @@
     if (attribute.NameIsEmpty())
       continue;
 
-#if DCHECK_IS_ON()
-    attribute.NameRange().CheckValid();
-    attribute.ValueRange().CheckValid();
-#endif
-
     QualifiedName name = g_null_name;
 #if !BUILDFLAG(IS_ANDROID)
     if (g_use_html_attribute_name_lookup) {
diff --git a/third_party/blink/renderer/core/html/parser/atomic_html_token_test.cc b/third_party/blink/renderer/core/html/parser/atomic_html_token_test.cc
index bfbf79d..7dd710a3 100644
--- a/third_party/blink/renderer/core/html/parser/atomic_html_token_test.cc
+++ b/third_party/blink/renderer/core/html/parser/atomic_html_token_test.cc
@@ -11,16 +11,8 @@
 TEST(AtomicHTMLTokenTest, EmptyAttributeValueFromHTMLToken) {
   HTMLToken token;
   token.BeginStartTag('a');
-  token.AddNewAttribute();
-  token.BeginAttributeName(3);
-  token.AppendToAttributeName('b');
-  token.EndAttributeName(4);
-  token.AddNewAttribute();
-  token.BeginAttributeName(5);
-  token.AppendToAttributeName('c');
-  token.EndAttributeName(6);
-  token.BeginAttributeValue(8);
-  token.EndAttributeValue(8);
+  token.AddNewAttribute('b');
+  token.AddNewAttribute('c');
 
   AtomicHTMLToken atoken(token);
 
diff --git a/third_party/blink/renderer/core/html/parser/html_attributes_ranges.h b/third_party/blink/renderer/core/html/parser/html_attributes_ranges.h
new file mode 100644
index 0000000..927d050c
--- /dev/null
+++ b/third_party/blink/renderer/core/html/parser/html_attributes_ranges.h
@@ -0,0 +1,103 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_PARSER_HTML_ATTRIBUTES_RANGES_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_PARSER_HTML_ATTRIBUTES_RANGES_H_
+
+#include "base/check_op.h"
+#include "base/dcheck_is_on.h"
+#include "third_party/blink/renderer/core/dom/attribute.h"
+#include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h"
+#include "third_party/blink/renderer/core/html/parser/literal_buffer.h"
+#include "third_party/blink/renderer/platform/wtf/forward.h"
+
+namespace blink {
+
+// Tracks the ranges (offsets into into the input stream) of the attributes of a
+// token.
+class HTMLAttributesRanges {
+  USING_FAST_MALLOC(HTMLAttributesRanges);
+
+ public:
+  class Range {
+    DISALLOW_NEW();
+
+   public:
+    static constexpr int kInvalidOffset = -1;
+
+    inline void Clear() {
+#if DCHECK_IS_ON()
+      start = kInvalidOffset;
+      end = kInvalidOffset;
+#endif
+    }
+
+    // Check Range instance that is actively being parsed.
+    inline void CheckValidStart() const {
+      DCHECK_NE(start, kInvalidOffset);
+      DCHECK_GE(start, 0);
+    }
+
+    // Check Range instance which finished parse.
+    inline void CheckValid() const {
+      CheckValidStart();
+      DCHECK_NE(end, kInvalidOffset);
+      DCHECK_GE(end, 0);
+      DCHECK_LE(start, end);
+    }
+
+    int start;
+    int end;
+  };
+
+  struct Attribute {
+    Range name_range;
+    Range value_range;
+  };
+
+  using AttributeList = Vector<Attribute, kAttributePrealloc>;
+
+  void Clear() {
+    current_attribute_ = nullptr;
+    attributes_.clear();
+  }
+
+  void AddAttribute(int offset) {
+    attributes_.Grow(attributes_.size() + 1);
+    current_attribute_ = &attributes_.back();
+    current_attribute_->name_range.start = offset;
+    current_attribute_->name_range.CheckValidStart();
+  }
+
+  void EndAttributeName(int offset) {
+    DCHECK(current_attribute_);
+    current_attribute_->name_range.end = offset;
+    current_attribute_->name_range.CheckValid();
+    current_attribute_->value_range.start = offset;
+    current_attribute_->value_range.end = offset;
+  }
+
+  void BeginAttributeValue(int offset) {
+    DCHECK(current_attribute_);
+    current_attribute_->value_range.Clear();
+    current_attribute_->value_range.start = offset;
+    current_attribute_->value_range.CheckValidStart();
+  }
+
+  void EndAttributeValue(int offset) {
+    DCHECK(current_attribute_);
+    current_attribute_->value_range.end = offset;
+    current_attribute_->value_range.CheckValid();
+  }
+
+  const AttributeList& attributes() const { return attributes_; }
+
+ private:
+  AttributeList attributes_;
+  Attribute* current_attribute_ = nullptr;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_PARSER_HTML_ATTRIBUTES_RANGES_H_
diff --git a/third_party/blink/renderer/core/html/parser/html_parser_options.h b/third_party/blink/renderer/core/html/parser/html_parser_options.h
index 2f2d1f6..131a666 100644
--- a/third_party/blink/renderer/core/html/parser/html_parser_options.h
+++ b/third_party/blink/renderer/core/html/parser/html_parser_options.h
@@ -37,6 +37,8 @@
   DISALLOW_NEW();
 
  public:
+  explicit HTMLParserOptions(Document* = nullptr);
+
   // https://html.spec.whatwg.org/C/#scripting-flag
   bool scripting_flag = false;
 
@@ -47,7 +49,8 @@
   // access to an ExecutionContext*, but HTMLParserOptions does.
   bool priority_hints_origin_trial_enabled = false;
 
-  explicit HTMLParserOptions(Document* = nullptr);
+  // If set, the ranges (offsets) of the attribute name and value are tracked.
+  bool track_attributes_ranges = false;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/parser/html_token.h b/third_party/blink/renderer/core/html/parser/html_token.h
index 818b090..f18b01c3 100644
--- a/third_party/blink/renderer/core/html/parser/html_token.h
+++ b/third_party/blink/renderer/core/html/parser/html_token.h
@@ -80,40 +80,7 @@
   };
 
   class Attribute {
-    DISALLOW_NEW();
-
    public:
-    class Range {
-      DISALLOW_NEW();
-
-     public:
-      static constexpr int kInvalidOffset = -1;
-
-      inline void Clear() {
-#if DCHECK_IS_ON()
-        start = kInvalidOffset;
-        end = kInvalidOffset;
-#endif
-      }
-
-      // Check Range instance that is actively being parsed.
-      inline void CheckValidStart() const {
-        DCHECK_NE(start, kInvalidOffset);
-        DCHECK_GE(start, 0);
-      }
-
-      // Check Range instance which finished parse.
-      inline void CheckValid() const {
-        CheckValidStart();
-        DCHECK_NE(end, kInvalidOffset);
-        DCHECK_GE(end, 0);
-        DCHECK_LE(start, end);
-      }
-
-      int start;
-      int end;
-    };
-
     AtomicString GetName() const { return name_.AsAtomicString(); }
     AtomicString GetValue() const { return value_.AsAtomicString(); }
 
@@ -138,18 +105,11 @@
     void AppendToValue(UChar c) { value_.AddChar(c); }
     void ClearValue() { value_.clear(); }
 
-    const Range& NameRange() const { return name_range_; }
-    const Range& ValueRange() const { return value_range_; }
-    Range& MutableNameRange() { return name_range_; }
-    Range& MutableValueRange() { return value_range_; }
-
    private:
     // TODO(chromium:1204030): Do a more rigorous study and select a
     // better-informed inline capacity.
     UCharLiteralBuffer<32> name_;
     UCharLiteralBuffer<32> value_;
-    Range name_range_;
-    Range value_range_;
   };
 
   typedef Vector<Attribute, kAttributePrealloc> AttributeList;
@@ -161,10 +121,7 @@
   // better-informed inline capacity.
   using DataVector = UCharLiteralBuffer<256>;
 
-  HTMLToken() {
-    range_.Clear();
-    range_.start = 0;
-  }
+  HTMLToken() = default;
 
   HTMLToken(const HTMLToken&) = delete;
   HTMLToken& operator=(const HTMLToken&) = delete;
@@ -176,22 +133,21 @@
     copy->doctype_data_ = std::move(doctype_data_);
     copy->type_ = type_;
     copy->self_closing_ = self_closing_;
-    copy->range_ = range_;
-    copy->base_offset_ = base_offset_;
     // Reset to uninitialized.
     Clear();
     return copy;
   }
 
-  void Clear() {
+  ALWAYS_INLINE void Clear() {
     if (type_ == kUninitialized)
       return;
 
     type_ = kUninitialized;
-    range_.Clear();
-    range_.start = 0;
-    base_offset_ = 0;
     data_.clear();
+    if (current_attribute_) {
+      current_attribute_ = nullptr;
+      attributes_.clear();
+    }
   }
 
   bool IsUninitialized() { return type_ == kUninitialized; }
@@ -202,15 +158,6 @@
     type_ = kEndOfFile;
   }
 
-  // Range and offset methods exposed for HTMLSourceTracker and
-  // HTMLViewSourceParser.
-  int StartIndex() const { return range_.start; }
-  int EndIndex() const { return range_.end; }
-
-  void SetBaseOffset(int offset) { base_offset_ = offset; }
-
-  void end(int end_offset) { range_.end = end_offset - base_offset_; }
-
   const DataVector& Data() const {
     DCHECK(type_ == kCharacter || type_ == kComment || type_ == kStartTag ||
            type_ == kEndTag);
@@ -224,7 +171,7 @@
     return data_;
   }
 
-  void AppendToName(UChar character) {
+  ALWAYS_INLINE void AppendToName(UChar character) {
     DCHECK(type_ == kStartTag || type_ == kEndTag || type_ == DOCTYPE);
     DCHECK(character);
     data_.AddChar(character);
@@ -308,80 +255,53 @@
     self_closing_ = true;
   }
 
-  void BeginStartTag(UChar character) {
+  ALWAYS_INLINE void BeginStartTag(LChar character) {
     DCHECK(character);
     DCHECK_EQ(type_, kUninitialized);
     type_ = kStartTag;
     self_closing_ = false;
-    current_attribute_ = nullptr;
-    attributes_.clear();
+    DCHECK(!current_attribute_);
+    DCHECK(attributes_.empty());
 
     data_.AddChar(character);
   }
 
-  void BeginEndTag(LChar character) {
+  ALWAYS_INLINE void BeginEndTag(LChar character) {
     DCHECK_EQ(type_, kUninitialized);
     type_ = kEndTag;
     self_closing_ = false;
-    current_attribute_ = nullptr;
-    attributes_.clear();
+    DCHECK(!current_attribute_);
+    DCHECK(attributes_.empty());
 
     data_.AddChar(character);
   }
 
-  void BeginEndTag(const LCharLiteralBuffer<32>& characters) {
+  ALWAYS_INLINE void BeginEndTag(const LCharLiteralBuffer<32>& characters) {
     DCHECK_EQ(type_, kUninitialized);
     type_ = kEndTag;
     self_closing_ = false;
-    current_attribute_ = nullptr;
-    attributes_.clear();
+    DCHECK(!current_attribute_);
+    DCHECK(attributes_.empty());
 
     data_.AppendLiteral(characters);
   }
 
-  void AddNewAttribute() {
+  ALWAYS_INLINE void AddNewAttribute(UChar character) {
     DCHECK(type_ == kStartTag || type_ == kEndTag);
     attributes_.Grow(attributes_.size() + 1);
     current_attribute_ = &attributes_.back();
-    current_attribute_->MutableNameRange().Clear();
-    current_attribute_->MutableValueRange().Clear();
-  }
-
-  void BeginAttributeName(int offset) {
-    current_attribute_->MutableNameRange().start = offset - base_offset_;
-    current_attribute_->NameRange().CheckValidStart();
-  }
-
-  void EndAttributeName(int offset) {
-    int index = offset - base_offset_;
-    current_attribute_->MutableNameRange().end = index;
-    current_attribute_->NameRange().CheckValid();
-    current_attribute_->MutableValueRange().start = index;
-    current_attribute_->MutableValueRange().end = index;
-  }
-
-  void BeginAttributeValue(int offset) {
-    current_attribute_->MutableValueRange().Clear();
-    current_attribute_->MutableValueRange().start = offset - base_offset_;
-    current_attribute_->ValueRange().CheckValidStart();
-  }
-
-  void EndAttributeValue(int offset) {
-    current_attribute_->MutableValueRange().end = offset - base_offset_;
-    current_attribute_->ValueRange().CheckValid();
-  }
-
-  void AppendToAttributeName(UChar character) {
-    DCHECK(character);
-    DCHECK(type_ == kStartTag || type_ == kEndTag);
-    current_attribute_->NameRange().CheckValidStart();
     current_attribute_->AppendToName(character);
   }
 
-  void AppendToAttributeValue(UChar character) {
+  ALWAYS_INLINE void AppendToAttributeName(UChar character) {
     DCHECK(character);
     DCHECK(type_ == kStartTag || type_ == kEndTag);
-    current_attribute_->ValueRange().CheckValidStart();
+    current_attribute_->AppendToName(character);
+  }
+
+  ALWAYS_INLINE void AppendToAttributeValue(UChar character) {
+    DCHECK(character);
+    DCHECK(type_ == kStartTag || type_ == kEndTag);
     current_attribute_->AppendToValue(character);
   }
 
@@ -402,7 +322,7 @@
 
   // Starting a character token works slightly differently than starting
   // other types of tokens because we want to save a per-character branch.
-  void EnsureIsCharacterToken() {
+  ALWAYS_INLINE void EnsureIsCharacterToken() {
     DCHECK(type_ == kUninitialized || type_ == kCharacter);
     type_ = kCharacter;
   }
@@ -412,17 +332,18 @@
     return data_;
   }
 
-  void AppendToCharacter(char character) {
+  ALWAYS_INLINE void AppendToCharacter(char character) {
     DCHECK_EQ(type_, kCharacter);
     data_.AddChar(character);
   }
 
-  void AppendToCharacter(UChar character) {
+  ALWAYS_INLINE void AppendToCharacter(UChar character) {
     DCHECK_EQ(type_, kCharacter);
     data_.AddChar(character);
   }
 
-  void AppendToCharacter(const LCharLiteralBuffer<32>& characters) {
+  ALWAYS_INLINE void AppendToCharacter(
+      const LCharLiteralBuffer<32>& characters) {
     DCHECK_EQ(type_, kCharacter);
     data_.AppendLiteral(characters);
   }
@@ -434,32 +355,32 @@
     return data_;
   }
 
-  void BeginComment() {
+  ALWAYS_INLINE void BeginComment() {
     DCHECK_EQ(type_, kUninitialized);
     type_ = kComment;
   }
 
-  void AppendToComment(UChar character) {
+  ALWAYS_INLINE void AppendToComment(UChar character) {
     DCHECK(character);
     DCHECK_EQ(type_, kComment);
     data_.AddChar(character);
   }
 
  private:
-  TokenType type_ = kUninitialized;
-  Attribute::Range range_;  // Always starts at zero.
-  int base_offset_ = 0;
   DataVector data_;
 
-  // For StartTag and EndTag
-  bool self_closing_;
   AttributeList attributes_;
 
   // A pointer into attributes_ used during lexing.
-  Attribute* current_attribute_;
+  Attribute* current_attribute_ = nullptr;
 
   // For DOCTYPE
   std::unique_ptr<DoctypeData> doctype_data_;
+
+  TokenType type_ = kUninitialized;
+
+  // For StartTag and EndTag
+  bool self_closing_;
 };
 
 #ifndef NDEBUG
diff --git a/third_party/blink/renderer/core/html/parser/html_tokenizer.cc b/third_party/blink/renderer/core/html/parser/html_tokenizer.cc
index e3bd603..9c0a3bf 100644
--- a/third_party/blink/renderer/core/html/parser/html_tokenizer.cc
+++ b/third_party/blink/renderer/core/html/parser/html_tokenizer.cc
@@ -143,7 +143,9 @@
 #define HTML_SWITCH_TO(stateName) SWITCH_TO(HTMLTokenizer, stateName)
 
 HTMLTokenizer::HTMLTokenizer(const HTMLParserOptions& options)
-    : input_stream_preprocessor_(this), options_(options) {
+    : track_attributes_ranges_(options.track_attributes_ranges),
+      input_stream_preprocessor_(this),
+      options_(options) {
   Reset();
 }
 
@@ -174,10 +176,14 @@
   return true;
 }
 
-bool HTMLTokenizer::FlushBufferedEndTag(SegmentedString& source) {
+bool HTMLTokenizer::FlushBufferedEndTag(SegmentedString& source,
+                                        bool current_char_may_be_newline) {
   DCHECK(token_.GetType() == HTMLToken::kCharacter ||
          token_.GetType() == HTMLToken::kUninitialized);
-  source.AdvanceAndUpdateLineNumber();
+  if (current_char_may_be_newline)
+    source.AdvanceAndUpdateLineNumber();
+  else
+    source.AdvancePastNonNewline();
   if (token_.GetType() == HTMLToken::kCharacter)
     return true;
   token_.BeginEndTag(buffered_end_tag_name_);
@@ -187,20 +193,25 @@
   return false;
 }
 
-#define FLUSH_AND_ADVANCE_TO(stateName)                                   \
+#define FLUSH_AND_ADVANCE_TO(stateName, current_char_may_be_newline)      \
   do {                                                                    \
     state_ = HTMLTokenizer::stateName;                                    \
-    if (FlushBufferedEndTag(source))                                      \
+    if (FlushBufferedEndTag(source, current_char_may_be_newline))         \
       return true;                                                        \
     if (source.IsEmpty() || !input_stream_preprocessor_.Peek(source, cc)) \
       return HaveBufferedCharacterToken();                                \
     goto stateName;                                                       \
   } while (false)
 
-bool HTMLTokenizer::FlushEmitAndResumeIn(SegmentedString& source,
-                                         HTMLTokenizer::State state) {
-  state_ = state;
-  FlushBufferedEndTag(source);
+#define FLUSH_AND_ADVANCE_TO_NO_NEWLINE(stateName) \
+  FLUSH_AND_ADVANCE_TO(stateName, /* current_char_may_be_newline */ false)
+
+#define FLUSH_AND_ADVANCE_TO_MAY_CONTAIN_NEWLINE(stateName) \
+  FLUSH_AND_ADVANCE_TO(stateName, /* current_char_may_be_newline */ true)
+
+bool HTMLTokenizer::FlushEmitAndResumeInDataState(SegmentedString& source) {
+  state_ = HTMLTokenizer::kDataState;
+  FlushBufferedEndTag(source, /* current_char_may_be_newline */ false);
   return true;
 }
 
@@ -221,6 +232,8 @@
 HTMLToken* HTMLTokenizer::NextToken(SegmentedString& source) {
 #if DCHECK_IS_ON()
   DCHECK(!token_should_be_in_uninitialized_state_ || token_.IsUninitialized());
+  DCHECK(!token_should_be_in_uninitialized_state_ ||
+         attributes_ranges_.attributes().empty());
 #endif
   const bool completed_token = NextTokenImpl(source);
 #if DCHECK_IS_ON()
@@ -383,7 +396,7 @@
       if (cc == '/') {
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kSelfClosingStartTagState);
       } else if (cc == '>') {
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         HTML_RECONSUME_IN(kDataState);
@@ -428,17 +441,17 @@
         if (IsTokenizerWhitespace(cc)) {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            FLUSH_AND_ADVANCE_TO(kBeforeAttributeNameState);
+            FLUSH_AND_ADVANCE_TO_MAY_CONTAIN_NEWLINE(kBeforeAttributeNameState);
           }
         } else if (cc == '/') {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            FLUSH_AND_ADVANCE_TO(kSelfClosingStartTagState);
+            FLUSH_AND_ADVANCE_TO_NO_NEWLINE(kSelfClosingStartTagState);
           }
         } else if (cc == '>') {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            return FlushEmitAndResumeIn(source, HTMLTokenizer::kDataState);
+            return FlushEmitAndResumeInDataState(source);
           }
         }
         BufferCharacter('<');
@@ -485,17 +498,17 @@
         if (IsTokenizerWhitespace(cc)) {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            FLUSH_AND_ADVANCE_TO(kBeforeAttributeNameState);
+            FLUSH_AND_ADVANCE_TO_MAY_CONTAIN_NEWLINE(kBeforeAttributeNameState);
           }
         } else if (cc == '/') {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            FLUSH_AND_ADVANCE_TO(kSelfClosingStartTagState);
+            FLUSH_AND_ADVANCE_TO_NO_NEWLINE(kSelfClosingStartTagState);
           }
         } else if (cc == '>') {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            return FlushEmitAndResumeIn(source, HTMLTokenizer::kDataState);
+            return FlushEmitAndResumeInDataState(source);
           }
         }
         BufferCharacter('<');
@@ -546,17 +559,17 @@
         if (IsTokenizerWhitespace(cc)) {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            FLUSH_AND_ADVANCE_TO(kBeforeAttributeNameState);
+            FLUSH_AND_ADVANCE_TO_MAY_CONTAIN_NEWLINE(kBeforeAttributeNameState);
           }
         } else if (cc == '/') {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            FLUSH_AND_ADVANCE_TO(kSelfClosingStartTagState);
+            FLUSH_AND_ADVANCE_TO_NO_NEWLINE(kSelfClosingStartTagState);
           }
         } else if (cc == '>') {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            return FlushEmitAndResumeIn(source, HTMLTokenizer::kDataState);
+            return FlushEmitAndResumeInDataState(source);
           }
         }
         BufferCharacter('<');
@@ -678,17 +691,17 @@
         if (IsTokenizerWhitespace(cc)) {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            FLUSH_AND_ADVANCE_TO(kBeforeAttributeNameState);
+            FLUSH_AND_ADVANCE_TO_MAY_CONTAIN_NEWLINE(kBeforeAttributeNameState);
           }
         } else if (cc == '/') {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            FLUSH_AND_ADVANCE_TO(kSelfClosingStartTagState);
+            FLUSH_AND_ADVANCE_TO_NO_NEWLINE(kSelfClosingStartTagState);
           }
         } else if (cc == '>') {
           if (IsAppropriateEndTag()) {
             temporary_buffer_.AddChar(static_cast<LChar>(cc));
-            return FlushEmitAndResumeIn(source, HTMLTokenizer::kDataState);
+            return FlushEmitAndResumeInDataState(source);
           }
         }
         BufferCharacter('<');
@@ -806,16 +819,16 @@
       if (cc == '/') {
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kSelfClosingStartTagState);
       } else if (cc == '>') {
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         HTML_RECONSUME_IN(kDataState);
       } else {
         if (cc == '"' || cc == '\'' || cc == '<' || cc == '=')
           ParseError();
-        token_.AddNewAttribute();
-        token_.BeginAttributeName(source.NumberOfCharactersConsumed());
-        token_.AppendToAttributeName(ToLowerCaseIfAlpha(cc));
+        token_.AddNewAttribute(ToLowerCaseIfAlpha(cc));
+        if (track_attributes_ranges_)
+          attributes_ranges_.AddAttribute(source.NumberOfCharactersConsumed());
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kAttributeNameState);
       }
     }
@@ -828,20 +841,35 @@
           return HaveBufferedCharacterToken();
       }
       if (IsTokenizerWhitespace(cc)) {
-        token_.EndAttributeName(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeName(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_ADVANCE_TO(kAfterAttributeNameState);
       } else if (cc == '/') {
-        token_.EndAttributeName(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeName(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kSelfClosingStartTagState);
       } else if (cc == '=') {
-        token_.EndAttributeName(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeName(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kBeforeAttributeValueState);
       } else if (cc == '>') {
-        token_.EndAttributeName(source.NumberOfCharactersConsumed());
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeName(
+              source.NumberOfCharactersConsumed());
+        }
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
-        token_.EndAttributeName(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeName(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_RECONSUME_IN(kDataState);
       } else {
         DCHECK(cc == '"' || cc == '\'' || cc == '<' || cc == '=');
@@ -860,16 +888,16 @@
       } else if (cc == '=') {
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kBeforeAttributeValueState);
       } else if (cc == '>') {
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         HTML_RECONSUME_IN(kDataState);
       } else {
         if (cc == '"' || cc == '\'' || cc == '<')
           ParseError();
-        token_.AddNewAttribute();
-        token_.BeginAttributeName(source.NumberOfCharactersConsumed());
-        token_.AppendToAttributeName(ToLowerCaseIfAlpha(cc));
+        token_.AddNewAttribute(ToLowerCaseIfAlpha(cc));
+        if (track_attributes_ranges_)
+          attributes_ranges_.AddAttribute(source.NumberOfCharactersConsumed());
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kAttributeNameState);
       }
     }
@@ -879,24 +907,36 @@
       if (IsTokenizerWhitespace(cc))
         HTML_CONSUME(kBeforeAttributeValueState);
       else if (cc == '"') {
-        token_.BeginAttributeValue(source.NumberOfCharactersConsumed() + 1);
+        if (track_attributes_ranges_) {
+          attributes_ranges_.BeginAttributeValue(
+              source.NumberOfCharactersConsumed() + 1);
+        }
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kAttributeValueDoubleQuotedState);
       } else if (cc == '&') {
-        token_.BeginAttributeValue(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.BeginAttributeValue(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_RECONSUME_IN(kAttributeValueUnquotedState);
       } else if (cc == '\'') {
-        token_.BeginAttributeValue(source.NumberOfCharactersConsumed() + 1);
+        if (track_attributes_ranges_) {
+          attributes_ranges_.BeginAttributeValue(
+              source.NumberOfCharactersConsumed() + 1);
+        }
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kAttributeValueSingleQuotedState);
       } else if (cc == '>') {
         ParseError();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         HTML_RECONSUME_IN(kDataState);
       } else {
         if (cc == '<' || cc == '=' || cc == '`')
           ParseError();
-        token_.BeginAttributeValue(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.BeginAttributeValue(
+              source.NumberOfCharactersConsumed());
+        }
         token_.AppendToAttributeValue(cc);
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kAttributeValueUnquotedState);
       }
@@ -905,7 +945,10 @@
 
     HTML_BEGIN_STATE(kAttributeValueDoubleQuotedState) {
       if (cc == '"') {
-        token_.EndAttributeValue(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeValue(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kAfterAttributeValueQuotedState);
       } else if (cc == '&') {
         additional_allowed_character_ = '"';
@@ -913,7 +956,10 @@
             kCharacterReferenceInAttributeValueState);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
-        token_.EndAttributeValue(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeValue(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_RECONSUME_IN(kDataState);
       } else {
         token_.AppendToAttributeValue(cc);
@@ -924,7 +970,10 @@
 
     HTML_BEGIN_STATE(kAttributeValueSingleQuotedState) {
       if (cc == '\'') {
-        token_.EndAttributeValue(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeValue(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kAfterAttributeValueQuotedState);
       } else if (cc == '&') {
         additional_allowed_character_ = '\'';
@@ -932,7 +981,10 @@
             kCharacterReferenceInAttributeValueState);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
-        token_.EndAttributeValue(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeValue(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_RECONSUME_IN(kDataState);
       } else {
         token_.AppendToAttributeValue(cc);
@@ -943,18 +995,27 @@
 
     HTML_BEGIN_STATE(kAttributeValueUnquotedState) {
       if (IsTokenizerWhitespace(cc)) {
-        token_.EndAttributeValue(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeValue(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_ADVANCE_TO(kBeforeAttributeNameState);
       } else if (cc == '&') {
         additional_allowed_character_ = '>';
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(
             kCharacterReferenceInAttributeValueState);
       } else if (cc == '>') {
-        token_.EndAttributeValue(source.NumberOfCharactersConsumed());
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeValue(
+              source.NumberOfCharactersConsumed());
+        }
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
-        token_.EndAttributeValue(source.NumberOfCharactersConsumed());
+        if (track_attributes_ranges_) {
+          attributes_ranges_.EndAttributeValue(
+              source.NumberOfCharactersConsumed());
+        }
         HTML_RECONSUME_IN(kDataState);
       } else {
         if (cc == '"' || cc == '\'' || cc == '<' || cc == '=' || cc == '`')
@@ -1001,7 +1062,7 @@
       else if (cc == '/')
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kSelfClosingStartTagState);
       else if (cc == '>')
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       else if (cc == kEndOfFileMarker) {
         ParseError();
         HTML_RECONSUME_IN(kDataState);
@@ -1015,7 +1076,7 @@
     HTML_BEGIN_STATE(kSelfClosingStartTagState) {
       if (cc == '>') {
         token_.SetSelfClosing();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         HTML_RECONSUME_IN(kDataState);
@@ -1034,9 +1095,9 @@
 
     HTML_BEGIN_STATE(kContinueBogusCommentState) {
       if (cc == '>')
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       else if (cc == kEndOfFileMarker)
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       else {
         token_.AppendToComment(cc);
         HTML_CONSUME(kContinueBogusCommentState);
@@ -1082,10 +1143,10 @@
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kCommentStartDashState);
       else if (cc == '>') {
         ParseError();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.AppendToComment(cc);
         HTML_ADVANCE_TO(kCommentState);
@@ -1098,10 +1159,10 @@
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kCommentEndState);
       else if (cc == '>') {
         ParseError();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.AppendToComment('-');
         token_.AppendToComment(cc);
@@ -1115,7 +1176,7 @@
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kCommentEndDashState);
       else if (cc == kEndOfFileMarker) {
         ParseError();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.AppendToComment(cc);
         HTML_CONSUME(kCommentState);
@@ -1128,7 +1189,7 @@
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kCommentEndState);
       else if (cc == kEndOfFileMarker) {
         ParseError();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.AppendToComment('-');
         token_.AppendToComment(cc);
@@ -1139,7 +1200,7 @@
 
     HTML_BEGIN_STATE(kCommentEndState) {
       if (cc == '>')
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       else if (cc == '!') {
         ParseError();
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kCommentEndBangState);
@@ -1149,7 +1210,7 @@
         HTML_CONSUME_NON_NEWLINE(kCommentEndState);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         ParseError();
         token_.AppendToComment('-');
@@ -1167,10 +1228,10 @@
         token_.AppendToComment('!');
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kCommentEndDashState);
       } else if (cc == '>') {
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.AppendToComment('-');
         token_.AppendToComment('-');
@@ -1188,7 +1249,7 @@
         ParseError();
         token_.BeginDOCTYPE();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         ParseError();
         HTML_RECONSUME_IN(kBeforeDOCTYPENameState);
@@ -1203,12 +1264,12 @@
         ParseError();
         token_.BeginDOCTYPE();
         token_.SetForceQuirks();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.BeginDOCTYPE();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.BeginDOCTYPE(ToLowerCaseIfAlpha(cc));
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kDOCTYPENameState);
@@ -1220,11 +1281,11 @@
       if (IsTokenizerWhitespace(cc)) {
         HTML_ADVANCE_TO(kAfterDOCTYPENameState);
       } else if (cc == '>') {
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.AppendToName(ToLowerCaseIfAlpha(cc));
         HTML_CONSUME_NON_NEWLINE(kDOCTYPENameState);
@@ -1236,11 +1297,11 @@
       if (!SkipWhitespaces(source, cc))
         return HaveBufferedCharacterToken();
       if (cc == '>')
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         if (cc == 'P' || cc == 'p') {
           SegmentedString::LookAheadResult result =
@@ -1282,11 +1343,11 @@
       } else if (cc == '>') {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         ParseError();
         token_.SetForceQuirks();
@@ -1309,11 +1370,11 @@
       } else if (cc == '>') {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         ParseError();
         token_.SetForceQuirks();
@@ -1328,11 +1389,11 @@
       else if (cc == '>') {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.AppendToPublicIdentifier(cc);
         HTML_CONSUME(kDOCTYPEPublicIdentifierDoubleQuotedState);
@@ -1346,11 +1407,11 @@
       else if (cc == '>') {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.AppendToPublicIdentifier(cc);
         HTML_CONSUME(kDOCTYPEPublicIdentifierSingleQuotedState);
@@ -1362,7 +1423,7 @@
       if (IsTokenizerWhitespace(cc))
         HTML_ADVANCE_TO(kBetweenDOCTYPEPublicAndSystemIdentifiersState);
       else if (cc == '>')
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       else if (cc == '"') {
         ParseError();
         token_.SetSystemIdentifierToEmptyString();
@@ -1376,7 +1437,7 @@
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         ParseError();
         token_.SetForceQuirks();
@@ -1389,7 +1450,7 @@
       if (!SkipWhitespaces(source, cc))
         return HaveBufferedCharacterToken();
       if (cc == '>')
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       else if (cc == '"') {
         token_.SetSystemIdentifierToEmptyString();
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(
@@ -1401,7 +1462,7 @@
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         ParseError();
         token_.SetForceQuirks();
@@ -1426,11 +1487,11 @@
       } else if (cc == '>') {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         ParseError();
         token_.SetForceQuirks();
@@ -1453,11 +1514,11 @@
       } else if (cc == '>') {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         ParseError();
         token_.SetForceQuirks();
@@ -1472,11 +1533,11 @@
       else if (cc == '>') {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.AppendToSystemIdentifier(cc);
         HTML_CONSUME(kDOCTYPESystemIdentifierDoubleQuotedState);
@@ -1490,11 +1551,11 @@
       else if (cc == '>') {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       } else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         token_.AppendToSystemIdentifier(cc);
         HTML_CONSUME(kDOCTYPESystemIdentifierSingleQuotedState);
@@ -1506,11 +1567,11 @@
       if (!SkipWhitespaces(source, cc))
         return HaveBufferedCharacterToken();
       if (cc == '>')
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       else if (cc == kEndOfFileMarker) {
         ParseError();
         token_.SetForceQuirks();
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       } else {
         ParseError();
         HTML_ADVANCE_PAST_NON_NEWLINE_TO(kBogusDOCTYPEState);
@@ -1520,9 +1581,9 @@
 
     HTML_BEGIN_STATE(kBogusDOCTYPEState) {
       if (cc == '>')
-        return EmitAndResumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndResumeInDataState(source);
       else if (cc == kEndOfFileMarker)
-        return EmitAndReconsumeIn(source, HTMLTokenizer::kDataState);
+        return EmitAndReconsumeInDataState();
       HTML_CONSUME(kBogusDOCTYPEState);
     }
     END_STATE()
diff --git a/third_party/blink/renderer/core/html/parser/html_tokenizer.h b/third_party/blink/renderer/core/html/parser/html_tokenizer.h
index b9465ee2..bb283a9 100644
--- a/third_party/blink/renderer/core/html/parser/html_tokenizer.h
+++ b/third_party/blink/renderer/core/html/parser/html_tokenizer.h
@@ -31,6 +31,7 @@
 #include "base/memory/ptr_util.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/core/html/parser/html_attributes_ranges.h"
 #include "third_party/blink/renderer/core/html/parser/html_parser_options.h"
 #include "third_party/blink/renderer/core/html/parser/html_token.h"
 #include "third_party/blink/renderer/core/html/parser/input_stream_preprocessor.h"
@@ -211,6 +212,17 @@
     }
   }
 
+  // Returns the ranges of the attributes for the current token. This is only
+  // updated if `HTMLParserOptions::track_attributes_ranges` was set.
+  // Additionally, if attributes are tracked HTMLAttributesRanges::Clear()
+  // must be called after every token.
+  HTMLAttributesRanges& attributes_ranges() {
+    // If `track_attributes_ranges_` is is false, `attributes_ranges_` is not
+    // updated.
+    DCHECK(track_attributes_ranges_);
+    return attributes_ranges_;
+  }
+
  private:
   friend class HTMLTokenizerTest;
 
@@ -230,16 +242,16 @@
     token_.AppendToCharacter(character);
   }
 
-  inline bool EmitAndResumeIn(SegmentedString& source, State state) {
+  inline bool EmitAndResumeInDataState(SegmentedString& source) {
     SaveEndTagNameIfNeeded();
-    state_ = state;
-    source.AdvanceAndUpdateLineNumber();
+    state_ = kDataState;
+    source.AdvancePastNonNewline();
     return true;
   }
 
-  inline bool EmitAndReconsumeIn(SegmentedString&, State state) {
+  inline bool EmitAndReconsumeInDataState() {
     SaveEndTagNameIfNeeded();
-    state_ = state;
+    state_ = kDataState;
     return true;
   }
 
@@ -250,18 +262,19 @@
   inline bool EmitEndOfFile(SegmentedString& source) {
     if (HaveBufferedCharacterToken())
       return true;
-    state_ = HTMLTokenizer::kDataState;
+    state_ = kDataState;
     source.AdvanceAndUpdateLineNumber();
     token_.Clear();
     token_.MakeEndOfFile();
     return true;
   }
 
-  inline bool FlushEmitAndResumeIn(SegmentedString&, State);
+  inline bool FlushEmitAndResumeInDataState(SegmentedString& source);
 
   // Return whether we need to emit a character token before dealing with
   // the buffered end tag.
-  inline bool FlushBufferedEndTag(SegmentedString&);
+  inline bool FlushBufferedEndTag(SegmentedString&,
+                                  bool current_char_may_be_newline);
   inline bool TemporaryBufferIs(const String&);
 
   // Sometimes we speculatively consume input characters and we don't
@@ -285,6 +298,9 @@
   State state_;
   bool force_null_character_replacement_;
   bool should_allow_cdata_;
+  // This value is also stored in `options_`, but it's kept as a member as doing
+  // so gives a slight performance boost.
+  const bool track_attributes_ranges_;
 
   // http://www.whatwg.org/specs/web-apps/current-work/#additional-allowed-character
   UChar additional_allowed_character_;
@@ -302,7 +318,10 @@
   // token here so we remember it next time we re-enter the tokenizer.
   LCharLiteralBuffer<32> buffered_end_tag_name_;
 
-  HTMLParserOptions options_;
+  const HTMLParserOptions options_;
+
+  // This is only updated if `track_attributes_ranges_` is true.
+  HTMLAttributesRanges attributes_ranges_;
 
 #if DCHECK_IS_ON()
   bool token_should_be_in_uninitialized_state_ = true;
diff --git a/third_party/blink/renderer/core/html/parser/html_view_source_parser.cc b/third_party/blink/renderer/core/html/parser/html_view_source_parser.cc
index 905f7a1..ed6a33c 100644
--- a/third_party/blink/renderer/core/html/parser/html_view_source_parser.cc
+++ b/third_party/blink/renderer/core/html/parser/html_view_source_parser.cc
@@ -33,11 +33,21 @@
 
 namespace blink {
 
+namespace {
+
+HTMLParserOptions CreateParserOptions(HTMLViewSourceDocument& document) {
+  HTMLParserOptions options(&document);
+  options.track_attributes_ranges = true;
+  return options;
+}
+
+}  // namespace
+
 HTMLViewSourceParser::HTMLViewSourceParser(HTMLViewSourceDocument& document,
                                            const String& mime_type)
     : DecodedDataDocumentParser(document),
       tokenizer_(
-          std::make_unique<HTMLTokenizer>(HTMLParserOptions(&document))) {
+          std::make_unique<HTMLTokenizer>(CreateParserOptions(document))) {
   if (mime_type != "text/html" && !MIMETypeRegistry::IsXMLMIMEType(mime_type))
     tokenizer_->SetState(HTMLTokenizer::kPLAINTEXTState);
 }
@@ -49,13 +59,15 @@
     if (!token)
       return;
     token_ = token;
-    EndTracker(input_.Current(), tokenizer_.get(), *token_);
+    EndTracker(input_.Current(), tokenizer_.get());
 
-    GetDocument()->AddSource(SourceForToken(*token_), *token_);
+    GetDocument()->AddSource(SourceForToken(*token_), *token_,
+                             tokenizer_->attributes_ranges(), token_start_);
 
     if (token_->GetType() == HTMLToken::kStartTag)
       tokenizer_->UpdateStateFor(*token_);
     token_->Clear();
+    tokenizer_->attributes_ranges().Clear();
   }
 }
 
@@ -89,15 +101,13 @@
 
   tracker_is_started_ = true;
   current_source_ = current_input;
-  if (token) {
-    token->SetBaseOffset(current_source_.NumberOfCharactersConsumed() -
-                         previous_source_.length());
-  }
+
+  token_start_ =
+      current_source_.NumberOfCharactersConsumed() - previous_source_.length();
 }
 
 void HTMLViewSourceParser::EndTracker(SegmentedString& current_input,
-                                      HTMLTokenizer* tokenizer,
-                                      HTMLToken& token) {
+                                      HTMLTokenizer* tokenizer) {
   tracker_is_started_ = false;
 
   cached_source_for_token_ = String();
@@ -107,8 +117,8 @@
   if (NeedToCheckTokenizerBuffer(tokenizer)) {
     number_of_buffered_characters = tokenizer->NumberOfBufferedCharacters();
   }
-  token.end(current_input.NumberOfCharactersConsumed() -
-            number_of_buffered_characters);
+  token_end_ = current_input.NumberOfCharactersConsumed() -
+               number_of_buffered_characters - token_start_;
 }
 
 String HTMLViewSourceParser::SourceForToken(const HTMLToken& token) {
@@ -121,8 +131,7 @@
     // mark the end of the file.
     length = previous_source_.length() + current_source_.length() - 1;
   } else {
-    DCHECK(!token.StartIndex());
-    length = static_cast<wtf_size_t>(token.EndIndex() - token.StartIndex());
+    length = token_end_;
   }
 
   StringBuilder source;
diff --git a/third_party/blink/renderer/core/html/parser/html_view_source_parser.h b/third_party/blink/renderer/core/html/parser/html_view_source_parser.h
index 2403a6d..4343ac0 100644
--- a/third_party/blink/renderer/core/html/parser/html_view_source_parser.h
+++ b/third_party/blink/renderer/core/html/parser/html_view_source_parser.h
@@ -57,7 +57,7 @@
   void UpdateTokenizerState();
 
   void StartTracker(SegmentedString&, HTMLTokenizer*, HTMLToken*);
-  void EndTracker(SegmentedString&, HTMLTokenizer*, HTMLToken&);
+  void EndTracker(SegmentedString&, HTMLTokenizer*);
   String SourceForToken(const HTMLToken&);
   bool NeedToCheckTokenizerBuffer(HTMLTokenizer*);
 
@@ -71,6 +71,12 @@
   SegmentedString current_source_;
 
   String cached_source_for_token_;
+
+  // Offset into `current_source_` that the current token starts at.
+  int token_start_ = 0;
+
+  // Offset into `current_source_` that the current token ends at.
+  int token_end_ = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
index 9c18e4b2..643dde3f 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
@@ -847,17 +847,39 @@
   PhysicalRect physical_fragment_rect =
       converter.ToPhysical(logical_fragment_rect);
 
-  const auto overflow_clip = box->GetOverflowClipAxes();
-  PhysicalRect overflow_physical_fragment_rect = physical_fragment_rect;
-  if (overflow_clip != kOverflowClipBothAxis) {
-    ApplyVisibleOverflowToClipRect(overflow_clip,
-                                   overflow_physical_fragment_rect);
-  } else if (box->ShouldApplyOverflowClipMargin()) {
-    overflow_physical_fragment_rect.Expand(OverflowClipMarginOutsets());
+  // For monolithic descendants that get sliced (for certain values of "sliced";
+  // keep on reading) when printing, we will keep the stitched box clip
+  // rectangle, and just translate it so that it becomes relative to this
+  // fragment. The problem this addresses is the fact that monolithic
+  // descendants only get sliced visually and overflow nicely into the next
+  // pages, whereas, internally, a monolithic element always generates only one
+  // fragment. If we clip it strictly against the originating fragment, we risk
+  // losing content.
+  //
+  // This is a work-around for the fact that we never break monolithic content
+  // into fragments (which the spec actually suggests that we do in such cases).
+  //
+  // This work-around only makes sense when printing, since pages are simply
+  // stacked in the writing direction internally when printing, so that
+  // overflowing content from one page "accidentally" ends up at the right place
+  // on the next page. This isn't the case for multicol for instance (where this
+  // problem is "unfixable" unless we implement support for breaking monolithic
+  // content into fragments), so if we're not printing, clip it against the
+  // bounds of the fragment now.
+  if (!GetDocument().Printing()) {
+    const auto overflow_clip = box->GetOverflowClipAxes();
+    PhysicalRect overflow_physical_fragment_rect = physical_fragment_rect;
+    if (overflow_clip != kOverflowClipBothAxis) {
+      ApplyVisibleOverflowToClipRect(overflow_clip,
+                                     overflow_physical_fragment_rect);
+    } else if (box->ShouldApplyOverflowClipMargin()) {
+      overflow_physical_fragment_rect.Expand(OverflowClipMarginOutsets());
+    }
+
+    // Clip against the fragment's bounds.
+    clip_rect.Intersect(overflow_physical_fragment_rect);
   }
 
-  // Clip against the fragment's bounds.
-  clip_rect.Intersect(overflow_physical_fragment_rect);
   // Make the clip rectangle relative to the fragment.
   clip_rect.offset -= physical_fragment_rect.offset;
   // Make the clip rectangle relative to whatever the caller wants.
diff --git a/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc b/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc
index 23dc28b..8d12cae0 100644
--- a/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc
+++ b/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc
@@ -86,6 +86,8 @@
     EventDispatchForbiddenScope::AllowUserAgentEvents allow_events;
     page_->WillBeDestroyed();
   }
+  if (destroyed_ptr_)
+    *destroyed_ptr_ = true;
 }
 
 LocalFrameView& ValidationMessageOverlayDelegate::FrameView() const {
@@ -177,7 +179,18 @@
   WriteDocument(data.get());
   float zoom_factor = anchor_->GetDocument().GetFrame()->PageZoomFactor();
   frame->SetPageZoomFactor(zoom_factor);
+
+  // ForceSynchronousDocumentInstall can cause another call to
+  // ValidationMessageClientImpl::ShowValidationMessage, which will hide this
+  // validation message and may even delete this. In order to avoid continuing
+  // when this is destroyed, |destroyed| will be set to true in the destructor.
+  bool destroyed = false;
+  DCHECK(!destroyed_ptr_);
+  destroyed_ptr_ = &destroyed;
   frame->ForceSynchronousDocumentInstall("text/html", data);
+  if (destroyed)
+    return;
+  destroyed_ptr_ = nullptr;
 
   Element& main_message = GetElementById("main-message");
   main_message.setTextContent(message_);
diff --git a/third_party/blink/renderer/core/page/validation_message_overlay_delegate.h b/third_party/blink/renderer/core/page/validation_message_overlay_delegate.h
index 1f46d0d..1633aff 100644
--- a/third_party/blink/renderer/core/page/validation_message_overlay_delegate.h
+++ b/third_party/blink/renderer/core/page/validation_message_overlay_delegate.h
@@ -72,6 +72,10 @@
   String sub_message_;
   TextDirection message_dir_;
   TextDirection sub_message_dir_;
+
+  // Used by CreatePage() to determine if this has been deleted in the middle of
+  // the function.
+  bool* destroyed_ptr_ = nullptr;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/fragment_data.h b/third_party/blink/renderer/core/paint/fragment_data.h
index 8ee9aea25..3755813 100644
--- a/third_party/blink/renderer/core/paint/fragment_data.h
+++ b/third_party/blink/renderer/core/paint/fragment_data.h
@@ -79,6 +79,16 @@
     EnsureRareData().fragment_id = id;
   }
 
+  bool NeedsUpdate() const { return rare_data_ && rare_data_->needs_update; }
+  void SetNeedsUpdate(bool b) {
+    if (!rare_data_ && !b)
+      return;
+    // We never need to mark the first FragmentData in the chain, and, if there
+    // actually are multiple fragments, we'll have rare_data_.
+    DCHECK(rare_data_);
+    rare_data_->needs_update = b;
+  }
+
   LayoutUnit LogicalTopInFlowThread() const {
 #if DCHECK_IS_ON()
     DCHECK(!rare_data_ || rare_data_->has_set_flow_thread_offset_ ||
@@ -229,6 +239,8 @@
     Member<FragmentData> next_fragment_;
     wtf_size_t fragment_id = 0;
 
+    bool needs_update = false;
+
 #if DCHECK_IS_ON()
     // Legacy block fragmentation sets the flow thread offset for each
     // FragmentData object, and this is used as its fragment_id, whereas NG
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
index 9c5dc45..8a5dc749 100644
--- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
+++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
@@ -382,28 +382,42 @@
 
   if (pre_paint_info.is_first_for_node) {
     if (allow_update) {
-      if (fragment_data->FragmentID() < fragment_id)
+      if (fragment_data->FragmentID() < fragment_id) {
         fragment_data->ClearNextFragment();
-    } else {
-      DCHECK_EQ(fragment_data->FragmentID(), fragment_id);
+      } else {
+        // We're at the first fragment. Mark all additional FragmentData
+        // objects, so that we can tell that they have been kept from a previous
+        // pre-paint pass.
+        for (FragmentData* next = fragment_data->NextFragment(); next;
+             next = next->NextFragment())
+          next->SetNeedsUpdate(true);
+      }
     }
   } else {
     FragmentData* last_fragment = nullptr;
+    // If fragment_data->NeedsUpdate() is true, a fragment ID mismatch is
+    // possible. Otherwise just loop through the FragmentData entries until we
+    // find the matching ID (or reach the end). The IDs are in ascending order,
+    // but they may not always be contiguous, as some nodes may lack a fragment
+    // representation certain fragmentainers.
     do {
-      if (fragment_data->FragmentID() >= fragment_id)
+      if (fragment_data->FragmentID() == fragment_id)
         break;
+      if (fragment_data->NeedsUpdate()) {
+        // Fragment ID mismatch. In some cases (typically when out-of-flow
+        // layout inserts fragmentainers on its own) we might skip a container
+        // in a given fragmentainer. We can re-use this FragmentData entry and
+        // just update the fragment ID. The important thing here is that we stop
+        // even if the ID is lower than what we're looking for.
+        DCHECK(allow_update);
+        break;
+      }
+      DCHECK_LT(fragment_data->FragmentID(), fragment_id);
       last_fragment = fragment_data;
       fragment_data = fragment_data->NextFragment();
     } while (fragment_data);
-    if (fragment_data) {
-      if (fragment_data->FragmentID() != fragment_id) {
-        // There are entries for fragmentainers after this one, but none for
-        // this one. Remove the fragment tail.
-        DCHECK(allow_update);
-        DCHECK_GT(fragment_data->FragmentID(), fragment_id);
-        fragment_data->ClearNextFragment();
-      }
-    } else {
+
+    if (!fragment_data) {
       // We don't need any additional fragments for culled inlines - unless this
       // is the highlighted link (in which case even culled inlines get paint
       // effects).
@@ -426,11 +440,12 @@
   }
 
   if (allow_update) {
+    fragment_data->SetNeedsUpdate(false);
     fragment_data->SetFragmentID(fragment_id);
-
     if (needs_paint_properties)
       fragment_data->EnsurePaintProperties();
   } else {
+    DCHECK(!fragment_data->NeedsUpdate());
     DCHECK_EQ(fragment_data->FragmentID(), fragment_id);
     DCHECK(!needs_paint_properties || fragment_data->PaintProperties());
   }
diff --git a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc
index 5bd8db2..967295e 100644
--- a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc
+++ b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc
@@ -541,13 +541,9 @@
     const gfx::Rect& frame_visual_rect,
     const gfx::RectF& root_visual_rect,
     double bpp) {
-  if (visual_size == 0u &&
-      base::FeatureList::IsEnabled(
-          features::kIncludeInitiallyInvisibleImagesInLCP)) {
-    // We currently initially ignore images that are initially invisible, even
-    // if they later become visible. This is done as an optimization, to reduce
-    // LCP calculation costs. Note that this results in correctness issues:
-    // https://crbug.com/1249622
+  // Don't process the image yet if it is invisible, as it may later become
+  // visible, and potentially eligible to be an LCP candidate.
+  if (visual_size == 0u) {
     return false;
   }
   recorded_images_.insert(record_id);
diff --git a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector_test.cc b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector_test.cc
index ab83f361..41dddf7 100644
--- a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector_test.cc
+++ b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector_test.cc
@@ -760,11 +760,8 @@
   )HTML");
   SetImageAndPaint("target", 5, 5);
   UpdateAllLifecyclePhasesAndInvokeCallbackIfAny();
-  // If IncludeInitiallyInvisibleImagesInLCP is enabled, then the
-  // out-of-viewport image will not have been recorded yet.
-  bool record_invisible_images = !base::FeatureList::IsEnabled(
-      features::kIncludeInitiallyInvisibleImagesInLCP);
-  EXPECT_EQ(ContainerTotalSize(), record_invisible_images ? 2u : 1u);
+  // The out-of-viewport image will not have been recorded yet.
+  EXPECT_EQ(ContainerTotalSize(), 1u);
 
   GetDocument().body()->RemoveChild(GetDocument().getElementById("parent"));
   EXPECT_EQ(ContainerTotalSize(), 0u);
diff --git a/third_party/blink/renderer/core/paint/timing/paint_timing_detector.cc b/third_party/blink/renderer/core/paint/timing/paint_timing_detector.cc
index 3fb5d79..0be550b 100644
--- a/third_party/blink/renderer/core/paint/timing/paint_timing_detector.cc
+++ b/third_party/blink/renderer/core/paint/timing/paint_timing_detector.cc
@@ -62,11 +62,6 @@
       object.IsDocumentElement()) {
     return false;
   }
-
-  DCHECK(!image.IsSVGImage());
-  if (!base::FeatureList::IsEnabled(features::kIncludeBackgroundSVGInLCP) &&
-      image.IsSVGImageForContainer())
-    return false;
   return true;
 }
 
diff --git a/third_party/blink/renderer/core/scroll/scrollable_area.cc b/third_party/blink/renderer/core/scroll/scrollable_area.cc
index ba92b63e..9f2e21ba8 100644
--- a/third_party/blink/renderer/core/scroll/scrollable_area.cc
+++ b/third_party/blink/renderer/core/scroll/scrollable_area.cc
@@ -833,8 +833,14 @@
   Node* node = box->GetNode();
   if (!node && box->Parent() && box->Parent()->IsLayoutNGFieldset())
     node = box->Parent()->GetNode();
-  if (node && IsA<Element>(node))
-    DCHECK_EQ(box, To<Element>(node)->GetLayoutBoxForScrolling());
+  if (node && IsA<Element>(node)) {
+    const LayoutBox* layout_box_for_scrolling =
+        To<Element>(node)->GetLayoutBoxForScrolling();
+    if (layout_box_for_scrolling)
+      DCHECK_EQ(box, layout_box_for_scrolling);
+    else
+      return nullptr;
+  }
   return node;
 }
 
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc
index c62596e..345143d3 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -3507,6 +3507,10 @@
   if (are_cached_attributes_up_to_date ? cached_is_inert_ : ComputeIsInert())
     return false;
 
+  // NOT focusable: disabled child tree owners (no content area).
+  if (IsChildTreeOwner())
+    return !IsDisabled();
+
   // NOT focusable: disabled form controls.
   if (IsDisabledFormControl(elem))
     return false;
diff --git a/third_party/blink/renderer/modules/credentialmanagement/BUILD.gn b/third_party/blink/renderer/modules/credentialmanagement/BUILD.gn
index e398a462..dcf904b8 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/BUILD.gn
+++ b/third_party/blink/renderer/modules/credentialmanagement/BUILD.gn
@@ -32,6 +32,10 @@
     "public_key_credential.h",
     "scoped_promise_resolver.cc",
     "scoped_promise_resolver.h",
+    "web_identity_requester.cc",
+    "web_identity_requester.h",
+    "web_identity_window_onload_event_listener.cc",
+    "web_identity_window_onload_event_listener.h",
   ]
   deps = [ "//services/metrics/public/cpp:ukm_builders" ]
 }
diff --git a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_proxy.cc b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_proxy.cc
index 2cd874c..16419f2e 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_proxy.cc
+++ b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_proxy.cc
@@ -114,6 +114,8 @@
   // appropriate error message.
 }
 
+// TODO(crbug.com/1372275): Replace From(ScriptState*) with
+// From(ExecutionContext*)
 // static
 CredentialManagerProxy* CredentialManagerProxy::From(
     ScriptState* script_state) {
@@ -132,6 +134,21 @@
   return supplement;
 }
 
+// static
+CredentialManagerProxy* CredentialManagerProxy::From(
+    ExecutionContext* execution_context) {
+  // Since the FedCM API cannot be used by workers, the execution context is
+  // always a window.
+  LocalDOMWindow& window = *To<LocalDOMWindow>(execution_context);
+  auto* supplement =
+      Supplement<LocalDOMWindow>::From<CredentialManagerProxy>(window);
+  if (!supplement) {
+    supplement = MakeGarbageCollected<CredentialManagerProxy>(window);
+    ProvideTo(window, supplement);
+  }
+  return supplement;
+}
+
 void CredentialManagerProxy::Trace(Visitor* visitor) const {
   visitor->Trace(authenticator_);
   visitor->Trace(credential_manager_);
diff --git a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_proxy.h b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_proxy.h
index 1b99fe3..da38f08 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_proxy.h
+++ b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_proxy.h
@@ -59,6 +59,7 @@
   // Must be called only with argument representing a valid
   // context corresponding to an attached window.
   static CredentialManagerProxy* From(ScriptState*);
+  static CredentialManagerProxy* From(ExecutionContext*);
 
   static CredentialManagerProxy* From(LocalDOMWindow*);
 
diff --git a/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc b/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc
index cd942d2..f6dce7c 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc
+++ b/third_party/blink/renderer/modules/credentialmanagement/credentials_container.cc
@@ -62,6 +62,7 @@
 #include "third_party/blink/renderer/modules/credentialmanagement/password_credential.h"
 #include "third_party/blink/renderer/modules/credentialmanagement/public_key_credential.h"
 #include "third_party/blink/renderer/modules/credentialmanagement/scoped_promise_resolver.h"
+#include "third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.h"
 #include "third_party/blink/renderer/platform/bindings/exception_code.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
@@ -1317,12 +1318,33 @@
     }
 
     bool prefer_auto_sign_in = options->identity()->preferAutoSignIn();
-    auto* auth_request =
-        CredentialManagerProxy::From(script_state)->FederatedAuthRequest();
-    auth_request->RequestToken(
-        std::move(identity_provider_ptrs), prefer_auto_sign_in,
-        WTF::BindOnce(&OnRequestToken, WrapPersistent(resolver),
-                      std::move(scoped_abort_state), WrapPersistent(options)));
+
+    if (!RuntimeEnabledFeatures::FedCmMultipleIdentityProvidersEnabled(
+            context)) {
+      Vector<mojom::blink::IdentityProviderGetParametersPtr> idp_get_params;
+      mojom::blink::IdentityProviderGetParametersPtr get_params =
+          mojom::blink::IdentityProviderGetParameters::New(
+              std::move(identity_provider_ptrs), prefer_auto_sign_in);
+      idp_get_params.push_back(std::move(get_params));
+
+      auto* auth_request =
+          CredentialManagerProxy::From(script_state)->FederatedAuthRequest();
+      auth_request->RequestToken(
+          std::move(idp_get_params),
+          WTF::BindOnce(&OnRequestToken, WrapPersistent(resolver),
+                        std::move(scoped_abort_state),
+                        WrapPersistent(options)));
+      return promise;
+    }
+
+    if (!web_identity_requester_) {
+      web_identity_requester_ = MakeGarbageCollected<WebIdentityRequester>(
+          WrapPersistent(context), std::move(scoped_abort_state));
+    }
+
+    web_identity_requester_->AppendGetCall(WrapPersistent(resolver),
+                                           options->identity()->providers(),
+                                           prefer_auto_sign_in);
 
     return promise;
   }
@@ -1710,6 +1732,7 @@
 }
 
 void CredentialsContainer::Trace(Visitor* visitor) const {
+  visitor->Trace(web_identity_requester_);
   ScriptWrappable::Trace(visitor);
   Supplement<Navigator>::Trace(visitor);
 }
diff --git a/third_party/blink/renderer/modules/credentialmanagement/credentials_container.h b/third_party/blink/renderer/modules/credentialmanagement/credentials_container.h
index d5ec0a1..5db593b 100644
--- a/third_party/blink/renderer/modules/credentialmanagement/credentials_container.h
+++ b/third_party/blink/renderer/modules/credentialmanagement/credentials_container.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CREDENTIALMANAGEMENT_CREDENTIALS_CONTAINER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_CREDENTIALMANAGEMENT_CREDENTIALS_CONTAINER_H_
 
+#include "third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
@@ -44,6 +45,8 @@
  private:
   class OtpRequestAbortAlgorithm;
   class PublicKeyRequestAbortAlgorithm;
+
+  Member<WebIdentityRequester> web_identity_requester_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.cc b/third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.cc
new file mode 100644
index 0000000..3c6ea75
--- /dev/null
+++ b/third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.cc
@@ -0,0 +1,146 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.h"
+#include "third_party/blink/renderer/core/dom/dom_exception.h"
+#include "third_party/blink/renderer/core/dom/scoped_abort_state.h"
+#include "third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.h"
+#include "third_party/blink/renderer/modules/credentialmanagement/identity_credential.h"
+#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
+
+namespace blink {
+
+WebIdentityRequester::WebIdentityRequester(
+    ExecutionContext* context,
+    std::unique_ptr<ScopedAbortState> scoped_abort_state)
+    : execution_context_(context),
+      scoped_abort_state_(std::move(scoped_abort_state)) {}
+
+void WebIdentityRequester::OnRequestToken(
+    mojom::blink::RequestTokenStatus status,
+    const absl::optional<KURL>& selected_idp_config_url,
+    const WTF::String& token) {
+  for (const auto& provider_resolver_pair : provider_to_resolver_) {
+    KURL provider = provider_resolver_pair.key;
+    ScriptPromiseResolver* resolver = provider_resolver_pair.value;
+
+    switch (status) {
+      case mojom::blink::RequestTokenStatus::kErrorTooManyRequests: {
+        resolver->Reject(MakeGarbageCollected<DOMException>(
+            DOMExceptionCode::kNotAllowedError,
+            "Only one navigator.credentials.get request may be outstanding at "
+            "one time."));
+        continue;
+      }
+      case mojom::blink::RequestTokenStatus::kErrorCanceled: {
+        resolver->Reject(MakeGarbageCollected<DOMException>(
+            DOMExceptionCode::kAbortError, "The request has been aborted."));
+        continue;
+      }
+      case mojom::blink::RequestTokenStatus::kError: {
+        resolver->Reject(MakeGarbageCollected<DOMException>(
+            DOMExceptionCode::kNetworkError, "Error retrieving a token."));
+        continue;
+      }
+      case mojom::blink::RequestTokenStatus::kSuccess: {
+        DCHECK(selected_idp_config_url);
+        if (provider != selected_idp_config_url) {
+          resolver->Reject(MakeGarbageCollected<DOMException>(
+              DOMExceptionCode::kNetworkError, "Error retrieving a token."));
+          continue;
+        }
+        IdentityCredential* credential = IdentityCredential::Create(token);
+        resolver->Resolve(credential);
+        continue;
+      }
+      default:
+        NOTREACHED();
+    }
+  }
+  provider_to_resolver_.clear();
+  is_requesting_token_ = false;
+}
+
+void WebIdentityRequester::RequestToken() {
+  auto* auth_request =
+      CredentialManagerProxy::From(execution_context_)->FederatedAuthRequest();
+  auth_request->RequestToken(
+      std::move(idp_get_params_),
+      WTF::BindOnce(&WebIdentityRequester::OnRequestToken,
+                    WrapPersistent(this)));
+  window_onload_event_listener_.Clear();
+  is_requesting_token_ = true;
+  has_posted_task_ = false;
+}
+
+void WebIdentityRequester::AppendGetCall(
+    ScriptPromiseResolver* resolver,
+    const HeapVector<Member<IdentityProvider>>& providers,
+    bool prefer_auto_sign_in) {
+  if (is_requesting_token_) {
+    resolver->Reject(MakeGarbageCollected<DOMException>(
+        DOMExceptionCode::kNotAllowedError,
+        "Only one token request may be outstanding at one time."));
+    return;
+  }
+
+  Vector<mojom::blink::IdentityProviderPtr> idp_ptrs;
+  for (const auto& provider : providers) {
+    mojom::blink::IdentityProviderPtr idp =
+        blink::mojom::blink::IdentityProvider::From(*provider);
+    if (provider_to_resolver_.Contains(KURL(idp->config_url))) {
+      resolver->Reject(MakeGarbageCollected<DOMException>(
+          DOMExceptionCode::kNotAllowedError,
+          "More than one navigator.credentials.get calls to the same "
+          "provider."));
+      return;
+    }
+    idp_ptrs.push_back(std::move(idp));
+  }
+
+  for (const auto& idp_ptr : idp_ptrs) {
+    provider_to_resolver_.insert(KURL(idp_ptr->config_url),
+                                 WrapPersistent(resolver));
+  }
+
+  mojom::blink::IdentityProviderGetParametersPtr get_params =
+      mojom::blink::IdentityProviderGetParameters::New(std::move(idp_ptrs),
+                                                       prefer_auto_sign_in);
+  idp_get_params_.push_back(std::move(get_params));
+
+  if (window_onload_event_listener_ || has_posted_task_)
+    return;
+
+  Document* document = resolver->DomWindow()->document();
+  // Checking if document load is not completed is equivalent to checking if
+  // this method was called before the window.onload event.
+  if (!document->IsLoadCompleted()) {
+    // Before window.onload event, we add a listener to the window onload event.
+    // All get calls up until the window onload event is fired are collated into
+    // a single token request. Once the window onload event is fired, we post a
+    // task with all collated IDPs to RequestToken.
+    window_onload_event_listener_ =
+        MakeGarbageCollected<WebIdentityWindowOnloadEventListener>(
+            document, WrapPersistent(this));
+    resolver->DomWindow()->addEventListener(event_type_names::kLoad,
+                                            window_onload_event_listener_);
+    return;
+  }
+
+  // During or after window.onload event, we immediately post a task to
+  // RequestToken. All get calls up until the task in which RequestToken is
+  // executed are collated into a single token request.
+  document->GetTaskRunner(TaskType::kInternalDefault)
+      ->PostTask(FROM_HERE, WTF::BindOnce(&WebIdentityRequester::RequestToken,
+                                          WrapPersistent(this)));
+  has_posted_task_ = true;
+}
+
+void WebIdentityRequester::Trace(Visitor* visitor) const {
+  visitor->Trace(execution_context_);
+  visitor->Trace(window_onload_event_listener_);
+  visitor->Trace(provider_to_resolver_);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.h b/third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.h
new file mode 100644
index 0000000..3f52e9f
--- /dev/null
+++ b/third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.h
@@ -0,0 +1,57 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CREDENTIALMANAGEMENT_WEB_IDENTITY_REQUESTER_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_CREDENTIALMANAGEMENT_WEB_IDENTITY_REQUESTER_H_
+
+#include "third_party/blink/public/mojom/webid/federated_auth_request.mojom-blink.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
+#include "third_party/blink/renderer/core/dom/scoped_abort_state.h"
+#include "third_party/blink/renderer/modules/credentialmanagement/credential_manager_proxy.h"
+#include "third_party/blink/renderer/modules/credentialmanagement/web_identity_window_onload_event_listener.h"
+#include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
+
+namespace blink {
+
+class IdentityProvider;
+class WebIdentityWindowOnloadEventListener;
+
+// Helper class to handle FedCM token requests.
+class WebIdentityRequester final
+    : public GarbageCollected<WebIdentityRequester> {
+ public:
+  explicit WebIdentityRequester(
+      ExecutionContext* context,
+      std::unique_ptr<ScopedAbortState> scoped_abort_state);
+
+  void OnRequestToken(mojom::blink::RequestTokenStatus status,
+                      const absl::optional<KURL>& selected_idp_config_url,
+                      const WTF::String& token);
+  // Invoked at most once per token request.
+  void RequestToken();
+  // Invoked at least once per token request, can be multiple times.
+  void AppendGetCall(ScriptPromiseResolver* resolver,
+                     const HeapVector<Member<IdentityProvider>>& providers,
+                     bool prefer_auto_sign_in);
+  void Trace(Visitor* visitor) const;
+
+ private:
+  // A vector of pointers to mojom class objects. Each mojom class object
+  // corresponds to parameters of a navigator.credentials.get call and contains
+  // a vector of IDPs. This is to reduce storage of duplicate data such as
+  // prefer_auto_sign_in values. We flatten these arrays of IDPs into a single
+  // array of IDPs in FederatedAuthRequestImpl::RequestToken.
+  Vector<mojom::blink::IdentityProviderGetParametersPtr> idp_get_params_;
+  Member<ExecutionContext> execution_context_;
+  std::unique_ptr<ScopedAbortState> scoped_abort_state_;
+  Member<WebIdentityWindowOnloadEventListener> window_onload_event_listener_;
+  HeapHashMap<KURL, Member<ScriptPromiseResolver>> provider_to_resolver_;
+  bool is_requesting_token_{false};
+  bool has_posted_task_{false};
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_CREDENTIALMANAGEMENT_WEB_IDENTITY_REQUESTER_H_
diff --git a/third_party/blink/renderer/modules/credentialmanagement/web_identity_window_onload_event_listener.cc b/third_party/blink/renderer/modules/credentialmanagement/web_identity_window_onload_event_listener.cc
new file mode 100644
index 0000000..c20f4e0
--- /dev/null
+++ b/third_party/blink/renderer/modules/credentialmanagement/web_identity_window_onload_event_listener.cc
@@ -0,0 +1,46 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/credentialmanagement/web_identity_window_onload_event_listener.h"
+
+#include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/core/event_type_names.h"
+#include "third_party/blink/renderer/core/events/before_unload_event.h"
+#include "third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.h"
+#include "third_party/blink/renderer/platform/wtf/functional.h"
+
+namespace blink {
+
+WebIdentityWindowOnloadEventListener::WebIdentityWindowOnloadEventListener(
+    Document* document,
+    WebIdentityRequester* requester)
+    : document_(document), requester_(requester) {}
+
+// WebIdentityWindowOnloadEventListener::Invoke() is not guaranteed to be called
+// after all of the JavaScript "load" handlers.
+void WebIdentityWindowOnloadEventListener::Invoke(
+    ExecutionContext* execution_context,
+    Event* event) {
+  DCHECK_EQ(event->type(), event_type_names::kLoad);
+
+  // document_ becomes null when its current execution context is no longer
+  // valid and requester_ becomes null when CredentialsContainer is destroyed.
+  if (!document_ || !requester_)
+    return;
+
+  // Post a task to WebIdentityRequester::RequestToken() to guarantee that
+  // WebIdentityRequester::RequestToken() is called after all the Javascript
+  // "load" handlers.
+  document_->GetTaskRunner(TaskType::kInternalDefault)
+      ->PostTask(FROM_HERE, WTF::BindOnce(&WebIdentityRequester::RequestToken,
+                                          WrapPersistent(requester_.Get())));
+}
+
+void WebIdentityWindowOnloadEventListener::Trace(Visitor* visitor) const {
+  visitor->Trace(document_);
+  visitor->Trace(requester_);
+  NativeEventListener::Trace(visitor);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/credentialmanagement/web_identity_window_onload_event_listener.h b/third_party/blink/renderer/modules/credentialmanagement/web_identity_window_onload_event_listener.h
new file mode 100644
index 0000000..687caef0
--- /dev/null
+++ b/third_party/blink/renderer/modules/credentialmanagement/web_identity_window_onload_event_listener.h
@@ -0,0 +1,43 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CREDENTIALMANAGEMENT_WEB_IDENTITY_WINDOW_ONLOAD_EVENT_LISTENER_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_CREDENTIALMANAGEMENT_WEB_IDENTITY_WINDOW_ONLOAD_EVENT_LISTENER_H_
+
+#include "third_party/blink/renderer/core/dom/events/native_event_listener.h"
+#include "third_party/blink/renderer/modules/credentialmanagement/web_identity_requester.h"
+#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
+#include "third_party/blink/renderer/platform/heap/member.h"
+#include "third_party/blink/renderer/platform/heap/visitor.h"
+
+namespace blink {
+
+class Document;
+class Event;
+class ExecutionContext;
+class WebIdentityRequester;
+
+// Helper class used to set up a window onload listener for documents with FedCM
+// multiple IDP support enabled. More specifically, to support multiple identity
+// providers through multiple navigator.credentials.get calls, we need to wait
+// for all the get calls in window onload to be loaded before displaying the
+// FedCM prompt.
+class WebIdentityWindowOnloadEventListener : public NativeEventListener {
+ public:
+  explicit WebIdentityWindowOnloadEventListener(Document*,
+                                                WebIdentityRequester*);
+
+  void Trace(Visitor* visitor) const override;
+
+ private:
+  // Invoked when the window onload event has concluded.
+  void Invoke(ExecutionContext*, Event* event) override;
+
+  Member<Document> document_;
+  Member<WebIdentityRequester> requester_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_CREDENTIALMANAGEMENT_WEB_IDENTITY_WINDOW_ONLOAD_EVENT_LISTENER_H_
diff --git a/third_party/blink/renderer/modules/mediasession/media_session.cc b/third_party/blink/renderer/modules/mediasession/media_session.cc
index e4938541..2f1ce43b 100644
--- a/third_party/blink/renderer/modules/mediasession/media_session.cc
+++ b/third_party/blink/renderer/modules/mediasession/media_session.cc
@@ -221,16 +221,6 @@
     UseCounter::Count(window, WebFeature::kMediaSessionSkipAd);
   }
 
-  if (!RuntimeEnabledFeatures::MediaSessionWebRTCEnabled()) {
-    if ("togglemicrophone" == action || "togglecamera" == action ||
-        "hangup" == action) {
-      exception_state.ThrowTypeError("The provided value '" + action +
-                                     "' is not a valid enum "
-                                     "value of type MediaSessionAction.");
-      return;
-    }
-  }
-
   if (handler) {
     auto add_result = action_handlers_.Set(action, handler);
 
diff --git a/third_party/blink/renderer/modules/mediasession/media_session.idl b/third_party/blink/renderer/modules/mediasession/media_session.idl
index 438d466d..37164f6 100644
--- a/third_party/blink/renderer/modules/mediasession/media_session.idl
+++ b/third_party/blink/renderer/modules/mediasession/media_session.idl
@@ -42,9 +42,9 @@
     [Measure, RaisesException]
     void setPositionState(optional MediaPositionState state = {});
 
-    [Measure, RuntimeEnabled=MediaSessionWebRTC]
+    [Measure]
     void setMicrophoneActive(boolean active);
 
-    [Measure, RuntimeEnabled=MediaSessionWebRTC]
+    [Measure]
     void setCameraActive(boolean active);
 };
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
index 1c09bc07e..6f3ffcc 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
@@ -70,6 +70,7 @@
 #include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
 #include "third_party/webrtc/api/data_channel_interface.h"
 #include "third_party/webrtc/api/rtc_event_log_output.h"
+#include "third_party/webrtc/api/units/time_delta.h"
 #include "third_party/webrtc/pc/media_session.h"
 #include "third_party/webrtc/pc/session_description.h"
 
@@ -1086,6 +1087,9 @@
       blink::Platform::Current()->IsWebRtcSrtpEncryptedHeadersEnabled();
   configuration_.enable_implicit_rollback = true;
 
+  // Apply 40 ms worth of bursting. See webrtc::TaskQueuePacedSender.
+  configuration_.pacer_burst_interval = webrtc::TimeDelta::Millis(40);
+
   // Copy all the relevant constraints into `config`.
   CopyConstraintsIntoRtcConfiguration(context, media_constraints,
                                       &configuration_);
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc
index 39fc69b3..2f6dce75 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc
@@ -32,6 +32,7 @@
 #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 #include "third_party/blink/renderer/platform/wtf/wtf.h"
+#include "third_party/ced/src/compact_enc_det/compact_enc_det.h"
 
 namespace blink {
 namespace {
@@ -422,6 +423,12 @@
   if (!response_body_)
     return;
 
+  // Initializing the map used when detecting encodings is not thread safe.
+  // Initialize on the main thread here to avoid races.
+  // TODO(crbug.com/1384221): Consider making the map thread safe in
+  // third_party/ced/src/util/encodings/encodings.cc.
+  EncodingNameAliasToEncoding("");
+
   off_thread_body_reader_.reset(new OffThreadBodyReader(
       std::move(response_body_), std::move(decoder), weak_factory_.GetWeakPtr(),
       task_runner_, worker_pool::CreateSequencedTaskRunner({}),
diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
index c9ed9195..7bdd703 100644
--- a/third_party/blink/renderer/platform/media/web_media_player_impl.cc
+++ b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
@@ -924,6 +924,7 @@
     buffered_data_source_host_->SetTotalBytes(data.size());
     buffered_data_source_host_->AddBufferedByteRange(0, data.size());
 
+    DCHECK(!mb_data_source_);
     data_source_ = std::make_unique<media::MemoryDataSource>(std::move(data));
     DataSourceInitialized(true);
     return;
@@ -932,18 +933,17 @@
   auto url_data = url_index_->GetByUrl(
       url, static_cast<UrlData::CorsMode>(cors_mode),
       is_cache_disabled ? UrlIndex::kCacheDisabled : UrlIndex::kNormal);
-  auto data_source = std::make_unique<MultiBufferDataSource>(
+  mb_data_source_ = new MultiBufferDataSource(
       main_task_runner_, std::move(url_data), media_log_.get(),
       buffered_data_source_host_.get(),
       base::BindRepeating(&WebMediaPlayerImpl::NotifyDownloading, weak_this_));
-  MultiBufferDataSource* mb_data_source = data_source.get();
-  data_source_ = std::move(data_source);
-
-  mb_data_source->OnRedirect(base::BindRepeating(
+  data_source_.reset(mb_data_source_);
+  mb_data_source_->OnRedirect(base::BindRepeating(
       &WebMediaPlayerImpl::OnDataSourceRedirected, weak_this_));
-  mb_data_source->SetPreload(preload_);
-  mb_data_source->SetIsClientAudioElement(client_->IsAudioElement());
-  mb_data_source->Initialize(base::BindOnce(
+  mb_data_source_->SetPreload(preload_);
+  mb_data_source_->SetIsClientAudioElement(client_->IsAudioElement());
+
+  mb_data_source_->Initialize(base::BindOnce(
       &WebMediaPlayerImpl::MultiBufferDataSourceInitialized, weak_this_));
 }
 
@@ -1896,51 +1896,6 @@
   media_metrics_provider_->OnFallback(std::move(status).AddHere());
 }
 
-#if BUILDFLAG(IS_ANDROID)
-media::PipelineStatus WebMediaPlayerImpl::StartHLSFallback() {
-  // HLS isn't enabled, so HLS detection should be the error.
-  if (!base::FeatureList::IsEnabled(media::kHlsPlayer))
-    return media::DEMUXER_ERROR_DETECTED_HLS;
-
-  // |data_source_| may be a MultiBufferDataSource if someone passes in a m3u8
-  // as a data:// URL, and since MediaPlayer doesn't support data:// URLs, fail
-  // playback now. Since HLS is enabled, the error is now a failing renderer.
-  if (!data_source_)
-    return media::PIPELINE_ERROR_EXTERNAL_RENDERER_FAILED;
-
-  const auto* co_data_source = data_source_->GetAsCrossOriginDataSource();
-  if (!co_data_source)
-    return media::PIPELINE_ERROR_EXTERNAL_RENDERER_FAILED;
-
-  // Note: Does not consider the full redirect chain, which could contain
-  // undetected mixed content.
-  bool frame_url_is_cryptographic =
-      url::Origin(frame_->GetSecurityOrigin()).GetURL().SchemeIsCryptographic();
-  bool manifest_url_is_cryptographic =
-      loaded_url_.SchemeIsCryptographic() &&
-      data_source_->GetUrlAfterRedirects().SchemeIsCryptographic();
-  MimeType mime_type =
-      TranslateMimeTypeToHistogramEnum(co_data_source->GetMimeType());
-  bool is_cross_origin = co_data_source->IsCorsCrossOrigin();
-  base::UmaHistogramEnumeration("Media.WebMediaPlayerImpl.HLS.MimeType",
-                                mime_type);
-  UMA_HISTOGRAM_BOOLEAN("Media.WebMediaPlayerImpl.HLS.IsCorsCrossOrigin",
-                        is_cross_origin);
-  UMA_HISTOGRAM_BOOLEAN(
-      "Media.WebMediaPlayerImpl.HLS.IsMixedContent",
-      frame_url_is_cryptographic && !manifest_url_is_cryptographic);
-  if (is_cross_origin) {
-    UMA_HISTOGRAM_BOOLEAN("Media.WebMediaPlayerImpl.HLS.HasAccessControl",
-                          co_data_source->HasAccessControl());
-    base::UmaHistogramEnumeration(
-        "Media.WebMediaPlayerImpl.HLS.CorsCrossOrigin.MimeType", mime_type);
-  }
-
-  return media::PIPELINE_OK;
-}
-
-#endif  // BUILDFLAG(IS_ANDROID)
-
 void WebMediaPlayerImpl::OnError(media::PipelineStatus status) {
   DVLOG(1) << __func__ << ": status=" << status;
   DCHECK(main_task_runner_->BelongsToCurrentThread());
@@ -1950,51 +1905,80 @@
     return;
 
 #if BUILDFLAG(IS_ANDROID)
-  if (status == media::DEMUXER_ERROR_DETECTED_HLS) {
-    auto started_hls = StartHLSFallback();
-    if (started_hls.is_ok()) {
-      demuxer_found_hls_ = true;
+  // `mb_data_source_` may be nullptr if someone passes in a m3u8 as a data://
+  // URL, since MediaPlayer doesn't support data:// URLs, fail playback now.
+  const bool found_hls = base::FeatureList::IsEnabled(media::kHlsPlayer) &&
+                         status == media::DEMUXER_ERROR_DETECTED_HLS;
+  if (found_hls && mb_data_source_) {
+    demuxer_found_hls_ = true;
 
-      if (observer_)
-        observer_->OnHlsManifestDetected();
+    if (observer_)
+      observer_->OnHlsManifestDetected();
 
-      renderer_factory_selector_->SetBaseRendererType(
-          media::RendererType::kMediaPlayer);
-
-      loaded_url_ = data_source_->GetUrlAfterRedirects();
-
-      data_source_->Stop();
-
-      pipeline_controller_->Stop();
-      SetMemoryReportingState(false);
-
-      media_task_runner_->DeleteSoon(FROM_HERE,
-                                     std::move(media_thread_mem_dumper_));
-
-      // Trampoline through the media task runner to destruct the demuxer and
-      // data source now that we're switching to HLS playback.
-      media_task_runner_->PostTask(
-          FROM_HERE,
-          media::BindToCurrentLoop(base::BindOnce(
-              [](std::unique_ptr<Demuxer> demuxer,
-                 std::unique_ptr<media::DataSource> data_source,
-                 base::OnceClosure start_pipeline_cb) {
-                // Release resources before starting HLS.
-                demuxer.reset();
-                data_source.reset();
-
-                std::move(start_pipeline_cb).Run();
-              },
-              std::move(demuxer_), std::move(data_source_),
-              base::BindOnce(&WebMediaPlayerImpl::StartPipeline, weak_this_))));
-
-      return;
+    UMA_HISTOGRAM_BOOLEAN("Media.WebMediaPlayerImpl.HLS.IsCorsCrossOrigin",
+                          mb_data_source_->IsCorsCrossOrigin());
+    if (mb_data_source_->IsCorsCrossOrigin()) {
+      UMA_HISTOGRAM_BOOLEAN("Media.WebMediaPlayerImpl.HLS.HasAccessControl",
+                            mb_data_source_->HasAccessControl());
     }
 
-    // This will keep "DETECTED_HLS" as the main error if the feature is not
-    // enabled.
-    status = std::move(started_hls).AddCause(std::move(status));
+    MimeType mime_type =
+        TranslateMimeTypeToHistogramEnum(mb_data_source_->GetMimeType());
+    base::UmaHistogramEnumeration("Media.WebMediaPlayerImpl.HLS.MimeType",
+                                  mime_type);
+    if (mb_data_source_->IsCorsCrossOrigin()) {
+      base::UmaHistogramEnumeration(
+          "Media.WebMediaPlayerImpl.HLS.CorsCrossOrigin.MimeType", mime_type);
+    }
+
+    // Note: Does not consider the full redirect chain, which could contain
+    // undetected mixed content.
+    bool frame_url_is_cryptographic = url::Origin(frame_->GetSecurityOrigin())
+                                          .GetURL()
+                                          .SchemeIsCryptographic();
+    bool manifest_url_is_cryptographic =
+        loaded_url_.SchemeIsCryptographic() &&
+        data_source_->GetUrlAfterRedirects().SchemeIsCryptographic();
+    UMA_HISTOGRAM_BOOLEAN(
+        "Media.WebMediaPlayerImpl.HLS.IsMixedContent",
+        frame_url_is_cryptographic && !manifest_url_is_cryptographic);
+
+    renderer_factory_selector_->SetBaseRendererType(
+        media::RendererType::kMediaPlayer);
+
+    loaded_url_ = data_source_->GetUrlAfterRedirects();
+    DCHECK(data_source_);
+    data_source_->Stop();
+    mb_data_source_ = nullptr;
+
+    pipeline_controller_->Stop();
+    SetMemoryReportingState(false);
+    media_task_runner_->DeleteSoon(FROM_HERE,
+                                   std::move(media_thread_mem_dumper_));
+
+    // Trampoline through the media task runner to destruct the demuxer and
+    // data source now that we're switching to HLS playback.
+    media_task_runner_->PostTask(
+        FROM_HERE,
+        media::BindToCurrentLoop(base::BindOnce(
+            [](std::unique_ptr<Demuxer> demuxer,
+               std::unique_ptr<media::DataSource> data_source,
+               base::OnceClosure start_pipeline_cb) {
+              // Release resources before starting HLS.
+              demuxer.reset();
+              data_source.reset();
+
+              std::move(start_pipeline_cb).Run();
+            },
+            std::move(demuxer_), std::move(data_source_),
+            base::BindOnce(&WebMediaPlayerImpl::StartPipeline, weak_this_))));
+
+    return;
   }
+
+  // We found hls in a data:// URL, fail immediately.
+  if (found_hls)
+    status = media::PIPELINE_ERROR_EXTERNAL_RENDERER_FAILED;
 #elif BUILDFLAG(IS_WIN)
   // Hardware context reset is not an error. Restart to recover.
   // TODO(crbug.com/1208618): Find a way to break the potential infinite loop of
diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.h b/third_party/blink/renderer/platform/media/web_media_player_impl.h
index 6de766d..096ba0d 100644
--- a/third_party/blink/renderer/platform/media/web_media_player_impl.h
+++ b/third_party/blink/renderer/platform/media/web_media_player_impl.h
@@ -700,8 +700,6 @@
 #if BUILDFLAG(IS_ANDROID)
   std::unique_ptr<media::Demuxer> CreateMediaUrlDemuxer(
       bool expect_hls_content);
-
-  media::PipelineStatus StartHLSFallback();
 #endif
 
   absl::optional<media::DemuxerType> GetDemuxerType() const;
@@ -836,6 +834,7 @@
   std::unique_ptr<media::Demuxer> demuxer_;
 
   // |data_source_| will be null if we're using the ChunkDemuxer.
+  MultiBufferDataSource* mb_data_source_ = nullptr;
   std::unique_ptr<media::DataSource> data_source_;
 
   std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc
index 2ffe1c25..2b7a1388 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc
@@ -44,6 +44,7 @@
 #include "third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_gfx.h"
+#include "third_party/blink/renderer/platform/wtf/cross_thread_copier_std.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/wtf/deque.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
@@ -513,8 +514,7 @@
   void RequestEncodingParametersChange(
       const webrtc::VideoEncoder::RateControlParameters& parameters);
 
-  void RegisterEncodeCompleteCallback(SignaledValue scoped_event,
-                                      webrtc::EncodedImageCallback* callback);
+  void RegisterEncodeCompleteCallback(webrtc::EncodedImageCallback* callback);
 
   webrtc::VideoCodecType video_codec_type() const { return video_codec_type_; }
 
@@ -629,9 +629,6 @@
   // A black GpuMemoryBuffer frame used when the video track is disabled.
   scoped_refptr<media::VideoFrame> black_gmb_frame_;
 
-  // webrtc::VideoEncoder encode complete callback.
-  webrtc::EncodedImageCallback* encoded_image_callback_{nullptr};
-
   // The video codec type, as reported to WebRTC.
   const webrtc::VideoCodecType video_codec_type_;
 
@@ -661,6 +658,15 @@
   int32_t status_ GUARDED_BY_CONTEXT(sequence_checker_){
       WEBRTC_VIDEO_CODEC_UNINITIALIZED};
 
+  // Protect |encoded_image_callback_|. |encoded_image_callback_| is read on
+  // media thread and written in webrtc encoder thread.
+  mutable base::Lock lock_;
+
+  // webrtc::VideoEncoder encode complete callback.
+  // TODO(b/257021675): Don't guard this by |lock_|
+  webrtc::EncodedImageCallback* encoded_image_callback_ GUARDED_BY(lock_){
+      nullptr};
+
   // They are bound to |gpu_task_runner_|, which is sequence checked by
   // |sequence_checker|.
   base::WeakPtr<Impl> weak_this_;
@@ -1180,6 +1186,7 @@
       break;
   }
 
+  base::AutoLock lock(lock_);
   if (!encoded_image_callback_)
     return;
 
@@ -1520,15 +1527,10 @@
 }
 
 void RTCVideoEncoder::Impl::RegisterEncodeCompleteCallback(
-    SignaledValue event,
     webrtc::EncodedImageCallback* callback) {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DVLOG(3) << __func__;
-
-  if (status_ == WEBRTC_VIDEO_CODEC_OK)
-    encoded_image_callback_ = callback;
-  event.Set(status_);
-  event.Signal();
+  base::AutoLock lock(lock_);
+  encoded_image_callback_ = callback;
 }
 
 RTCVideoEncoder::RTCVideoEncoder(
@@ -1683,30 +1685,50 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(webrtc_sequence_checker_);
   DVLOG(3) << __func__;
   if (!impl_) {
+    if (!callback)
+      return WEBRTC_VIDEO_CODEC_OK;
     DVLOG(3) << "Encoder is not initialized";
     return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
   }
 
-  base::ScopedAllowBaseSyncPrimitivesOutsideBlockingScope allow_wait;
-  base::WaitableEvent register_waiter(
-      base::WaitableEvent::ResetPolicy::MANUAL,
-      base::WaitableEvent::InitialState::NOT_SIGNALED);
-  int32_t register_retval = WEBRTC_VIDEO_CODEC_UNINITIALIZED;
-  PostCrossThreadTask(
-      *gpu_task_runner_.get(), FROM_HERE,
-      CrossThreadBindOnce(
-          &RTCVideoEncoder::Impl::RegisterEncodeCompleteCallback, weak_impl_,
-          SignaledValue(&register_waiter, &register_retval),
-          CrossThreadUnretained(callback)));
-  register_waiter.Wait();
-  return register_retval;
+  // TOD(b/257021675): RegisterEncodeCompleteCallback() should be called twice,
+  // with a valid pointer after InitEncode() and with a nullptr after Release().
+  // Setting callback in |impl_| should be done asynchronously by posting the
+  // task to |media_task_runner_|.
+  // However, RegisterEncodeCompleteCallback() are actually called multiple
+  // times with valid pointers, this may be a bug. To workaround this problem,
+  // a mutex is used so that it is guaranteed that the previous callback is not
+  // executed after RegisterEncodeCompleteCallback().
+  impl_->RegisterEncodeCompleteCallback(callback);
+
+  return WEBRTC_VIDEO_CODEC_OK;
 }
 
 int32_t RTCVideoEncoder::Release() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(webrtc_sequence_checker_);
   DVLOG(3) << __func__;
-  if (impl_)
-    gpu_task_runner_->DeleteSoon(FROM_HERE, std::move(impl_));
+  if (!impl_)
+    return WEBRTC_VIDEO_CODEC_OK;
+
+  base::ScopedAllowBaseSyncPrimitivesOutsideBlockingScope allow_wait;
+  base::WaitableEvent release_waiter(
+      base::WaitableEvent::ResetPolicy::MANUAL,
+      base::WaitableEvent::InitialState::NOT_SIGNALED);
+  PostCrossThreadTask(
+      *gpu_task_runner_.get(), FROM_HERE,
+      CrossThreadBindOnce(
+          [](std::unique_ptr<Impl> impl, base::WaitableEvent* waiter) {
+            impl.reset();
+            waiter->Signal();
+          },
+          std::move(impl_), CrossThreadUnretained(&release_waiter)));
+
+  release_waiter.Wait();
+
+  // The object pointed by |weak_impl_| has been invalidated in Impl destructor.
+  // Calling reset() is optional, but it's good to invalidate the value of
+  // |weak_impl_| too
+  weak_impl_.reset();
 
   return WEBRTC_VIDEO_CODEC_OK;
 }
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc
index e247e0a..24a117a 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/notreached.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
@@ -78,6 +79,148 @@
  private:
   EncodedCallback encoded_callback_;
 };
+
+class RTCVideoEncoderWrapper : public webrtc::VideoEncoder {
+ public:
+  static std::unique_ptr<RTCVideoEncoderWrapper> Create(
+      media::VideoCodecProfile profile,
+      bool is_constrained_h264,
+      media::GpuVideoAcceleratorFactories* gpu_factories) {
+    auto wrapper = base::WrapUnique(new RTCVideoEncoderWrapper);
+    base::WaitableEvent waiter(base::WaitableEvent::ResetPolicy::MANUAL,
+                               base::WaitableEvent::InitialState::NOT_SIGNALED);
+    wrapper->task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](std::unique_ptr<RTCVideoEncoder>* rtc_video_encoder,
+               media::VideoCodecProfile profile, bool is_constrained_h264,
+               media::GpuVideoAcceleratorFactories* gpu_factories,
+               base::WaitableEvent* waiter) {
+              *rtc_video_encoder = std::make_unique<RTCVideoEncoder>(
+                  profile, is_constrained_h264, gpu_factories);
+              waiter->Signal();
+            },
+            &wrapper->rtc_video_encoder_, profile, is_constrained_h264,
+            gpu_factories, &waiter));
+    waiter.Wait();
+    return wrapper;
+  }
+
+  int InitEncode(const webrtc::VideoCodec* codec_settings,
+                 const webrtc::VideoEncoder::Settings& settings) override {
+    int result = 0;
+    base::WaitableEvent waiter(base::WaitableEvent::ResetPolicy::MANUAL,
+                               base::WaitableEvent::InitialState::NOT_SIGNALED);
+    task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](RTCVideoEncoder* rtc_video_encoder,
+               const webrtc::VideoCodec* codec_settings,
+               const webrtc::VideoEncoder::Settings& settings,
+               base::WaitableEvent* waiter, int* result) {
+              *result = rtc_video_encoder->InitEncode(codec_settings, settings);
+              waiter->Signal();
+            },
+            rtc_video_encoder_.get(), codec_settings, settings, &waiter,
+            &result));
+    waiter.Wait();
+    return result;
+  }
+  int32_t Encode(
+      const webrtc::VideoFrame& input_image,
+      const std::vector<webrtc::VideoFrameType>* frame_types) override {
+    int32_t result = 0;
+    base::WaitableEvent waiter(base::WaitableEvent::ResetPolicy::MANUAL,
+                               base::WaitableEvent::InitialState::NOT_SIGNALED);
+    task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](RTCVideoEncoder* rtc_video_encoder,
+               const webrtc::VideoFrame& input_image,
+               const std::vector<webrtc::VideoFrameType>* frame_types,
+               base::WaitableEvent* waiter, int32_t* result) {
+              *result = rtc_video_encoder->Encode(input_image, frame_types);
+              waiter->Signal();
+            },
+            rtc_video_encoder_.get(), input_image, frame_types, &waiter,
+            &result));
+    waiter.Wait();
+    return result;
+  }
+  int32_t RegisterEncodeCompleteCallback(
+      webrtc::EncodedImageCallback* callback) override {
+    int32_t result = 0;
+    base::WaitableEvent waiter(base::WaitableEvent::ResetPolicy::MANUAL,
+                               base::WaitableEvent::InitialState::NOT_SIGNALED);
+    task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](RTCVideoEncoder* rtc_video_encoder,
+               webrtc::EncodedImageCallback* callback,
+               base::WaitableEvent* waiter, int32_t* result) {
+              *result =
+                  rtc_video_encoder->RegisterEncodeCompleteCallback(callback);
+              waiter->Signal();
+            },
+            rtc_video_encoder_.get(), callback, &waiter, &result));
+    waiter.Wait();
+    return result;
+  }
+  int32_t Release() override {
+    int32_t result = 0;
+    base::WaitableEvent waiter(base::WaitableEvent::ResetPolicy::MANUAL,
+                               base::WaitableEvent::InitialState::NOT_SIGNALED);
+    task_runner_->PostTask(
+        FROM_HERE, base::BindOnce(
+                       [](RTCVideoEncoder* rtc_video_encoder,
+                          base::WaitableEvent* waiter, int32_t* result) {
+                         *result = rtc_video_encoder->Release();
+                         waiter->Signal();
+                       },
+                       rtc_video_encoder_.get(), &waiter, &result));
+    waiter.Wait();
+    return result;
+  }
+  void SetRates(
+      const webrtc::VideoEncoder::RateControlParameters& parameters) override {
+    base::WaitableEvent waiter(base::WaitableEvent::ResetPolicy::MANUAL,
+                               base::WaitableEvent::InitialState::NOT_SIGNALED);
+    task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](RTCVideoEncoder* rtc_video_encoder,
+               const webrtc::VideoEncoder::RateControlParameters& parameters,
+               base::WaitableEvent* waiter) {
+              rtc_video_encoder->SetRates(parameters);
+              waiter->Signal();
+            },
+            rtc_video_encoder_.get(), parameters, &waiter));
+    waiter.Wait();
+  }
+  EncoderInfo GetEncoderInfo() const override {
+    NOTIMPLEMENTED();
+    return EncoderInfo();
+  }
+
+  ~RTCVideoEncoderWrapper() override {
+    if (task_runner_) {
+      task_runner_->DeleteSoon(FROM_HERE, std::move(rtc_video_encoder_));
+    }
+    webrtc_encoder_thread_.FlushForTesting();
+  }
+
+ private:
+  RTCVideoEncoderWrapper() : webrtc_encoder_thread_("WebRTC encoder thread") {
+    webrtc_encoder_thread_.Start();
+    task_runner_ = webrtc_encoder_thread_.task_runner();
+  }
+
+  base::Thread webrtc_encoder_thread_;
+  scoped_refptr<base::SequencedTaskRunner> task_runner_;
+
+  // |webrtc_encoder_thread_| members.
+  std::unique_ptr<RTCVideoEncoder> rtc_video_encoder_;
+};
 }  // anonymous namespace
 
 class RTCVideoEncoderTest
@@ -158,8 +301,8 @@
     }
 
     mock_vea_ = ExpectCreateInitAndDestroyVEA(vea_used);
-    rtc_encoder_ = std::make_unique<RTCVideoEncoder>(media_profile, false,
-                                                     mock_gpu_factories_.get());
+    rtc_encoder_ = RTCVideoEncoderWrapper::Create(media_profile, false,
+                                                  mock_gpu_factories_.get());
   }
 
   void CreateEncoderWithoutVea(webrtc::VideoCodecType codec_type) {
@@ -180,8 +323,8 @@
         media_profile = media::VIDEO_CODEC_PROFILE_UNKNOWN;
     }
 
-    rtc_encoder_ = std::make_unique<RTCVideoEncoder>(media_profile, false,
-                                                     mock_gpu_factories_.get());
+    rtc_encoder_ = RTCVideoEncoderWrapper::Create(media_profile, false,
+                                                  mock_gpu_factories_.get());
   }
 
   // media::VideoEncodeAccelerator implementation.
@@ -387,7 +530,7 @@
 
  protected:
   media::MockVideoEncodeAccelerator* mock_vea_;
-  std::unique_ptr<RTCVideoEncoder> rtc_encoder_;
+  std::unique_ptr<RTCVideoEncoderWrapper> rtc_encoder_;
   absl::optional<media::VideoEncodeAccelerator::Config> config_;
   media::VideoEncodeAccelerator::Client* client_;
   base::Thread encoder_thread_;
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 15fb9af..c9cf2e93 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1743,10 +1743,6 @@
       status: "stable",
     },
     {
-      name: "MediaSessionWebRTC",
-      public: true,
-    },
-    {
       name: "MediaSourceExperimental",
       status: "experimental",
     },
diff --git a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
index 5838cdf..ca1e953b 100644
--- a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
+++ b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
@@ -470,38 +470,51 @@
 }
 
 void WidgetInputHandlerManager::LogInputTimingUMA() {
-  if (!have_emitted_uma_) {
-    InitialInputTiming lifecycle_state = InitialInputTiming::kBeforeLifecycle;
-    if (!(suppressing_input_events_state_ &
-          (unsigned)SuppressingInputEventsBits::kDeferMainFrameUpdates)) {
-      if (suppressing_input_events_state_ &
-          (unsigned)SuppressingInputEventsBits::kDeferCommits) {
-        lifecycle_state = InitialInputTiming::kBeforeCommit;
-      } else if (suppressing_input_events_state_ &
-                 (unsigned)SuppressingInputEventsBits::kHasNotPainted) {
-        lifecycle_state = InitialInputTiming::kBeforeFirstPaint;
-      } else {
-        lifecycle_state = InitialInputTiming::kAfterFirstPaint;
-      }
-    }
-    UMA_HISTOGRAM_ENUMERATION("PaintHolding.InputTiming3", lifecycle_state);
-    have_emitted_uma_ = true;
+  bool should_emit_uma;
+  {
+    base::AutoLock lock(uma_data_lock_);
+    should_emit_uma = !uma_data_.have_emitted_uma_;
+    uma_data_.have_emitted_uma_ = true;
   }
+
+  if (!should_emit_uma)
+    return;
+
+  InitialInputTiming lifecycle_state = InitialInputTiming::kBeforeLifecycle;
+  if (!(suppressing_input_events_state_ &
+        (unsigned)SuppressingInputEventsBits::kDeferMainFrameUpdates)) {
+    if (suppressing_input_events_state_ &
+        (unsigned)SuppressingInputEventsBits::kDeferCommits) {
+      lifecycle_state = InitialInputTiming::kBeforeCommit;
+    } else if (suppressing_input_events_state_ &
+               (unsigned)SuppressingInputEventsBits::kHasNotPainted) {
+      lifecycle_state = InitialInputTiming::kBeforeFirstPaint;
+    } else {
+      lifecycle_state = InitialInputTiming::kAfterFirstPaint;
+    }
+  }
+
+  UMA_HISTOGRAM_ENUMERATION("PaintHolding.InputTiming3", lifecycle_state);
 }
 
 void WidgetInputHandlerManager::RecordMetricsForDroppedEventsBeforePaint(
     const base::TimeTicks& first_paint_time) {
-  // Initialize to 0 timestamp and log 0 if there was no suppressed event or the
-  // most recent suppressed event was before the first_paint_time
+  // Initialize to 0 timestamp and log 0 if there was no suppressed event or
+  // the most recent suppressed event was before the first_paint_time
   auto diff = base::TimeDelta();
-  if (most_recent_suppressed_event_time_ > first_paint_time) {
-    diff = most_recent_suppressed_event_time_ - first_paint_time;
+  int suppressed_events_count = 0;
+  {
+    base::AutoLock lock(uma_data_lock_);
+    if (uma_data_.most_recent_suppressed_event_time_ > first_paint_time)
+      diff = uma_data_.most_recent_suppressed_event_time_ - first_paint_time;
+
+    suppressed_events_count = uma_data_.suppressed_events_count_;
   }
+
   UMA_HISTOGRAM_TIMES("PageLoad.Internal.SuppressedEventsTimingBeforePaint",
                       diff);
-
   UMA_HISTOGRAM_COUNTS("PageLoad.Internal.SuppressedEventsCountBeforePaint",
-                       suppressed_events_count_);
+                       suppressed_events_count);
 }
 
 void WidgetInputHandlerManager::DispatchScrollGestureToCompositor(
@@ -547,8 +560,9 @@
     // haven't painted yet.
     if (suppressing_input_events_state_ ==
         static_cast<uint16_t>(SuppressingInputEventsBits::kHasNotPainted)) {
-      most_recent_suppressed_event_time_ = base::TimeTicks::Now();
-      suppressed_events_count_ += 1;
+      base::AutoLock lock(uma_data_lock_);
+      uma_data_.most_recent_suppressed_event_time_ = base::TimeTicks::Now();
+      uma_data_.suppressed_events_count_ += 1;
     }
   }
 
@@ -737,9 +751,11 @@
 void WidgetInputHandlerManager::DidNavigate() {
   suppressing_input_events_state_ =
       static_cast<uint16_t>(SuppressingInputEventsBits::kHasNotPainted);
-  have_emitted_uma_ = false;
-  most_recent_suppressed_event_time_ = base::TimeTicks();
-  suppressed_events_count_ = 0;
+
+  base::AutoLock lock(uma_data_lock_);
+  uma_data_.have_emitted_uma_ = false;
+  uma_data_.most_recent_suppressed_event_time_ = base::TimeTicks();
+  uma_data_.suppressed_events_count_ = 0;
 }
 
 void WidgetInputHandlerManager::OnDeferMainFrameUpdatesChanged(bool status) {
diff --git a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h
index c09a0f1..d87a1934 100644
--- a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h
+++ b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h
@@ -335,6 +335,30 @@
   // we definitely don't have a compositor thread.
   bool uses_input_handler_ = false;
 
+  struct UmaData {
+    // Saves the number of events that would be dropped by the
+    // DropInputEventsBeforeFirstPaint feature (i.e. before receiving the first
+    // presentation of content). This is important because it shows how many
+    // times user tried to interact with page but the event was dropped.
+    int suppressed_events_count_ = 0;
+
+    // Saves most recent input event time that would be dropped by the
+    // DropInputEventsBeforeFirstPaint feature (i.e. before receiving the first
+    // presentation of content). If this is after the first paint timestamp,
+    // we log the difference to track the worst dropped event experienced.
+    base::TimeTicks most_recent_suppressed_event_time_;
+
+    // Control of UMA. We emit one UMA metric per navigation telling us
+    // whether any non-move input arrived before we starting updating the page
+    // or displaying content to the user. It must be atomic because navigation
+    // can occur on the renderer thread (resetting this) coincident with the UMA
+    // being sent on the compositor thread.
+    bool have_emitted_uma_{false};
+  };
+
+  base::Lock uma_data_lock_;
+  UmaData uma_data_;
+
   // State tracking why we should keep suppressing input events, keeps track of
   // which parts of the rendering pipeline are currently deferred, or whether
   // we are waiting for the first non empty paint. We use this state to suppress
@@ -349,31 +373,12 @@
   // status of deferrals changes, so it needs to be thread safe.
   std::atomic<uint16_t> suppressing_input_events_state_;
 
-  // Saves most recent input event time that would be dropped by the
-  // DropInputEventsBeforeFirstPaint feature (i.e. before receiving the first
-  // presentation of content). If this is after the first paint timestamp,
-  // we log the difference to track the worst dropped event experienced.
-  base::TimeTicks most_recent_suppressed_event_time_;
-
-  // Saves the number of events that would be dropped by the
-  // DropInputEventsBeforeFirstPaint feature (i.e. before receiving the first
-  // presentation of content). This is important because it shows how many times
-  // user tried to interact with page but the event was dropped.
-  int suppressed_events_count_ = 0;
-
   // Allow input suppression to be disabled for tests and non-browser uses
   // of chromium that do not wait for the first commit, or that may never
   // commit. Over time, tests should be fixed so they provide additional
   // coverage for input suppression: crbug.com/987626
   bool allow_pre_commit_input_ = false;
 
-  // Control of UMA. We emit one UMA metric per navigation telling us
-  // whether any non-move input arrived before we starting updating the page or
-  // displaying content to the user. It must be atomic because navigation can
-  // occur on the renderer thread (resetting this) coincident with the UMA
-  // being sent on the compositor thread.
-  std::atomic<bool> have_emitted_uma_{false};
-
   // Specifies weather the renderer has received a scroll-update event after the
   // last scroll-begin or not, It is used to determine whether a scroll-update
   // is the first one in a scroll sequence or not. This variable is only used on
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index be61bde..e02f8c1a 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -27,8 +27,6 @@
 crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/api/abort/serviceworker-intercepted.https.html [ Timeout ]
 crbug.com/626703 external/wpt/encoding/unsupported-labels.window.html [ Failure Timeout ]
 crbug.com/626703 external/wpt/css/css-flexbox/flexbox-definite-cross-size-constrained-percentage.html [ Failure ]
-crbug.com/626703 external/wpt/resize-observer/notify.html [ Timeout ]
-crbug.com/626703 external/wpt/resize-observer/svg.html [ Timeout ]
 crbug.com/626703 external/wpt/css/css-contain/content-visibility/content-visibility-fieldset-size.html [ Failure ]
 crbug.com/626703 virtual/offsetparent-old-behavior/external/wpt/css/css-contain/content-visibility/content-visibility-fieldset-size.html [ Failure ]
 crbug.com/626703 external/wpt/page-visibility/visibility-state-entry.tentative.html [ Timeout ]
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests
index eb697a7..8f408ff 100644
--- a/third_party/blink/web_tests/NeverFixTests
+++ b/third_party/blink/web_tests/NeverFixTests
@@ -1574,15 +1574,6 @@
 # Ctrl and mouse wheel scroll will not make page zoom on Mac
 crbug.com/1047176 [ Mac ] fast/events/wheel/wheelevent-ctrl.html [ Skip ]
 
-# The following tests are temporarily skipped. See the associated bugs.
-# Actually they should not be in this file because they are temporary.
-crbug.com/1150938 virtual/force-eager/external/wpt/measure-memory/detached.https.window.html [ Skip ]
-crbug.com/1150938 virtual/force-eager/external/wpt/measure-memory/window-open.mix.https.window.html [ Skip ]
-crbug.com/1085129 virtual/force-eager/external/wpt/measure-memory/main-frame-and-worker.https.window.html [ Skip ]
-crbug.com/1085129 virtual/force-eager/external/wpt/measure-memory/idlharness.window.html [ Skip ]
-crbug.com/1207146 virtual/force-eager/external/wpt/measure-memory/service-worker.https.any.serviceworker.html [ Skip ]
-crbug.com/1207146 virtual/force-eager/external/wpt/measure-memory/shared-worker.https.any.sharedworker.html [ Skip ]
-
 crbug.com/630342 virtual/mse-1mb-buffers/http/tests/media/media-source/stream_memory_tests/mediasource-appendbuffer-quota-exceeded-default-buffers.html [ Skip ]
 
 # No good way to automate this test yet
@@ -1746,5 +1737,8 @@
 # Utility for manual testing, not intended to be run as part of layout tests.
 crbug.com/785955 http/tests/credentialmanagement/tools/virtual-authenticator-environment-manual.html [ Skip ]
 
+# Since enabling the multi IDP flag affects existing tests, we only enable the flag in the virtual multi IDP test suite
+crbug.com/1373766 external/wpt/credential-management/fedcm-multi-idp/* [ Skip ]
+
 # Feature can only be disabled via base feature flag, not by commandline switch.
 crbug.com/1293679 virtual/origin-trials-runtimeflags-disabled/http/tests/origin_trials/webexposed/pending-beacon-origin-trial-interfaces.html [ Skip ]
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests
index cd441b5..79619682 100644
--- a/third_party/blink/web_tests/SlowTests
+++ b/third_party/blink/web_tests/SlowTests
@@ -193,7 +193,6 @@
 crbug.com/1081534 [ Mac ] virtual/oopr-canvas2d/fast/canvas/canvas-blending-clipping.html [ Slow ]
 crbug.com/1081534 [ Mac ] virtual/oopr-canvas2d/fast/canvas/canvas-blending-color-over-image.html [ Slow ]
 crbug.com/1081534 [ Mac ] virtual/oopr-canvas2d/fast/canvas/canvas-blending-global-alpha.html [ Slow ]
-crbug.com/1081534 [ Mac ] virtual/oopr-canvas2d/fast/canvas/canvas-blending-gradient-over-color.html [ Slow ]
 crbug.com/1081534 [ Mac ] virtual/oopr-canvas2d/fast/canvas/canvas-blending-gradient-over-image.html [ Slow ]
 crbug.com/1081534 [ Mac ] virtual/oopr-canvas2d/fast/canvas/canvas-blending-gradient-over-pattern.html [ Slow ]
 crbug.com/1081534 [ Mac ] virtual/oopr-canvas2d/fast/canvas/canvas-blending-image-over-color.html [ Slow ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 307bc94..c74bb53 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1192,7 +1192,6 @@
 # `text-decoration: spelling|grammar-error`
 crbug.com/1163436 wpt_internal/css/css-text-decor/text-decoration-line-grammar-error-001.html [ Failure ]
 crbug.com/1163436 wpt_internal/css/css-text-decor/text-decoration-line-spelling-error-001.html [ Failure ]
-crbug.com/1163436 external/wpt/css/css-text-decor/text-decoration-line-spelling-error-color-001.optional.html [ Failure ]
 
 crbug.com/722825 [ Linux ] media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html [ Pass Timeout ]
 
@@ -2146,7 +2145,6 @@
 crbug.com/987138 [ Win ] media/controls/doubletap-to-jump-forwards.html [ Pass Timeout ]
 crbug.com/1122742 http/tests/devtools/sources/debugger/source-frame-inline-breakpoint-decorations.js [ Pass Timeout ]
 crbug.com/1002377 external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Pass Timeout ]
-crbug.com/1002377 external/wpt/service-workers/service-worker/update-bytecheck-cors-import.https.html [ Pass Timeout ]
 crbug.com/805756 external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html [ Pass Timeout ]
 
 # crbug.com/1218716: These fail when TrustTokenOriginTrial is enabled.
@@ -2290,7 +2288,6 @@
 crbug.com/1227485 accessibility/spelling-markers.html [ Failure ]
 
 # Bugs caused by enabling DMSAA on OOPR-Canvas
-crbug.com/1229463 [ Mac ] virtual/oopr-canvas2d/fast/canvas/canvas-largedraws.html [ Crash ]
 crbug.com/1229486 virtual/oopr-canvas2d/fast/canvas/canvas-incremental-repaint.html [ Failure ]
 
 # Temporarily disabled after chromium change
@@ -3005,22 +3002,16 @@
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-011.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-012.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-016.xht [ Failure ]
-crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-017.xht [ Failure ]
-crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-019.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-020.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-177.xht [ Failure ]
-crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-178.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-179.xht [ Failure ]
-crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-180.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-189.xht [ Failure ]
-crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-190.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-192.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-193.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-194.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-195.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-196.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-197.xht [ Failure ]
-crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-198.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-205.xht [ Failure ]
 crbug.com/958381 [ Mac ] external/wpt/css/CSS2/tables/table-anonymous-objects-206.xht [ Failure ]
 
@@ -3161,7 +3152,6 @@
 crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/element-link-icon.https.sub.html [ Skip Timeout ]
 crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/element-link-icon.sub.html [ Skip Timeout ]
 crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/element-video-poster.https.sub.html [ Timeout ]
-crbug.com/626703 [ Win10.20h2 ] external/wpt/permissions-policy/reporting/xr-report-only.https.html [ Crash ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/mixed-content/gen/worker-classic.http-rp/opt-in/websocket.https.html [ Skip Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/mixed-content/gen/worker-module-data.meta/opt-in/websocket.https.html [ Skip Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/upgrade-insecure-requests/gen/worker-classic-data.meta/upgrade/websocket.https.html [ Skip Timeout ]
@@ -3241,7 +3231,6 @@
 crbug.com/626703 [ Mac10.14 ] external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html?pen [ Timeout ]
 crbug.com/626703 [ Mac11 ] external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html?pen [ Timeout ]
 crbug.com/626703 [ Win ] external/wpt/websockets/stream/tentative/constructor.any.serviceworker.html?wss [ Failure Timeout ]
-crbug.com/626703 [ Win ] external/wpt/websockets/constructor/010.html [ Failure Timeout ]
 crbug.com/626703 [ Win ] external/wpt/websockets/constructor/010.html?wss [ Failure Timeout ]
 crbug.com/626703 [ Win ] external/wpt/websockets/opening-handshake/005.html [ Failure Timeout ]
 crbug.com/626703 [ Mac10.14 ] external/wpt/webrtc/RTCPeerConnection-ondatachannel.html [ Skip Timeout ]
@@ -3868,7 +3857,6 @@
 
 # We cannot yet launch Canvas2D staying GPU on readback
 crbug.com/1288118 fast/canvas/bug382588.html [ Crash Failure Pass Timeout ]
-crbug.com/1288118 fast/canvas/canvas-gpu-consistency.html [ Crash Failure Pass Timeout ]
 
 # Antialiasing error
 crbug.com/845973 virtual/display-compositor-pixel-dump/fast/canvas/display-compositor-pixel-dump/OffscreenCanvas-opaque-background-compositing.html [ Failure Pass ]
@@ -3955,7 +3943,6 @@
 crbug.com/783154 [ Mac ] media/controls/click-anywhere-to-play-pause.html [ Crash Failure Pass Timeout ]
 
 # Seen flaky on Linux, suppressing on Windows as well
-crbug.com/831720 [ Win ] media/controls/doubletap-to-jump-forwards-too-short.html [ Failure Pass ]
 crbug.com/831720 [ Linux ] media/controls/doubletap-to-jump-forwards-too-short.html [ Failure Pass ]
 crbug.com/831720 media/controls/tap-to-hide-controls.html [ Failure Pass ]
 
@@ -4553,7 +4540,6 @@
 
 # navigation tests fail or time out when run with run_web_tests.py but passes with run_wpt_tests.py
 crbug.com/1317067 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.html [ Timeout ]
-crbug.com/1317067 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.html [ Timeout ]
 crbug.com/1317067 external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt-and-unload-script-closeable.html [ Failure ]
 crbug.com/1317067 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=windows-1252 [ Failure Timeout ]
 crbug.com/1317067 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=x-cp1251 [ Failure Timeout ]
@@ -5523,7 +5509,6 @@
 crbug.com/1249176 [ Mac12-arm64 ] virtual/exotic-color-space/images/yuv-decode-eligible/webp-no-color-profile-lossy.html [ Failure ]
 
 # Flakes that surfaced on the mac12 and mac12-arm64 waterfall
-crbug.com/1249176 [ Mac12 ] external/wpt/html/browsers/browsing-the-web/back-forward-cache/service-worker-controlled-after-restore.https.html [ Failure Pass ]
 crbug.com/1249176 [ Mac12 ] fast/dom/Element/scrollTop-scrollLeft-body.html [ Failure Pass ]
 
 # Sheriff 2022-07-04
@@ -6940,3 +6925,8 @@
 # Sheriff 2022-11-15
 crbug.com/1383990 [ Mac ] external/wpt/html/dom/idlharness.worker.html [ Failure Skip ]
 crbug.com/1383989 [ Mac ] external/wpt/html/webappapis/scripting/events/event-handler-attributes-body-window.html [ Failure Skip ]
+
+# Tests disabled for the memory measurement API.
+crbug.com/1085129 virtual/force-eager/external/wpt/measure-memory/detached.https.window.html [ Skip Timeout ]
+crbug.com/1085129 virtual/force-eager/external/wpt/measure-memory/window-open.mix.https.window.html [ Skip Timeout ]
+crbug.com/1207146 virtual/force-eager/external/wpt/measure-memory/main-frame-and-worker.https.window.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index e460acf..709717dd 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1449,6 +1449,13 @@
     "args": ["--enable-features=JavaScriptExperimentalSharedMemory"]
   },
   {
+    "prefix": "fedcm-multi-idp",
+    "platforms": ["Linux", "Mac", "Win"],
+    "bases": ["external/wpt/credential-management/fedcm-multi-idp/"],
+    "exclusive_tests": "ALL",
+    "args": ["--enable-features=FedCmMultipleIdentityProviders"]
+  },
+  {
     "prefix": "scoped-custom-element-registry-disabled",
     "platforms": ["Linux", "Mac", "Win"],
     "bases": ["external/wpt/custom-elements/scoped-registry"],
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html
new file mode 100644
index 0000000..fa9ec7b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/get-before-and-after-onload.https.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<title>Federated Credential Management API multi IDP get before and after onload test.</title>
+<link rel="help" href="https://fedidcg.github.io/FedCM">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+
+<script type="module">
+import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+
+let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
+let has_window_loaded = false;
+const window_loaded = new Promise(resolve => {
+  window.addEventListener('load', () => {
+    has_window_loaded = true;
+    resolve();
+  });
+});
+
+promise_test(async t => {
+  let first_cred_resolved = false;
+  assert_false(has_window_loaded);
+  // First navigator.credentials.get() is called prior to window.onload
+  const first_cred = navigator.credentials.get(default_request_options()).finally(() => { first_cred_resolved = true; });
+  await Promise.all([cookies_promise, window_loaded]);
+  assert_true(has_window_loaded);
+  assert_false(first_cred_resolved);
+  // Second navigator.credentials.get() is called after window.onload but before first navigator.credentials.get() resolves
+  const second_cred = navigator.credentials.get(default_alt_request_options());
+  const rejection = promise_rejects_dom(t, 'NotAllowedError', second_cred);
+  const first = await first_cred;
+  assert_equals(first.token, "token");
+  return rejection;
+}, "When there's a `get` call before onload, a `get` call which occurs after onload but before the first `get` call resolves, should be rejected.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html
new file mode 100644
index 0000000..93ee2075
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/get-before-and-during-onload.https.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Federated Credential Management API multi IDP get before and during onload test.</title>
+<link rel="help" href="https://fedidcg.github.io/FedCM">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+
+<script type="module">
+import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+
+let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
+
+promise_test(async t => {
+  let has_window_loaded = false;
+  const window_loaded = new Promise(resolve => {
+    window.addEventListener('load', async () => {
+      const second_cred = navigator.credentials.get(default_alt_request_options());
+      await promise_rejects_dom(t, 'NetworkError', second_cred);
+      has_window_loaded = true;
+      resolve();
+    });
+  });
+  assert_false(has_window_loaded);
+  const first_cred = navigator.credentials.get(default_request_options());
+  await Promise.all([cookies_promise, window_loaded]);
+  assert_true(has_window_loaded);
+  const first = await first_cred;
+  assert_equals(first.token, "token");
+}, "A `get` call before onload and a `get` call during onload should be combined.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html
new file mode 100644
index 0000000..edc293d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/get-before-onload-and-during-dom-content-loaded.https.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Federated Credential Management API multi IDP get before onload and during DOMContentLoaded test.</title>
+<link rel="help" href="https://fedidcg.github.io/FedCM">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+
+<script type="module">
+import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+
+let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
+
+promise_test(async t => {
+  let has_dom_content_loaded = false;
+  const dom_content_loaded = new Promise(resolve => {
+      document.addEventListener('DOMContentLoaded', async () => {
+          const second_cred = navigator.credentials.get(default_alt_request_options());
+          await promise_rejects_dom(t, 'NetworkError', second_cred);
+          has_dom_content_loaded = true;
+          resolve();
+      });
+  });
+  assert_false(has_dom_content_loaded);
+  const first_cred = navigator.credentials.get(default_request_options());
+  await Promise.all([cookies_promise, dom_content_loaded]);
+  assert_true(has_dom_content_loaded);
+  const first = await first_cred;
+  assert_equals(first.token, "token");
+}, "A `get` call before onload and a `get` call during DOMContentLoaded event should combine despite being called from different tasks.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html
new file mode 100644
index 0000000..1a806a204
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/multiple-gets-after-onload.https.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<title>Federated Credential Management API multi IDP multiple gets after onload test.</title>
+<link rel="help" href="https://fedidcg.github.io/FedCM">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+
+<script type="module">
+import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+
+let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
+const window_loaded = new Promise(resolve => {
+  window.addEventListener('load', () => {
+    resolve();
+  });
+});
+
+promise_test(async t => {
+  await Promise.all([cookies_promise, window_loaded]);
+  const first_cred = navigator.credentials.get(default_request_options());
+  const second_cred = navigator.credentials.get(default_alt_request_options());
+  // NetworkError is returned when another IDP is selected.
+  await promise_rejects_dom(t, 'NetworkError', second_cred);
+  const first = await first_cred;
+  assert_equals(first.token, "token");
+}, "No `get` calls before or during onload, multiple `get` calls after onload in the same task are allowed.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html
new file mode 100644
index 0000000..69a70ce
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/multiple-gets-before-onload.https.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<title>Federated Credential Management API multi IDP multiple gets before onload test.</title>
+<link rel="help" href="https://fedidcg.github.io/FedCM">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+
+<script type="module">
+import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+
+let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
+let has_window_loaded = false;
+window.addEventListener('load', () => {
+  has_window_loaded = true;
+});
+
+// TODO(crbug.com/1374869): Add multi IDP test where second IDP is selected.
+promise_test(async t => {
+  assert_false(has_window_loaded);
+  const first_cred = navigator.credentials.get(default_alt_request_options());
+  const second_cred = navigator.credentials.get(default_request_options());
+  await cookies_promise;
+  await promise_rejects_dom(t, 'NetworkError', second_cred);
+  const first = await first_cred;
+  assert_equals(first.token, "token");
+}, "Multiple get calls before window onload are allowed.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html
new file mode 100644
index 0000000..e98b63f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/multiple-gets-during-onload.https.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<title>Federated Credential Management API multi IDP multiple gets during onload test.</title>
+<link rel="help" href="https://fedidcg.github.io/FedCM">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+
+<script type="module">
+import {set_fedcm_cookie, set_alt_fedcm_cookie, default_request_options, default_alt_request_options} from '../support/fedcm-helper.sub.js';
+
+let cookies_promise = Promise.all([set_fedcm_cookie(), set_alt_fedcm_cookie()]);
+
+promise_test(async t => {
+  const window_loaded = new Promise(resolve => {
+    window.addEventListener('load', async () => {
+      const first_cred = navigator.credentials.get(default_request_options());
+      const second_cred = navigator.credentials.get(default_alt_request_options());
+      await cookies_promise;
+      await promise_rejects_dom(t, 'NetworkError', second_cred);
+      const first = await first_cred;
+      assert_equals(first.token, "token");
+      resolve();
+    });
+  });
+  await window_loaded;
+}, "No `get` calls before onload, multiple `get` calls during onload are allowed.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/single-get-after-onload.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/single-get-after-onload.https.html
new file mode 100644
index 0000000..a34ff84
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/single-get-after-onload.https.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>Federated Credential Management API multi IDP single get after onload test.</title>
+<link rel="help" href="https://fedidcg.github.io/FedCM">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+
+<script type="module">
+import {set_fedcm_cookie, default_request_options} from '../support/fedcm-helper.sub.js';
+
+const window_loaded = new Promise(resolve => {
+  window.addEventListener('load', () => {
+    resolve();
+  });
+});
+
+promise_test(async t => {
+  await set_fedcm_cookie();
+  await window_loaded;
+  const cred = await navigator.credentials.get(default_request_options());
+  assert_equals(cred.token, "token");
+}, "Single `get` call after onload is allowed.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/single-get-before-onload.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/single-get-before-onload.https.html
new file mode 100644
index 0000000..91195fc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/single-get-before-onload.https.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<title>Federated Credential Management API multi IDP single get before onload test.</title>
+<link rel="help" href="https://fedidcg.github.io/FedCM">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+
+<script type="module">
+import {set_fedcm_cookie, default_request_options} from '../support/fedcm-helper.sub.js';
+
+let has_window_loaded = false;
+const window_loaded = new Promise(resolve => {
+  window.addEventListener('load', () => {
+    has_window_loaded = true;
+    resolve();
+  });
+});
+
+promise_test(async t => {
+  const first_cred = navigator.credentials.get(default_request_options());
+  assert_false(has_window_loaded);
+  await set_fedcm_cookie();
+  await window_loaded;
+  assert_true(has_window_loaded);
+  const first = await first_cred;
+  assert_equals(first.token, "token");
+}, "Single `get` call before onload is allowed.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/single-get-during-onload.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/single-get-during-onload.https.html
new file mode 100644
index 0000000..17939d2d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-multi-idp/single-get-during-onload.https.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>Federated Credential Management API multi IDP single get during onload test.</title>
+<link rel="help" href="https://fedidcg.github.io/FedCM">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+
+<script type="module">
+import {default_request_options, set_fedcm_cookie} from '../support/fedcm-helper.sub.js';
+
+promise_test(async t => {
+  const window_loaded = new Promise(resolve => {
+    window.addEventListener('load', async () => {
+      const first_cred = navigator.credentials.get(default_request_options());
+      await set_fedcm_cookie();
+      const first = await first_cred;
+      assert_equals(first.token, "token");
+      resolve();
+    });
+  });
+  await window_loaded;
+}, "Single `get` call during onload is allowed.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-helper.sub.js b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-helper.sub.js
index 5280729..87a1337 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-helper.sub.js
+++ b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-helper.sub.js
@@ -4,7 +4,7 @@
 export function set_fedcm_cookie(host) {
   return new Promise(resolve => {
     if (host == undefined) {
-      document.cookie = 'cookie=1; SameSite=Strict; Secure';
+      document.cookie = 'cookie=1; SameSite=Strict; Path=/credential-management/support; Secure';
       resolve();
     } else {
       let popup_window = window.open(host + '/credential-management/support/set_cookie');
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js
index ef4e94d..f52bd6e 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js
+++ b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js
@@ -53,11 +53,11 @@
   }
 
   // Implements
-  //   RequestToken(url.mojom.Url provider, string id_request) =>
+  //   RequestToken(array<IdentityProviderGetParameters> idp_get_params) =>
   //                    (RequestTokenStatus status,
   //                      url.mojom.Url? selected_identity_provider_config_url,
   //                      string? token);
-  async requestToken(provider, idRequest) {
+  async requestToken(idp_get_params) {
     if (this.returnPending_) {
       this.pendingPromise_ = new Promise((resolve, reject) => {
         this.pendingPromiseResolve_ = resolve;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/oof-in-additional-column-before-spanner.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/oof-in-additional-column-before-spanner.html
new file mode 100644
index 0000000..e59df70
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/oof-in-additional-column-before-spanner.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1361902">
+<div style="columns:1;">
+  <div style="float:left; padding-top:10px; position:relative;">
+    <div style="position:absolute; height:2px;"></div>
+    <div id="elm" style="display:inline-block;"></div>
+  </div>
+  <span>
+    <div style="column-span:all;"></div>
+  </span>
+</div>
+<script>
+  requestAnimationFrame(()=>{
+    requestAnimationFrame(()=>{
+      elm.style.display = "none";
+    });
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/constraints/reportValidity-crash.html b/third_party/blink/web_tests/external/wpt/html/semantics/forms/constraints/reportValidity-crash.html
new file mode 100644
index 0000000..d6bab924
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/constraints/reportValidity-crash.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+<script>
+Object.prototype.__defineGetter__('then', prom);
+var prom_count = 0;
+function prom() {
+prom_count++;
+if (prom_count > 2) return;
+var v14 = x37.animate({},100);
+v14.reverse();
+v14.ready;
+v14.currentTime = 0;
+x57.reportValidity();
+}
+function f0() {
+var v38 = x37.animate({},300);
+v38.ready;
+x57.prepend(x78);
+}
+function f1() {
+var x57 = document.getElementById("x57");
+x57.disabled = false;
+}
+</script>
+</head>
+
+<body>
+<fieldset id="x37">
+<canvas onfocusin="f0()" >
+<input id="x78" autofocus=""  onfocusout="f1()" >
+</canvas>
+<select id="x57" disabled=""  required=""></select>
+</body>
+
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-anchor-display.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-anchor-display.tentative.html
index 03b486d..103bc98 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-anchor-display.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-anchor-display.tentative.html
@@ -3,6 +3,7 @@
 <link rel=author href="mailto:masonf@chromium.org">
 <link rel=help href="https://open-ui.org/components/popup.research.explainer">
 <link rel=match href="popover-anchor-display-ref.tentative.html">
+<script src="resources/popover-utils.js"></script>
 
 <p>There should be a green box attached to the right side of each orange box.</p>
 
@@ -24,6 +25,10 @@
   <div id=popover3 popover=manual defaultopen></div>
 </div>
 
+<script>
+showDefaultopenPopoversOnLoad();
+</script>
+
 <style>
   .ex {
     margin: 25px;
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen-2.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen-2.tentative.html
deleted file mode 100644
index 4ed7860..0000000
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen-2.tentative.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=author href="mailto:masonf@chromium.org">
-<link rel=help href="https://open-ui.org/components/popup.research.explainer">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<div popover id=p1 defaultopen>
-  Outer popover
-  <div popover id=p2 defaultopen>
-    Inner popover
-  </div>
-</div>
-
-<script>
-  requestAnimationFrame(() => {
-    requestAnimationFrame(() => {
-      test(function(){
-        assert_true(p1.matches(':open'),'The first (outermost) popover should be the one that opens in this case');
-        assert_false(p2.matches(':open'),'The inner popover should not be open');
-      }, "The defaultopen attribute should cause only the first popover to open");
-    });
-  });
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen-display-ref.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen-display-ref.tentative.html
deleted file mode 100644
index 8973616..0000000
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen-display-ref.tentative.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=author href="mailto:masonf@chromium.org">
-<link rel="stylesheet" href="resources/popover-styles.css">
-
-<div class="fake-popover">This is a popover, which should be open upon load</div>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen-display.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen-display.tentative.html
deleted file mode 100644
index d624289..0000000
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen-display.tentative.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=author href="mailto:masonf@chromium.org">
-<link rel=help href="https://open-ui.org/components/popup.research.explainer">
-<link rel=match href="popover-defaultopen-display-ref.tentative.html">
-
-<div popover id=p1 defaultopen>This is a popover, which should be open upon load</div>
-<div popover id=p2 defaultopen>This is a second popover with defaultopen, which should NOT be open upon load</div>
-
-<style>
-  #p2 {
-    top:100px;
-  }
-</style>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen.tentative.html
deleted file mode 100644
index daf12f7ff..0000000
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-defaultopen.tentative.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=author href="mailto:masonf@chromium.org">
-<link rel=help href="https://open-ui.org/components/popup.research.explainer">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<div popover id=p1 defaultopen>This is a popover, which should be open upon load</div>
-<script></script> <!-- Possibly yield the parser, just to double-check -->
-<div popover id=p2 defaultopen>This is a second popover with defaultopen, which should NOT be open upon load</div>
-<div popover id=p3>Also not visible</div>
-
-<div popover=manual id=p4 defaultopen>This is a manual popover with defaultopen, which should be open upon load</div>
-<div popover=manual id=p5 defaultopen>This is a manual popover with defaultopen, which should be open upon load</div>
-
-<script>
-  requestAnimationFrame(() => {
-    requestAnimationFrame(() => {
-      test(function(){
-        assert_true(p1.matches(':open'),'defaultopen should open the popover');
-        assert_true(p1.hasAttribute('defaultopen'));
-        assert_true(p1.defaultOpen,'defaultopen should be reflected in the IDL attribute');
-        assert_false(p2.matches(':open'), 'Only the first popover with defaultopen should be open on load');
-        assert_true(p2.hasAttribute('defaultopen'),'defaultopen should be present/true, even if not opened');
-        assert_true(p2.defaultOpen,'defaultopen should be present/true, even if not opened');
-
-        assert_true(p4.matches(':open'),'defaultopen should open all manual popovers');
-        assert_true(p5.matches(':open'),'defaultopen should open all manual popovers');
-
-        assert_false(p3.matches(':open'));
-        p3.setAttribute('defaultopen','');
-        assert_false(p3.matches(':open'), 'Changing defaultopen should not affect open status');
-        assert_true(p3.hasAttribute('defaultopen'));
-        assert_true(p3.defaultOpen,'defaultopen should still reflect to IDL');
-
-        p1.removeAttribute('defaultopen');
-        assert_true(p1.matches(':open'),'removing defaultopen should not close the popover');
-        assert_false(p1.hasAttribute('defaultopen'),'...but it should reflect to IDL');
-
-        p1.hidePopover();
-      }, "The defaultopen attribute should affect page load only");
-    });
-  });
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-top-layer-combinations.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-top-layer-combinations.tentative.html
index 66106ce..d4529b9e 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-top-layer-combinations.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-top-layer-combinations.tentative.html
@@ -29,6 +29,7 @@
 </style>
 
 <script>
+showDefaultopenPopoversOnLoad();
 const isDialog = (ex) => ex instanceof HTMLDialogElement;
 const isFullscreen = (ex) => ex.classList.contains('fullscreen');
 function ensureIsOpenPopover(ex,message) {
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/resources/popover-utils.js b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/resources/popover-utils.js
index be10017..0df24ccd 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/resources/popover-utils.js
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/resources/popover-utils.js
@@ -73,3 +73,37 @@
   await wait_click;
   button.remove();
 }
+// This is a "polyfill" of sorts for the `defaultopen` attribute.
+// It can be called before window.load is complete, and it will
+// show defaultopen popovers according to the rules previously part
+// of the popover API: any popover=manual popover can be shown this
+// way, and only the first popover=auto popover.
+function showDefaultopenPopoversOnLoad() {
+  function show() {
+    const popovers = Array.from(document.querySelectorAll('[popover][defaultopen]'));
+    popovers.forEach((p) => {
+        // The showPopover calls below aren't guarded by a check on the popover
+        // open/closed status. If they throw exceptions, this function was
+        // probably called at a bad time. However, a check is made for open
+        // <dialog open> elements.
+        if (p instanceof HTMLDialogElement && p.hasAttribute('open'))
+          return;
+        switch (p.popover) {
+          case 'auto':
+            if (!document.querySelector('[popover]:open'))
+              p.showPopover();
+            return;
+          case 'manual':
+            p.showPopover();
+            return;
+          default:
+            assert_unreached(`Unknown popover type ${p.popover}`);
+        }
+      });
+  }
+  if (document.readyState === 'complete') {
+    show();
+  } else {
+    window.addEventListener('load',show,{once:true});
+  }
+}
diff --git a/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-001-expected.html b/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-001-expected.html
new file mode 100644
index 0000000..3c21b07
--- /dev/null
+++ b/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-001-expected.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<script>
+  if (window.testRunner)
+    testRunner.setPrinting();
+  if (window.internals)
+    internals.settings.setShouldPrintBackgrounds(true);
+</script>
+<style>
+  body { margin: 0; }
+</style>
+<div style="height:80vh;">
+  There should be a yellow square at the bottom of the first page, and another
+  one at the top of the second page.
+</div>
+<!-- Thanks to some subpixel clipping issues in printing, the ref has to be a
+     bit more complicated than simply placing a 20x40 DIV. We need clipping here
+     as well... -->
+<div style="position:relative; margin:auto; width:20vh; height:40vh; overflow:clip;">
+  <div style="position:absolute; contain:size; top:-1vh; left:-1vh; width:40vh; height:70vh; background:yellow;"></div>
+</div>
diff --git a/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-001.html b/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-001.html
new file mode 100644
index 0000000..a301c39
--- /dev/null
+++ b/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-001.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<script>
+  if (window.testRunner)
+    testRunner.setPrinting();
+  if (window.internals)
+    internals.settings.setShouldPrintBackgrounds(true);
+</script>
+<style>
+  body { margin: 0; }
+</style>
+<div style="height:80vh;">
+  There should be a yellow square at the bottom of the first page, and another
+  one at the top of the second page.
+</div>
+
+<!-- Add a red square to detect overclipping. -->
+<div style="position:absolute; top:105vh; left:50%; width:5vh; height:5vh; background:red;"></div>
+
+<div style="position:relative; margin:auto; width:20vh; height:40vh; overflow:clip;">
+  <div style="position:absolute; contain:size; left:-10vh; top:-10vh; width:32vh; height:100vh; background:yellow;"></div>
+</div>
diff --git a/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-002-expected.html b/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-002-expected.html
new file mode 100644
index 0000000..460b9df9
--- /dev/null
+++ b/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-002-expected.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<script>
+  if (window.testRunner)
+    testRunner.setPrinting();
+  if (window.internals)
+    internals.settings.setShouldPrintBackgrounds(true);
+</script>
+<style>
+  body { margin: 0; }
+</style>
+<div style="height:80vh;">
+  There should be a yellow square at the bottom of the first page, a blue square
+  at the top of the second page, an orange square at the bottom of the second
+  page, and another orange square at the top of the third page.
+</div>
+<!-- Thanks to some subpixel clipping issues in printing, the ref has to be a
+     bit more complicated than simply placing a 20x40 DIV. We need clipping here
+     as well... -->
+<div style="position:relative; margin:auto; width:20vh; height:140vh; overflow:clip;">
+  <div style="position:absolute; contain:size; left:-1vh; top:-1vh; width:50vh; height:21vh; background:yellow;"></div>
+  <div style="position:absolute; contain:size; left:-1vh; top:20vh; width:50vh; height:20vh; background:blue;"></div>
+  <div style="position:absolute; contain:size; left:-1vh; bottom:-1vh; width:50vh; height:41vh; background:orange;"></div>
+</div>
diff --git a/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-002.html b/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-002.html
new file mode 100644
index 0000000..145f471
--- /dev/null
+++ b/third_party/blink/web_tests/printing/abspos-inside-overflow-clip-002.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<script>
+  if (window.testRunner)
+    testRunner.setPrinting();
+  if (window.internals)
+    internals.settings.setShouldPrintBackgrounds(true);
+</script>
+<style>
+  body { margin: 0; }
+</style>
+<div style="height:80vh;">
+  There should be a yellow square at the bottom of the first page, a blue square
+  at the top of the second page, an orange square at the bottom of the second
+  page, and another orange square at the top of the third page.
+</div>
+
+<!-- Add some red squares to detect overclipping. -->
+<div style="position:absolute; top:85vh; left:50%; width:5vh; height:5vh; background:red;"></div>
+<div style="position:absolute; top:105vh; left:50%; width:5vh; height:5vh; background:red;"></div>
+<div style="position:absolute; top:185vh; left:50%; width:5vh; height:5vh; background:red;"></div>
+<div style="position:absolute; top:205vh; left:50%; width:5vh; height:5vh; background:red;"></div>
+
+<div style="position:relative; margin:auto; width:20vh; height:140vh; overflow:clip;">
+  <div style="position:absolute; contain:size; left:-10vh; bottom:-10vh; width:50vh; height:50vh; background:orange;"></div>
+  <div style="height:40vh;"></div>
+  <div style="position:absolute; contain:size; left:-10vh; top:-10vh; width:50vh; height:30vh; background:yellow;"></div>
+  <div style="height:100vh;"></div>
+  <div style="position:absolute; contain:size; left:-10vh; top:20vh; width:50vh; height:20vh; background:blue;"></div>
+</div>
diff --git a/third_party/blink/web_tests/virtual/fedcm-multi-idp/README.md b/third_party/blink/web_tests/virtual/fedcm-multi-idp/README.md
new file mode 100644
index 0000000..c110d912
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/fedcm-multi-idp/README.md
@@ -0,0 +1,5 @@
+# FedCmMultipleIdentityProviders
+This suite runs the tests in wpt/credential-management/fedcm-multi-idp/ with
+`--enable-features=FedCmMultipleIdentityProviders`.
+
+See crbug.com/1373766.
diff --git a/third_party/blink/web_tests/virtual/force-eager/external/wpt/measure-memory/idlharness.window-expected.txt b/third_party/blink/web_tests/virtual/force-eager/external/wpt/measure-memory/idlharness.window-expected.txt
new file mode 100644
index 0000000..daae809b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/force-eager/external/wpt/measure-memory/idlharness.window-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+PASS idl_test setup
+PASS idl_test validation
+PASS Partial interface Performance: original interface defined
+PASS Partial interface Performance: member names are unique
+FAIL Performance interface: operation measureUserAgentSpecificMemory() assert_own_property: interface prototype object missing non-static operation expected property "measureUserAgentSpecificMemory" missing
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/force-eager/external/wpt/measure-memory/shared-worker.https.any.sharedworker-expected.txt b/third_party/blink/web_tests/virtual/force-eager/external/wpt/measure-memory/shared-worker.https.any.sharedworker-expected.txt
new file mode 100644
index 0000000..c4a6586
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/force-eager/external/wpt/measure-memory/shared-worker.https.any.sharedworker-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Well-formed result of performance.measureUserAgentSpecificMemory. assert_true: expected true got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
index 35f14e0..0026e2a 100644
--- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -111,7 +111,6 @@
     property contains
     property contentEditable
     property dataset
-    property defaultOpen
     property dir
     property dispatchEvent
     property draggable
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index d79444dd..5137cda 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -3221,7 +3221,6 @@
     getter autofocus
     getter contentEditable
     getter dataset
-    getter defaultOpen
     getter dir
     getter draggable
     getter editContext
@@ -3363,7 +3362,6 @@
     setter autocapitalize
     setter autofocus
     setter contentEditable
-    setter defaultOpen
     setter dir
     setter draggable
     setter editContext
diff --git a/third_party/webrtc_overrides/BUILD.gn b/third_party/webrtc_overrides/BUILD.gn
index 2559cce..191f244 100644
--- a/third_party/webrtc_overrides/BUILD.gn
+++ b/third_party/webrtc_overrides/BUILD.gn
@@ -57,6 +57,7 @@
   "//third_party/webrtc/api/task_queue:task_queue",
   "//third_party/webrtc/api/transport:enums",
   "//third_party/webrtc/api/transport/rtp:rtp_source",
+  "//third_party/webrtc/api/units:time_delta",
   "//third_party/webrtc/api/video:recordable_encoded_frame",
   "//third_party/webrtc/api/video:video_bitrate_allocation",
   "//third_party/webrtc/api/video:video_frame",
@@ -124,7 +125,6 @@
     "//third_party/webrtc/api/audio:audio_frame_api",
     "//third_party/webrtc/api/transport:goog_cc",
     "//third_party/webrtc/api/transport:network_control",
-    "//third_party/webrtc/api/units:time_delta",
     "//third_party/webrtc/api/video:encoded_image",
     "//third_party/webrtc/call:call_interfaces",
     "//third_party/webrtc/media:rtc_media_engine_defaults",
diff --git a/tools/mb/mb.py b/tools/mb/mb.py
index 13f1863..b528830 100755
--- a/tools/mb/mb.py
+++ b/tools/mb/mb.py
@@ -1710,23 +1710,6 @@
     is_win = self.platform == 'win32' or 'target_os="win"' in vals['gn_args']
     is_lacros = 'chromeos_is_browser_only=true' in vals['gn_args']
 
-    # This should be true if tests with type='windowed_test_launcher' are
-    # expected to run using xvfb. For example, Linux Desktop, X11 CrOS and
-    # Ozone CrOS builds on Linux (xvfb is not used on CrOS HW or VMs). Note
-    # that one Ozone build can be used to run different backends. Currently,
-    # tests are executed for the headless and X11 backends and both can run
-    # under Xvfb on Linux.
-    use_xvfb = (self.platform.startswith('linux') and not is_android
-                and not is_fuchsia and not is_cros_device)
-
-    asan = 'is_asan=true' in vals['gn_args']
-    msan = 'is_msan=true' in vals['gn_args']
-    tsan = 'is_tsan=true' in vals['gn_args']
-    cfi_diag = 'use_cfi_diag=true' in vals['gn_args']
-    clang_coverage = 'use_clang_coverage=true' in vals['gn_args']
-    java_coverage = 'use_jacoco_coverage=true' in vals['gn_args']
-    javascript_coverage = 'use_javascript_coverage=true' in vals['gn_args']
-
     test_type = isolate_map[target]['type']
 
     if self.use_luci_auth:
@@ -1747,14 +1730,29 @@
       # generated_scripts.
       cmdline += [script] + isolate_map[target].get('args', [])
 
-      if java_coverage:
-        cmdline += ['--coverage-dir', '${ISOLATED_OUTDIR}/coverage']
-
       return cmdline, []
 
 
     # TODO(crbug.com/816629): Convert all targets to generated_scripts
     # and delete the rest of this function.
+
+    # This should be true if tests with type='windowed_test_launcher' are
+    # expected to run using xvfb. For example, Linux Desktop, X11 CrOS and
+    # Ozone CrOS builds on Linux (xvfb is not used on CrOS HW or VMs). Note
+    # that one Ozone build can be used to run different backends. Currently,
+    # tests are executed for the headless and X11 backends and both can run
+    # under Xvfb on Linux.
+    use_xvfb = (self.platform.startswith('linux') and not is_android
+                and not is_fuchsia and not is_cros_device)
+
+    asan = 'is_asan=true' in vals['gn_args']
+    msan = 'is_msan=true' in vals['gn_args']
+    tsan = 'is_tsan=true' in vals['gn_args']
+    cfi_diag = 'use_cfi_diag=true' in vals['gn_args']
+    clang_coverage = 'use_clang_coverage=true' in vals['gn_args']
+    java_coverage = 'use_jacoco_coverage=true' in vals['gn_args']
+    javascript_coverage = 'use_javascript_coverage=true' in vals['gn_args']
+
     executable = isolate_map[target].get('executable', target)
     executable_suffix = isolate_map[target].get(
         'executable_suffix', '.exe' if is_win else '')
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index a45b7dea..be2a8f2 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -364,8 +364,8 @@
       'Linux Builder (j-500) (reclient)': 'gpu_tests_release_bot_reclient',
       'Linux Builder (reclient compare)': 'gpu_tests_release_bot_reclient',
       'Linux CFI (reclient shadow)': 'cfi_full_cfi_icall_cfi_diag_thin_lto_release_static_dcheck_always_on_reclient',
-      'Linux ChromiumOS MSan Focal': 'chromeos_msan_release_bot_reclient',
-      'Linux MSan Focal': 'msan_release_bot_reclient',
+      'Linux ChromiumOS MSan Focal': 'chromeos_msan_focal_release_bot_reclient',
+      'Linux MSan Focal': 'msan_focal_release_bot_reclient',
       'Linux Viz': 'release_trybot_minimal_symbols_reclient',
       # TODO(crbug.com/1260232): remove this after the migration.
       'Mac Builder (reclient compare)': 'gpu_tests_release_bot_minimal_symbols_reclient',
@@ -418,7 +418,6 @@
       'lacros-amd64-generic-rel-skylab-fyi': 'chromeos_amd64-generic_lacros_rel_fyi_reclient',
       'lacros-arm64-generic-rel-skylab-fyi': 'chromeos_arm64-generic_lacros_rel_fyi_reclient',
       'linux-annotator-rel': 'release_bot_reclient',
-      'linux-ash-chromium-builder-fyi-rel': 'chromeos_with_codecs_release_bot_reclient',
       'linux-backuprefptr-x64-fyi-rel': 'release_trybot_backuprefptr_x64_reclient',
       'linux-blink-animation-use-time-delta': 'debug_bot_enable_blink_animation_use_time_delta_reclient',
       'linux-blink-heap-concurrent-marking-tsan-rel': 'release_trybot_minimal_symbols_tsan',
@@ -1177,7 +1176,7 @@
       'linux_chromium_asan_rel_ng': 'asan_lsan_release_trybot_reclient',
       'linux_chromium_cfi_rel_ng': 'cfi_full_cfi_icall_cfi_diag_thin_lto_release_static_dcheck_always_on_reclient',
       'linux_chromium_chromeos_asan_rel_ng': 'asan_lsan_chromeos_release_bot_dcheck_always_on',
-      'linux_chromium_chromeos_msan_focal': 'chromeos_msan_release_bot',
+      'linux_chromium_chromeos_msan_focal': 'chromeos_msan_focal_release_bot',
       'linux_chromium_chromeos_msan_rel_ng': 'chromeos_msan_release_bot',
       'linux_chromium_clobber_deterministic': 'release_trybot',
       'linux_chromium_clobber_rel_ng': 'release_trybot',
@@ -1188,7 +1187,7 @@
       # This is intentionally a release_bot and not a release_trybot;
       # enabling DCHECKs seems to cause flaky failures that don't show up
       # on the continuous builder.
-      'linux_chromium_msan_focal': 'msan_release_bot_reclient',
+      'linux_chromium_msan_focal': 'msan_focal_release_bot_reclient',
       'linux_chromium_msan_rel_ng': 'msan_release_bot_reclient',
 
       'linux_chromium_tsan_rel_ng': 'tsan_disable_nacl_release_trybot_reclient',
@@ -2187,6 +2186,14 @@
       'also_build_lacros_chrome_for_architecture_arm',
     ],
 
+    'chromeos_msan_focal_release_bot': [
+      'chromeos', 'msan_focal', 'release_bot',
+    ],
+
+    'chromeos_msan_focal_release_bot_reclient': [
+      'chromeos', 'msan_focal', 'release_bot_reclient',
+    ],
+
     'chromeos_msan_release_bot': [
       'chromeos', 'msan', 'release_bot',
     ],
@@ -3154,6 +3161,10 @@
       'clang_tot', 'official', 'no_widevine_cdm_host_verification',
     ],
 
+    'msan_focal_release_bot_reclient': [
+      'msan_focal', 'release_bot_reclient',
+    ],
+
     'msan_no_origins_release_bot_reclient': [
       'msan_no_origins', 'release_bot_reclient',
     ],
@@ -4343,7 +4354,11 @@
     },
 
     'msan': {
-      'gn_args': 'is_msan=true msan_track_origins=2',
+      'gn_args': 'is_msan=true msan_track_origins=2 instrumented_libraries_release = "xenial"',
+    },
+
+    'msan_focal': {
+      'gn_args': 'is_msan=true msan_track_origins=2 instrumented_libraries_release = "focal"',
     },
 
     'msan_no_origins': {
@@ -4695,7 +4710,7 @@
     },
 
     'updater_on_win_mac': {
-      'gn_args': 'enable_chromium_updater=true',
+      'gn_args': 'enable_updater=true',
     },
 
     'use_android_rust_toolchain': {
diff --git a/tools/mb/mb_config_expectations/chromium.clang.json b/tools/mb/mb_config_expectations/chromium.clang.json
index b559349..c1b8f9f 100644
--- a/tools/mb/mb_config_expectations/chromium.clang.json
+++ b/tools/mb/mb_config_expectations/chromium.clang.json
@@ -255,6 +255,7 @@
   "ToTLinuxMSan": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "xenial",
       "is_clang": true,
       "is_debug": false,
       "is_msan": true,
diff --git a/tools/mb/mb_config_expectations/chromium.fuzz.json b/tools/mb/mb_config_expectations/chromium.fuzz.json
index fd67c29e..14bee1f0 100644
--- a/tools/mb/mb_config_expectations/chromium.fuzz.json
+++ b/tools/mb/mb_config_expectations/chromium.fuzz.json
@@ -221,6 +221,7 @@
       "dcheck_always_on": false,
       "enable_nacl": false,
       "ffmpeg_branding": "ChromeOS",
+      "instrumented_libraries_release": "xenial",
       "is_component_build": true,
       "is_debug": false,
       "is_msan": true,
@@ -408,6 +409,7 @@
   "MSAN Release (chained origins)": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "xenial",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
diff --git a/tools/mb/mb_config_expectations/chromium.fyi.json b/tools/mb/mb_config_expectations/chromium.fyi.json
index 6d939482..aa5ac8e 100644
--- a/tools/mb/mb_config_expectations/chromium.fyi.json
+++ b/tools/mb/mb_config_expectations/chromium.fyi.json
@@ -334,6 +334,7 @@
       "dcheck_always_on": false,
       "enable_nacl": false,
       "ffmpeg_branding": "ChromeOS",
+      "instrumented_libraries_release": "xenial",
       "is_component_build": true,
       "is_debug": false,
       "is_msan": true,
@@ -428,6 +429,7 @@
   "Linux ChromiumOS MSan Focal": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "focal",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
@@ -439,6 +441,7 @@
   "Linux MSan Focal": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "focal",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
@@ -1066,17 +1069,6 @@
       "use_remoteexec": true
     }
   },
-  "linux-ash-chromium-builder-fyi-rel": {
-    "gn_args": {
-      "dcheck_always_on": false,
-      "ffmpeg_branding": "ChromeOS",
-      "is_component_build": false,
-      "is_debug": false,
-      "proprietary_codecs": true,
-      "target_os": "chromeos",
-      "use_remoteexec": true
-    }
-  },
   "linux-backuprefptr-x64-fyi-rel": {
     "gn_args": {
       "dcheck_always_on": true,
diff --git a/tools/mb/mb_config_expectations/chromium.memory.json b/tools/mb/mb_config_expectations/chromium.memory.json
index bfe35970..b8ad634 100644
--- a/tools/mb/mb_config_expectations/chromium.memory.json
+++ b/tools/mb/mb_config_expectations/chromium.memory.json
@@ -38,6 +38,7 @@
   "Linux ChromiumOS MSan Builder": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "xenial",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
@@ -49,6 +50,7 @@
   "Linux MSan Builder": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "xenial",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
@@ -103,6 +105,7 @@
     "gn_args": {
       "dcheck_always_on": false,
       "ffmpeg_branding": "Chrome",
+      "instrumented_libraries_release": "xenial",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
diff --git a/tools/mb/mb_config_expectations/chromium.updater.json b/tools/mb/mb_config_expectations/chromium.updater.json
index 44f2bd0f..ca50d3a 100644
--- a/tools/mb/mb_config_expectations/chromium.updater.json
+++ b/tools/mb/mb_config_expectations/chromium.updater.json
@@ -1,7 +1,7 @@
 {
   "mac-updater-builder-arm64-dbg": {
     "gn_args": {
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": true,
       "symbol_level": 1,
@@ -12,7 +12,7 @@
   "mac-updater-builder-arm64-rel": {
     "gn_args": {
       "dcheck_always_on": false,
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": false,
       "target_cpu": "arm64",
@@ -21,7 +21,7 @@
   },
   "mac-updater-builder-dbg": {
     "gn_args": {
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": true,
       "symbol_level": 1,
@@ -31,7 +31,7 @@
   "mac-updater-builder-rel": {
     "gn_args": {
       "dcheck_always_on": false,
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": false,
       "use_remoteexec": true
@@ -39,7 +39,7 @@
   },
   "win-updater-builder-dbg": {
     "gn_args": {
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": true,
       "symbol_level": 1,
@@ -49,7 +49,7 @@
   "win-updater-builder-rel": {
     "gn_args": {
       "dcheck_always_on": false,
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": false,
       "use_remoteexec": true
@@ -57,7 +57,7 @@
   },
   "win32-updater-builder-dbg": {
     "gn_args": {
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": true,
       "symbol_level": 0,
@@ -68,7 +68,7 @@
   "win32-updater-builder-rel": {
     "gn_args": {
       "dcheck_always_on": false,
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": false,
       "target_cpu": "x86",
diff --git a/tools/mb/mb_config_expectations/chromium.webkit.json b/tools/mb/mb_config_expectations/chromium.webkit.json
index 2db034c..b5e70ca 100644
--- a/tools/mb/mb_config_expectations/chromium.webkit.json
+++ b/tools/mb/mb_config_expectations/chromium.webkit.json
@@ -20,6 +20,7 @@
   "WebKit Linux Trusty MSAN": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "xenial",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
index 09163a58..62af472 100644
--- a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
+++ b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
@@ -492,6 +492,7 @@
   "linux-webkit-msan-rel": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "xenial",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
@@ -615,6 +616,7 @@
   "linux_chromium_chromeos_msan_focal": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "focal",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
@@ -626,6 +628,7 @@
   "linux_chromium_chromeos_msan_rel_ng": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "xenial",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
@@ -682,6 +685,7 @@
   "linux_chromium_msan_focal": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "focal",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
@@ -692,6 +696,7 @@
   "linux_chromium_msan_rel_ng": {
     "gn_args": {
       "dcheck_always_on": false,
+      "instrumented_libraries_release": "xenial",
       "is_component_build": false,
       "is_debug": false,
       "is_msan": true,
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.updater.json b/tools/mb/mb_config_expectations/tryserver.chromium.updater.json
index 7113d1f3..13eca58 100644
--- a/tools/mb/mb_config_expectations/tryserver.chromium.updater.json
+++ b/tools/mb/mb_config_expectations/tryserver.chromium.updater.json
@@ -1,7 +1,7 @@
 {
   "mac-updater-try-builder-dbg": {
     "gn_args": {
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": true,
       "symbol_level": 1,
@@ -11,7 +11,7 @@
   "mac-updater-try-builder-rel": {
     "gn_args": {
       "dcheck_always_on": true,
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": false,
       "symbol_level": 0,
@@ -20,7 +20,7 @@
   },
   "win-updater-try-builder-dbg": {
     "gn_args": {
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": true,
       "symbol_level": 1,
@@ -30,7 +30,7 @@
   "win-updater-try-builder-rel": {
     "gn_args": {
       "dcheck_always_on": true,
-      "enable_chromium_updater": true,
+      "enable_updater": true,
       "is_component_build": false,
       "is_debug": false,
       "symbol_level": 0,
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 512d62d..c1a4d39 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -10899,6 +10899,7 @@
       label="MSDH_SUPPRESS_LOCAL_AUDIO_PLAYBACK_BUT_AUDIO_NOT_REQUESTED"/>
   <int value="290" label="MSDH_HOTWORD_ENABLED_BUT_AUDIO_NOT_REQUESTED"/>
   <int value="291" label="MSDH_DISABLE_LOCAL_ECHO_BUT_AUDIO_NOT_REQUESTED"/>
+  <int value="292" label="MSDH_ON_STREAM_STARTED_DISALLOWED"/>
 </enum>
 
 <enum name="BadMessageReasonExtensions">
@@ -24199,10 +24200,20 @@
 </enum>
 
 <enum name="CustomTabsResizeType">
+  <obsolete>
+    Obsolete as of November 2022.
+  </obsolete>
   <int value="0" label="Partial Custom Tab is expanded"/>
   <int value="1" label="Partial Custom Tab is minimized"/>
 </enum>
 
+<enum name="CustomTabsResizeType2">
+  <int value="0" label="Partial Custom Tab is manually expanded"/>
+  <int value="1" label="Partial Custom Tab is manually minimized"/>
+  <int value="2" label="Partial Custom Tab is automatically expanded"/>
+  <int value="3" label="Partial Custom Tab is automatically minimized"/>
+</enum>
+
 <enum name="CustomTabsSessionDisconnectStatus">
   <int value="0" label="Unknown"/>
   <int value="1" label="Custom Tab in Foreground"/>
@@ -26166,6 +26177,7 @@
   <int value="64" label="importantDOMProperties"/>
   <int value="65" label="justMyCode"/>
   <int value="66" label="breakpointView"/>
+  <int value="67" label="preloadingStatusPanel"/>
 </enum>
 
 <enum name="DevToolsGridOverlayOpenedFrom">
@@ -36594,6 +36606,7 @@
   <int value="1729" label="AUTOTESTPRIVATE_REMOVECOMPONENTEXTENSION"/>
   <int value="1730" label="PASSWORDSPRIVATE_REQUESTCREDENTIALSDETAILS"/>
   <int value="1731" label="PASSWORDSPRIVATE_GETCREDENTIALGROUPS"/>
+  <int value="1732" label="AUTOTESTPRIVATE_GETLAUNCHERSSEARCHBOXSTATE"/>
 </enum>
 
 <enum name="ExtensionIconState">
@@ -50893,6 +50906,19 @@
   <int value="7" label="HEADER_HTTP_09_ON_REUSED_SOCKET"/>
 </enum>
 
+<enum name="HttpMethods">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="GET"/>
+  <int value="2" label="HEAD"/>
+  <int value="3" label="POST"/>
+  <int value="4" label="PUT"/>
+  <int value="5" label="DELETE"/>
+  <int value="6" label="CONNECT"/>
+  <int value="7" label="OPTIONS"/>
+  <int value="8" label="TRACE"/>
+  <int value="9" label="PATCH"/>
+</enum>
+
 <enum name="HttpPasswordMigrationMode">
   <int value="0" label="Moved">
     HTTP credentials were moved during migration to HTTPS
@@ -58850,6 +58876,7 @@
   <int value="-1503851906" label="EnableSettingsShortcutSearch:enabled"/>
   <int value="-1503745396" label="UnifiedPasswordManagerReenrollment:disabled"/>
   <int value="-1500811568" label="MuteNotificationSnoozeAction:disabled"/>
+  <int value="-1499989506" label="FedCmWithoutThirdPartyCookies:disabled"/>
   <int value="-1498681588" label="AndroidWebContentsDarkMode:enabled"/>
   <int value="-1498582719"
       label="ColorProviderRedirectionForThemeProvider:enabled"/>
@@ -63812,6 +63839,7 @@
   <int value="1434515920" label="ReaderModeInCCT:enabled"/>
   <int value="1435251818" label="AutofillNoLocalSaveOnUploadSuccess:enabled"/>
   <int value="1436115897" label="OsSettingsSearchFeedback:enabled"/>
+  <int value="1436409565" label="FedCmWithoutThirdPartyCookies:enabled"/>
   <int value="1436454450" label="InterestFeedV2:disabled"/>
   <int value="1437413720" label="CooperativeScheduling:disabled"/>
   <int value="1438417722" label="MessagesForAndroidReaderMode:enabled"/>
diff --git a/tools/metrics/histograms/metadata/content_creation/histograms.xml b/tools/metrics/histograms/metadata/content_creation/histograms.xml
index 6f09f8a7..5f3628b 100644
--- a/tools/metrics/histograms/metadata/content_creation/histograms.xml
+++ b/tools/metrics/histograms/metadata/content_creation/histograms.xml
@@ -222,7 +222,7 @@
 </histogram>
 
 <histogram name="NoteCreation.CreationStatus" enum="BooleanCreated"
-    expires_after="2022-12-04">
+    expires_after="2023-04-23">
   <owner>sebsg@chromium.org</owner>
   <owner>chrome-creation@google.com</owner>
   <summary>
@@ -242,14 +242,14 @@
 </histogram>
 
 <histogram name="NoteCreation.NoteShared" enum="BooleanShared"
-    expires_after="2022-12-04">
+    expires_after="2023-04-23">
   <owner>sebsg@chromium.org</owner>
   <owner>chrome-creation@google.com</owner>
   <summary>Records whether the created note was shared or not.</summary>
 </histogram>
 
 <histogram name="NoteCreation.NumberOfTemplateChanges"
-    units="Number of changes" expires_after="2022-12-04">
+    units="Number of changes" expires_after="2023-04-23">
   <owner>sebsg@chromium.org</owner>
   <owner>chrome-creation@google.com</owner>
   <summary>
@@ -258,7 +258,7 @@
 </histogram>
 
 <histogram name="NoteCreation.SelectedDynamicTemplateID" units="count"
-    expires_after="2022-12-04">
+    expires_after="2023-04-23">
   <owner>graysonlafleur@google.com</owner>
   <owner>chrome-creation@google.com</owner>
   <summary>
@@ -270,7 +270,7 @@
 </histogram>
 
 <histogram name="NoteCreation.SelectedDynamicTemplateIndex" units="count"
-    expires_after="2022-12-04">
+    expires_after="2023-04-23">
   <owner>graysonlafleur@google.com</owner>
   <owner>chrome-creation@google.com</owner>
   <summary>
@@ -282,7 +282,7 @@
 </histogram>
 
 <histogram name="NoteCreation.SelectedTemplate" enum="NoteTemplate"
-    expires_after="2023-02-19">
+    expires_after="2023-04-23">
   <owner>sebsg@chromium.org</owner>
   <owner>chrome-creation@google.com</owner>
   <summary>
@@ -291,7 +291,7 @@
 </histogram>
 
 <histogram name="NoteCreation.ShareDestination" enum="NoteShareDestination"
-    expires_after="2022-12-04">
+    expires_after="2023-04-23">
   <owner>sebsg@chromium.org</owner>
   <owner>chrome-creation@google.com</owner>
   <summary>
@@ -300,7 +300,7 @@
 </histogram>
 
 <histogram name="NoteCreation.TemplateFetchSuccess" enum="BooleanSuccess"
-    expires_after="2022-12-04">
+    expires_after="2023-04-23">
   <owner>graysonlafleur@google.com</owner>
   <owner>chrome-creation@google.com</owner>
   <summary>
@@ -310,7 +310,7 @@
 </histogram>
 
 <histogram name="NoteCreation.TimeTo{action}" units="ms"
-    expires_after="2022-12-04">
+    expires_after="2023-04-23">
   <owner>sebsg@chromium.org</owner>
   <owner>chrome-creation@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/cookie/histograms.xml b/tools/metrics/histograms/metadata/cookie/histograms.xml
index a52ec45..b36ee396c 100644
--- a/tools/metrics/histograms/metadata/cookie/histograms.xml
+++ b/tools/metrics/histograms/metadata/cookie/histograms.xml
@@ -194,7 +194,7 @@
 
 <histogram
     name="Cookie.CrossSiteRedirectDowngradeChangesInclusion2.{AccessType}"
-    enum="CookieSameSite2" expires_after="2023-01-15">
+    enum="CookieSameSite2" expires_after="2023-05-15">
   <owner>bingler@chromium.org</owner>
   <owner>miketaylr@chromium.org</owner>
   <summary>
@@ -214,8 +214,39 @@
   </token>
 </histogram>
 
+<histogram name="Cookie.CrossSiteRedirectDowngradeChangesInclusionAge"
+    units="minutes" expires_after="2023-05-15">
+  <owner>bingler@chromium.org</owner>
+  <owner>miketaylr@chromium.org</owner>
+  <summary>
+    The age of the cookie within [0,30) minutes, rounded down to the nearest
+    minute, whose inclusion is changed by considering redirects as part of the
+    same-site context calculation. (See
+    Cookie.CrossSiteRedirectDowngradeChangesInclusion2's summary for more info.)
+
+    This is only recorded for cookies accessed via an HTTP request and is logged
+    for each cookie whose inclusion was changed regardless of whether the cookie
+    was ultimately included or not.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.CrossSiteRedirectDowngradeChangesInclusionHttpMethod"
+    enum="HttpMethods" expires_after="2023-05-15">
+  <owner>bingler@chromium.org</owner>
+  <owner>miketaylr@chromium.org</owner>
+  <summary>
+    The HTTP method of the request for the cookie whose inclusion is changed by
+    considering redirects as part of the same-site context calculation. (See
+    Cookie.CrossSiteRedirectDowngradeChangesInclusion2's summary for more info.)
+
+    This is only recorded for cookies accessed over HTTP and is logged for each
+    cookie whose inclusion was changed regardless of whether the cookie was
+    ultimately included or not.
+  </summary>
+</histogram>
+
 <histogram name="Cookie.CrossSiteRedirectType.{AccessType}"
-    enum="ContextRedirectTypeBug1221316" expires_after="2023-01-15">
+    enum="ContextRedirectTypeBug1221316" expires_after="2023-05-15">
   <owner>bingler@chromium.org</owner>
   <owner>miketaylr@chromium.org</owner>
   <summary>
@@ -478,13 +509,6 @@
   </summary>
 </histogram>
 
-<histogram name="Cookie.HeaderLength" units="bytes" expires_after="2020-09-13">
-  <owner>mkwst@chromium.org</owner>
-  <summary>
-    The size of each outgoing request's 'Cookie' header field's value, in bytes.
-  </summary>
-</histogram>
-
 <histogram name="Cookie.IncludedRequestEffectiveSameSite"
     enum="CookieEffectiveSameSite" expires_after="2023-01-01">
   <owner>bingler@chromium.org</owner>
@@ -517,16 +541,6 @@
   </summary>
 </histogram>
 
-<histogram name="Cookie.KillDatabaseResult" enum="BooleanSuccess"
-    expires_after="2020-11-08">
-  <owner>morlovich@chromium.org</owner>
-  <owner>bingler@chromium.org</owner>
-  <summary>
-    Whether killing the database because it was corrupted beyond repair
-    succeeded.
-  </summary>
-</histogram>
-
 <histogram name="Cookie.LoadProblem" enum="CookieLoadProblem"
     expires_after="2023-05-07">
   <owner>morlovich@chromium.org</owner>
@@ -561,20 +575,6 @@
   </summary>
 </histogram>
 
-<histogram name="Cookie.NumDomainPurgedKeys" units="keys"
-    expires_after="2022-08-28">
-  <owner>cfredric@chromium.org</owner>
-  <owner>kaustubhag@chromium.org</owner>
-  <summary>
-    Records the number of distinct keys (eTLD+1's) that have experienced
-    eviction of a non-expired cookie due to reaching the max number of cookies
-    per key. This is not persisted across network service restarts, so it
-    represents the number of such eTLD+1's that have relatively recently added
-    new cookies that went over the limit (since the last browser restart, crash,
-    etc). Recorded every 10 minutes of active browsing time.
-  </summary>
-</histogram>
-
 <histogram name="Cookie.NumKeys" units="keys" expires_after="2023-04-30">
   <owner>cfredric@chromium.org</owner>
   <owner>kaustubhag@chromium.org</owner>
@@ -797,16 +797,6 @@
   </summary>
 </histogram>
 
-<histogram name="Cookie.TimeKeyLoadTotalWait" units="ms"
-    expires_after="2020-05-17">
-  <owner>erikchen@chromium.org</owner>
-  <summary>
-    This histogram records the the total amount of time spent fetching the
-    cookies associated with an eTLD+1 from disk, including time spent waiting in
-    task queues.
-  </summary>
-</histogram>
-
 <histogram name="Cookie.TruncatingCharacterInCookieString"
     enum="TruncatingCharacterInCookieStringType" expires_after="2023-02-12">
   <owner>bingler@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
index 826b960..a3eab9e4 100644
--- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
+++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -386,6 +386,19 @@
 
 <histogram name="CustomTabs.ResizeType" enum="CustomTabsResizeType"
     expires_after="2023-05-14">
+  <obsolete>
+    Deprecated 2022-11. Replaced by CustomTabs.ResizeType2
+  </obsolete>
+  <owner>kgrosu@google.com</owner>
+  <owner>chrome-connective-tissue@google.com</owner>
+  <summary>
+    When a Partial Custom Tab has been resized by the user log if it is an
+    expansion or a minimization of the tab.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.ResizeType2" enum="CustomTabsResizeType2"
+    expires_after="2023-05-14">
   <owner>kgrosu@google.com</owner>
   <owner>chrome-connective-tissue@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml
index 0837d4d..7c245bf 100644
--- a/tools/metrics/histograms/metadata/ios/histograms.xml
+++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -22,6 +22,17 @@
 
 <histograms>
 
+<variants name="MXVersion">
+  <variant name=""
+      summary="The default MXPayload, only recorded when the app version
+               number matches."/>
+  <variant name="IncludingMismatch."
+      summary="The processed MXPayload may not match the current app's
+               version. This is very common on app updates, which would
+               otherwise lead to losing multiple days of MetricKit reports.
+               Instead, record them here."/>
+</variants>
+
 <histogram name="IOS.Allocator.ShimInstalled" enum="Boolean"
     expires_after="2023-02-26">
   <owner>rohitrao@chromium.org</owner>
@@ -989,7 +1000,7 @@
   </summary>
 </histogram>
 
-<histogram name="IOS.MetricKit.ApplicationHangTime" units="ms"
+<histogram name="IOS.MetricKit.{MXVersion}ApplicationHangTime" units="ms"
     expires_after="never">
 <!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
 
@@ -1023,7 +1034,7 @@
   </summary>
 </histogram>
 
-<histogram name="IOS.MetricKit.ApplicationResumeTime" units="ms"
+<histogram name="IOS.MetricKit.{MXVersion}ApplicationResumeTime" units="ms"
     expires_after="2023-03-19">
   <owner>justincohen@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
@@ -1036,7 +1047,7 @@
   </summary>
 </histogram>
 
-<histogram name="IOS.MetricKit.AverageSuspendedMemory" units="MB"
+<histogram name="IOS.MetricKit.{MXVersion}AverageSuspendedMemory" units="MB"
     expires_after="2023-03-19">
   <owner>justincohen@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
@@ -1050,8 +1061,8 @@
   </summary>
 </histogram>
 
-<histogram name="IOS.MetricKit.BackgroundExitData" enum="MetricKitExitData"
-    expires_after="never">
+<histogram name="IOS.MetricKit.{MXVersion}BackgroundExitData"
+    enum="MetricKitExitData" expires_after="never">
 <!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
 
   <owner>justincohen@chromium.org</owner>
@@ -1076,7 +1087,7 @@
   </summary>
 </histogram>
 
-<histogram name="IOS.MetricKit.BackgroundTimePerDay" units="ms"
+<histogram name="IOS.MetricKit.{MXVersion}BackgroundTimePerDay" units="ms"
     expires_after="2023-05-14">
   <owner>justincohen@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
@@ -1091,8 +1102,8 @@
   </summary>
 </histogram>
 
-<histogram name="IOS.MetricKit.ForegroundExitData" enum="MetricKitExitData"
-    expires_after="never">
+<histogram name="IOS.MetricKit.{MXVersion}ForegroundExitData"
+    enum="MetricKitExitData" expires_after="never">
 <!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
 
   <owner>justincohen@chromium.org</owner>
@@ -1119,7 +1130,7 @@
   </summary>
 </histogram>
 
-<histogram name="IOS.MetricKit.ForegroundTimePerDay" units="s"
+<histogram name="IOS.MetricKit.{MXVersion}ForegroundTimePerDay" units="s"
     expires_after="2023-05-14">
   <owner>justincohen@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
@@ -1137,7 +1148,7 @@
   </summary>
 </histogram>
 
-<histogram name="IOS.MetricKit.PeakMemoryUsage" units="MB"
+<histogram name="IOS.MetricKit.{MXVersion}PeakMemoryUsage" units="MB"
     expires_after="2023-03-19">
   <owner>justincohen@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
@@ -1156,7 +1167,7 @@
   </summary>
 </histogram>
 
-<histogram name="IOS.MetricKit.TimeToFirstDraw" units="ms"
+<histogram name="IOS.MetricKit.{MXVersion}TimeToFirstDraw" units="ms"
     expires_after="2023-03-19">
   <owner>justincohen@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
@@ -1961,10 +1972,22 @@
   </summary>
 </histogram>
 
+<histogram name="IOS.Variations.CreateTrials.SeedExpiry"
+    enum="VariationsSeedExpiry" expires_after="2023-05-11">
+  <owner>ginnyhuang@chromium.org</owner>
+  <owner>bling-get-set-up@google.com</owner>
+  <summary>
+    Records the state of the variations seed stored from a previous launch of
+    Chrome iOS, e.g. not expired. Recorded after the seed is loaded and before
+    trials are created from the seed. Note that seeds for which this metric is
+    recorded may not be applied, e.g. when the seed has expired.
+  </summary>
+</histogram>
+
 <histogram name="IOS.Variations.FirstRun.SeedFetchResult"
     enum="VariationsSeedFetchResult" expires_after="2023-05-09">
   <owner>ginnyhuang@chromium.org</owner>
-  <owner>bling-team@google.com</owner>
+  <owner>bling-get-set-up@google.com</owner>
   <summary>
     The result of attempting to fetch an initial variations seed during iOS
     Chrome first run. Records both the HTTP code and various error values in one
@@ -1975,7 +1998,7 @@
 <histogram name="IOS.Variations.FirstRun.SeedFetchTime" units="ms"
     expires_after="2023-05-09">
   <owner>ginnyhuang@chromium.org</owner>
-  <owner>bling-team@google.com</owner>
+  <owner>bling-get-set-up@google.com</owner>
   <summary>
     The latency of fetching an initial variations seed during iOS Chrome first
     run. Only considers cases where an HTTP 200 result was received.
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml
index f262720..631db88 100644
--- a/tools/metrics/histograms/metadata/network/histograms.xml
+++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -147,7 +147,7 @@
 </histogram>
 
 <histogram name="Network.Ash.WiFi.Hidden.RemovalAttempt"
-    units="network removal attempts" expires_after="2022-12-31">
+    units="network removal attempts" expires_after="2023-11-09">
   <owner>chadduffin@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
   <summary>
@@ -158,8 +158,23 @@
   </summary>
 </histogram>
 
+<histogram name="Network.Ash.WiFi.Hidden.RemovalAttempt.Result"
+    enum="BooleanSuccess" expires_after="2023-11-09">
+  <owner>chadduffin@chromium.org</owner>
+  <owner>cros-connectivity@google.com</owner>
+  <summary>
+    Records the result of an attempt to remove a WiFi network that was
+    determined to be wrongly configured as hidden. This metric will be emitted
+    for each network we attempt to remove if and when we are notified of the
+    result of our removal request; while it is safe to expect that we will be
+    notified most of the time, we are not guaranteed to be notified. These
+    network removals will occur once at startup and each time the primary user
+    changes.
+  </summary>
+</histogram>
+
 <histogram name="Network.Ash.WiFi.Hidden.{LoginStatus}" enum="Boolean"
-    expires_after="2023-10-31">
+    expires_after="2023-11-09">
   <owner>chadduffin@chromium.org</owner>
   <owner>cros-connectivity@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml
index 24c8d956..a5d97b2 100644
--- a/tools/metrics/histograms/metadata/others/histograms.xml
+++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -1889,67 +1889,6 @@
   </summary>
 </histogram>
 
-<histogram name="Cast.Sender.CastTimeRemainingPercentage" units="%"
-    expires_after="2021-07-01">
-  <obsolete>
-    Deprecated as of 2021/02 as it's not been collected for a while due to
-    refactoring. A new metrics,
-    &quot;Cast.Sender.Clank.CastTimeRemainingPercentage&quot; now collects the
-    same data but at a different location.
-  </obsolete>
-  <owner>mfoltz@chromium.org</owner>
-  <owner>openscreen-eng@google.com</owner>
-  <summary>
-    Records the percentage of the video left at the time the remote playback is
-    stopped. This will be recorded when the playback is stopped by the user, or
-    when it's stopped by the cast device.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.Clank.CastTimeRemainingPercentage" units="count"
-    expires_after="2022-12-11">
-  <owner>muyaoxu@google.com</owner>
-  <owner>openscreen-eng@google.com</owner>
-  <summary>
-    Records the percentage of the video left at the time the remote playback is
-    stopped. This will be recorded when the playback is stopped by the user, or
-    when it's stopped by the cast device. To reduce the number of empty buckets,
-    the result is rounded and a value of 1 means 10%.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.Clank.FullscreenControlsAction"
-    enum="MediaCommand" expires_after="2023-02-19">
-  <owner>muyaoxu@google.com</owner>
-  <owner>openscreen-eng@google.com</owner>
-  <summary>
-    Record each interaction with the fullscreen remote playback controls on
-    Clank.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.Clank.NotificationControlsAction"
-    enum="CastNotificationControls" expires_after="2023-04-23">
-  <owner>muyaoxu@google.com</owner>
-  <owner>openscreen-eng@google.com</owner>
-  <summary>
-    Record each interaction with the cast notification controls on Clank.
-  </summary>
-</histogram>
-
-<histogram name="Cast.Sender.Clank.SessionTimeWithoutMediaElementPercentage"
-    units="count" expires_after="2022-12-11">
-  <owner>muyaoxu@google.com</owner>
-  <owner>openscreen-eng@google.com</owner>
-  <summary>
-    Records the ratio of the time the media element was detached from the remote
-    playback session to the total duration of the session (as from when the
-    element has been attached till when the session stopped or disconnected). To
-    reduce the number of empty buckets, the result is rounded and a value of 1
-    means 10%.
-  </summary>
-</histogram>
-
 <histogram name="Cast.Sender.DeviceType" enum="RemotePlaybackDeviceType"
     expires_after="2021-06-01">
   <obsolete>
@@ -2008,7 +1947,7 @@
 </histogram>
 
 <histogram name="Cast.Sender.RemotePlayback.InitiationLocation"
-    enum="RemotePlaybackInitiationLocation" expires_after="2023-04-16">
+    enum="RemotePlaybackInitiationLocation" expires_after="2023-05-11">
   <owner>muyaoxu@google.com</owner>
   <owner>openscreen-eng@google.com</owner>
   <summary>
@@ -4699,6 +4638,9 @@
 
 <histogram name="CrashReport.BreakpadIOSUploadOutcome"
     enum="FoundationPopularErrorCode" expires_after="2022-12-25">
+  <obsolete>
+    Removed 11/2022.
+  </obsolete>
   <owner>justincohen@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
   <summary>
@@ -11738,16 +11680,6 @@
   </summary>
 </histogram>
 
-<histogram name="ReportingAndNEL.KillDatabaseResult" enum="BooleanSuccess"
-    expires_after="2020-09-09">
-  <owner>yhirano@chromium.org</owner>
-  <owner>src/net/reporting/OWNERS</owner>
-  <summary>
-    Whether killing the database because it was corrupted beyond repair
-    succeeded. This is recorded when a fatal SQLite error is detected.
-  </summary>
-</histogram>
-
 <histogram name="ReportingAndNEL.NumberOfLoadedNELPolicies"
     units="policy count" expires_after="2023-06-25">
   <owner>yhirano@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/privacy/histograms.xml b/tools/metrics/histograms/metadata/privacy/histograms.xml
index 0a4e23a7..d1103c1 100644
--- a/tools/metrics/histograms/metadata/privacy/histograms.xml
+++ b/tools/metrics/histograms/metadata/privacy/histograms.xml
@@ -318,7 +318,7 @@
 
 <histogram
     name="PrivacySandbox.AggregationService.KeyFetcher.HttpResponseOrNetErrorCode"
-    enum="NetErrorCodes" expires_after="M117">
+    enum="CombinedHttpResponseAndNetErrorCode" expires_after="M117">
   <owner>alexmt@chromium.org</owner>
   <owner>linnan@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/webapps/histograms.xml b/tools/metrics/histograms/metadata/webapps/histograms.xml
index 6fa2c99..39124473 100644
--- a/tools/metrics/histograms/metadata/webapps/histograms.xml
+++ b/tools/metrics/histograms/metadata/webapps/histograms.xml
@@ -746,6 +746,18 @@
   <summary>Records the result code of Web App installs.</summary>
 </histogram>
 
+<histogram name="WebApp.Isolated.SignatureVerificationDuration" units="ms"
+    expires_after="2023-11-08">
+  <owner>cmfcmf@chromium.org</owner>
+  <owner>peletskyi@chromium.org</owner>
+  <summary>
+    Records how long it takes to verify signatures of Signed Web Bundles used
+    for Isolated Web Apps every time their signatures are verified. Signatures
+    are verified during installation (all platforms) and when an Isolated Web
+    App is first accessed during a Chrome session (non-ChromeOS platforms only).
+  </summary>
+</histogram>
+
 <histogram name="WebApp.Launcher.LaunchResult"
     enum="WebAppLauncherLaunchResult" expires_after="2023-04-16">
   <owner>davidbienvenu@chromium.org</owner>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 1c9b1c2..6a322b8 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -6,15 +6,15 @@
         },
         "win": {
             "hash": "c720bb4679e1d5bfbdb6335d848e9c8b5dd83174",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/008a2ca9b9db87584723a23962e690296c832f84/trace_processor_shell.exe"
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/8c09706981a46ece978105c3b8443cda1b08f30e/trace_processor_shell.exe"
         },
         "linux_arm": {
             "hash": "58893933be305d3bfe0a72ebebcacde2ac3ca893",
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "mac": {
-            "hash": "92b8b29899b2992e47aed6aa492f84b5a6ed30bd",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/008a2ca9b9db87584723a23962e690296c832f84/trace_processor_shell"
+            "hash": "36e7f3297e5494cabc2124f735f4bdf65b9edaa9",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/8c09706981a46ece978105c3b8443cda1b08f30e/trace_processor_shell"
         },
         "mac_arm64": {
             "hash": "92318bea34f5c9beec69d2d826a9a92ec9d3cdcd",
@@ -22,7 +22,7 @@
         },
         "linux": {
             "hash": "cb8eb61c26649f9dcaa16c7de61ac9d6083bd50b",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/008a2ca9b9db87584723a23962e690296c832f84/trace_processor_shell"
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/8c09706981a46ece978105c3b8443cda1b08f30e/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/ui/android/java/src/org/chromium/ui/UiUtils.java b/ui/android/java/src/org/chromium/ui/UiUtils.java
index 9d3c73c0..f8eab7c 100644
--- a/ui/android/java/src/org/chromium/ui/UiUtils.java
+++ b/ui/android/java/src/org/chromium/ui/UiUtils.java
@@ -31,7 +31,6 @@
 import androidx.appcompat.content.res.AppCompatResources;
 import androidx.core.graphics.drawable.DrawableCompat;
 
-import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.Log;
 
 import java.io.File;
@@ -93,7 +92,7 @@
                     imManager.getEnabledInputMethodSubtypeList(enabledMethods.get(i), true);
             if (subtypes == null) continue;
             for (int j = 0; j < subtypes.size(); j++) {
-                String locale = ApiCompatibilityUtils.getLocale(subtypes.get(j));
+                String locale = subtypes.get(j).getLanguageTag();
                 if (!TextUtils.isEmpty(locale)) locales.add(locale);
             }
         }
diff --git a/ui/android/java/src/org/chromium/ui/base/ClipboardImpl.java b/ui/android/java/src/org/chromium/ui/base/ClipboardImpl.java
index b1f7c23..b5b9913 100644
--- a/ui/android/java/src/org/chromium/ui/base/ClipboardImpl.java
+++ b/ui/android/java/src/org/chromium/ui/base/ClipboardImpl.java
@@ -144,8 +144,7 @@
             if (!(text instanceof Spanned)) return null;
             Spanned spanned = (Spanned) text;
             if (hasStyleSpan(spanned)) {
-                return ApiCompatibilityUtils.toHtml(
-                        spanned, Html.TO_HTML_PARAGRAPH_LINES_CONSECUTIVE);
+                return Html.toHtml(spanned, Html.TO_HTML_PARAGRAPH_LINES_CONSECUTIVE);
             }
         }
         return null;
diff --git a/ui/android/java/src/org/chromium/ui/modaldialog/PendingDialogContainer.java b/ui/android/java/src/org/chromium/ui/modaldialog/PendingDialogContainer.java
index f3adc93..cd16642 100644
--- a/ui/android/java/src/org/chromium/ui/modaldialog/PendingDialogContainer.java
+++ b/ui/android/java/src/org/chromium/ui/modaldialog/PendingDialogContainer.java
@@ -6,7 +6,6 @@
 
 import androidx.annotation.Nullable;
 
-import org.chromium.base.Consumer;
 import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogPriority;
 import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType;
 import org.chromium.ui.modelutil.PropertyModel;
@@ -17,6 +16,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Consumer;
 
 /**
  * A container class to provide basic operations for pending dialogs with attributes {@link
diff --git a/ui/android/junit/src/org/chromium/ui/modaldialog/PendingDialogContainerTest.java b/ui/android/junit/src/org/chromium/ui/modaldialog/PendingDialogContainerTest.java
index 0c740b0..f998d92 100644
--- a/ui/android/junit/src/org/chromium/ui/modaldialog/PendingDialogContainerTest.java
+++ b/ui/android/junit/src/org/chromium/ui/modaldialog/PendingDialogContainerTest.java
@@ -21,13 +21,13 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.annotation.Config;
 
-import org.chromium.base.Consumer;
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogPriority;
 import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType;
 import org.chromium.ui.modelutil.PropertyModel;
 
 import java.util.HashSet;
+import java.util.function.Consumer;
 
 /**
  * Robolectric tests for testing the functionalities of {@link PendingDialogContainer}.
diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc
index 598fec72..d3b43a3 100644
--- a/ui/base/ui_base_features.cc
+++ b/ui/base/ui_base_features.cc
@@ -440,4 +440,12 @@
   return base::FeatureList::IsEnabled(kLacrosColorManagement);
 }
 
+BASE_FEATURE(kChromeRefresh2023,
+             "ChromeRefresh2023",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
+bool IsChromeRefresh2023() {
+  return base::FeatureList::IsEnabled(kChromeRefresh2023);
+}
+
 }  // namespace features
diff --git a/ui/base/ui_base_features.h b/ui/base/ui_base_features.h
index 5883366..f4ff60a 100644
--- a/ui/base/ui_base_features.h
+++ b/ui/base/ui_base_features.h
@@ -207,6 +207,9 @@
 COMPONENT_EXPORT(UI_BASE_FEATURES)
 bool IsLacrosColorManagementEnabled();
 
+COMPONENT_EXPORT(UI_BASE_FEATURES) BASE_DECLARE_FEATURE(kChromeRefresh2023);
+COMPONENT_EXPORT(UI_BASE_FEATURES) bool IsChromeRefresh2023();
+
 }  // namespace features
 
 #endif  // UI_BASE_UI_BASE_FEATURES_H_
diff --git a/ui/base/wayland/color_manager_util.cc b/ui/base/wayland/color_manager_util.cc
index 98df298..7806f1b 100644
--- a/ui/base/wayland/color_manager_util.cc
+++ b/ui/base/wayland/color_manager_util.cc
@@ -24,4 +24,18 @@
   return ZCR_COLOR_MANAGER_V1_EOTF_NAMES_UNKNOWN;
 }
 
+zcr_color_manager_v1_eotf_names ToColorManagerEOTF(
+    gfx::ColorSpace color_space) {
+  if (color_space.IsHDR()) {
+    for (const auto& it : kHDRTransferMap) {
+      if (color_space.IsTransferFunctionEqualTo(it.second))
+        return it.first;
+    }
+  }
+  for (const auto& it : kTransferMap) {
+    if (color_space.IsTransferFunctionEqualTo(it.second))
+      return it.first;
+  }
+  return ZCR_COLOR_MANAGER_V1_EOTF_NAMES_UNKNOWN;
+}
 }  // namespace ui::wayland
diff --git a/ui/base/wayland/color_manager_util.h b/ui/base/wayland/color_manager_util.h
index 08ed4739..15adac6 100644
--- a/ui/base/wayland/color_manager_util.h
+++ b/ui/base/wayland/color_manager_util.h
@@ -8,11 +8,15 @@
 #include <chrome-color-management-server-protocol.h>
 
 #include "base/containers/fixed_flat_map.h"
+#include "skia/ext/skcolorspace_trfn.h"
 #include "ui/gfx/color_space.h"
 #include "ui/gfx/display_color_spaces.h"
 
 namespace ui::wayland {
 
+// A 2.4 gamma for the BT2087 transfer function.
+static constexpr skcms_TransferFunction gamma24 = {2.4f, 1.f};
+
 // A map from the zcr_color_manager_v1 chromaticity_names enum values
 // representing well-known chromaticities, to their equivalent PrimaryIDs.
 // See components/exo/wayland/protocol/chrome-color-management.xml
@@ -45,6 +49,8 @@
         {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
          gfx::ColorSpace::TransferID::LINEAR},
         {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SRGB,
+         gfx::ColorSpace::TransferID::SRGB},
+        {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT709,
          gfx::ColorSpace::TransferID::BT709},
         {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT2087,
          gfx::ColorSpace::TransferID::GAMMA24},
@@ -53,14 +59,44 @@
          // 2.19921875f, not 2.2
          gfx::ColorSpace::TransferID::GAMMA22},
         {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_PQ, gfx::ColorSpace::TransferID::PQ},
+        {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_HLG, gfx::ColorSpace::TransferID::HLG},
     });
 
+// A map from the SDR zcr_color_manager_v1 eotf_names enum values
+// representing well-known EOTFs, to their equivalent transfer functions.
+// See components/exo/wayland/protocol/chrome-color-management.xml
+constexpr auto kTransferMap =
+    base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names,
+                           skcms_TransferFunction>({
+        {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR, SkNamedTransferFn::kLinear},
+        {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SRGB, SkNamedTransferFnExt::kSRGB},
+        {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT709, SkNamedTransferFnExt::kRec709},
+        {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT2087, gamma24},
+        {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_ADOBERGB,
+         SkNamedTransferFnExt::kA98RGB},
+    });
+
+// A map from the HDR zcr_color_manager_v1 eotf_names enum values
+// representing well-known EOTFs, to their equivalent transfer functions.
+// See components/exo/wayland/protocol/chrome-color-management.xml
+constexpr auto kHDRTransferMap =
+    base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names,
+                           skcms_TransferFunction>(
+        {{ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR, SkNamedTransferFn::kLinear},
+         {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SRGB, SkNamedTransferFnExt::kSRGB},
+         {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_PQ, SkNamedTransferFn::kPQ},
+         {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_HLG, SkNamedTransferFn::kHLG},
+         {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_EXTENDEDSRGB10,
+          SkNamedTransferFnExt::kSRGBExtended1023Over510}});
+
 zcr_color_manager_v1_chromaticity_names ToColorManagerChromaticity(
     gfx::ColorSpace::PrimaryID primaryID);
 
 zcr_color_manager_v1_eotf_names ToColorManagerEOTF(
     gfx::ColorSpace::TransferID transferID);
 
+zcr_color_manager_v1_eotf_names ToColorManagerEOTF(gfx::ColorSpace color_space);
+
 }  // namespace ui::wayland
 
 #endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
\ No newline at end of file
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
index 19b4e42..37fbec3 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -847,7 +847,7 @@
 <translation id="8049184478152619004">‏«کلید لغو انسداد شخصی» (PUK) را وارد کنید</translation>
 <translation id="807187749540895545">درحال استخراج <ph name="FILE_NAME" />…</translation>
 <translation id="8087576439476816834">بارگیری، <ph name="PROFILE_NAME" /></translation>
-<translation id="8106045200081704138">اشتراک‌گذاری شده با من</translation>
+<translation id="8106045200081704138">با من هم‌رسانی‌شده</translation>
 <translation id="8116072619078571545">آب یخ</translation>
 <translation id="8128733386027980860">‏انگلیسی (بریتانیا) با صفحه‌کلید Dvorak</translation>
 <translation id="8137331602592933310">«<ph name="FILENAME" />» با شما به اشتراک گذاشته شده است. شما نمی‌توانید آن را حذف کنید زیرا به شما تعلق ندارد.</translation>
diff --git a/ui/color/BUILD.gn b/ui/color/BUILD.gn
index b651f07..e5575f0 100644
--- a/ui/color/BUILD.gn
+++ b/ui/color/BUILD.gn
@@ -29,17 +29,6 @@
   ]
 }
 
-component("color_switches") {
-  sources = [
-    "color_switches.cc",
-    "color_switches.h",
-  ]
-
-  defines = [ "IS_COLOR_SWITCHES_IMPL" ]
-
-  public_deps = [ "//base" ]
-}
-
 component("color") {
   sources = [
     "color_metrics.cc",
@@ -174,7 +163,6 @@
     sources += [ "win/native_color_mixers_win.cc" ]
     deps += [
       ":accent_color_observer",
-      ":color_switches",
       "//ui/native_theme:features",
     ]
   }
diff --git a/ui/color/color_switches.cc b/ui/color/color_switches.cc
deleted file mode 100644
index b4cb153..0000000
--- a/ui/color/color_switches.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/color/color_switches.h"
-
-#include "build/build_config.h"
-
-namespace switches {
-
-#if BUILDFLAG(IS_WIN)
-// Use the system accent color as the Chrome UI accent color.
-const char kPervasiveSystemAccentColor[] = "pervasive-system-accent-color";
-#endif
-
-}  // namespace switches
diff --git a/ui/color/color_switches.h b/ui/color/color_switches.h
deleted file mode 100644
index 1d0665b..0000000
--- a/ui/color/color_switches.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_COLOR_COLOR_SWITCHES_H_
-#define UI_COLOR_COLOR_SWITCHES_H_
-
-#include "base/component_export.h"
-#include "build/build_config.h"
-
-namespace switches {
-
-#if BUILDFLAG(IS_WIN)
-COMPONENT_EXPORT(COLOR_SWITCHES)
-extern const char kPervasiveSystemAccentColor[];
-#endif
-
-}  // namespace switches
-
-#endif  // UI_COLOR_COLOR_SWITCHES_H_
diff --git a/ui/color/win/native_color_mixers_win.cc b/ui/color/win/native_color_mixers_win.cc
index 3ce6c54..cb7bebd 100644
--- a/ui/color/win/native_color_mixers_win.cc
+++ b/ui/color/win/native_color_mixers_win.cc
@@ -10,7 +10,6 @@
 #include "ui/color/color_provider.h"
 #include "ui/color/color_provider_manager.h"
 #include "ui/color/color_recipe.h"
-#include "ui/color/color_switches.h"
 #include "ui/color/color_transform.h"
 #include "ui/color/win/accent_color_observer.h"
 #include "ui/gfx/color_palette.h"
@@ -75,14 +74,11 @@
   mixer[kColorNativeWindowText] = {
       color_utils::GetSysSkColor(COLOR_WINDOWTEXT)};
 
-  // Use the system accent color as the Chrome accent color, if desired.
-  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kPervasiveSystemAccentColor)) {
-    const auto accent_color = AccentColorObserver::Get()->accent_color();
-    if (accent_color.has_value()) {
-      mixer[kColorAccent] =
-          PickGoogleColor({accent_color.value()}, kColorPrimaryBackground);
-    }
+  // Use the system accent color as the Chrome accent color, if present.
+  if (const auto accent_color = AccentColorObserver::Get()->accent_color();
+      accent_color.has_value()) {
+    mixer[kColorAccent] =
+        PickGoogleColor({accent_color.value()}, kColorPrimaryBackground);
   }
 
   if (key.contrast_mode == ColorProviderManager::ContrastMode::kNormal)
diff --git a/ui/events/test/event_generator.cc b/ui/events/test/event_generator.cc
index a8acc3ef..93b0921 100644
--- a/ui/events/test/event_generator.cc
+++ b/ui/events/test/event_generator.cc
@@ -295,6 +295,17 @@
   Dispatch(&touchev);
 }
 
+void EventGenerator::CancelTouch() {
+  CancelTouchId(0);
+}
+
+void EventGenerator::CancelTouchId(int touch_id) {
+  ui::TouchEvent touchev =
+      CreateTestTouchEvent(ui::ET_TOUCH_CANCELLED, GetLocationInCurrentRoot(),
+                           touch_id, flags_, ui::EventTimeForNow());
+  Dispatch(&touchev);
+}
+
 void EventGenerator::PressMoveAndReleaseTouchTo(const gfx::Point& point) {
   PressTouch();
   MoveTouch(point);
diff --git a/ui/events/test/event_generator.h b/ui/events/test/event_generator.h
index 1f08b16..d666716 100644
--- a/ui/events/test/event_generator.h
+++ b/ui/events/test/event_generator.h
@@ -307,6 +307,12 @@
   // Generates a touch release event with |touch_id|.
   void ReleaseTouchId(int touch_id);
 
+  // Generates a touch cancel event.
+  void CancelTouch();
+
+  // Generates a touch cancel event with |touch_id|.
+  void CancelTouchId(int touch_id);
+
   // Generates press, move and release event to move touch
   // to be the given |point|.
   void PressMoveAndReleaseTouchTo(const gfx::Point& point);
diff --git a/ui/gfx/color_space.cc b/ui/gfx/color_space.cc
index 7b075f6f..ffe808ec 100644
--- a/ui/gfx/color_space.cc
+++ b/ui/gfx/color_space.cc
@@ -700,7 +700,6 @@
       GetPrimaryMatrix(&gamut);
       break;
   }
-
   sk_sp<SkColorSpace> sk_color_space =
       SkColorSpace::MakeRGB(transfer_fn, gamut);
   if (!sk_color_space)
@@ -735,12 +734,18 @@
 
 bool ColorSpace::IsTransferFunctionEqualTo(
     const skcms_TransferFunction& fn) const {
-  if (fn.a == transfer_params_[0] && fn.b == transfer_params_[1] &&
-      fn.c == transfer_params_[2] && fn.d == transfer_params_[3] &&
-      fn.e == transfer_params_[4] && fn.f == transfer_params_[5] &&
-      fn.g == transfer_params_[6])
-    return true;
-  return false;
+  if (transfer_ == TransferID::PQ)
+    return skcms_TransferFunction_isPQish(&fn);
+  if (transfer_ == TransferID::HLG)
+    return skcms_TransferFunction_isHLGish(&fn);
+  if (!skcms_TransferFunction_isSRGBish(&fn))
+    return false;
+  skcms_TransferFunction transfer_fn;
+  GetTransferFunction(&transfer_fn);
+  return fn.a == transfer_fn.a && fn.b == transfer_fn.b &&
+         fn.c == transfer_fn.c && fn.d == transfer_fn.d &&
+         fn.e == transfer_fn.e && fn.f == transfer_fn.f &&
+         fn.g == transfer_fn.g;
 }
 
 bool ColorSpace::Contains(const ColorSpace& other) const {
@@ -886,6 +891,7 @@
   switch (transfer) {
     case ColorSpace::TransferID::LINEAR:
     case ColorSpace::TransferID::LINEAR_HDR:
+      *fn = SkNamedTransferFn::kLinear;
       return true;
     case ColorSpace::TransferID::GAMMA18:
       fn->g = 1.801f;
diff --git a/ui/ozone/platform/wayland/gpu/wayland_surface_factory_unittest.cc b/ui/ozone/platform/wayland/gpu/wayland_surface_factory_unittest.cc
index ea12555..02f4c3e1 100644
--- a/ui/ozone/platform/wayland/gpu/wayland_surface_factory_unittest.cc
+++ b/ui/ozone/platform/wayland/gpu/wayland_surface_factory_unittest.cc
@@ -164,7 +164,8 @@
 
 class WaylandSurfaceFactoryTest : public WaylandTest {
  public:
-  WaylandSurfaceFactoryTest() = default;
+  WaylandSurfaceFactoryTest()
+      : WaylandTest(WaylandTest::TestServerMode::kAsync) {}
 
   WaylandSurfaceFactoryTest(const WaylandSurfaceFactoryTest&) = delete;
   WaylandSurfaceFactoryTest& operator=(const WaylandSurfaceFactoryTest&) =
@@ -177,6 +178,12 @@
         kSupportedFormatsWithModifiers{
             {gfx::BufferFormat::BGRA_8888, {DRM_FORMAT_MOD_LINEAR}}};
 
+    // Set this bug fix so that WaylandFrameManager does not use a freeze
+    // counter. Otherwise, we won't be able to have a reliable test order of
+    // frame submissions. This must be set before any window is created
+    // (WaylandTest does that for us during the SetUp phase).
+    server_.zaura_shell()->SetBugFixes({1358908});
+
     WaylandTest::SetUp();
 
     window_->set_update_visual_size_immediately_for_testing(false);
@@ -191,6 +198,9 @@
 
     // Wait until initialization and mojo calls go through.
     base::RunLoop().RunUntilIdle();
+
+    // Store the surface_id for convenience.
+    surface_id_ = window_->root_surface()->get_surface_id();
   }
 
   void TearDown() override {
@@ -220,6 +230,8 @@
                               gfx::OverlayPriorityHint::kNone, gfx::RRectF(),
                               gfx::ColorSpace::CreateSRGB(), absl::nullopt));
   }
+
+  uint32_t surface_id_ = 0;
 };
 
 TEST_P(WaylandSurfaceFactoryTest,
@@ -243,8 +255,10 @@
   static_cast<ui::GbmSurfacelessWayland*>(gl_surface.get())
       ->SetNoGLFlushForTests();
 
-  // Expect to create 4 buffers.
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(4);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    // Expect to create 4 buffers.
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(4);
+  });
 
   // Create buffers and FakeGlImageNativePixmap.
   std::vector<scoped_refptr<OverlayImageHolder>> fake_overlay_image;
@@ -256,11 +270,6 @@
         native_pixmap, window_->size_px()));
   }
 
-  auto* root_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  auto* mock_primary_surface = server_.GetObject<wl::MockSurface>(
-      window_->primary_subsurface()->wayland_surface()->get_surface_id());
-
   CallbacksHelper cbs_helper;
   // Submit a frame with an overlay and background.
   {
@@ -302,35 +311,49 @@
         gl::FrameData());
   }
 
-  Sync();
+  // Wait until GbmSurfacelessWayland submits the buffer according to internal
+  // queue.
+  base::RunLoop().RunUntilIdle();
 
-  // Let's sync so that 1) GbmSurfacelessWayland submits the buffer according to
-  // internal queue and fake server processes the request.
+  // The fake server must have dmabuf params created. Set expectations and
+  // notify the client about created buffers.
+  const uint32_t primary_subsurface_id =
+      window_->primary_subsurface()->wayland_surface()->get_surface_id();
+  PostToServerAndWait([main_surface_id = surface_id_, primary_subsurface_id](
+                          wl::TestWaylandServerThread* server) {
+    auto* root_surface = server->GetObject<wl::MockSurface>(main_surface_id);
+    auto* mock_primary_surface =
+        server->GetObject<wl::MockSurface>(primary_subsurface_id);
 
-  // Also, we expect no buffer committed on primary subsurface.
-  EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(0);
-  // 1 buffer committed on root surface.
-  EXPECT_CALL(*root_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*root_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*root_surface, Commit()).Times(1);
+    // Also, we expect no buffer committed on primary subsurface.
+    EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(0);
+    // 1 buffer committed on root surface.
+    EXPECT_CALL(*root_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*root_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*root_surface, Commit()).Times(1);
 
-  // The wl_buffers are requested during ScheduleOverlays. Thus, we have pending
-  // requests that we need to execute.
-  auto params_vector = server_.zwp_linux_dmabuf_v1()->buffer_params();
-  ASSERT_EQ(params_vector.size(), 2u);
-  for (auto* mock_params : params_vector) {
-    zwp_linux_buffer_params_v1_send_created(mock_params->resource(),
-                                            mock_params->buffer_resource());
-  }
+    // The wl_buffers are requested during ScheduleOverlays. Thus, we have
+    // pending requests that we need to execute.
+    auto params_vector = server->zwp_linux_dmabuf_v1()->buffer_params();
+    ASSERT_EQ(params_vector.size(), 2u);
+    for (auto* mock_params : params_vector) {
+      zwp_linux_buffer_params_v1_send_created(mock_params->resource(),
+                                              mock_params->buffer_resource());
+    }
+  });
 
-  Sync();
+  // Verify our server side expectations now.
+  PostToServerAndWait([main_surface_id = surface_id_, primary_subsurface_id](
+                          wl::TestWaylandServerThread* server) {
+    testing::Mock::VerifyAndClearExpectations(
+        server->GetObject<wl::MockSurface>(primary_subsurface_id));
+    testing::Mock::VerifyAndClearExpectations(
+        server->GetObject<wl::MockSurface>(main_surface_id));
+  });
 
-  testing::Mock::VerifyAndClearExpectations(mock_primary_surface);
-  testing::Mock::VerifyAndClearExpectations(root_surface);
-
-  // Give mojo the chance to pass the callbacks.
+  // Give mojo the chance to pass the callbacks if any.
   base::RunLoop().RunUntilIdle();
 
   // We have just received Attach/DamageBuffer/Commit for buffer with swap
@@ -351,11 +374,6 @@
     }
   }
 
-  auto* mock_overlay_surface = server_.GetObject<wl::MockSurface>(
-      (*window_->wayland_subsurfaces().begin())
-          ->wayland_surface()
-          ->get_surface_id());
-
   // Submit another frame with only an overlay.
   {
     // Associate each image with swap id so that we could track released
@@ -384,41 +402,64 @@
         gl::FrameData());
   }
 
-  // Expect no buffer committed on primary subsurface.
-  EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(0);
-  // Expect 1 buffer to be committed on overlay subsurface, with frame callback.
-  EXPECT_CALL(*mock_overlay_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_overlay_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_overlay_surface, DamageBuffer(_, _, _, _)).Times(1);
-  EXPECT_CALL(*mock_overlay_surface, Commit()).Times(1);
-  // Expect no buffer committed on root surface.
-  EXPECT_CALL(*root_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*root_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*root_surface, DamageBuffer(_, _, _, _)).Times(0);
-  EXPECT_CALL(*root_surface, Commit()).Times(1);
+  // Wait until GbmSurfacelessWayland submits the buffer according to internal
+  // queue.
+  base::RunLoop().RunUntilIdle();
 
-  Sync();
+  const uint32_t overlay_surface_id = (*window_->wayland_subsurfaces().begin())
+                                          ->wayland_surface()
+                                          ->get_surface_id();
+  // The fake server must have dmabuf params created. Set expectations and
+  // notify the client about created buffers.
+  PostToServerAndWait([overlay_surface_id, main_surface_id = surface_id_,
+                       primary_subsurface_id](
+                          wl::TestWaylandServerThread* server) {
+    auto* mock_overlay_surface =
+        server->GetObject<wl::MockSurface>(overlay_surface_id);
+    auto* root_surface = server->GetObject<wl::MockSurface>(main_surface_id);
+    auto* mock_primary_surface =
+        server->GetObject<wl::MockSurface>(primary_subsurface_id);
 
-  auto params_vector2 = server_.zwp_linux_dmabuf_v1()->buffer_params();
-  ASSERT_EQ(params_vector2.size(), 1u);
-  for (auto* mock_params : params_vector2) {
-    zwp_linux_buffer_params_v1_send_created(mock_params->resource(),
-                                            mock_params->buffer_resource());
-  }
+    // Expect no buffer committed on primary subsurface.
+    EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(0);
+    // Expect 1 buffer to be committed on overlay subsurface, with frame
+    // callback.
+    EXPECT_CALL(*mock_overlay_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*mock_overlay_surface, Frame(_)).Times(1);
+    EXPECT_CALL(*mock_overlay_surface, DamageBuffer(_, _, _, _)).Times(1);
+    EXPECT_CALL(*mock_overlay_surface, Commit()).Times(1);
+    // Expect no buffer committed on root surface.
+    EXPECT_CALL(*root_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*root_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*root_surface, DamageBuffer(_, _, _, _)).Times(0);
+    EXPECT_CALL(*root_surface, Commit()).Times(1);
 
-  Sync();
+    auto params_vector = server->zwp_linux_dmabuf_v1()->buffer_params();
+    ASSERT_EQ(params_vector.size(), 1u);
+    for (auto* mock_params : params_vector) {
+      zwp_linux_buffer_params_v1_send_created(mock_params->resource(),
+                                              mock_params->buffer_resource());
+    }
 
-  // Send the frame callback so that pending buffer for swap id=1u is processed
-  // and swapped.
-  mock_overlay_surface->SendFrameCallback();
+    // Also send the frame callback so that pending buffer for swap id=1u is
+    // processed and swapped.
+    server->GetObject<wl::MockSurface>(overlay_surface_id)->SendFrameCallback();
+  });
 
-  Sync();
-
-  testing::Mock::VerifyAndClearExpectations(mock_primary_surface);
-  testing::Mock::VerifyAndClearExpectations(mock_overlay_surface);
-  testing::Mock::VerifyAndClearExpectations(root_surface);
+  // Give a client a chance to send requests and then verify our expectations on
+  // the server thread.
+  PostToServerAndWait(
+      [overlay_surface_id, main_surface_id = surface_id_,
+       primary_subsurface_id](wl::TestWaylandServerThread* server) {
+        testing::Mock::VerifyAndClearExpectations(
+            server->GetObject<wl::MockSurface>(primary_subsurface_id));
+        testing::Mock::VerifyAndClearExpectations(
+            server->GetObject<wl::MockSurface>(overlay_surface_id));
+        testing::Mock::VerifyAndClearExpectations(
+            server->GetObject<wl::MockSurface>(main_surface_id));
+      });
 
   // Give mojo the chance to pass the callbacks.
   base::RunLoop().RunUntilIdle();
@@ -456,54 +497,78 @@
         gl::FrameData());
   }
 
-  // Expect 1 buffer committed on primary subsurface, with frame callback.
-  EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(1);
-  EXPECT_CALL(*mock_primary_surface, Commit()).Times(1);
-  // Expect no buffer to be committed on overlay subsurface.
-  EXPECT_CALL(*mock_overlay_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_overlay_surface, DamageBuffer(_, _, _, _)).Times(0);
-  // Expect no buffer committed on root surface.
-  EXPECT_CALL(*root_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*root_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*root_surface, DamageBuffer(_, _, _, _)).Times(0);
-  EXPECT_CALL(*root_surface, Commit()).Times(1);
+  // Wait until GbmSurfacelessWayland submits the buffer according to internal
+  // queue.
+  base::RunLoop().RunUntilIdle();
 
-  Sync();
+  // Process requests and send events.
+  PostToServerAndWait([overlay_surface_id, main_surface_id = surface_id_,
+                       primary_subsurface_id](
+                          wl::TestWaylandServerThread* server) {
+    auto* mock_overlay_surface =
+        server->GetObject<wl::MockSurface>(overlay_surface_id);
+    auto* root_surface = server->GetObject<wl::MockSurface>(main_surface_id);
+    auto* mock_primary_surface =
+        server->GetObject<wl::MockSurface>(primary_subsurface_id);
 
-  auto params_vector3 = server_.zwp_linux_dmabuf_v1()->buffer_params();
-  ASSERT_EQ(params_vector3.size(), 1u);
-  for (auto* mock_params : params_vector3) {
-    zwp_linux_buffer_params_v1_send_created(mock_params->resource(),
-                                            mock_params->buffer_resource());
-  }
+    // Expect 1 buffer committed on primary subsurface, with frame callback.
+    EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(1);
+    EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(1);
+    EXPECT_CALL(*mock_primary_surface, Commit()).Times(1);
+    // Expect no buffer to be committed on overlay subsurface.
+    EXPECT_CALL(*mock_overlay_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*mock_overlay_surface, DamageBuffer(_, _, _, _)).Times(0);
+    // Expect no buffer committed on root surface.
+    EXPECT_CALL(*root_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*root_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*root_surface, DamageBuffer(_, _, _, _)).Times(0);
+    EXPECT_CALL(*root_surface, Commit()).Times(1);
 
-  Sync();
+    auto params_vector = server->zwp_linux_dmabuf_v1()->buffer_params();
+    ASSERT_EQ(params_vector.size(), 1u);
+    for (auto* mock_params : params_vector) {
+      zwp_linux_buffer_params_v1_send_created(mock_params->resource(),
+                                              mock_params->buffer_resource());
+    }
+  });
 
   // Send the frame callback so that pending buffer for swap id=2u is processed
   // and swapped.
-  mock_overlay_surface->SendFrameCallback();
-
-  // Release overlay image with swap id=1u before swap id=2u.
-  mock_overlay_surface->ReleaseBuffer(mock_overlay_surface->attached_buffer());
-
-  Sync();
-
-  testing::Mock::VerifyAndClearExpectations(mock_primary_surface);
-  testing::Mock::VerifyAndClearExpectations(mock_overlay_surface);
-  testing::Mock::VerifyAndClearExpectations(root_surface);
+  PostToServerAndWait(
+      [overlay_surface_id](wl::TestWaylandServerThread* server) {
+        // Send the frame callback so that pending buffer for swap id=1u is
+        // processed and swapped.
+        auto* mock_overlay_surface =
+            server->GetObject<wl::MockSurface>(overlay_surface_id);
+        mock_overlay_surface->SendFrameCallback();
+        // Release overlay image with swap id=1u before swap id=2u.
+        mock_overlay_surface->ReleaseBuffer(
+            mock_overlay_surface->attached_buffer());
+      });
 
   // Even 2nd frame is released, we do not send OnSubmission() out of order.
   EXPECT_EQ(cbs_helper.GetLastFinishedSwapId(),
             std::numeric_limits<uint32_t>::max());
 
-  // This will result in Wayland server releasing previously attached buffer for
-  // swap id=1u and calling OnSubmission for buffer with swap id=1u.
-  mock_overlay_surface->ReleaseBuffer(
-      mock_overlay_surface->prev_attached_buffer());
+  PostToServerAndWait(
+      [overlay_surface_id, main_surface_id = surface_id_,
+       primary_subsurface_id](wl::TestWaylandServerThread* server) {
+        // Verify our expectations.
+        auto* mock_overlay_surface =
+            server->GetObject<wl::MockSurface>(overlay_surface_id);
+        testing::Mock::VerifyAndClearExpectations(
+            server->GetObject<wl::MockSurface>(primary_subsurface_id));
+        testing::Mock::VerifyAndClearExpectations(mock_overlay_surface);
+        testing::Mock::VerifyAndClearExpectations(
+            server->GetObject<wl::MockSurface>(main_surface_id));
 
-  Sync();
+        // This will result in Wayland server releasing previously attached
+        // buffer for swap id=1u and calling OnSubmission for buffer with swap
+        // id=1u.
+        mock_overlay_surface->ReleaseBuffer(
+            mock_overlay_surface->prev_attached_buffer());
+      });
 
   // Give mojo the chance to pass the callbacks.
   base::RunLoop().RunUntilIdle();
@@ -553,10 +618,10 @@
         native_pixmap, window_->size_px()));
   }
 
-  auto* root_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  auto* mock_primary_surface = server_.GetObject<wl::MockSurface>(
-      window_->primary_subsurface()->wayland_surface()->get_surface_id());
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    // Expect to create 3 buffers.
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+  });
 
   CallbacksHelper cbs_helper;
   // Submit a frame with 1 primary plane, 1 underlay, and 1 background.
@@ -611,37 +676,47 @@
         gl::FrameData());
   }
 
-  // Let's sync so that 1) GbmSurfacelessWayland submits the buffer according to
-  // internal queue and fake server processes the request.
+  // Wait until GbmSurfacelessWayland submits the buffer according to internal
+  // queue.
+  base::RunLoop().RunUntilIdle();
 
   // Also, we expect primary buffer to be committed.
-  EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(1);
-  EXPECT_CALL(*mock_primary_surface, Commit()).Times(1);
-  EXPECT_CALL(*root_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*root_surface, Commit()).Times(1);
+  const uint32_t primary_subsurface_id =
+      window_->primary_subsurface()->wayland_surface()->get_surface_id();
+  PostToServerAndWait([main_surface_id = surface_id_, primary_subsurface_id](
+                          wl::TestWaylandServerThread* server) {
+    auto* root_surface = server->GetObject<wl::MockSurface>(main_surface_id);
+    auto* mock_primary_surface =
+        server->GetObject<wl::MockSurface>(primary_subsurface_id);
 
-  // Expect to create 3 buffers.
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+    EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(1);
+    EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(1);
+    EXPECT_CALL(*mock_primary_surface, Commit()).Times(1);
+    EXPECT_CALL(*root_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*root_surface, Commit()).Times(1);
 
-  Sync();
+    testing::Mock::VerifyAndClearExpectations(server->zwp_linux_dmabuf_v1());
 
-  // If wl_buffers have never been created, they will be requested during the
-  // first commit.
-  auto params_vector = server_.zwp_linux_dmabuf_v1()->buffer_params();
-  ASSERT_EQ(params_vector.size(), 3u);
-  for (auto* param : params_vector) {
-    zwp_linux_buffer_params_v1_send_created(param->resource(),
-                                            param->buffer_resource());
-  }
+    // If wl_buffers have never been created, they will be requested during the
+    // first commit.
+    auto params_vector = server->zwp_linux_dmabuf_v1()->buffer_params();
+    ASSERT_EQ(params_vector.size(), 3u);
+    for (auto* param : params_vector) {
+      zwp_linux_buffer_params_v1_send_created(param->resource(),
+                                              param->buffer_resource());
+    }
+  });
 
-  Sync();
+  PostToServerAndWait(
+      [primary_subsurface_id](wl::TestWaylandServerThread* server) {
+        testing::Mock::VerifyAndClearExpectations(
+            server->GetObject<wl::MockSurface>(primary_subsurface_id));
+      });
 
-  testing::Mock::VerifyAndClearExpectations(&mock_primary_surface);
   auto* subsurface = window_->wayland_subsurfaces().begin()->get();
-  auto* mock_overlay_surface = server_.GetObject<wl::MockSurface>(
-      subsurface->wayland_surface()->get_surface_id());
+  const uint32_t overlay_surface_id =
+      subsurface->wayland_surface()->get_surface_id();
 
   // Give mojo the chance to pass the callbacks.
   base::RunLoop().RunUntilIdle();
@@ -664,6 +739,11 @@
     }
   }
 
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    // Expect to create 2 more buffers.
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(2);
+  });
+
   // Submit another frame with 1 primary plane and 1 overlay
   {
     // Associate each image with swap id so that we could track released
@@ -704,48 +784,62 @@
         gl::FrameData());
   }
 
-  // Expect primary buffer to be committed, but since it is not the top-most
-  // surface in the frame it does not setup frame callback.
-  EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(1);
-  EXPECT_CALL(*mock_primary_surface, Commit()).Times(1);
+  PostToServerAndWait([main_surface_id = surface_id_, overlay_surface_id,
+                       primary_subsurface_id](
+                          wl::TestWaylandServerThread* server) {
+    auto* root_surface = server->GetObject<wl::MockSurface>(main_surface_id);
+    auto* mock_primary_surface =
+        server->GetObject<wl::MockSurface>(primary_subsurface_id);
+    auto* mock_overlay_surface =
+        server->GetObject<wl::MockSurface>(overlay_surface_id);
 
-  // Expect overlay buffer to be committed, and sets up frame callback.
-  EXPECT_CALL(*mock_overlay_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_overlay_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_overlay_surface, DamageBuffer(_, _, _, _)).Times(1);
-  EXPECT_CALL(*mock_overlay_surface, Commit()).Times(1);
+    // Expect primary buffer to be committed, but since it is not the top-most
+    // surface in the frame it does not setup frame callback.
+    EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(1);
+    EXPECT_CALL(*mock_primary_surface, Commit()).Times(1);
 
-  // Expect root surface to be committed without buffer.
-  EXPECT_CALL(*root_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*root_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*root_surface, DamageBuffer(_, _, _, _)).Times(0);
-  EXPECT_CALL(*root_surface, Commit()).Times(1);
+    // Expect overlay buffer to be committed, and sets up frame callback.
+    EXPECT_CALL(*mock_overlay_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*mock_overlay_surface, Frame(_)).Times(1);
+    EXPECT_CALL(*mock_overlay_surface, DamageBuffer(_, _, _, _)).Times(1);
+    EXPECT_CALL(*mock_overlay_surface, Commit()).Times(1);
 
-  // Expect to create 2 more buffers.
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(2);
+    // Expect root surface to be committed without buffer.
+    EXPECT_CALL(*root_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*root_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*root_surface, DamageBuffer(_, _, _, _)).Times(0);
+    EXPECT_CALL(*root_surface, Commit()).Times(1);
 
-  Sync();
+    testing::Mock::VerifyAndClearExpectations(server->zwp_linux_dmabuf_v1());
 
-  // 2 more buffers are to be created.
-  params_vector = server_.zwp_linux_dmabuf_v1()->buffer_params();
-  ASSERT_EQ(params_vector.size(), 2u);
-  for (auto* param : params_vector) {
-    zwp_linux_buffer_params_v1_send_created(param->resource(),
-                                            param->buffer_resource());
-  }
+    // 2 more buffers are to be created.
+    auto params_vector = server->zwp_linux_dmabuf_v1()->buffer_params();
+    ASSERT_EQ(params_vector.size(), 2u);
+    for (auto* param : params_vector) {
+      zwp_linux_buffer_params_v1_send_created(param->resource(),
+                                              param->buffer_resource());
+    }
+  });
 
-  Sync();
+  PostToServerAndWait([overlay_surface_id, primary_subsurface_id](
+                          wl::TestWaylandServerThread* server) {
+    auto* mock_primary_surface =
+        server->GetObject<wl::MockSurface>(primary_subsurface_id);
+    auto* mock_overlay_surface =
+        server->GetObject<wl::MockSurface>(overlay_surface_id);
+    // Send the frame callback so that pending buffer for swap id=1u is
+    // processed and swapped.
+    mock_primary_surface->SendFrameCallback();
+    mock_overlay_surface->SendFrameCallback();
+  });
 
-  // Send the frame callback so that pending buffer for swap id=1u is processed
-  // and swapped.
-  mock_primary_surface->SendFrameCallback();
-  mock_overlay_surface->SendFrameCallback();
-
-  Sync();
-
-  testing::Mock::VerifyAndClearExpectations(&mock_primary_surface);
+  PostToServerAndWait(
+      [primary_subsurface_id](wl::TestWaylandServerThread* server) {
+        testing::Mock::VerifyAndClearExpectations(
+            server->GetObject<wl::MockSurface>(primary_subsurface_id));
+      });
 
   // Give mojo the chance to pass the callbacks.
   base::RunLoop().RunUntilIdle();
@@ -755,13 +849,16 @@
   EXPECT_EQ(cbs_helper.GetLastFinishedSwapId(),
             std::numeric_limits<uint32_t>::max());
 
-  // This will result in Wayland server releasing one of the previously attached
-  // buffers for swap id=0u and calling OnSubmission for a buffer with swap
-  // id=1u attached to the primary surface.
-  mock_primary_surface->ReleaseBuffer(
-      mock_primary_surface->prev_attached_buffer());
-
-  Sync();
+  PostToServerAndWait(
+      [primary_subsurface_id](wl::TestWaylandServerThread* server) {
+        auto* mock_primary_surface =
+            server->GetObject<wl::MockSurface>(primary_subsurface_id);
+        // This will result in Wayland server releasing one of the previously
+        // attached buffers for swap id=0u and calling OnSubmission for a buffer
+        // with swap id=1u attached to the primary surface.
+        mock_primary_surface->ReleaseBuffer(
+            mock_primary_surface->prev_attached_buffer());
+      });
 
   // Give mojo the chance to pass the callbacks.
   base::RunLoop().RunUntilIdle();
@@ -771,11 +868,14 @@
   EXPECT_EQ(cbs_helper.GetLastFinishedSwapId(),
             std::numeric_limits<uint32_t>::max());
 
-  // Release the another buffer.
-  mock_overlay_surface->ReleaseBuffer(
-      mock_overlay_surface->prev_attached_buffer());
-
-  Sync();
+  PostToServerAndWait(
+      [overlay_surface_id](wl::TestWaylandServerThread* server) {
+        auto* mock_overlay_surface =
+            server->GetObject<wl::MockSurface>(overlay_surface_id);
+        // Release the another buffer.
+        mock_overlay_surface->ReleaseBuffer(
+            mock_overlay_surface->prev_attached_buffer());
+      });
 
   // Give mojo the chance to pass the callbacks.
   base::RunLoop().RunUntilIdle();
@@ -806,32 +906,38 @@
     canvas->ResizeCanvas(bounds_px.size(), scale_factor);
     auto* sk_canvas = canvas->GetCanvas();
     ASSERT_TRUE(sk_canvas);
+
+    const uint32_t surface_id = window_->root_surface()->get_surface_id();
+    PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+      auto* mock_surface = server->GetObject<wl::MockSurface>(surface_id);
+      ASSERT_FALSE(mock_surface->attached_buffer());
+      Expectation damage =
+          EXPECT_CALL(*mock_surface, DamageBuffer(5, 10, 20, 15)).Times(1);
+      Expectation attach = EXPECT_CALL(*mock_surface, Attach(_, 0, 0)).Times(1);
+      EXPECT_CALL(*mock_surface, Commit()).After(damage, attach);
+    });
+
     canvas->PresentCanvas(gfx::Rect(5, 10, 20, 15));
 
     // Wait until the mojo calls are done.
     base::RunLoop().RunUntilIdle();
 
-    Expectation damage = EXPECT_CALL(*surface_, DamageBuffer(5, 10, 20, 15));
-    wl_resource* buffer_resource = nullptr;
-    Expectation attach = EXPECT_CALL(*surface_, Attach(_, 0, 0))
-                             .WillOnce(SaveArg<0>(&buffer_resource));
-    EXPECT_CALL(*surface_, Commit()).After(damage, attach);
+    PostToServerAndWait(
+        [surface_id, bounds_px](wl::TestWaylandServerThread* server) {
+          auto* mock_surface = server->GetObject<wl::MockSurface>(surface_id);
+          auto* buffer_resource = mock_surface->attached_buffer();
+          ASSERT_TRUE(buffer_resource);
+          wl_shm_buffer* buffer = wl_shm_buffer_get(buffer_resource);
+          ASSERT_TRUE(buffer);
+          EXPECT_EQ(wl_shm_buffer_get_width(buffer), bounds_px.width());
+          EXPECT_EQ(wl_shm_buffer_get_height(buffer), bounds_px.height());
 
-    Sync();
+          // Release the buffer immediately as the test always attaches the same
+          // buffer.
+          mock_surface->ReleaseBufferFenced(buffer_resource, {});
 
-    ASSERT_TRUE(buffer_resource);
-    wl_shm_buffer* buffer = wl_shm_buffer_get(buffer_resource);
-    ASSERT_TRUE(buffer);
-    EXPECT_EQ(wl_shm_buffer_get_width(buffer), bounds_px.width());
-    EXPECT_EQ(wl_shm_buffer_get_height(buffer), bounds_px.height());
-
-    // Release the buffer immediately as the test always attaches the same
-    // buffer.
-    surface_->ReleaseBufferFenced(buffer_resource, {});
-
-    surface_->SendFrameCallback();
-
-    Sync();
+          mock_surface->SendFrameCallback();
+        });
   }
 
   // TODO(forney): We could check that the contents match something drawn to the
@@ -848,23 +954,31 @@
   canvas->ResizeCanvas(gfx::Size(100, 50), 1);
   sk_canvas = canvas->GetCanvas();
   ASSERT_TRUE(sk_canvas);
+
+  const uint32_t surface_id = window_->root_surface()->get_surface_id();
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(surface_id);
+    Expectation damage =
+        EXPECT_CALL(*mock_surface, DamageBuffer(0, 0, 100, 50)).Times(1);
+    Expectation attach = EXPECT_CALL(*mock_surface, Attach(_, 0, 0)).Times(1);
+    EXPECT_CALL(*mock_surface, Commit()).After(damage, attach);
+  });
+
   canvas->PresentCanvas(gfx::Rect(0, 0, 100, 50));
 
   base::RunLoop().RunUntilIdle();
 
-  Expectation damage = EXPECT_CALL(*surface_, DamageBuffer(0, 0, 100, 50));
-  wl_resource* buffer_resource = nullptr;
-  Expectation attach = EXPECT_CALL(*surface_, Attach(_, 0, 0))
-                           .WillOnce(SaveArg<0>(&buffer_resource));
-  EXPECT_CALL(*surface_, Commit()).After(damage, attach);
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(surface_id);
+    auto* buffer_resource = mock_surface->attached_buffer();
+    ASSERT_TRUE(buffer_resource);
 
-  Sync();
-
-  ASSERT_TRUE(buffer_resource);
-  wl_shm_buffer* buffer = wl_shm_buffer_get(buffer_resource);
-  ASSERT_TRUE(buffer);
-  EXPECT_EQ(wl_shm_buffer_get_width(buffer), 100);
-  EXPECT_EQ(wl_shm_buffer_get_height(buffer), 50);
+    ASSERT_TRUE(buffer_resource);
+    wl_shm_buffer* buffer = wl_shm_buffer_get(buffer_resource);
+    ASSERT_TRUE(buffer);
+    EXPECT_EQ(wl_shm_buffer_get_width(buffer), 100);
+    EXPECT_EQ(wl_shm_buffer_get_height(buffer), 50);
+  });
 }
 
 TEST_P(WaylandSurfaceFactoryTest, CreateSurfaceCheckGbm) {
@@ -919,15 +1033,18 @@
 
   auto* gl_ozone = surface_factory_->GetGLOzone(
       gl::GLImplementationParts(gl::kGLImplementationEGLGLES2));
+  ASSERT_TRUE(gl_ozone);
   auto gl_surface = gl_ozone->CreateSurfacelessViewGLSurface(
       gl::GetDefaultDisplay(), widget_);
-  EXPECT_TRUE(gl_surface);
+  ASSERT_TRUE(gl_surface);
   gl_surface->SetRelyOnImplicitSync();
   static_cast<ui::GbmSurfacelessWayland*>(gl_surface.get())
       ->SetNoGLFlushForTests();
 
-  // This test only needs 1 buffer.
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    // This test only needs 1 buffer.
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
 
   gfx::Size test_buffer_size = {300, 100};
   gfx::RectF test_buffer_dmg_uv = {0.2f, 0.3f, 0.6, 0.32f};
@@ -947,12 +1064,11 @@
   auto native_pixmap = surface_factory_->CreateNativePixmap(
       widget_, nullptr, test_buffer_size, gfx::BufferFormat::BGRA_8888,
       gfx::BufferUsage::SCANOUT);
+  ASSERT_TRUE(native_pixmap);
   fake_overlay_image.push_back(base::MakeRefCounted<OverlayImageHolder>(
       native_pixmap, test_buffer_size));
 
-  auto* root_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  auto* test_viewport = root_surface->viewport();
+  const uint32_t surface_id = window_->root_surface()->get_surface_id();
 
   CallbacksHelper cbs_helper;
   // Submit a frame with an overlay and background.
@@ -990,41 +1106,44 @@
   // Wait until the mojo calls are done.
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_CALL(*test_viewport,
-              SetSource(expected_src.x(), expected_src.y(),
-                        expected_src.width(), expected_src.height()))
-      .Times(1);
-  EXPECT_CALL(*test_viewport,
-              SetDestination(window_->GetBoundsInDIP().width(),
-                             window_->GetBoundsInDIP().height()))
-      .Times(1);
-  EXPECT_CALL(*root_surface, SetBufferTransform(WL_OUTPUT_TRANSFORM_90))
-      .Times(1);
-  Expectation damage =
-      EXPECT_CALL(*root_surface, Damage(expected_surface_dmg.origin().x(),
-                                        expected_surface_dmg.origin().y(),
-                                        expected_surface_dmg.width(),
-                                        expected_surface_dmg.height()));
-  wl_resource* buffer_resource = nullptr;
-  Expectation attach = EXPECT_CALL(*root_surface, Attach(_, 0, 0))
-                           .WillOnce(SaveArg<0>(&buffer_resource));
-  EXPECT_CALL(*root_surface, Commit()).After(damage, attach);
+  PostToServerAndWait(
+      [surface_id, expected_src, bounds_dip = window_->GetBoundsInDIP(),
+       expected_surface_dmg](wl::TestWaylandServerThread* server) {
+        auto* root_surface = server->GetObject<wl::MockSurface>(surface_id);
+        auto* test_viewport = root_surface->viewport();
+        ASSERT_TRUE(test_viewport);
 
-  // Let's sync so that 1) GbmSurfacelessWayland submits the buffer according to
-  // internal queue and fake server processes the request.
-  Sync();
+        EXPECT_CALL(*test_viewport,
+                    SetSource(expected_src.x(), expected_src.y(),
+                              expected_src.width(), expected_src.height()))
+            .Times(1);
+        EXPECT_CALL(*test_viewport,
+                    SetDestination(bounds_dip.width(), bounds_dip.height()))
+            .Times(1);
+        EXPECT_CALL(*root_surface, SetBufferTransform(WL_OUTPUT_TRANSFORM_90))
+            .Times(1);
+        Expectation damage =
+            EXPECT_CALL(*root_surface, Damage(expected_surface_dmg.origin().x(),
+                                              expected_surface_dmg.origin().y(),
+                                              expected_surface_dmg.width(),
+                                              expected_surface_dmg.height()))
+                .Times(1);
+        Expectation attach =
+            EXPECT_CALL(*root_surface, Attach(_, 0, 0)).Times(1);
+        EXPECT_CALL(*root_surface, Commit()).After(damage, attach);
 
-  auto params_vector = server_.zwp_linux_dmabuf_v1()->buffer_params();
-  ASSERT_EQ(params_vector.size(), 1u);
+        auto params_vector = server->zwp_linux_dmabuf_v1()->buffer_params();
+        ASSERT_EQ(params_vector.size(), 1u);
 
-  zwp_linux_buffer_params_v1_send_created(
-      params_vector.front()->resource(),
-      params_vector.front()->buffer_resource());
+        zwp_linux_buffer_params_v1_send_created(
+            params_vector.front()->resource(),
+            params_vector.front()->buffer_resource());
+      });
 
-  // And create buffer.
-  Sync();
-
-  testing::Mock::VerifyAndClearExpectations(root_surface);
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    testing::Mock::VerifyAndClearExpectations(
+        server->GetObject<wl::MockSurface>(surface_id));
+  });
 
   // Give mojo the chance to pass the callbacks.
   base::RunLoop().RunUntilIdle();
diff --git a/ui/ozone/platform/wayland/host/wayland_clipboard_unittest.cc b/ui/ozone/platform/wayland/host/wayland_clipboard_unittest.cc
index 22f4a00b..73409fc6 100644
--- a/ui/ozone/platform/wayland/host/wayland_clipboard_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_clipboard_unittest.cc
@@ -28,7 +28,11 @@
 #include "ui/gfx/geometry/point.h"
 #include "ui/ozone/platform/wayland/host/wayland_clipboard.h"
 #include "ui/ozone/platform/wayland/host/wayland_connection_test_api.h"
+#include "ui/ozone/platform/wayland/host/wayland_keyboard.h"
+#include "ui/ozone/platform/wayland/host/wayland_pointer.h"
+#include "ui/ozone/platform/wayland/host/wayland_seat.h"
 #include "ui/ozone/platform/wayland/host/wayland_serial_tracker.h"
+#include "ui/ozone/platform/wayland/host/wayland_touch.h"
 #include "ui/ozone/platform/wayland/test/mock_pointer.h"
 #include "ui/ozone/platform/wayland/test/mock_surface.h"
 #include "ui/ozone/platform/wayland/test/test_data_device.h"
@@ -62,27 +66,49 @@
   return base::RefCountedBytes::TakeVector(&data_vector);
 }
 
+// This must be called on the server thread.
+wl::TestSelectionDevice* GetSelectionDevice(wl::TestWaylandServerThread* server,
+                                            ClipboardBuffer buffer) {
+  DCHECK(server->task_runner()->BelongsToCurrentThread());
+
+  return buffer == ClipboardBuffer::kSelection
+             ? server->primary_selection_device_manager()->device()
+             : server->data_device_manager()->data_device();
+}
+
+// This must be called on the server thread.
+wl::TestSelectionSource* GetSelectionSource(wl::TestWaylandServerThread* server,
+                                            ClipboardBuffer buffer) {
+  DCHECK(server->task_runner()->BelongsToCurrentThread());
+
+  return buffer == ClipboardBuffer::kSelection
+             ? server->primary_selection_device_manager()->source()
+             : server->data_device_manager()->data_source();
+}
+
 }  // namespace
 
 class WaylandClipboardTestBase : public WaylandTest {
  public:
+  WaylandClipboardTestBase() : WaylandTest(TestServerMode::kAsync) {}
+  WaylandClipboardTestBase(const WaylandClipboardTestBase&) = delete;
+  WaylandClipboardTestBase& operator=(const WaylandClipboardTestBase&) = delete;
+  ~WaylandClipboardTestBase() override = default;
+
   void SetUp() override {
     WaylandTest::SetUp();
 
-    wl_seat_send_capabilities(server_.seat()->resource(),
-                              WL_SEAT_CAPABILITY_POINTER |
-                                  WL_SEAT_CAPABILITY_TOUCH |
-                                  WL_SEAT_CAPABILITY_KEYBOARD);
-    Sync();
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      wl_seat_send_capabilities(server->seat()->resource(),
+                                WL_SEAT_CAPABILITY_POINTER |
+                                    WL_SEAT_CAPABILITY_TOUCH |
+                                    WL_SEAT_CAPABILITY_KEYBOARD);
 
-    pointer_ = server_.seat()->pointer();
-    ASSERT_TRUE(pointer_);
-
-    touch_ = server_.seat()->touch();
-    ASSERT_TRUE(touch_);
-
-    keyboard_ = server_.seat()->keyboard();
-    ASSERT_TRUE(keyboard_);
+      ASSERT_TRUE(server->data_device_manager());
+    });
+    ASSERT_TRUE(connection_->seat()->pointer());
+    ASSERT_TRUE(connection_->seat()->touch());
+    ASSERT_TRUE(connection_->seat()->keyboard());
 
     // As of now, WaylandClipboard::RequestClipboardData is implemented in a
     // blocking way, which requires a roundtrip before attempting the data
@@ -94,12 +120,14 @@
     WaylandConnectionTestApi(connection_.get())
         .SetRoundtripClosure(base::BindLambdaForTesting([&]() {
           wl_display_flush(connection_->display());
-          Sync();
+          SyncDisplay();
           base::ThreadPoolInstance::Get()->FlushForTesting();
         }));
 
     clipboard_ = connection_->clipboard();
     ASSERT_TRUE(clipboard_);
+
+    MaybeSetUpXkb();
   }
 
   void TearDown() override {
@@ -112,108 +140,109 @@
   // Actual clipboard data reading is performed in the ThreadPool. Also,
   // wl::TestSelection{Source,Offer} currently use ThreadPool task runners.
   void WaitForClipboardTasks() {
-    Sync();
+    SyncDisplay();
     base::ThreadPoolInstance::Get()->FlushForTesting();
     base::RunLoop().RunUntilIdle();
   }
 
   void SentPointerButtonPress(const gfx::Point& location) {
-    wl_pointer_send_enter(pointer_->resource(), ++serial_, surface_->resource(),
-                          location.x(), location.y());
-    wl_pointer_send_button(pointer_->resource(), ++serial_, ++timestamp_,
-                           BTN_LEFT, WL_POINTER_BUTTON_STATE_PRESSED);
+    PostToServerAndWait(
+        [&location, surface_id = window_->root_surface()->get_surface_id()](
+            wl::TestWaylandServerThread* server) {
+          auto* const pointer = server->seat()->pointer()->resource();
+          auto* const surface =
+              server->GetObject<wl::MockSurface>(surface_id)->resource();
+
+          wl_pointer_send_enter(pointer, server->GetNextSerial(), surface,
+                                wl_fixed_from_int(location.x()),
+                                wl_fixed_from_int(location.y()));
+          wl_pointer_send_button(pointer, server->GetNextSerial(),
+                                 server->GetNextTime(), BTN_LEFT,
+                                 WL_POINTER_BUTTON_STATE_PRESSED);
+        });
   }
   void SendTouchDown(const gfx::Point& location) {
-    wl_touch_send_down(touch_->resource(), ++serial_, ++timestamp_,
-                       surface_->resource(), /*touch_id=*/0,
-                       wl_fixed_from_int(location.x()),
-                       wl_fixed_from_int(location.y()));
-    wl_touch_send_frame(touch_->resource());
+    PostToServerAndWait(
+        [location, surface_id = window_->root_surface()->get_surface_id()](
+            wl::TestWaylandServerThread* server) {
+          auto* const touch = server->seat()->touch()->resource();
+          auto* const surface =
+              server->GetObject<wl::MockSurface>(surface_id)->resource();
+
+          wl_touch_send_down(touch, server->GetNextSerial(),
+                             server->GetNextTime(), surface, 0 /* id */,
+                             wl_fixed_from_int(location.x()),
+                             wl_fixed_from_int(location.y()));
+          wl_touch_send_frame(touch);
+        });
   }
 
   void SendTouchUp() {
-    wl_touch_send_up(touch_->resource(), ++serial_, ++timestamp_,
-                     /*touch_id=*/0);
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      auto* const touch = server->seat()->touch()->resource();
+
+      wl_touch_send_up(touch, server->GetNextSerial(), server->GetNextTime(),
+                       0 /* id */);
+    });
   }
 
   void SendKeyboardKey() {
-    struct wl_array empty;
-    wl_array_init(&empty);
-    wl_keyboard_send_enter(keyboard_->resource(), 1, surface_->resource(),
-                           &empty);
-    wl_array_release(&empty);
-    wl_keyboard_send_key(keyboard_->resource(), 2, 0, 30 /* a */,
-                         WL_KEYBOARD_KEY_STATE_PRESSED);
+    PostToServerAndWait(
+        [surface_id = window_->root_surface()->get_surface_id()](
+            wl::TestWaylandServerThread* server) {
+          auto* const keyboard = server->seat()->keyboard()->resource();
+          auto* const surface =
+              server->GetObject<wl::MockSurface>(surface_id)->resource();
+
+          wl::ScopedWlArray empty({});
+          wl_keyboard_send_enter(keyboard, server->GetNextSerial(), surface,
+                                 empty.get());
+          wl_keyboard_send_key(keyboard, server->GetNextSerial(),
+                               server->GetNextTime(), 30 /* a */,
+                               WL_KEYBOARD_KEY_STATE_PRESSED);
+        });
   }
 
-  /* Server objects */
-  raw_ptr<wl::MockPointer> pointer_;
-  raw_ptr<wl::TestTouch> touch_;
-  raw_ptr<wl::TestKeyboard> keyboard_;
-
   raw_ptr<WaylandClipboard> clipboard_ = nullptr;
-
-  uint32_t serial_ = 0;
-  uint32_t timestamp_ = 0;
 };
 
 class WaylandClipboardTest : public WaylandClipboardTestBase {
  public:
   WaylandClipboardTest() = default;
-
   WaylandClipboardTest(const WaylandClipboardTest&) = delete;
   WaylandClipboardTest& operator=(const WaylandClipboardTest&) = delete;
-
   ~WaylandClipboardTest() override = default;
 
   void SetUp() override {
     WaylandClipboardTestBase::SetUp();
 
-    ASSERT_TRUE(server_.data_device_manager());
-    ASSERT_TRUE(GetParam().primary_selection_protocol ==
-                    wl::PrimarySelectionProtocol::kNone ||
-                server_.primary_selection_device_manager());
+    PostToServerAndWait(
+        [primary_selection_protocol = GetParam().primary_selection_protocol](
+            wl::TestWaylandServerThread* server) {
+          ASSERT_TRUE(primary_selection_protocol ==
+                          wl::PrimarySelectionProtocol::kNone ||
+                      server->primary_selection_device_manager());
+        });
 
     // Make sure clipboard instance for the available primary selection protocol
     // gets properly created, ie: the corresponding 'get_device' request is
     // issued, so server-side objects are created prior to test-case specific
     // calls, otherwise tests, such as ReadFromClipboard, would crash.
-    ASSERT_EQ(GetBuffer() == ClipboardBuffer::kSelection,
+    ASSERT_EQ(WhichBufferToUse() == ClipboardBuffer::kSelection,
               !!clipboard_->GetClipboard(ClipboardBuffer::kSelection));
-    Sync();
+    SyncDisplay();
 
     offered_data_.clear();
   }
 
  protected:
-  wl::TestSelectionDevice* GetServerSelectionDevice() {
-    return GetBuffer() == ClipboardBuffer::kSelection
-               ? server_.primary_selection_device_manager()->device()
-               : server_.data_device_manager()->data_device();
-  }
-
-  wl::TestSelectionSource* GetServerSelectionSource() {
-    return GetBuffer() == ClipboardBuffer::kSelection
-               ? server_.primary_selection_device_manager()->source()
-               : server_.data_device_manager()->data_source();
-  }
-
-  ClipboardBuffer GetBuffer() const {
+  ClipboardBuffer WhichBufferToUse() const {
     return GetParam().primary_selection_protocol !=
                    wl::PrimarySelectionProtocol::kNone
                ? ClipboardBuffer::kSelection
                : ClipboardBuffer::kCopyPaste;
   }
 
-  void ResetServerSelectionSource() {
-    if (GetParam().primary_selection_protocol !=
-        wl::PrimarySelectionProtocol::kNone) {
-      server_.primary_selection_device_manager()->set_source(nullptr);
-    } else {
-      server_.data_device_manager()->set_data_source(nullptr);
-    }
-  }
-
   // Fill the clipboard backing store with sample data.
   void OfferData(ClipboardBuffer buffer,
                  const char* data,
@@ -238,8 +267,11 @@
 
     ASSERT_EQ(wl::PrimarySelectionProtocol::kNone,
               GetParam().primary_selection_protocol);
-    ASSERT_TRUE(server_.data_device_manager());
-    ASSERT_FALSE(server_.primary_selection_device_manager());
+
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      ASSERT_TRUE(server->data_device_manager());
+      ASSERT_FALSE(server->primary_selection_device_manager());
+    });
   }
 };
 
@@ -270,34 +302,58 @@
 
   // Triggering copy on touch-down event.
   for (auto send_input_event : send_input_event_closures) {
-    ResetServerSelectionSource();
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      if (GetParam().primary_selection_protocol !=
+          wl::PrimarySelectionProtocol::kNone) {
+        server->primary_selection_device_manager()->set_source(nullptr);
+      } else {
+        server->data_device_manager()->set_data_source(nullptr);
+      }
+    });
 
     send_input_event.Run();
-    Sync();
     auto client_selection_serial = connection_->serial_tracker().GetSerial(
         {wl::SerialType::kTouchPress, wl::SerialType::kMousePress,
          wl::SerialType::kKeyPress});
     ASSERT_TRUE(client_selection_serial.has_value());
 
     // 1. Offer sample text as selection data.
-    OfferData(GetBuffer(), kSampleClipboardText, {kMimeTypeTextUtf8});
-    Sync();
-    ASSERT_TRUE(GetServerSelectionSource());
-
-    EXPECT_EQ(client_selection_serial->value,
-              GetServerSelectionDevice()->selection_serial());
+    OfferData(WhichBufferToUse(), kSampleClipboardText, {kMimeTypeTextUtf8});
+    SyncDisplay();
 
     // 2. Emulate an external client requesting to read the offered data and
     // make sure the appropriate string gets delivered.
+    // These three objects are accessed from the server thread, but must persist
+    // several server calls, that is why they are allocated here.
     std::string delivered_text;
     base::MockCallback<wl::TestSelectionSource::ReadDataCallback> callback;
-    EXPECT_CALL(callback, Run(_)).WillOnce([&](std::vector<uint8_t>&& data) {
-      delivered_text = std::string(data.begin(), data.end());
+    base::RunLoop run_loop;
+
+    PostToServerAndWait([&delivered_text, &callback,
+                         buffer = WhichBufferToUse(),
+                         serial = client_selection_serial->value,
+                         quit_closure = run_loop.QuitClosure()](
+                            wl::TestWaylandServerThread* server) {
+      ASSERT_TRUE(GetSelectionSource(server, buffer));
+
+      EXPECT_EQ(serial, GetSelectionDevice(server, buffer)->selection_serial());
+
+      EXPECT_CALL(callback, Run(_))
+          .WillOnce(
+              [&delivered_text, quit_closure](std::vector<uint8_t>&& data) {
+                delivered_text = std::string(data.begin(), data.end());
+                quit_closure.Run();
+              });
+
+      GetSelectionSource(server, buffer)
+          ->ReadData(kMimeTypeTextUtf8, callback.Get());
     });
-    GetServerSelectionSource()->ReadData(kMimeTypeTextUtf8, callback.Get());
 
     WaitForClipboardTasks();
-    ASSERT_EQ(kSampleClipboardText, delivered_text);
+
+    PostToServerAndWait([&delivered_text](wl::TestWaylandServerThread* server) {
+      EXPECT_EQ(kSampleClipboardText, delivered_text);
+    });
 
     window_manager->SetPointerFocusedWindow(nullptr);
     window_manager->SetTouchFocusedWindow(nullptr);
@@ -307,49 +363,51 @@
 
 TEST_P(WaylandClipboardTest, ReadFromClipboard) {
   // 1. Emulate a selection data offer coming in.
-  auto* device = GetServerSelectionDevice();
-  auto* data_offer = device->OnDataOffer();
-  data_offer->OnOffer(kMimeTypeTextUtf8,
-                      ToClipboardData(std::string(kSampleClipboardText)));
-  device->OnSelection(data_offer);
-  Sync();
+  PostToServerAndWait(
+      [buffer = WhichBufferToUse()](wl::TestWaylandServerThread* server) {
+        auto* device = GetSelectionDevice(server, buffer);
+        auto* data_offer = device->OnDataOffer();
+        data_offer->OnOffer(kMimeTypeTextUtf8,
+                            ToClipboardData(std::string(kSampleClipboardText)));
+        device->OnSelection(data_offer);
+      });
 
   // 2. Request to read the offered data and check whether the read text matches
   // the previously offered one.
   std::string text;
   base::MockCallback<PlatformClipboard::RequestDataClosure> callback;
-  EXPECT_CALL(callback, Run(_)).WillOnce([&](PlatformClipboard::Data data) {
+  EXPECT_CALL(callback, Run(_)).WillOnce([&text](PlatformClipboard::Data data) {
     ASSERT_TRUE(data);
     text = std::string(data->front_as<const char>(), data->size());
   });
 
-  clipboard_->RequestClipboardData(GetBuffer(), kMimeTypeTextUtf8,
+  clipboard_->RequestClipboardData(WhichBufferToUse(), kMimeTypeTextUtf8,
                                    callback.Get());
-  WaitForClipboardTasks();
   EXPECT_EQ(kSampleClipboardText, text);
 }
 
 // Regression test for crbug.com/1183939. Ensures unicode mime types take
 // priority over text/plain when reading text.
 TEST_P(WaylandClipboardTest, ReadFromClipboardPrioritizeUtf) {
-  auto* data_offer = GetServerSelectionDevice()->OnDataOffer();
-  data_offer->OnOffer(kMimeTypeText,
-                      ToClipboardData(std::string("ascii_text")));
-  data_offer->OnOffer(kMimeTypeTextUtf8,
-                      ToClipboardData(std::string("utf8_text")));
-  GetServerSelectionDevice()->OnSelection(data_offer);
-  Sync();
+  PostToServerAndWait(
+      [buffer = WhichBufferToUse()](wl::TestWaylandServerThread* server) {
+        auto* data_offer = GetSelectionDevice(server, buffer)->OnDataOffer();
+        data_offer->OnOffer(kMimeTypeText,
+                            ToClipboardData(std::string("ascii_text")));
+        data_offer->OnOffer(kMimeTypeTextUtf8,
+                            ToClipboardData(std::string("utf8_text")));
+        GetSelectionDevice(server, buffer)->OnSelection(data_offer);
+      });
 
   std::string text;
   base::MockCallback<PlatformClipboard::RequestDataClosure> callback;
-  EXPECT_CALL(callback, Run(_)).WillOnce([&](PlatformClipboard::Data data) {
+  EXPECT_CALL(callback, Run(_)).WillOnce([&text](PlatformClipboard::Data data) {
     ASSERT_TRUE(data);
     text = std::string(data->front_as<const char>(), data->size());
   });
 
-  clipboard_->RequestClipboardData(GetBuffer(), kMimeTypeTextUtf8,
+  clipboard_->RequestClipboardData(WhichBufferToUse(), kMimeTypeTextUtf8,
                                    callback.Get());
-  WaitForClipboardTasks();
   EXPECT_EQ("utf8_text", text);
 }
 
@@ -359,25 +417,32 @@
   // data.
   base::MockCallback<PlatformClipboard::RequestDataClosure> callback;
   EXPECT_CALL(callback, Run(Eq(nullptr))).Times(1);
-  clipboard_->RequestClipboardData(GetBuffer(), kMimeTypeTextUtf8,
+  clipboard_->RequestClipboardData(WhichBufferToUse(), kMimeTypeTextUtf8,
                                    callback.Get());
 }
 
 TEST_P(WaylandClipboardTest, IsSelectionOwner) {
   connection_->serial_tracker().UpdateSerial(wl::SerialType::kMousePress, 1);
 
-  OfferData(GetBuffer(), kSampleClipboardText, {kMimeTypeTextUtf8});
-  Sync();
-  ASSERT_TRUE(GetServerSelectionSource());
-  ASSERT_TRUE(clipboard_->IsSelectionOwner(GetBuffer()));
+  OfferData(WhichBufferToUse(), kSampleClipboardText, {kMimeTypeTextUtf8});
+
+  PostToServerAndWait(
+      [buffer = WhichBufferToUse()](wl::TestWaylandServerThread* server) {
+        ASSERT_TRUE(GetSelectionSource(server, buffer));
+      });
+
+  ASSERT_TRUE(clipboard_->IsSelectionOwner(WhichBufferToUse()));
 
   // The compositor sends OnCancelled whenever another application on the system
   // sets a new selection. It means we are not the application that owns the
   // current selection data.
-  GetServerSelectionSource()->OnCancelled();
-  Sync();
+  PostToServerAndWait(
+      [buffer = WhichBufferToUse()](wl::TestWaylandServerThread* server) {
+        GetSelectionSource(server, buffer)->OnCancelled();
+      });
 
-  ASSERT_FALSE(clipboard_->IsSelectionOwner(GetBuffer()));
+  ASSERT_FALSE(clipboard_->IsSelectionOwner(WhichBufferToUse()));
+
   connection_->serial_tracker().ResetSerial(wl::SerialType::kMousePress);
 }
 
@@ -385,15 +450,17 @@
 // different clipboard buffers.
 TEST_P(WaylandClipboardTest, OverlapReadingFromDifferentBuffers) {
   // Offer a sample text as selection data.
-  auto* data_offer = GetServerSelectionDevice()->OnDataOffer();
-  data_offer->OnOffer(kMimeTypeTextUtf8,
-                      ToClipboardData(std::string(kSampleClipboardText)));
-  GetServerSelectionDevice()->OnSelection(data_offer);
-  Sync();
+  PostToServerAndWait(
+      [buffer = WhichBufferToUse()](wl::TestWaylandServerThread* server) {
+        auto* data_offer = GetSelectionDevice(server, buffer)->OnDataOffer();
+        data_offer->OnOffer(kMimeTypeTextUtf8,
+                            ToClipboardData(std::string(kSampleClipboardText)));
+        GetSelectionDevice(server, buffer)->OnSelection(data_offer);
+      });
 
   // Post a read request for the other buffer, which will start its execution
   // after the request above.
-  auto other_buffer = GetBuffer() == ClipboardBuffer::kSelection
+  auto other_buffer = WhichBufferToUse() == ClipboardBuffer::kSelection
                           ? ClipboardBuffer::kCopyPaste
                           : ClipboardBuffer::kSelection;
   base::MockCallback<PlatformClipboard::RequestDataClosure> callback;
@@ -413,7 +480,7 @@
     ASSERT_NE(nullptr, data);
     text = std::string(data->front_as<const char>(), data->size());
   });
-  clipboard_->RequestClipboardData(GetBuffer(), kMimeTypeTextUtf8,
+  clipboard_->RequestClipboardData(WhichBufferToUse(), kMimeTypeTextUtf8,
                                    got_text.Get());
 
   WaitForClipboardTasks();
@@ -425,23 +492,27 @@
   base::MockCallback<PlatformClipboard::ClipboardDataChangedCallback>
       clipboard_changed_callback;
   clipboard_->SetClipboardDataChangedCallback(clipboard_changed_callback.Get());
-  const auto buffer = GetBuffer();
+  const auto buffer = WhichBufferToUse();
 
   // 1. For selection offered by an external application.
   EXPECT_CALL(clipboard_changed_callback, Run(buffer)).Times(1);
-  auto* data_offer = GetServerSelectionDevice()->OnDataOffer();
-  data_offer->OnOffer(kMimeTypeTextUtf8,
-                      ToClipboardData(std::string(kSampleClipboardText)));
-  GetServerSelectionDevice()->OnSelection(data_offer);
-  Sync();
+  PostToServerAndWait(
+      [buffer = WhichBufferToUse()](wl::TestWaylandServerThread* server) {
+        auto* data_offer = GetSelectionDevice(server, buffer)->OnDataOffer();
+        data_offer->OnOffer(kMimeTypeTextUtf8,
+                            ToClipboardData(std::string(kSampleClipboardText)));
+        GetSelectionDevice(server, buffer)->OnSelection(data_offer);
+      });
   EXPECT_FALSE(clipboard_->IsSelectionOwner(buffer));
 
   // 2. For selection offered by Chromium.
   connection_->serial_tracker().UpdateSerial(wl::SerialType::kMousePress, 1);
   EXPECT_CALL(clipboard_changed_callback, Run(buffer)).Times(1);
   OfferData(buffer, kSampleClipboardText, {kMimeTypeTextUtf8});
-  Sync();
-  ASSERT_TRUE(GetServerSelectionSource());
+  PostToServerAndWait(
+      [buffer = WhichBufferToUse()](wl::TestWaylandServerThread* server) {
+        ASSERT_TRUE(GetSelectionSource(server, buffer));
+      });
   EXPECT_TRUE(clipboard_->IsSelectionOwner(buffer));
   connection_->serial_tracker().ResetSerial(wl::SerialType::kMousePress);
 }
@@ -470,12 +541,13 @@
 // TODO(crbug.com/443355): Re-enable once Clipboard API becomes async.
 TEST_P(CopyPasteOnlyClipboardTest, DISABLED_OverlappingReadRequests) {
   // Create an selection data offer containing plain and html mime types.
-  auto* data_device = server_.data_device_manager()->data_device();
-  auto* data_offer = data_device->OnDataOffer();
-  data_offer->OnOffer(kMimeTypeText, ToClipboardData(std::string("text")));
-  data_offer->OnOffer(kMimeTypeHTML, ToClipboardData(std::string("html")));
-  data_device->OnSelection(data_offer);
-  Sync();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    auto* data_device = server->data_device_manager()->data_device();
+    auto* data_offer = data_device->OnDataOffer();
+    data_offer->OnOffer(kMimeTypeText, ToClipboardData(std::string("text")));
+    data_offer->OnOffer(kMimeTypeHTML, ToClipboardData(std::string("html")));
+    data_device->OnSelection(data_offer);
+  });
 
   // Schedule a clipboard read task (for text/html mime type). As read requests
   // are processed asynchronously, this will actually start when the request
diff --git a/ui/ozone/platform/wayland/host/wayland_frame_manager.cc b/ui/ozone/platform/wayland/host/wayland_frame_manager.cc
index 85a7ce8..8d701f2 100644
--- a/ui/ozone/platform/wayland/host/wayland_frame_manager.cc
+++ b/ui/ozone/platform/wayland/host/wayland_frame_manager.cc
@@ -93,6 +93,8 @@
     : window_(window), connection_(connection), weak_factory_(this) {
   if (!connection->zaura_shell() ||
       connection->zaura_shell()->HasBugFix(1358908)) {
+    // TODO(msisov): if this gets removed at some point, the
+    // WaylandSurfaceFactoryTest can also stop sending this bug fix.
     potential_compositor_buffer_lock = false;
   }
 }
diff --git a/ui/ozone/platform/wayland/host/wayland_output_unittest.cc b/ui/ozone/platform/wayland/host/wayland_output_unittest.cc
index 8e3a8b0a..2c6506b8 100644
--- a/ui/ozone/platform/wayland/host/wayland_output_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_output_unittest.cc
@@ -13,7 +13,15 @@
 
 namespace ui {
 
-using WaylandOutputTest = WaylandTest;
+// TODO(crbug.com/1365887): revert this to using WaylandOutputTest = WaylandTest
+// once the default mode becomes asynchronous.
+class WaylandOutputTest : public WaylandTest {
+ public:
+  WaylandOutputTest() : WaylandTest(TestServerMode::kAsync) {}
+  WaylandOutputTest(const WaylandOutputTest&) = delete;
+  WaylandOutputTest& operator=(const WaylandOutputTest&) = delete;
+  ~WaylandOutputTest() override = default;
+};
 
 // Tests that name and description fall back to ones in the WaylandOutput if
 // XDGOutput is not created.
diff --git a/ui/ozone/platform/wayland/host/wayland_screen.cc b/ui/ozone/platform/wayland/host/wayland_screen.cc
index 9e5ef43..ccb8aaf 100644
--- a/ui/ozone/platform/wayland/host/wayland_screen.cc
+++ b/ui/ozone/platform/wayland/host/wayland_screen.cc
@@ -202,23 +202,31 @@
   changed_display.UpdateWorkAreaFromInsets(metrics.insets);
 
   gfx::DisplayColorSpaces color_spaces;
+  color_spaces.SetOutputBufferFormats(image_format_no_alpha_.value(),
+                                      image_format_alpha_.value());
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
   auto* wayland_output =
       connection_->wayland_output_manager()->GetOutput(metrics.output_id);
   auto* color_management_output =
       wayland_output ? wayland_output->color_management_output() : nullptr;
 
-  if (color_management_output && color_management_output->gfx_color_space()) {
-    auto* gfx_color = color_management_output->gfx_color_space();
-    color_spaces = display::CreateDisplayColorSpaces(
-        *gfx_color, image_format_hdr_ == gfx::BufferFormat::RGBA_1010102, {});
-  } else {
-    color_spaces.SetOutputBufferFormats(image_format_no_alpha_.value(),
-                                        image_format_alpha_.value());
+  if (color_management_output && color_management_output->gfx_color_space() &&
+      color_management_output->gfx_color_space()->IsHDR()) {
+    // Only use display color space to determine if HDR is supported.
+    // LaCrOS will use generic color spaces for blending and compositing.
+    color_spaces.SetOutputColorSpaceAndBufferFormat(
+        gfx::ContentColorUsage::kHDR, true,
+        gfx::ColorSpace::CreateExtendedSRGB10Bit(), *image_format_hdr_);
+    color_spaces.SetOutputColorSpaceAndBufferFormat(
+        gfx::ContentColorUsage::kHDR, false,
+        gfx::ColorSpace::CreateExtendedSRGB10Bit(), *image_format_hdr_);
+    color_spaces.SetOutputColorSpaceAndBufferFormat(
+        gfx::ContentColorUsage::kWideColorGamut, true,
+        gfx::ColorSpace::CreateDisplayP3D65(), image_format_alpha_.value());
+    color_spaces.SetOutputColorSpaceAndBufferFormat(
+        gfx::ContentColorUsage::kWideColorGamut, false,
+        gfx::ColorSpace::CreateDisplayP3D65(), image_format_no_alpha_.value());
   }
-#else
-  color_spaces.SetOutputBufferFormats(image_format_no_alpha_.value(),
-                                      image_format_alpha_.value());
 #endif
 
   changed_display.set_color_spaces(color_spaces);
diff --git a/ui/ozone/platform/wayland/host/wayland_zaura_shell_unittest.cc b/ui/ozone/platform/wayland/host/wayland_zaura_shell_unittest.cc
index 30d51524..625d94af 100644
--- a/ui/ozone/platform/wayland/host/wayland_zaura_shell_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_zaura_shell_unittest.cc
@@ -2,46 +2,42 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <aura-shell-server-protocol.h>
-
-#include "base/run_loop.h"
-#include "base/test/scoped_feature_list.h"
-#include "base/test/task_environment.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/ozone/common/features.h"
-#include "ui/ozone/platform/wayland/host/wayland_connection.h"
-#include "ui/ozone/platform/wayland/host/wayland_event_source.h"
 #include "ui/ozone/platform/wayland/host/wayland_zaura_shell.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
 #include "ui/ozone/platform/wayland/test/mock_zaura_shell.h"
 #include "ui/ozone/platform/wayland/test/test_wayland_server_thread.h"
+#include "ui/ozone/platform/wayland/test/wayland_test.h"
+
+using testing::Values;
 
 namespace ui {
 
-TEST(WaylandZAuraShellTest, BugFix) {
-  base::test::SingleThreadTaskEnvironment task_environment(
-      base::test::SingleThreadTaskEnvironment::MainThreadType::UI);
-  wl::TestWaylandServerThread server;
-  ASSERT_TRUE(server.Start({}));
-  wl::MockZAuraShell* zaura_shell = server.zaura_shell();
+// TODO(crbug.com/1365887): change this to
+// `using WaylandZAuraShellTest = WaylandTest`
+// once the default mode becomes asynchronous.
+class WaylandZAuraShellTest : public WaylandTest {
+ public:
+  WaylandZAuraShellTest() : WaylandTest(TestServerMode::kAsync) {}
+  WaylandZAuraShellTest(const WaylandZAuraShellTest&) = delete;
+  WaylandZAuraShellTest& operator=(const WaylandZAuraShellTest&) = delete;
+  ~WaylandZAuraShellTest() override = default;
+};
 
-  WaylandConnection connection;
-  ASSERT_TRUE(connection.Initialize());
-  connection.event_source()->StartProcessingEvents();
+TEST_P(WaylandZAuraShellTest, BugFix) {
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    auto* const zaura_shell = server->zaura_shell()->resource();
+    zaura_shell_send_bug_fix(zaura_shell, 1);
+    zaura_shell_send_bug_fix(zaura_shell, 3);
+  });
 
-  base::RunLoop().RunUntilIdle();
-  server.Pause();
-
-  ASSERT_TRUE(server.zaura_shell()->resource());
-  zaura_shell_send_bug_fix(zaura_shell->resource(), 1);
-  zaura_shell_send_bug_fix(zaura_shell->resource(), 3);
-
-  server.Resume();
-  base::RunLoop().RunUntilIdle();
-  server.Pause();
-
-  ASSERT_TRUE(connection.zaura_shell()->HasBugFix(1));
-  ASSERT_TRUE(connection.zaura_shell()->HasBugFix(3));
-  ASSERT_FALSE(connection.zaura_shell()->HasBugFix(2));
+  ASSERT_TRUE(connection_->zaura_shell()->HasBugFix(1));
+  ASSERT_TRUE(connection_->zaura_shell()->HasBugFix(3));
+  ASSERT_FALSE(connection_->zaura_shell()->HasBugFix(2));
 }
 
+INSTANTIATE_TEST_SUITE_P(XdgVersionStableTest,
+                         WaylandZAuraShellTest,
+                         Values(wl::ServerConfig{}));
+
 }  // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_zcr_color_manager.cc b/ui/ozone/platform/wayland/host/wayland_zcr_color_manager.cc
index 61906be7..22e0e3be 100644
--- a/ui/ozone/platform/wayland/host/wayland_zcr_color_manager.cc
+++ b/ui/ozone/platform/wayland/host/wayland_zcr_color_manager.cc
@@ -77,12 +77,25 @@
 wl::Object<zcr_color_space_creator_v1>
 WaylandZcrColorManager::CreateZcrColorSpaceCreator(
     const gfx::ColorSpace& color_space) {
-  auto transferID = color_space.GetTransferID();
-  auto eotf = transferID == gfx::ColorSpace::TransferID::PIECEWISE_HDR
-                  ? ZCR_COLOR_MANAGER_V1_EOTF_NAMES_PQ
-              : transferID == gfx::ColorSpace::TransferID::SRGB
-                  ? ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SRGB
-                  : wayland::ToColorManagerEOTF(color_space.GetTransferID());
+  auto eotf = wayland::ToColorManagerEOTF(color_space);
+  if (eotf == ZCR_COLOR_MANAGER_V1_EOTF_NAMES_UNKNOWN) {
+    LOG(ERROR) << "Attempt to create color space from"
+               << " unsupported or invalid TransferID: "
+               << color_space.ToString() << ".";
+    return wl::Object<zcr_color_space_creator_v1>(
+        zcr_color_manager_v1_create_color_space_from_names(
+            zcr_color_manager_.get(), ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SRGB,
+            ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT709,
+            ZCR_COLOR_MANAGER_V1_WHITEPOINT_NAMES_D65));
+  }
+  auto chromaticity =
+      wayland::ToColorManagerChromaticity(color_space.GetPrimaryID());
+  if (chromaticity != ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_UNKNOWN) {
+    return wl::Object<zcr_color_space_creator_v1>(
+        zcr_color_manager_v1_create_color_space_from_names(
+            zcr_color_manager_.get(), eotf, chromaticity,
+            ZCR_COLOR_MANAGER_V1_WHITEPOINT_NAMES_D65));
+  }
   auto primaries = color_space.GetPrimaries();
   return wl::Object<zcr_color_space_creator_v1>(
       zcr_color_manager_v1_create_color_space_from_params(
diff --git a/ui/ozone/platform/wayland/host/wayland_zcr_color_space.cc b/ui/ozone/platform/wayland/host/wayland_zcr_color_space.cc
index fb6fb7e..a8c26b1 100644
--- a/ui/ozone/platform/wayland/host/wayland_zcr_color_space.cc
+++ b/ui/ozone/platform/wayland/host/wayland_zcr_color_space.cc
@@ -10,7 +10,7 @@
 #include "base/logging.h"
 #include "base/notreached.h"
 #include "base/strings/stringprintf.h"
-#include "third_party/skia/include/core/SkColorSpace.h"
+#include "skia/ext/skcolorspace_trfn.h"
 #include "ui/base/wayland/color_manager_util.h"
 #include "ui/gfx/color_space.h"
 #include "ui/ozone/platform/wayland/host/wayland_connection.h"
@@ -61,6 +61,17 @@
   auto transferID = ui::wayland::kEotfMap.contains(eotf)
                         ? ui::wayland::kEotfMap.at(eotf)
                         : gfx::ColorSpace::TransferID::INVALID;
+  if (transferID == gfx::ColorSpace::TransferID::INVALID &&
+      wayland::kHDRTransferMap.contains(eotf)) {
+    auto transfer_fn = ui::wayland::kHDRTransferMap.at(eotf);
+    zcr_color_space
+        ->gathered_information[static_cast<uint8_t>(InformationType::kNames)] =
+        gfx::ColorSpace(primaryID, gfx::ColorSpace::TransferID::CUSTOM_HDR,
+                        gfx::ColorSpace::MatrixID::RGB,
+                        gfx::ColorSpace::RangeID::FULL, nullptr, &transfer_fn,
+                        /*is_hdr=*/true);
+    return;
+  }
   zcr_color_space
       ->gathered_information[static_cast<uint8_t>(InformationType::kNames)] =
       gfx::ColorSpace(primaryID, transferID, gfx::ColorSpace::MatrixID::RGB,
@@ -82,9 +93,6 @@
   WaylandZcrColorSpace* zcr_color_space =
       static_cast<WaylandZcrColorSpace*>(data);
   DCHECK(zcr_color_space);
-  auto transferID = ui::wayland::kEotfMap.contains(eotf)
-                        ? ui::wayland::kEotfMap.at(eotf)
-                        : gfx::ColorSpace::TransferID::INVALID;
   SkColorSpacePrimaries primaries = {
       PARAM_TO_FLOAT(primary_r_x),  PARAM_TO_FLOAT(primary_r_y),
       PARAM_TO_FLOAT(primary_g_x),  PARAM_TO_FLOAT(primary_g_y),
@@ -100,6 +108,23 @@
         primaries.fBX, primaries.fBY, primaries.fWX, primaries.fWY);
     return;
   }
+
+  auto transferID = ui::wayland::kEotfMap.contains(eotf)
+                        ? ui::wayland::kEotfMap.at(eotf)
+                        : gfx::ColorSpace::TransferID::INVALID;
+  if (transferID == gfx::ColorSpace::TransferID::INVALID &&
+      ui::wayland::kHDRTransferMap.contains(eotf)) {
+    auto transfer_fn = ui::wayland::kHDRTransferMap.at(eotf);
+    zcr_color_space
+        ->gathered_information[static_cast<uint8_t>(InformationType::kParams)] =
+        gfx::ColorSpace(gfx::ColorSpace::PrimaryID::CUSTOM,
+                        gfx::ColorSpace::TransferID::CUSTOM_HDR,
+                        gfx::ColorSpace::MatrixID::RGB,
+                        gfx::ColorSpace::RangeID::FULL, &xyzd50, &transfer_fn,
+                        true);
+
+    return;
+  }
   zcr_color_space
       ->gathered_information[static_cast<uint8_t>(InformationType::kParams)] =
       gfx::ColorSpace::CreateCustom(xyzd50, transferID);
diff --git a/ui/ozone/platform/wayland/test/mock_zaura_shell.cc b/ui/ozone/platform/wayland/test/mock_zaura_shell.cc
index 1cd66b2..0ff1a73e 100644
--- a/ui/ozone/platform/wayland/test/mock_zaura_shell.cc
+++ b/ui/ozone/platform/wayland/test/mock_zaura_shell.cc
@@ -82,4 +82,21 @@
 
 MockZAuraShell::~MockZAuraShell() = default;
 
+void MockZAuraShell::SetBugFixes(std::vector<uint32_t> bug_fixes) {
+  bug_fixes_ = std::move(bug_fixes);
+  MaybeSendBugFixes();
+}
+
+void MockZAuraShell::OnBind() {
+  MaybeSendBugFixes();
+}
+
+void MockZAuraShell::MaybeSendBugFixes() {
+  if (resource() && wl_resource_get_version(resource()) >=
+                        ZAURA_SHELL_BUG_FIX_SINCE_VERSION) {
+    for (const uint32_t bug_fix : bug_fixes_)
+      zaura_shell_send_bug_fix(resource(), bug_fix);
+  }
+}
+
 }  // namespace wl
diff --git a/ui/ozone/platform/wayland/test/mock_zaura_shell.h b/ui/ozone/platform/wayland/test/mock_zaura_shell.h
index e0f6f0d..38e657f 100644
--- a/ui/ozone/platform/wayland/test/mock_zaura_shell.h
+++ b/ui/ozone/platform/wayland/test/mock_zaura_shell.h
@@ -20,6 +20,17 @@
   MockZAuraShell& operator=(const MockZAuraShell&) = delete;
 
   ~MockZAuraShell() override;
+
+  // Sets bug fixes and sends them out if the object is bound.
+  void SetBugFixes(std::vector<uint32_t> bug_fixes);
+
+ private:
+  void OnBind() override;
+
+  void MaybeSendBugFixes();
+
+  // Bug fixes that shall be sent to the client.
+  std::vector<uint32_t> bug_fixes_;
 };
 
 }  // namespace wl
diff --git a/ui/views/test/widget_test.h b/ui/views/test/widget_test.h
index 3e7c070..2c04e1ce 100644
--- a/ui/views/test/widget_test.h
+++ b/ui/views/test/widget_test.h
@@ -116,6 +116,8 @@
 
   // Return true if |above| is higher than |below| in the native window Z-order.
   // Both windows must be visible.
+  // WARNING: this does not work for Aura desktop widgets (crbug.com/1333445)
+  // and is not reliable on MacOS 10.13 and earlier.
   static bool IsWindowStackedAbove(Widget* above, Widget* below);
 
   // Query the native window system for the minimum size configured for user
diff --git a/ui/views/widget/sublevel_manager.cc b/ui/views/widget/sublevel_manager.cc
index 000173b2..5f3dfc3 100644
--- a/ui/views/widget/sublevel_manager.cc
+++ b/ui/views/widget/sublevel_manager.cc
@@ -59,10 +59,15 @@
   ui::ZOrderLevel child_level = child->GetZOrderLevel();
   auto insert_it = FindInsertPosition(child);
 
-  // Find the closest previous widget at the same level.
-  auto prev_it = base::ranges::find(std::make_reverse_iterator(insert_it),
-                                    std::crend(children_), child_level,
-                                    &Widget::GetZOrderLevel);
+  // Stacking above an invisible widget is a no-op on Mac. Therefore, find only
+  // visible ones.
+  auto find_visible_widget_of_same_level = [child_level](Widget* widget) {
+    return widget->IsVisible() && widget->GetZOrderLevel() == child_level;
+  };
+
+  auto prev_it = base::ranges::find_if(std::make_reverse_iterator(insert_it),
+                                       std::crend(children_),
+                                       find_visible_widget_of_same_level);
 
   if (prev_it == children_.rend()) {
     // x11 bug: stacking above the base `owner_` will cause `child` to become
@@ -70,8 +75,8 @@
     // position `child` relative to the next child widget.
 
     // Find the closest next widget at the same level.
-    auto next_it = base::ranges::find(insert_it, std::cend(children_),
-                                      child_level, &Widget::GetZOrderLevel);
+    auto next_it = base::ranges::find_if(insert_it, std::cend(children_),
+                                         find_visible_widget_of_same_level);
 
     // Put `child` below `next_it`.
     if (next_it != std::end(children_)) {
diff --git a/ui/views/widget/sublevel_manager_unittest.cc b/ui/views/widget/sublevel_manager_unittest.cc
index 5773546..23e5c89e 100644
--- a/ui/views/widget/sublevel_manager_unittest.cc
+++ b/ui/views/widget/sublevel_manager_unittest.cc
@@ -11,10 +11,15 @@
 #include <utility>
 
 #include "base/test/scoped_feature_list.h"
+#include "build/buildflag.h"
 #include "ui/views/test/views_test_base.h"
 #include "ui/views/test/widget_test.h"
 #include "ui/views/views_features.h"
 
+#if BUILDFLAG(IS_MAC)
+#include "base/mac/mac_util.h"
+#endif
+
 namespace views {
 
 enum WidgetShowType { kShowActive, kShowInactive };
@@ -33,6 +38,11 @@
     set_native_widget_type(
         std::get<ViewsTestBase::NativeWidgetType>(GetParam()));
     ViewsTestBase::SetUp();
+#if BUILDFLAG(IS_MAC)
+    // MacOS 10.13 does not report window z-ordering reliably.
+    if (base::mac::IsAtMostOS10_13())
+      GTEST_SKIP();
+#endif
   }
 
   std::unique_ptr<Widget> CreateChildWidget(
@@ -55,6 +65,7 @@
       widget->Show();
     else
       widget->ShowInactive();
+    test::WidgetVisibleWaiter(widget.get()).Wait();
   }
 
   static std::string PrintTestName(
@@ -107,6 +118,8 @@
         std::get<Widget::InitParams::Activatable>(GetParam()));
   }
 
+  ShowWidget(root);
+
   int order[] = {0, 1, 2};
   do {
     for (int i : order)
@@ -142,6 +155,7 @@
       CreateChildWidget(root.get(), ui::ZOrderLevel::kFloatingWindow, 0,
                         std::get<Widget::InitParams::Activatable>(GetParam()));
 
+  ShowWidget(root);
   ShowWidget(high_level_widget);
   ShowWidget(low_level_widget);
 
@@ -192,6 +206,7 @@
       CreateChildWidget(root.get(), ui::ZOrderLevel::kNormal, 2,
                         std::get<Widget::InitParams::Activatable>(GetParam()));
 
+  ShowWidget(root);
   ShowWidget(child2);
   ShowWidget(child1);
   EXPECT_TRUE(
@@ -275,6 +290,35 @@
 #endif
 }
 
+// Invisible widgets should be skipped to work around MacOS where
+// stacking above them is no-op (crbug.com/1369180).
+// When they become invisible, sublevels should be respected.
+TEST_P(SublevelManagerTest, SkipInvisibleWidget) {
+  std::unique_ptr<Widget> root = CreateTestWidget();
+  std::unique_ptr<Widget> children[3];
+
+  ShowWidget(root);
+  for (int i = 0; i < 3; i++) {
+    children[i] = CreateChildWidget(
+        root.get(), ui::ZOrderLevel::kNormal, i,
+        std::get<Widget::InitParams::Activatable>(GetParam()));
+    ShowWidget(children[i]);
+
+    // Hide the second widget.
+    if (i == 1)
+      children[i]->Hide();
+  }
+
+  EXPECT_TRUE(test::WidgetTest::IsWindowStackedAbove(children[2].get(),
+                                                     children[0].get()));
+
+  ShowWidget(children[1]);
+  EXPECT_TRUE(test::WidgetTest::IsWindowStackedAbove(children[1].get(),
+                                                     children[0].get()));
+  EXPECT_TRUE(test::WidgetTest::IsWindowStackedAbove(children[2].get(),
+                                                     children[1].get()));
+}
+
 // TODO(crbug.com/1333445): We should also test NativeWidgetType::kDesktop,
 // but currently IsWindowStackedAbove() does not work for desktop widgets.
 INSTANTIATE_TEST_SUITE_P(
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/GmsBridge.java b/weblayer/browser/java/org/chromium/weblayer_private/GmsBridge.java
index acdaaae..f469d340 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/GmsBridge.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/GmsBridge.java
@@ -12,10 +12,11 @@
 import androidx.annotation.Nullable;
 
 import org.chromium.base.Callback;
-import org.chromium.base.Consumer;
 import org.chromium.base.ThreadUtils;
 import org.chromium.components.metrics.AndroidMetricsLogUploader;
 
+import java.util.function.Consumer;
+
 /**
  * This class manages functionality related to Google Mobile Services (i.e. GMS).
  * Platform specific implementations are provided in GmsBridgeImpl.java.
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java b/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java
index efa05c9..7a6ba3d 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java
@@ -77,6 +77,11 @@
     }
 
     @Override
+    public boolean isPrivacySandboxSettings4Enabled() {
+        return false;
+    }
+
+    @Override
     public String getChannelIdForOrigin(String origin) {
         return null;
     }