diff --git a/DEPS b/DEPS
index 8e5ae552..67a321ee 100644
--- a/DEPS
+++ b/DEPS
@@ -297,11 +297,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'c5fb1f796056d9d6f7f72328d92f915fc6ca678d',
+  'skia_revision': '165567958e9c101ec1f7208a487cb0f8bb5138ed',
   # 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': '6850f6876e0046a78aaea1b27eaf1529baa5dd34',
+  'v8_revision': '7d9be475c493cb73f389c5e57dda16951a4e6dde',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
@@ -324,7 +324,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Fuchsia sdk
   # and whatever else without interference from each other.
-  'fuchsia_version': 'version:9.20220729.2.1',
+  'fuchsia_version': 'version:9.20220801.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.
@@ -348,7 +348,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
-  'freetype_revision': '284956b5b123125c814bb3841c6871ddfb0694a3',
+  'freetype_revision': '9de432f7f2989a6ad13024404b2290c529a82858',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
@@ -368,7 +368,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': '7e701fa6365e481bb9090ecd351c8f3cca8ee944',
+  'catapult_revision': 'c3f526a3a19ebeee9541f3fa3dc69bf8716d2bfe',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -376,7 +376,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '76907662f73c1c79f3b10df57bf5862a5aeaecbd',
+  'devtools_frontend_revision': '513bcd34bff66e3260339c1f818373eab79762f1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -412,7 +412,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': 'a4038bb1fda9b3e5b74619a37c07551af485539b',
+  'dawn_revision': '9c4d0c941038f14c400f99a4952ae0d84ed73817',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -480,7 +480,7 @@
 
   # If you change this, also update the libc++ revision in
   # //buildtools/deps_revisions.gni.
-  'libcxx_revision':       '253791a5ba1afef6f94d739e89c726c48169b1da',
+  'libcxx_revision':       'e3598c2dc07b5a5320fd3fedb8a4afaa95f09142',
 
   # GN CIPD package version.
   'gn_version': 'git_revision:9ef321772ecc161937db69acb346397e0ccc484d',
@@ -773,7 +773,7 @@
     Var('chromium_git') + '/external/github.com/toji/webvr.info.git' + '@' + 'c58ae99b9ff9e2aa4c524633519570bf33536248',
 
   'src/docs/website': {
-    'url': Var('chromium_git') + '/website.git' + '@' + '9acd9d4be76f91745bb81f4708263c18d6122b2b',
+    'url': Var('chromium_git') + '/website.git' + '@' + '09b140c6a48a60dfe20e02508b15fffbfd8df413',
   },
 
   'src/ios/third_party/earl_grey2/src': {
@@ -792,7 +792,7 @@
   },
 
   'src/ios/third_party/material_components_ios/src': {
-      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '0937378683bd95ffda6ac42074922c2301f7d703',
+      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '9ff4459c2738fed6a8248a6aaafa595883093967',
       'condition': 'checkout_ios',
   },
 
@@ -862,7 +862,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': 'czYebV_n1tNlVdV4HSb93xjAusPeFBRcdY54_sqOPJsC',
+          'version': 'so7fQjzsdMnmkZ1KUa3YgZtdVWWooqKCF8Tvjn23Br4C',
         },
       ],
       'dep_type': 'cipd',
@@ -873,7 +873,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'Fhr6IfIGWNhmuHmWR1np_4MS6foHLaK4Z3_wV4YUEWwC',
+          'version': 'fFGsLRCZBNglqTsAT2gXh9Rb8VmVcJQ-Ov5rHf0z3y0C',
         },
       ],
       'dep_type': 'cipd',
@@ -884,7 +884,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': 'Y-cRUxFB_SkXm3V_suD2v1dxmTibEFK84G9m2WNwyJ0C',
+          'version': 'Vs5iH5yfOO6rqyAdVKvUAbFpeaXJoip69qKTKtKCauwC',
         },
       ],
       'dep_type': 'cipd',
@@ -1573,7 +1573,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '01993ba7f5a26a65af195c874e8a8ee3ca030fda',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'f8af68b97235247620b9b52d2c3369192684214f',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1732,7 +1732,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '94fd83896c67bb1a995337c501bbed02bd63361f',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '195b7ded1589960b14f37ddc3d2054fdc7c235b6',
+    Var('webrtc_git') + '/src.git' + '@' + '0832e3260da80a05db265bb83fd0d0715561bf13',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1857,7 +1857,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'E9AMcZslwJcItvPfA5YPOz8PjcwjzMtLQ-y7HGKgaEUC',
+        'version': '_FCQyKBzKZj5RznB5PCT09KDtwRx4bBASWVSV45dv04C',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/browser/gfx/hardware_renderer.cc b/android_webview/browser/gfx/hardware_renderer.cc
index 19ab334..4805564a 100644
--- a/android_webview/browser/gfx/hardware_renderer.cc
+++ b/android_webview/browser/gfx/hardware_renderer.cc
@@ -21,7 +21,7 @@
 namespace android_webview {
 
 namespace {
-enum WebViewDrawAndSubmissionType {
+enum WebViewDrawAndSubmissionType : uint8_t {
   // These values are persisted to logs. Entries should not be renumbered and
   // numeric values should never be reused.
   kNoInvalidateNoSubmissionSameParams = 0,
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
index 5da63511..3a4aa9f1 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
@@ -509,15 +509,13 @@
                 "Android.WebView.Startup.CreationTime.Stage1.FactoryInit",
                 SystemClock.uptimeMillis() - startTime);
 
-        /* TODO(torne): re-enable this once the API change is sorted out
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
-            // TODO: Use the framework constants as indices in timestamps array.
-            startTime = mWebViewDelegate.getTimestamps()[0];
+            final long webviewLoadStart =
+                    mWebViewDelegate.getStartupTimestamps().getWebViewLoadStart();
             RecordHistogram.recordTimesHistogram(
                     "Android.WebView.Startup.CreationTime.TotalFactoryInitTime",
-                    SystemClock.uptimeMillis() - startTime);
+                    SystemClock.uptimeMillis() - webviewLoadStart);
         }
-        */
     }
 
     // These values are persisted to logs. Entries should not be renumbered and
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 46b7026..7466a11 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
@@ -155,6 +155,8 @@
             Flag.baseFeature(AutofillFeatures.AUTOFILL_ACROSS_IFRAMES,
                     "Enable Autofill for frame-transcending forms (forms whose fields live in "
                             + "different frames)."),
+            Flag.baseFeature(AutofillFeatures.AUTOFILL_ENABLE_DEPENDENT_LOCALITY_PARSING,
+                    "Enables parsing dependent locality fields (e.g. Bairros in Brazil)."),
             Flag.baseFeature(AutofillFeatures.AUTOFILL_ENABLE_RANKING_FORMULA,
                     "Enables new autofill suggestion ranking formula"),
             Flag.baseFeature(AutofillFeatures.AUTOFILL_ENABLE_SUPPORT_FOR_MORE_STRUCTURE_IN_NAMES,
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/devui/DeveloperUiTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/devui/DeveloperUiTest.java
index 3047979..5637014 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/devui/DeveloperUiTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/devui/DeveloperUiTest.java
@@ -60,6 +60,7 @@
 import org.chromium.base.test.BaseActivityTestRule;
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.Feature;
+import org.chromium.ui.test.util.ViewUtils;
 
 /**
  * UI tests for general developer UI functionality. Significant subcomponents (ex. Fragments) may
@@ -79,6 +80,7 @@
 
     private void launchHomeFragment() {
         mRule.launchActivity(null);
+        ViewUtils.waitForView(withId(R.id.fragment_home));
 
         // Only start recording intents after launching the MainActivity.
         Intents.init();
@@ -89,6 +91,12 @@
                 .respondWith(new ActivityResult(Activity.RESULT_OK, null));
     }
 
+    private void openOptionsMenu() {
+        openActionBarOverflowOrOptionsMenu(
+                InstrumentationRegistry.getInstrumentation().getTargetContext());
+        ViewUtils.waitForView(withId(R.id.nav_menu_group));
+    }
+
     @Before
     public void setUp() {
         Context context = InstrumentationRegistry.getTargetContext();
@@ -132,6 +140,7 @@
 
         // HomeFragment -> CrashesListFragment
         onView(withId(R.id.navigation_crash_ui)).perform(click());
+        ViewUtils.waitForView(withId(R.id.fragment_crashes_list));
         onView(withId(R.id.fragment_home)).check(doesNotExist());
         onView(withId(R.id.fragment_crashes_list)).check(matches(isDisplayed()));
         onView(withId(R.id.navigation_home))
@@ -143,6 +152,7 @@
 
         // CrashesListFragment -> FlagsFragment
         onView(withId(R.id.navigation_flags_ui)).perform(click());
+        ViewUtils.waitForView(withId(R.id.fragment_flags));
         onView(withId(R.id.fragment_crashes_list)).check(doesNotExist());
         onView(withId(R.id.fragment_flags)).check(matches(isDisplayed()));
         onView(withId(R.id.navigation_home))
@@ -154,6 +164,7 @@
 
         // FlagsFragment -> HomeFragment
         onView(withId(R.id.navigation_home)).perform(click());
+        ViewUtils.waitForView(withId(R.id.fragment_home));
         onView(withId(R.id.fragment_flags)).check(doesNotExist());
         onView(withId(R.id.fragment_home)).check(matches(isDisplayed()));
         onView(withId(R.id.navigation_home))
@@ -173,8 +184,7 @@
 
         launchHomeFragment();
 
-        openActionBarOverflowOrOptionsMenu(
-                InstrumentationRegistry.getInstrumentation().getTargetContext());
+        openOptionsMenu();
         onView(withText("Change WebView Provider")).check(matches(isDisplayed()));
         onView(withText("Change WebView Provider")).perform(click());
         intended(IntentMatchers.hasAction(Settings.ACTION_WEBVIEW_SETTINGS));
@@ -189,8 +199,7 @@
 
         launchHomeFragment();
 
-        openActionBarOverflowOrOptionsMenu(
-                InstrumentationRegistry.getInstrumentation().getTargetContext());
+        openOptionsMenu();
         onView(withId(R.id.options_menu_switch_provider)).check(doesNotExist());
     }
 
@@ -200,9 +209,9 @@
     public void testMenuOptions_reportBug() throws Throwable {
         launchHomeFragment();
 
-        openActionBarOverflowOrOptionsMenu(
-                InstrumentationRegistry.getInstrumentation().getTargetContext());
+        openOptionsMenu();
 
+        ViewUtils.waitForView(withText("Report WebView Bug"));
         onView(withText("Report WebView Bug")).check(matches(isDisplayed()));
         onView(withText("Report WebView Bug")).perform(click());
         intended(allOf(IntentMatchers.hasAction(Intent.ACTION_VIEW),
@@ -231,8 +240,7 @@
                         IntentMatchers.hasData(hasParamWithValue("id", TEST_WEBVIEW_PACKAGE_NAME))))
                 .respondWith(new ActivityResult(Activity.RESULT_OK, null));
 
-        openActionBarOverflowOrOptionsMenu(
-                InstrumentationRegistry.getInstrumentation().getTargetContext());
+        openOptionsMenu();
         onView(withText("Check for WebView updates")).check(matches(isDisplayed()));
         onView(withText("Check for WebView updates")).perform(click());
 
@@ -248,8 +256,7 @@
     public void testMenuOptions_aboutDevTools() throws Throwable {
         launchHomeFragment();
 
-        openActionBarOverflowOrOptionsMenu(
-                InstrumentationRegistry.getInstrumentation().getTargetContext());
+        openOptionsMenu();
 
         onView(withText("About WebView DevTools")).check(matches(isDisplayed()));
         onView(withText("About WebView DevTools")).perform(click());
@@ -266,8 +273,7 @@
     public void testMenuOptions_components() throws Throwable {
         launchHomeFragment();
 
-        openActionBarOverflowOrOptionsMenu(
-                InstrumentationRegistry.getInstrumentation().getTargetContext());
+        openOptionsMenu();
 
         onView(withText("Components")).check(matches(isDisplayed()));
         onView(withText("Components")).perform(click());
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 1b92eb2..f845191 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -789,7 +789,6 @@
     "public/cpp/event_rewriter_controller.h",
     "public/cpp/multi_user_window_manager.h",
     "public/cpp/multi_user_window_manager_delegate.h",
-    "public/cpp/multi_user_window_manager_observer.h",
     "public/cpp/overview_test_api.h",
     "public/cpp/shelf_config.h",
     "public/cpp/shelf_test_api.h",
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc
index 60d67850..18f4ce0 100644
--- a/ash/app_list/app_list_controller_impl.cc
+++ b/ash/app_list/app_list_controller_impl.cc
@@ -1342,16 +1342,6 @@
   // not record search result metrics for them.
   if (launched_from != AppListLaunchedFrom::kLaunchedFromSuggestionChip) {
     base::RecordAction(base::UserMetricsAction("AppList_OpenSearchResult"));
-
-    UMA_HISTOGRAM_COUNTS_100("Apps.AppListSearchQueryLength",
-                             GetLastQueryLength());
-    if (IsTabletMode()) {
-      UMA_HISTOGRAM_COUNTS_100("Apps.AppListSearchQueryLength.TabletMode",
-                               GetLastQueryLength());
-    } else {
-      UMA_HISTOGRAM_COUNTS_100("Apps.AppListSearchQueryLength.ClamshellMode",
-                               GetLastQueryLength());
-    }
   }
 
   if (client_) {
@@ -2072,13 +2062,6 @@
          app_list_page_ != AppListState::kStateEmbeddedAssistant;
 }
 
-int AppListControllerImpl::GetLastQueryLength() {
-  std::u16string query;
-  base::TrimWhitespace(GetSearchModel()->search_box()->text(), base::TRIM_ALL,
-                       &query);
-  return query.length();
-}
-
 void AppListControllerImpl::Shutdown() {
   DCHECK(!is_shutdown_);
   is_shutdown_ = true;
diff --git a/ash/app_list/app_list_controller_impl.h b/ash/app_list/app_list_controller_impl.h
index 9b47559..167380d 100644
--- a/ash/app_list/app_list_controller_impl.h
+++ b/ash/app_list/app_list_controller_impl.h
@@ -408,9 +408,6 @@
   // `animate` - whether the transition should be animated.
   void UpdateForOverviewModeChange(bool show_home_launcher, bool animate);
 
-  // Returns the length of the most recent query.
-  int GetLastQueryLength();
-
   // Shuts down the AppListControllerImpl, removing itself as an observer.
   void Shutdown();
 
diff --git a/ash/app_list/app_list_metrics.h b/ash/app_list/app_list_metrics.h
index 5075b34..d0a9f51 100644
--- a/ash/app_list/app_list_metrics.h
+++ b/ash/app_list/app_list_metrics.h
@@ -79,7 +79,7 @@
 // The different ways the app list can be shown. These values are written to
 // logs.  New enum values can be added, but existing enums must never be
 // renumbered or deleted and reused.
-enum AppListShowSource {
+enum AppListShowSource : uint8_t {
   kSearchKey = 0,
   kShelfButton = 1,
   kSwipeFromShelf = 2,
diff --git a/ash/app_list/model/search/search_result.h b/ash/app_list/model/search/search_result.h
index a1d10be..668f1e2 100644
--- a/ash/app_list/model/search/search_result.h
+++ b/ash/app_list/model/search/search_result.h
@@ -167,6 +167,13 @@
     metadata_->is_recommendation = is_recommendation;
   }
 
+  bool skip_update_animation() const {
+    return metadata_->skip_update_animation;
+  }
+  void set_skip_update_animation(bool skip_update_animation) {
+    metadata_->skip_update_animation = skip_update_animation;
+  }
+
   bool use_badge_icon_background() const {
     return metadata_->use_badge_icon_background;
   }
diff --git a/ash/app_list/views/app_list_bubble_apps_page.cc b/ash/app_list/views/app_list_bubble_apps_page.cc
index f906002..a0c4520e 100644
--- a/ash/app_list/views/app_list_bubble_apps_page.cc
+++ b/ash/app_list/views/app_list_bubble_apps_page.cc
@@ -445,6 +445,8 @@
 void AppListBubbleAppsPage::DisableFocusForShowingActiveFolder(bool disabled) {
   continue_section_->DisableFocusForShowingActiveFolder(disabled);
   recent_apps_->DisableFocusForShowingActiveFolder(disabled);
+  if (toast_container_)
+    toast_container_->DisableFocusForShowingActiveFolder(disabled);
   scrollable_apps_grid_view_->DisableFocusForShowingActiveFolder(disabled);
 }
 
diff --git a/ash/app_list/views/app_list_bubble_view_unittest.cc b/ash/app_list/views/app_list_bubble_view_unittest.cc
index 31dd494..96337235 100644
--- a/ash/app_list/views/app_list_bubble_view_unittest.cc
+++ b/ash/app_list/views/app_list_bubble_view_unittest.cc
@@ -1301,6 +1301,13 @@
   AddFolderWithApps(3);
   ShowAppList();
 
+  // Force the sorting toast to show.
+  AppListController::Get()->UpdateAppListWithNewTemporarySortOrder(
+      AppListSortOrder::kColor,
+      /*animate=*/false, /*update_position_closure=*/base::OnceClosure());
+  ASSERT_TRUE(GetToastContainerView()->GetToastButton());
+
+  // Open the folder.
   AppListItemView* folder_item = GetAppsGridView()->GetItemViewAt(0);
   LeftClickOn(folder_item);
 
@@ -1327,6 +1334,12 @@
   AddFolderWithApps(5);
   ShowAppList();
 
+  // Force the sorting toast to show.
+  AppListController::Get()->UpdateAppListWithNewTemporarySortOrder(
+      AppListSortOrder::kColor,
+      /*animate=*/false, /*update_position_closure=*/base::OnceClosure());
+  ASSERT_TRUE(GetToastContainerView()->GetToastButton());
+
   // Open the folder.
   AppListItemView* folder_item = GetAppsGridView()->GetItemViewAt(0);
   LeftClickOn(folder_item);
@@ -1340,6 +1353,9 @@
   auto* recent_apps = GetRecentAppsView();
   EXPECT_TRUE(recent_apps->GetViewAccessibility().IsIgnored());
   EXPECT_TRUE(recent_apps->GetViewAccessibility().IsLeaf());
+  auto* toast_container = GetToastContainerView();
+  EXPECT_TRUE(toast_container->GetViewAccessibility().IsIgnored());
+  EXPECT_TRUE(toast_container->GetViewAccessibility().IsLeaf());
   auto* apps_grid = GetAppsGridView();
   EXPECT_TRUE(apps_grid->GetViewAccessibility().IsIgnored());
   EXPECT_TRUE(apps_grid->GetViewAccessibility().IsLeaf());
@@ -1353,6 +1369,8 @@
   EXPECT_FALSE(continue_section->GetViewAccessibility().IsLeaf());
   EXPECT_FALSE(recent_apps->GetViewAccessibility().IsIgnored());
   EXPECT_FALSE(recent_apps->GetViewAccessibility().IsLeaf());
+  EXPECT_FALSE(toast_container->GetViewAccessibility().IsIgnored());
+  EXPECT_FALSE(toast_container->GetViewAccessibility().IsLeaf());
   EXPECT_FALSE(apps_grid->GetViewAccessibility().IsIgnored());
   EXPECT_FALSE(apps_grid->GetViewAccessibility().IsLeaf());
 }
diff --git a/ash/app_list/views/app_list_toast_container_view.cc b/ash/app_list/views/app_list_toast_container_view.cc
index 33dfc298..2c152f5 100644
--- a/ash/app_list/views/app_list_toast_container_view.cc
+++ b/ash/app_list/views/app_list_toast_container_view.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "ash/app_list/app_list_model_provider.h"
+#include "ash/app_list/app_list_util.h"
 #include "ash/app_list/app_list_view_delegate.h"
 #include "ash/app_list/views/app_list_a11y_announcer.h"
 #include "ash/app_list/views/app_list_keyboard_controller.h"
@@ -119,6 +120,17 @@
   return false;
 }
 
+void AppListToastContainerView::DisableFocusForShowingActiveFolder(
+    bool disabled) {
+  if (auto* toast_button = GetToastButton())
+    toast_button->SetEnabled(!disabled);
+  if (auto* close_button = GetCloseButton())
+    close_button->SetEnabled(!disabled);
+
+  // Prevent items from being accessed by ChromeVox.
+  SetViewIgnoredForAccessibility(this, disabled);
+}
+
 void AppListToastContainerView::MaybeUpdateReorderNudgeView() {
   // If the expect state in `nudge_controller_` is different from the one in
   // toast container, update the actual reorder nudge view in the toast
diff --git a/ash/app_list/views/app_list_toast_container_view.h b/ash/app_list/views/app_list_toast_container_view.h
index c4f5b699574..bba58c12 100644
--- a/ash/app_list/views/app_list_toast_container_view.h
+++ b/ash/app_list/views/app_list_toast_container_view.h
@@ -69,6 +69,9 @@
   // RecentAppsView.
   bool HandleFocus(int column);
 
+  // Disables focus when a folder is open.
+  void DisableFocusForShowingActiveFolder(bool disabled);
+
   // Updates the toast container to show/hide the reorder nudge if needed.
   void MaybeUpdateReorderNudgeView();
 
diff --git a/ash/app_list/views/app_list_view_unittest.cc b/ash/app_list/views/app_list_view_unittest.cc
index fc6c3de..57cb329 100644
--- a/ash/app_list/views/app_list_view_unittest.cc
+++ b/ash/app_list/views/app_list_view_unittest.cc
@@ -25,7 +25,6 @@
 #include "ash/app_list/views/apps_grid_view.h"
 #include "ash/app_list/views/apps_grid_view_test_api.h"
 #include "ash/app_list/views/contents_view.h"
-#include "ash/app_list/views/continue_section_view.h"
 #include "ash/app_list/views/expand_arrow_view.h"
 #include "ash/app_list/views/folder_background_view.h"
 #include "ash/app_list/views/folder_header_view.h"
@@ -69,7 +68,6 @@
 #include "ui/display/screen.h"
 #include "ui/events/event_utils.h"
 #include "ui/events/keycodes/keyboard_codes.h"
-#include "ui/views/accessibility/view_accessibility.h"
 #include "ui/views/controls/textfield/textfield.h"
 #include "ui/views/test/views_test_base.h"
 #include "ui/views/view_model.h"
@@ -1368,52 +1366,6 @@
                      ui::VKEY_LEFT, false);
 }
 
-TEST_F(AppListViewFocusTest, OpeningFolderRemovesOtherViewsFromAccessibility) {
-  Show();
-
-  // Transition to FULLSCREEN_ALL_APPS state and open the folder.
-  SetAppListState(ash::AppListViewState::kFullscreenAllApps);
-  folder_item_view()->RequestFocus();
-  SimulateKeyPress(ui::VKEY_RETURN, false);
-  auto* apps_container_view = contents_view()->apps_container_view();
-  ASSERT_TRUE(apps_container_view->IsInFolderView());
-
-  // Note: For fullscreen app list, the search box is part of the focus cycle
-  // when a folder is open.
-  // ProductivityLauncher uses recent apps and continue section.
-  auto* recent_apps_view = apps_container_view->GetRecentAppsView();
-  auto* continue_section_view = apps_container_view->GetContinueSectionView();
-  // Non-ProductivityLauncher uses suggestion chips.
-  auto* suggestion_chip_container =
-      apps_container_view->suggestion_chip_container_view_for_test();
-  if (features::IsProductivityLauncherEnabled()) {
-    EXPECT_TRUE(recent_apps_view->GetViewAccessibility().IsIgnored());
-    EXPECT_TRUE(recent_apps_view->GetViewAccessibility().IsLeaf());
-    EXPECT_TRUE(continue_section_view->GetViewAccessibility().IsIgnored());
-    EXPECT_TRUE(continue_section_view->GetViewAccessibility().IsLeaf());
-  } else {
-    EXPECT_TRUE(suggestion_chip_container->GetViewAccessibility().IsIgnored());
-    EXPECT_TRUE(suggestion_chip_container->GetViewAccessibility().IsLeaf());
-  }
-  EXPECT_TRUE(apps_grid_view()->GetViewAccessibility().IsIgnored());
-  EXPECT_TRUE(apps_grid_view()->GetViewAccessibility().IsLeaf());
-
-  // Close the folder.
-  SimulateKeyPress(ui::VKEY_ESCAPE, false);
-
-  if (features::IsProductivityLauncherEnabled()) {
-    EXPECT_FALSE(recent_apps_view->GetViewAccessibility().IsIgnored());
-    EXPECT_FALSE(recent_apps_view->GetViewAccessibility().IsLeaf());
-    EXPECT_FALSE(continue_section_view->GetViewAccessibility().IsIgnored());
-    EXPECT_FALSE(continue_section_view->GetViewAccessibility().IsLeaf());
-  } else {
-    EXPECT_FALSE(suggestion_chip_container->GetViewAccessibility().IsIgnored());
-    EXPECT_FALSE(suggestion_chip_container->GetViewAccessibility().IsLeaf());
-  }
-  EXPECT_FALSE(apps_grid_view()->GetViewAccessibility().IsIgnored());
-  EXPECT_FALSE(apps_grid_view()->GetViewAccessibility().IsLeaf());
-}
-
 // Tests the vertical focus traversal by in PEEKING state.
 TEST_P(AppListViewPeekingFocusTest, VerticalFocusTraversalInPeekingState) {
   Show();
diff --git a/ash/app_list/views/apps_container_view.cc b/ash/app_list/views/apps_container_view.cc
index 81d6107..2a533c20 100644
--- a/ash/app_list/views/apps_container_view.cc
+++ b/ash/app_list/views/apps_container_view.cc
@@ -1580,6 +1580,9 @@
   if (auto* continue_section = GetContinueSectionView(); continue_section) {
     continue_section->DisableFocusForShowingActiveFolder(disabled);
   }
+  if (toast_container_) {
+    toast_container_->DisableFocusForShowingActiveFolder(disabled);
+  }
   apps_grid_view_->DisableFocusForShowingActiveFolder(disabled);
 
   // Ignore the page switcher in accessibility tree so that buttons inside it
diff --git a/ash/app_list/views/apps_container_view_unittest.cc b/ash/app_list/views/apps_container_view_unittest.cc
index 165f6bd..1a40b461ae 100644
--- a/ash/app_list/views/apps_container_view_unittest.cc
+++ b/ash/app_list/views/apps_container_view_unittest.cc
@@ -5,6 +5,7 @@
 #include "ash/app_list/views/apps_container_view.h"
 
 #include "ash/app_list/app_list_controller_impl.h"
+#include "ash/app_list/model/app_list_test_model.h"
 #include "ash/app_list/test/app_list_test_helper.h"
 #include "ash/app_list/views/continue_section_view.h"
 #include "ash/app_list/views/recent_apps_view.h"
@@ -19,6 +20,7 @@
 #include "ui/compositor/layer_animator.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/events/test/event_generator.h"
+#include "ui/views/accessibility/view_accessibility.h"
 #include "ui/views/controls/textfield/textfield.h"
 
 namespace ash {
@@ -33,6 +35,25 @@
   }
   ~AppsContainerViewTest() override = default;
 
+  // testing::Test:
+  void SetUp() override {
+    AshTestBase::SetUp();
+    app_list_test_model_ = std::make_unique<test::AppListTestModel>();
+    search_model_ = std::make_unique<SearchModel>();
+    Shell::Get()->app_list_controller()->SetActiveModel(
+        /*profile_id=*/1, app_list_test_model_.get(), search_model_.get());
+  }
+
+  void AddFolderWithApps(int count) {
+    app_list_test_model_->CreateAndPopulateFolderWithApps(count);
+  }
+
+  AppListToastContainerView* GetToastContainerView() {
+    return GetAppListTestHelper()
+        ->GetAppsContainerView()
+        ->GetToastContainerView();
+  }
+
   void PressDown() {
     ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
     generator.PressAndReleaseKey(ui::KeyboardCode::VKEY_DOWN);
@@ -47,6 +68,8 @@
 
  private:
   base::test::ScopedFeatureList features_;
+  std::unique_ptr<test::AppListTestModel> app_list_test_model_;
+  std::unique_ptr<SearchModel> search_model_;
 };
 
 TEST_F(AppsContainerViewTest, ContinueSectionVisibleByDefault) {
@@ -205,6 +228,52 @@
       ui::LayerAnimationElement::TRANSFORM));
 }
 
+TEST_F(AppsContainerViewTest, OpeningFolderRemovesOtherViewsFromAccessibility) {
+  auto* helper = GetAppListTestHelper();
+  helper->AddContinueSuggestionResults(4);
+  helper->AddRecentApps(5);
+  AddFolderWithApps(5);
+  TabletMode::Get()->SetEnabledForTest(true);
+
+  // Force the sorting toast to show.
+  AppListController::Get()->UpdateAppListWithNewTemporarySortOrder(
+      AppListSortOrder::kColor,
+      /*animate=*/false, /*update_position_closure=*/base::OnceClosure());
+  ASSERT_TRUE(GetToastContainerView()->GetToastButton());
+
+  // Open the folder.
+  AppListItemView* folder_item =
+      helper->GetRootPagedAppsGridView()->GetItemViewAt(0);
+  LeftClickOn(folder_item);
+
+  // Note: For fullscreen app list, the search box is part of the focus cycle
+  // when a folder is open.
+  auto* continue_section = helper->GetFullscreenContinueSectionView();
+  EXPECT_TRUE(continue_section->GetViewAccessibility().IsIgnored());
+  EXPECT_TRUE(continue_section->GetViewAccessibility().IsLeaf());
+  auto* recent_apps = helper->GetFullscreenRecentAppsView();
+  EXPECT_TRUE(recent_apps->GetViewAccessibility().IsIgnored());
+  EXPECT_TRUE(recent_apps->GetViewAccessibility().IsLeaf());
+  auto* toast_container = GetToastContainerView();
+  EXPECT_TRUE(toast_container->GetViewAccessibility().IsIgnored());
+  EXPECT_TRUE(toast_container->GetViewAccessibility().IsLeaf());
+  auto* apps_grid_view = helper->GetRootPagedAppsGridView();
+  EXPECT_TRUE(apps_grid_view->GetViewAccessibility().IsIgnored());
+  EXPECT_TRUE(apps_grid_view->GetViewAccessibility().IsLeaf());
+
+  // Close the folder.
+  PressAndReleaseKey(ui::VKEY_ESCAPE);
+
+  EXPECT_FALSE(continue_section->GetViewAccessibility().IsIgnored());
+  EXPECT_FALSE(continue_section->GetViewAccessibility().IsLeaf());
+  EXPECT_FALSE(recent_apps->GetViewAccessibility().IsIgnored());
+  EXPECT_FALSE(recent_apps->GetViewAccessibility().IsLeaf());
+  EXPECT_FALSE(toast_container->GetViewAccessibility().IsIgnored());
+  EXPECT_FALSE(toast_container->GetViewAccessibility().IsLeaf());
+  EXPECT_FALSE(apps_grid_view->GetViewAccessibility().IsIgnored());
+  EXPECT_FALSE(apps_grid_view->GetViewAccessibility().IsLeaf());
+}
+
 TEST_F(AppsContainerViewTest, UpdatesSelectedPageAfterFocusTraversal) {
   auto* helper = GetAppListTestHelper();
   helper->AddRecentApps(5);
diff --git a/ash/display/display_prefs.cc b/ash/display/display_prefs.cc
index 990d389e..245fdce 100644
--- a/ash/display/display_prefs.cc
+++ b/ash/display/display_prefs.cc
@@ -199,8 +199,7 @@
   display::DisplayLayoutStore* layout_store =
       GetDisplayManager()->layout_store();
 
-  const base::Value* layouts = local_state->Get(prefs::kSecondaryDisplays);
-  for (const auto it : layouts->DictItems()) {
+  for (const auto it : local_state->GetValueDict(prefs::kSecondaryDisplays)) {
     std::unique_ptr<display::DisplayLayout> layout(new display::DisplayLayout);
     if (!display::JsonToDisplayLayout(it.second, layout.get())) {
       LOG(WARNING) << "Invalid preference value for " << it.first;
@@ -225,8 +224,7 @@
 }
 
 void LoadDisplayProperties(PrefService* local_state) {
-  const base::Value* properties = local_state->Get(prefs::kDisplayProperties);
-  for (const auto it : properties->DictItems()) {
+  for (const auto it : local_state->GetValueDict(prefs::kDisplayProperties)) {
     const base::DictionaryValue* dict_value = nullptr;
     if (!it.second.GetAsDictionary(&dict_value) || dict_value == nullptr)
       continue;
@@ -279,30 +277,24 @@
 }
 
 void LoadDisplayRotationState(PrefService* local_state) {
-  const base::Value* properties = local_state->Get(prefs::kDisplayRotationLock);
-  DCHECK(properties->is_dict());
-  const base::Value* rotation_lock =
-      properties->FindKeyOfType("lock", base::Value::Type::BOOLEAN);
+  const base::Value::Dict& properties =
+      local_state->GetValueDict(prefs::kDisplayRotationLock);
+  const absl::optional<bool> rotation_lock = properties.FindBool("lock");
   if (!rotation_lock)
     return;
 
-  const base::Value* rotation =
-      properties->FindKeyOfType("orientation", base::Value::Type::INTEGER);
+  const absl::optional<int> rotation = properties.FindInt("orientation");
   if (!rotation)
     return;
 
   GetDisplayManager()->RegisterDisplayRotationProperties(
-      rotation_lock->GetBool(),
-      static_cast<display::Display::Rotation>(rotation->GetInt()));
+      *rotation_lock, static_cast<display::Display::Rotation>(*rotation));
 }
 
 void LoadDisplayTouchAssociations(PrefService* local_state) {
-  const base::Value* properties =
-      local_state->Get(prefs::kDisplayTouchAssociations);
-  DCHECK(properties->is_dict());
-
   display::TouchDeviceManager::TouchAssociationMap touch_associations;
-  for (const auto item : properties->DictItems()) {
+  for (const auto item :
+       local_state->GetValueDict(prefs::kDisplayTouchAssociations)) {
     uint32_t identifier_raw;
     if (!base::StringToUint(item.first, &identifier_raw))
       continue;
@@ -338,8 +330,7 @@
   // a couple of milestones when everything is stable.
   const display::TouchDeviceIdentifier& fallback_identifier =
       display::TouchDeviceIdentifier::GetFallbackTouchDeviceIdentifier();
-  properties = local_state->Get(prefs::kDisplayProperties);
-  for (const auto it : properties->DictItems()) {
+  for (const auto it : local_state->GetValueDict(prefs::kDisplayProperties)) {
     const base::DictionaryValue* dict_value = nullptr;
     if (!it.second.GetAsDictionary(&dict_value) || dict_value == nullptr)
       continue;
@@ -366,9 +357,9 @@
   }
 
   // Retrieve port association information.
-  properties = local_state->Get(prefs::kDisplayTouchPortAssociations);
   display::TouchDeviceManager::PortAssociationMap port_associations;
-  for (const auto item : properties->DictItems()) {
+  for (const auto item :
+       local_state->GetValueDict(prefs::kDisplayTouchPortAssociations)) {
     // Retrieve the secondary id that identifies the port.
     uint32_t secondary_id_raw;
     if (!base::StringToUint(item.first, &secondary_id_raw))
@@ -866,7 +857,7 @@
 
   // Restore DisplayPowerState:
   const std::string value =
-      local_state_->Get(prefs::kDisplayPowerState)->GetString();
+      local_state_->GetValue(prefs::kDisplayPowerState).GetString();
   chromeos::DisplayPowerState power_state;
   if (GetDisplayPowerStateFromString(value, &power_state))
     Shell::Get()->display_configurator()->SetInitialDisplayPower(power_state);
diff --git a/ash/multi_user/multi_user_window_manager_impl.cc b/ash/multi_user/multi_user_window_manager_impl.cc
index 1c910880..8641d768 100644
--- a/ash/multi_user/multi_user_window_manager_impl.cc
+++ b/ash/multi_user/multi_user_window_manager_impl.cc
@@ -10,7 +10,6 @@
 #include "ash/media/media_controller_impl.h"
 #include "ash/multi_user/user_switch_animator.h"
 #include "ash/public/cpp/multi_user_window_manager_delegate.h"
-#include "ash/public/cpp/multi_user_window_manager_observer.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
@@ -133,11 +132,6 @@
   return g_instance;
 }
 
-void MultiUserWindowManagerImpl::OnDidSwitchActiveAccount() {
-  for (MultiUserWindowManagerObserver& observer : observers_)
-    observer.OnUserSwitchAnimationFinished();
-}
-
 void MultiUserWindowManagerImpl::SetWindowOwner(aura::Window* window,
                                                 const AccountId& account_id) {
   // Make sure the window is valid and there was no owner yet.
@@ -234,16 +228,6 @@
   return current_account_id_;
 }
 
-void MultiUserWindowManagerImpl::AddObserver(
-    MultiUserWindowManagerObserver* observer) {
-  observers_.AddObserver(observer);
-}
-
-void MultiUserWindowManagerImpl::RemoveObserver(
-    MultiUserWindowManagerObserver* observer) {
-  observers_.RemoveObserver(observer);
-}
-
 bool MultiUserWindowManagerImpl::IsWindowOnDesktopOfUser(
     aura::Window* window,
     const AccountId& account_id) const {
diff --git a/ash/multi_user/multi_user_window_manager_impl.h b/ash/multi_user/multi_user_window_manager_impl.h
index 3f6d724..56434a6 100644
--- a/ash/multi_user/multi_user_window_manager_impl.h
+++ b/ash/multi_user/multi_user_window_manager_impl.h
@@ -68,9 +68,6 @@
 
   static MultiUserWindowManagerImpl* Get();
 
-  // Called when the active account change is complete.
-  void OnDidSwitchActiveAccount();
-
   // MultiUserWindowManager:
   void SetWindowOwner(aura::Window* window,
                       const AccountId& account_id) override;
@@ -82,8 +79,6 @@
   const AccountId& GetUserPresentingWindow(
       const aura::Window* window) const override;
   const AccountId& CurrentAccountId() const override;
-  void AddObserver(MultiUserWindowManagerObserver* observer) override;
-  void RemoveObserver(MultiUserWindowManagerObserver* observer) override;
 
   // SessionObserver:
   void OnActiveUserSessionChanged(const AccountId& account_id) override;
@@ -233,8 +228,6 @@
 
   // The animation between users.
   std::unique_ptr<UserSwitchAnimator> animation_;
-
-  base::ObserverList<MultiUserWindowManagerObserver>::Unchecked observers_;
 };
 
 }  // namespace ash
diff --git a/ash/multi_user/user_switch_animator.cc b/ash/multi_user/user_switch_animator.cc
index a8bba5a0..e67aac8 100644
--- a/ash/multi_user/user_switch_animator.cc
+++ b/ash/multi_user/user_switch_animator.cc
@@ -148,7 +148,6 @@
     case ANIMATION_STEP_FINALIZE:
       user_changed_animation_timer_.reset();
       animation_step_ = ANIMATION_STEP_ENDED;
-      owner_->OnDidSwitchActiveAccount();
       break;
     case ANIMATION_STEP_ENDED:
       NOTREACHED();
diff --git a/ash/projector/projector_annotation_tray.cc b/ash/projector/projector_annotation_tray.cc
index fb8b8ae2..38b943a 100644
--- a/ash/projector/projector_annotation_tray.cc
+++ b/ash/projector/projector_annotation_tray.cc
@@ -189,6 +189,10 @@
       gfx::Insets::TLBR(0, 0, kPaddingBetweenBottomAndLastTrayItem, 0)));
 
   auto setup_layered_view = [](views::View* view) {
+    // In dark light mode, we switch TrayBubbleView to use a textured layer
+    // instead of solid color layer, so no need to create an extra layer here.
+    if (features::IsDarkLightModeEnabled())
+      return;
     view->SetPaintToLayer();
     view->layer()->SetFillsBoundsOpaquely(false);
   };
diff --git a/ash/public/cpp/app_list/app_list_types.h b/ash/public/cpp/app_list/app_list_types.h
index 5393d25..67ac2c0 100644
--- a/ash/public/cpp/app_list/app_list_types.h
+++ b/ash/public/cpp/app_list/app_list_types.h
@@ -703,6 +703,9 @@
   // Whether this result is a recommendation.
   bool is_recommendation = false;
 
+  // Whether this result can have its update animation skipped.
+  bool skip_update_animation = false;
+
   // The icon of this result.
   SearchResultIconInfo icon;
 
diff --git a/ash/public/cpp/app_types_util.cc b/ash/public/cpp/app_types_util.cc
index 6187b8a..7b2e074 100644
--- a/ash/public/cpp/app_types_util.cc
+++ b/ash/public/cpp/app_types_util.cc
@@ -15,4 +15,9 @@
                        static_cast<int>(ash::AppType::ARC_APP);
 }
 
+bool IsLacrosWindow(const aura::Window* window) {
+  return window->GetProperty(aura::client::kAppType) ==
+         static_cast<int>(ash::AppType::LACROS);
+}
+
 }  // namespace ash
diff --git a/ash/public/cpp/app_types_util.h b/ash/public/cpp/app_types_util.h
index e360026..29490d00 100644
--- a/ash/public/cpp/app_types_util.h
+++ b/ash/public/cpp/app_types_util.h
@@ -13,9 +13,12 @@
 
 namespace ash {
 
-// Returns true if |window| is an ARC app window.
+// Returns true if `window` is an ARC app window.
 ASH_PUBLIC_EXPORT bool IsArcWindow(const aura::Window* window);
 
+// Returns true if `window` is a lacros window.
+ASH_PUBLIC_EXPORT bool IsLacrosWindow(const aura::Window* window);
+
 }  // namespace ash
 
 #endif  // ASH_PUBLIC_CPP_APP_TYPES_UTIL_H_
diff --git a/ash/public/cpp/holding_space/holding_space_constants.h b/ash/public/cpp/holding_space/holding_space_constants.h
index 0a71cca..a73a00d 100644
--- a/ash/public/cpp/holding_space/holding_space_constants.h
+++ b/ash/public/cpp/holding_space/holding_space_constants.h
@@ -37,17 +37,24 @@
 // Context menu commands.
 enum class HoldingSpaceCommandId {
   kMinValue = 1,  // NOTE: Zero is used when command id is unset.
-  kCancelItem = kMinValue,
-  kCopyImageToClipboard,
-  kHidePreviews,
+
+  // Core item commands.
+  kCopyImageToClipboard = kMinValue,
   kRemoveItem,
-  kResumeItem,
-  kPauseItem,
   kPinItem,
   kShowInFolder,
-  kShowPreviews,
   kUnpinItem,
-  kMaxValue = kUnpinItem,
+
+  // In-progress item commands.
+  kCancelItem,
+  kResumeItem,
+  kPauseItem,
+
+  // Tray commands.
+  kHidePreviews,
+  kShowPreviews,
+
+  kMaxValue = kShowPreviews,
 };
 
 // View IDs.
diff --git a/ash/public/cpp/holding_space/holding_space_item.cc b/ash/public/cpp/holding_space/holding_space_item.cc
index eb7c53e..6263b368 100644
--- a/ash/public/cpp/holding_space/holding_space_item.cc
+++ b/ash/public/cpp/holding_space/holding_space_item.cc
@@ -5,6 +5,7 @@
 #include "ash/public/cpp/holding_space/holding_space_item.h"
 
 #include "ash/public/cpp/holding_space/holding_space_image.h"
+#include "ash/public/cpp/holding_space/holding_space_util.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "base/json/values_util.h"
 #include "base/memory/ptr_util.h"
@@ -42,7 +43,7 @@
          secondary_text_ == rhs.secondary_text_ &&
          secondary_text_color_ == rhs.secondary_text_color_ &&
          *image_ == *rhs.image_ && progress_ == rhs.progress_ &&
-         paused_ == rhs.paused_;
+         in_progress_commands_ == rhs.in_progress_commands_;
 }
 
 // static
@@ -239,11 +240,23 @@
   progress_ = progress;
 
   if (progress_.IsComplete())
-    paused_ = false;
+    in_progress_commands_.clear();
 
   return true;
 }
 
+bool HoldingSpaceItem::SetInProgressCommands(
+    std::set<HoldingSpaceCommandId> in_progress_commands) {
+  DCHECK(std::all_of(in_progress_commands.begin(), in_progress_commands.end(),
+                     &holding_space_util::IsInProgressCommand));
+
+  if (progress_.IsComplete() || in_progress_commands_ == in_progress_commands)
+    return false;
+
+  in_progress_commands_ = in_progress_commands;
+  return true;
+}
+
 void HoldingSpaceItem::InvalidateImage() {
   if (image_)
     image_->Invalidate();
@@ -267,18 +280,6 @@
   }
 }
 
-bool HoldingSpaceItem::IsPaused() const {
-  return paused_;
-}
-
-bool HoldingSpaceItem::SetPaused(bool paused) {
-  if (paused_ == paused || progress_.IsComplete())
-    return false;
-
-  paused_ = paused;
-  return true;
-}
-
 HoldingSpaceItem::HoldingSpaceItem(Type type,
                                    const std::string& id,
                                    const base::FilePath& file_path,
diff --git a/ash/public/cpp/holding_space/holding_space_item.h b/ash/public/cpp/holding_space/holding_space_item.h
index 19df9f4f..dc718d7 100644
--- a/ash/public/cpp/holding_space/holding_space_item.h
+++ b/ash/public/cpp/holding_space/holding_space_item.h
@@ -6,9 +6,11 @@
 #define ASH_PUBLIC_CPP_HOLDING_SPACE_HOLDING_SPACE_ITEM_H_
 
 #include <memory>
+#include <set>
 #include <string>
 
 #include "ash/public/cpp/ash_public_export.h"
+#include "ash/public/cpp/holding_space/holding_space_constants.h"
 #include "ash/public/cpp/holding_space/holding_space_progress.h"
 #include "base/callback_forward.h"
 #include "base/callback_list.h"
@@ -143,6 +145,12 @@
   // concatenation of primary and secondary text.
   bool SetAccessibleName(const absl::optional<std::u16string>& accessible_name);
 
+  // Sets the commands for an in-progress item which are shown in the item's
+  // context menu and possibly, in the case of cancel/pause/resume, as primary/
+  // secondary actions on the item view itself.
+  bool SetInProgressCommands(
+      std::set<HoldingSpaceCommandId> in_progress_commands);
+
   // Sets the `progress_` of the item, returning `true` if a change occurred or
   // `false` to indicate no-op.
   // NOTE: Progress can only be updated for in progress items.
@@ -155,15 +163,6 @@
   // Returns true if this item is a screen capture.
   bool IsScreenCapture() const;
 
-  // Returns true if progress of this item is paused.
-  // NOTE: Only in-progress items can be paused.
-  bool IsPaused() const;
-
-  // Sets whether progress of this item is `paused_`, returning `true` if a
-  // change occurred or `false` to indicate no-op.
-  // NOTE: Only in-progress items can be paused.
-  bool SetPaused(bool paused);
-
   const std::string& id() const { return id_; }
 
   Type type() const { return type_; }
@@ -184,6 +183,10 @@
 
   const HoldingSpaceProgress& progress() const { return progress_; }
 
+  const std::set<HoldingSpaceCommandId>& in_progress_commands() const {
+    return in_progress_commands_;
+  }
+
   HoldingSpaceImage& image_for_testing() { return *image_; }
 
  private:
@@ -224,9 +227,10 @@
   // The progress of the item.
   HoldingSpaceProgress progress_;
 
-  // Whether or not progress of this item is paused.
-  // NOTE: Only in-progress items can be paused.
-  bool paused_ = false;
+  // The commands for an in-progress item which are shown in the item's context
+  // menu and possibly, in the case of cancel/pause/resume, as primary/secondary
+  // actions on the item's view itself.
+  std::set<HoldingSpaceCommandId> in_progress_commands_;
 
   // Mutable to allow const access from `AddDeletionCallback()`.
   mutable base::RepeatingClosureList deletion_callback_list_;
diff --git a/ash/public/cpp/holding_space/holding_space_item_unittest.cc b/ash/public/cpp/holding_space/holding_space_item_unittest.cc
index 5382af05..013e0c3 100644
--- a/ash/public/cpp/holding_space/holding_space_item_unittest.cc
+++ b/ash/public/cpp/holding_space/holding_space_item_unittest.cc
@@ -5,6 +5,7 @@
 #include "ash/public/cpp/holding_space/holding_space_item.h"
 
 #include <memory>
+#include <set>
 #include <vector>
 
 #include "ash/public/cpp/holding_space/holding_space_image.h"
@@ -118,8 +119,8 @@
             u"Primary text, Secondary text");
 }
 
-// Tests pause for each holding space item type.
-TEST_P(HoldingSpaceItemTest, Pause) {
+// Tests in-progress commands for each holding space item type.
+TEST_P(HoldingSpaceItemTest, InProgressCommands) {
   // Create an in-progress `holding_space_item`.
   auto holding_space_item = HoldingSpaceItem::CreateFileBackedItem(
       /*type=*/GetParam(), base::FilePath("file_path"),
@@ -127,28 +128,29 @@
       HoldingSpaceProgress(/*current_bytes=*/50, /*total_bytes=*/100),
       /*image_resolver=*/base::BindOnce(&CreateFakeHoldingSpaceImage));
 
-  // Initially items are not paused.
-  EXPECT_FALSE(holding_space_item->IsPaused());
+  // Initially commands are not set.
+  EXPECT_TRUE(holding_space_item->in_progress_commands().empty());
 
-  // It should be possible to update pause to a new value.
-  EXPECT_TRUE(holding_space_item->SetPaused(true));
-  EXPECT_TRUE(holding_space_item->IsPaused());
+  // It should be possible to update commands to a new value.
+  std::set<HoldingSpaceCommandId> in_progress_commands;
+  in_progress_commands.insert(HoldingSpaceCommandId::kCancelItem);
+  EXPECT_TRUE(holding_space_item->SetInProgressCommands(in_progress_commands));
+  EXPECT_EQ(holding_space_item->in_progress_commands(), in_progress_commands);
 
   // It should no-op to try to update pause to its existing value.
-  EXPECT_FALSE(holding_space_item->SetPaused(true));
-  EXPECT_TRUE(holding_space_item->IsPaused());
+  EXPECT_FALSE(holding_space_item->SetInProgressCommands(in_progress_commands));
+  EXPECT_EQ(holding_space_item->in_progress_commands(), in_progress_commands);
 
-  // Once progress has been marked completed, items are no longer paused.
+  // Once progress has been marked completed, commands are not set.
   EXPECT_TRUE(holding_space_item->SetProgress(
       HoldingSpaceProgress(/*current_bytes=*/100, /*total_bytes=*/100)));
   EXPECT_TRUE(holding_space_item->progress().IsComplete());
-  EXPECT_FALSE(holding_space_item->IsPaused());
+  EXPECT_TRUE(holding_space_item->in_progress_commands().empty());
 
-  // It should no-op to try to update pause for items which are not in-progress.
-  EXPECT_FALSE(holding_space_item->SetPaused(true));
-  EXPECT_FALSE(holding_space_item->IsPaused());
-  EXPECT_FALSE(holding_space_item->SetPaused(false));
-  EXPECT_FALSE(holding_space_item->IsPaused());
+  // It should no-op to try to update commands for items which are not
+  // in-progress.
+  EXPECT_FALSE(holding_space_item->SetInProgressCommands(in_progress_commands));
+  EXPECT_TRUE(holding_space_item->in_progress_commands().empty());
 }
 
 // Tests progress for each holding space item type.
diff --git a/ash/public/cpp/holding_space/holding_space_model.cc b/ash/public/cpp/holding_space/holding_space_model.cc
index 4194f8e..3e13fe2f 100644
--- a/ash/public/cpp/holding_space/holding_space_model.cc
+++ b/ash/public/cpp/holding_space/holding_space_model.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 
 #include "ash/public/cpp/holding_space/holding_space_model_observer.h"
+#include "ash/public/cpp/holding_space/holding_space_util.h"
 #include "base/bind.h"
 #include "base/check.h"
 #include "base/containers/contains.h"
@@ -21,6 +22,8 @@
 
   // Cache computed fields.
   const std::u16string accessible_name = item_->GetAccessibleName();
+  const std::set<HoldingSpaceCommandId> in_progress_commands =
+      item_->in_progress_commands();
 
   // Update accessible name.
   if (accessible_name_) {
@@ -36,11 +39,9 @@
       updated_fields |= HoldingSpaceModelObserver::UpdatedField::kBackingFile;
   }
 
-  // Update pause.
-  if (paused_) {
-    if (item_->SetPaused(paused_.value()))
-      updated_fields |= HoldingSpaceModelObserver::UpdatedField::kPaused;
-  }
+  // Update in-progress commands.
+  if (in_progress_commands_)
+    item_->SetInProgressCommands(std::move(*in_progress_commands_));
 
   // Update progress.
   if (progress_) {
@@ -76,6 +77,10 @@
   // Calculate changes to computed fields.
   if (accessible_name != item_->GetAccessibleName())
     updated_fields |= HoldingSpaceModelObserver::UpdatedField::kAccessibleName;
+  if (in_progress_commands != item_->in_progress_commands()) {
+    updated_fields |=
+        HoldingSpaceModelObserver::UpdatedField::kInProgressCommands;
+  }
 
   // Notify observers if and only if an update occurred.
   if (updated_fields != 0u) {
@@ -101,14 +106,17 @@
 }
 
 HoldingSpaceModel::ScopedItemUpdate&
-HoldingSpaceModel::ScopedItemUpdate::SetInvalidateImage(bool invalidate_image) {
-  invalidate_image_ = invalidate_image;
+HoldingSpaceModel::ScopedItemUpdate::SetInProgressCommands(
+    std::set<HoldingSpaceCommandId> in_progress_commands) {
+  DCHECK(std::all_of(in_progress_commands.begin(), in_progress_commands.end(),
+                     &holding_space_util::IsInProgressCommand));
+  in_progress_commands_ = std::move(in_progress_commands);
   return *this;
 }
 
 HoldingSpaceModel::ScopedItemUpdate&
-HoldingSpaceModel::ScopedItemUpdate::SetPaused(bool paused) {
-  paused_ = paused;
+HoldingSpaceModel::ScopedItemUpdate::SetInvalidateImage(bool invalidate_image) {
+  invalidate_image_ = invalidate_image;
   return *this;
 }
 
diff --git a/ash/public/cpp/holding_space/holding_space_model.h b/ash/public/cpp/holding_space/holding_space_model.h
index ed5b483..32c62f5 100644
--- a/ash/public/cpp/holding_space/holding_space_model.h
+++ b/ash/public/cpp/holding_space/holding_space_model.h
@@ -12,6 +12,7 @@
 #include <vector>
 
 #include "ash/public/cpp/ash_public_export.h"
+#include "ash/public/cpp/holding_space/holding_space_constants.h"
 #include "ash/public/cpp/holding_space/holding_space_item.h"
 #include "ash/public/cpp/holding_space/holding_space_progress.h"
 #include "base/callback.h"
@@ -60,14 +61,16 @@
     ScopedItemUpdate& SetBackingFile(const base::FilePath& file_path,
                                      const GURL& file_system_url);
 
+    // Sets the commands for an in-progress item which are shown in the item's
+    // context menu and possibly, in the case of cancel/pause/resume, as
+    // primary/secondary actions on the item view itself.
+    ScopedItemUpdate& SetInProgressCommands(
+        std::set<HoldingSpaceCommandId> in_progress_commands);
+
     // Sets whether the image for the item should be forcibly invalidated and
     // returns a reference to `this`.
     ScopedItemUpdate& SetInvalidateImage(bool invalidate_image);
 
-    // Sets if progress of the item is `paused` and returns a ref to `this`.
-    // NOTE: Only in-progress holding space items can be paused.
-    ScopedItemUpdate& SetPaused(bool paused);
-
     // Sets the `progress` of the item and returns a reference to `this`.
     // NOTE: Only in-progress holding space items can be progressed.
     ScopedItemUpdate& SetProgress(const HoldingSpaceProgress& progress);
@@ -97,7 +100,7 @@
     absl::optional<absl::optional<std::u16string>> accessible_name_;
     absl::optional<base::FilePath> file_path_;
     absl::optional<GURL> file_system_url_;
-    absl::optional<bool> paused_;
+    absl::optional<std::set<HoldingSpaceCommandId>> in_progress_commands_;
     absl::optional<HoldingSpaceProgress> progress_;
     absl::optional<absl::optional<std::u16string>> secondary_text_;
     absl::optional<absl::optional<cros_styles::ColorName>>
diff --git a/ash/public/cpp/holding_space/holding_space_model_observer.h b/ash/public/cpp/holding_space/holding_space_model_observer.h
index 31b9581..ba1de51 100644
--- a/ash/public/cpp/holding_space/holding_space_model_observer.h
+++ b/ash/public/cpp/holding_space/holding_space_model_observer.h
@@ -35,8 +35,8 @@
   enum UpdatedField : uint32_t {
     kAccessibleName = 1u,
     kBackingFile = kAccessibleName << 1u,
-    kPaused = kBackingFile << 1u,
-    kProgress = kPaused << 1u,
+    kInProgressCommands = kBackingFile << 1u,
+    kProgress = kInProgressCommands << 1u,
     kSecondaryText = kProgress << 1u,
     kSecondaryTextColor = kSecondaryText << 1u,
     kText = kSecondaryTextColor << 1u,
diff --git a/ash/public/cpp/holding_space/holding_space_model_unittest.cc b/ash/public/cpp/holding_space/holding_space_model_unittest.cc
index af23106f..a94f1459 100644
--- a/ash/public/cpp/holding_space/holding_space_model_unittest.cc
+++ b/ash/public/cpp/holding_space/holding_space_model_unittest.cc
@@ -5,6 +5,7 @@
 #include "ash/public/cpp/holding_space/holding_space_model.h"
 
 #include <memory>
+#include <set>
 #include <vector>
 
 #include "ash/public/cpp/holding_space/holding_space_image.h"
@@ -242,12 +243,17 @@
   EXPECT_EQ(item_ptr->file_path(), updated_file_path);
   EXPECT_EQ(item_ptr->file_system_url(), updated_file_system_url);
 
-  // Update paused state.
-  model().UpdateItem(item_ptr->id())->SetPaused(true);
+  // Update in-progress commands.
+  std::set<HoldingSpaceCommandId> in_progress_commands;
+  in_progress_commands.insert(HoldingSpaceCommandId::kCancelItem);
+  model()
+      .UpdateItem(item_ptr->id())
+      ->SetInProgressCommands(in_progress_commands);
   EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
-  EXPECT_EQ(observation.TakeLastUpdatedFields(), UpdatedField::kPaused);
+  EXPECT_EQ(observation.TakeLastUpdatedFields(),
+            UpdatedField::kInProgressCommands);
   EXPECT_EQ(observation.TakeUpdatedItemCount(), 1);
-  EXPECT_TRUE(item_ptr->IsPaused());
+  EXPECT_EQ(item_ptr->in_progress_commands(), in_progress_commands);
 
   // Update progress.
   model()
@@ -285,29 +291,30 @@
             cros_styles::ColorName::kTextColorAlert);
 
   // Update all attributes.
+  in_progress_commands.insert(HoldingSpaceCommandId::kPauseItem);
   updated_file_path = base::FilePath("again_updated_file_path");
   updated_file_system_url = GURL("filesystem::again_updated_file_system_url");
   model()
       .UpdateItem(item_ptr->id())
       ->SetAccessibleName(u"updated_accessible_name")
       .SetBackingFile(updated_file_path, updated_file_system_url)
+      .SetInProgressCommands(in_progress_commands)
       .SetText(u"updated_text")
       .SetSecondaryText(u"updated_secondary_text")
       .SetSecondaryTextColor(cros_styles::ColorName::kTextColorWarning)
-      .SetPaused(false)
       .SetProgress(
           HoldingSpaceProgress(/*current_bytes=*/75, /*total_bytes=*/100));
   EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
   EXPECT_EQ(observation.TakeLastUpdatedFields(),
             UpdatedField::kAccessibleName | UpdatedField::kBackingFile |
-                UpdatedField::kPaused | UpdatedField::kProgress |
+                UpdatedField::kInProgressCommands | UpdatedField::kProgress |
                 UpdatedField::kSecondaryText |
                 UpdatedField::kSecondaryTextColor | UpdatedField::kText);
   EXPECT_EQ(observation.TakeUpdatedItemCount(), 1);
   EXPECT_EQ(item_ptr->GetAccessibleName(), u"updated_accessible_name");
   EXPECT_EQ(item_ptr->file_path(), updated_file_path);
   EXPECT_EQ(item_ptr->file_system_url(), updated_file_system_url);
-  EXPECT_FALSE(item_ptr->IsPaused());
+  EXPECT_EQ(item_ptr->in_progress_commands(), in_progress_commands);
   EXPECT_EQ(item_ptr->progress().GetValue(), 0.75f);
   EXPECT_EQ(item_ptr->GetText(), u"updated_text");
   EXPECT_EQ(item_ptr->secondary_text(), u"updated_secondary_text");
@@ -343,22 +350,22 @@
       .UpdateItem(item_ptr->id())
       ->SetAccessibleName(absl::nullopt)
       .SetBackingFile(item_ptr->file_path(), item_ptr->file_system_url())
+      .SetInProgressCommands({})
       .SetText(absl::nullopt)
       .SetSecondaryText(absl::nullopt)
       .SetSecondaryTextColor(absl::nullopt)
-      .SetPaused(item_ptr->IsPaused())
       .SetProgress(item_ptr->progress());
   EXPECT_EQ(observation.TakeUpdatedItemCount(), 0);
 }
 
-// Verifies that updating item paused state works as intended.
-TEST_P(HoldingSpaceModelTest, UpdateItem_Pause) {
+// Verifies that updating item in-progress commands as intended.
+TEST_P(HoldingSpaceModelTest, UpdateItem_InProgressCommands) {
   ScopedModelObservation observation(&model());
 
   // Verify the `model()` is initially empty.
   EXPECT_EQ(model().items().size(), 0u);
 
-  // Create a holding space `item`.
+  // Create an in-progress holding space `item`.
   auto item = HoldingSpaceItem::CreateFileBackedItem(
       /*type=*/GetParam(), base::FilePath("file_path"),
       GURL("filesystem::file_system_url"),
@@ -371,49 +378,57 @@
   EXPECT_EQ(model().items().size(), 1u);
   EXPECT_EQ(model().items()[0].get(), item_ptr);
 
-  // Verify the item is not paused.
-  EXPECT_FALSE(item_ptr->IsPaused());
+  // Verify the item has no in-progress commands.
+  EXPECT_TRUE(item_ptr->in_progress_commands().empty());
 
-  // Attempt to update pause to `false`. This should no-op.
-  model().UpdateItem(item_ptr->id())->SetPaused(false);
+  // Attempt to update in-progress commands to empty. This should no-op.
+  model().UpdateItem(item_ptr->id())->SetInProgressCommands({});
   EXPECT_FALSE(observation.TakeLastUpdatedItem());
   EXPECT_EQ(observation.TakeLastUpdatedFields(), 0u);
-  EXPECT_FALSE(item_ptr->IsPaused());
+  EXPECT_TRUE(item_ptr->in_progress_commands().empty());
 
-  // Update pause to `true`.
-  model().UpdateItem(item_ptr->id())->SetPaused(true);
-  EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
-  EXPECT_EQ(observation.TakeLastUpdatedFields(), UpdatedField::kPaused);
-  EXPECT_TRUE(item_ptr->IsPaused());
-
-  // Update pause to `false`.
-  model().UpdateItem(item_ptr->id())->SetPaused(false);
-  EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
-  EXPECT_EQ(observation.TakeLastUpdatedFields(), UpdatedField::kPaused);
-  EXPECT_FALSE(item_ptr->IsPaused());
-
-  // Update pause to `true` and progress to completion. Because the item is no
-  // longer in progress, it should no longer be paused.
+  // Update in-progress commands.
+  std::set<HoldingSpaceCommandId> in_progress_commands;
+  in_progress_commands.insert(HoldingSpaceCommandId::kCancelItem);
   model()
       .UpdateItem(item_ptr->id())
-      ->SetPaused(true)
+      ->SetInProgressCommands(in_progress_commands);
+  EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
+  EXPECT_EQ(observation.TakeLastUpdatedFields(),
+            UpdatedField::kInProgressCommands);
+  EXPECT_EQ(item_ptr->in_progress_commands(), in_progress_commands);
+
+  // Update in-progress commands again.
+  in_progress_commands.insert(HoldingSpaceCommandId::kPauseItem);
+  model()
+      .UpdateItem(item_ptr->id())
+      ->SetInProgressCommands(in_progress_commands);
+  EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
+  EXPECT_EQ(observation.TakeLastUpdatedFields(),
+            UpdatedField::kInProgressCommands);
+  EXPECT_EQ(item_ptr->in_progress_commands(), in_progress_commands);
+
+  // Update in-progress commands and progress to completion. Because the item is
+  // no longer in progress, in-progress commands should be empty.
+  in_progress_commands.insert(HoldingSpaceCommandId::kResumeItem);
+  model()
+      .UpdateItem(item_ptr->id())
+      ->SetInProgressCommands(in_progress_commands)
       .SetProgress(
           HoldingSpaceProgress(/*current_bytes=*/100, /*total_bytes=*/100));
   EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
   EXPECT_EQ(observation.TakeLastUpdatedFields(),
-            UpdatedField::kPaused | UpdatedField::kProgress);
+            UpdatedField::kInProgressCommands | UpdatedField::kProgress);
   EXPECT_TRUE(item_ptr->progress().IsComplete());
-  EXPECT_FALSE(item_ptr->IsPaused());
+  EXPECT_TRUE(item_ptr->in_progress_commands().empty());
 
-  // Attempts to update pause should no-op for completed items.
-  model().UpdateItem(item_ptr->id())->SetPaused(true);
+  // Attempts to update in-progress commands should no-op for completed items.
+  model()
+      .UpdateItem(item_ptr->id())
+      ->SetInProgressCommands(in_progress_commands);
   EXPECT_FALSE(observation.TakeLastUpdatedItem());
   EXPECT_EQ(observation.TakeLastUpdatedFields(), 0u);
-  EXPECT_FALSE(item_ptr->IsPaused());
-  model().UpdateItem(item_ptr->id())->SetPaused(false);
-  EXPECT_FALSE(observation.TakeLastUpdatedItem());
-  EXPECT_EQ(observation.TakeLastUpdatedFields(), 0u);
-  EXPECT_FALSE(item_ptr->IsPaused());
+  EXPECT_TRUE(item_ptr->in_progress_commands().empty());
 }
 
 // Verifies that updating item progress works as intended.
diff --git a/ash/public/cpp/holding_space/holding_space_util.cc b/ash/public/cpp/holding_space/holding_space_util.cc
index 21b9c42..4b460d2 100644
--- a/ash/public/cpp/holding_space/holding_space_util.cc
+++ b/ash/public/cpp/holding_space/holding_space_util.cc
@@ -37,5 +37,16 @@
   return max_size;
 }
 
+bool IsInProgressCommand(HoldingSpaceCommandId command_id) {
+  switch (command_id) {
+    case HoldingSpaceCommandId::kCancelItem:
+    case HoldingSpaceCommandId::kPauseItem:
+    case HoldingSpaceCommandId::kResumeItem:
+      return true;
+    default:
+      return false;
+  }
+}
+
 }  // namespace holding_space_util
 }  // namespace ash
diff --git a/ash/public/cpp/holding_space/holding_space_util.h b/ash/public/cpp/holding_space/holding_space_util.h
index ce93f92..663c766ba 100644
--- a/ash/public/cpp/holding_space/holding_space_util.h
+++ b/ash/public/cpp/holding_space/holding_space_util.h
@@ -15,6 +15,12 @@
 // Returns the maximum image size required for a holding space item of `type`.
 ASH_PUBLIC_EXPORT gfx::Size GetMaxImageSizeForType(HoldingSpaceItem::Type type);
 
+// Returns whether the specified `command_id` refers to a command for an
+// in-progress item which is shown in an item's context menu and possibly, in
+// the case of cancel/pause/resume, as primary/secondary actions on the item
+// view itself.
+ASH_PUBLIC_EXPORT bool IsInProgressCommand(HoldingSpaceCommandId command_id);
+
 }  // namespace holding_space_util
 }  // namespace ash
 
diff --git a/ash/public/cpp/multi_user_window_manager.h b/ash/public/cpp/multi_user_window_manager.h
index 59ddf26..cc0d0ab8 100644
--- a/ash/public/cpp/multi_user_window_manager.h
+++ b/ash/public/cpp/multi_user_window_manager.h
@@ -19,7 +19,6 @@
 namespace ash {
 
 class MultiUserWindowManagerDelegate;
-class MultiUserWindowManagerObserver;
 
 // Used to assign windows to user accounts so that ash shows the appropriate set
 // of windows based on the active user.
@@ -61,9 +60,6 @@
   // Returns the id of the currently active user.
   virtual const AccountId& CurrentAccountId() const = 0;
 
-  virtual void AddObserver(MultiUserWindowManagerObserver* observer) = 0;
-  virtual void RemoveObserver(MultiUserWindowManagerObserver* observer) = 0;
-
  protected:
   MultiUserWindowManager() {}
 };
diff --git a/ash/public/cpp/multi_user_window_manager_observer.h b/ash/public/cpp/multi_user_window_manager_observer.h
deleted file mode 100644
index caf9999..0000000
--- a/ash/public/cpp/multi_user_window_manager_observer.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef ASH_PUBLIC_CPP_MULTI_USER_WINDOW_MANAGER_OBSERVER_H_
-#define ASH_PUBLIC_CPP_MULTI_USER_WINDOW_MANAGER_OBSERVER_H_
-
-#include "ash/ash_export.h"
-
-namespace ash {
-
-class ASH_EXPORT MultiUserWindowManagerObserver {
- public:
-  // Invoked when the user switch animation is finished.
-  virtual void OnUserSwitchAnimationFinished() {}
-
- protected:
-  virtual ~MultiUserWindowManagerObserver() {}
-};
-
-}  // namespace ash
-
-#endif  // ASH_PUBLIC_CPP_MULTI_USER_WINDOW_MANAGER_OBSERVER_H_
diff --git a/ash/public/cpp/system_tray_client.h b/ash/public/cpp/system_tray_client.h
index b099bbd..3f3eca5 100644
--- a/ash/public/cpp/system_tray_client.h
+++ b/ash/public/cpp/system_tray_client.h
@@ -170,6 +170,10 @@
   // the "send feedback" button.
   virtual void ShowChannelInfoGiveFeedback() = 0;
 
+  // Returns 'true' if the user preference is set to allow users to submit
+  // feedback, 'false' otherwise.
+  virtual bool IsUserFeedbackEnabled() = 0;
+
  protected:
   SystemTrayClient() {}
 };
diff --git a/ash/public/cpp/test/test_system_tray_client.cc b/ash/public/cpp/test/test_system_tray_client.cc
index 3810f40..4b49157 100644
--- a/ash/public/cpp/test/test_system_tray_client.cc
+++ b/ash/public/cpp/test/test_system_tray_client.cc
@@ -126,4 +126,8 @@
 
 void TestSystemTrayClient::ShowChannelInfoGiveFeedback() {}
 
+bool TestSystemTrayClient::IsUserFeedbackEnabled() {
+  return user_feedback_enabled_;
+}
+
 }  // namespace ash
diff --git a/ash/public/cpp/test/test_system_tray_client.h b/ash/public/cpp/test/test_system_tray_client.h
index 38a9796..ed0fba8 100644
--- a/ash/public/cpp/test/test_system_tray_client.h
+++ b/ash/public/cpp/test/test_system_tray_client.h
@@ -69,6 +69,7 @@
                          GURL& final_event_url) override;
   void ShowChannelInfoAdditionalDetails() override;
   void ShowChannelInfoGiveFeedback() override;
+  bool IsUserFeedbackEnabled() override;
 
   int show_bluetooth_settings_count() const {
     return show_bluetooth_settings_count_;
@@ -120,6 +121,10 @@
     return last_network_settings_network_id_;
   }
 
+  void set_user_feedback_enabled(bool user_feedback_enabled) {
+    user_feedback_enabled_ = user_feedback_enabled;
+  }
+
  private:
   int show_network_settings_count_ = 0;
   int show_bluetooth_settings_count_ = 0;
@@ -135,6 +140,7 @@
   std::string last_bluetooth_settings_device_id_;
   std::string last_network_settings_network_id_;
   std::string last_network_type_;
+  bool user_feedback_enabled_ = false;
 };
 
 }  // namespace ash
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb
index 527614a..a5c48f3 100644
--- a/ash/strings/ash_strings_af.xtb
+++ b/ash/strings/ash_strings_af.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">Regs</translation>
 <translation id="1351937230027495976">Vou kieslys in</translation>
 <translation id="1364382257761975320">Gebruik jou vingerafdruk om jou Chromebook te ontsluit</translation>
+<translation id="1365866993922957110">Kry outomatiese opdaterings</translation>
 <translation id="1372545819342940910">Stoor lessenaar vir later</translation>
 <translation id="1383597849754832576">Kan nie spraaklêers aflaai nie Probeer later weer.</translation>
 <translation id="1383876407941801731">Soek</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> is ontspeld</translation>
 <translation id="1836215606488044471">Assistent (laai tans …)</translation>
 <translation id="1838895407229022812">Aandbeligting is af.</translation>
+<translation id="1862380676329487333">Dateer op en meld af</translation>
 <translation id="1864454756846565995">USB C-toestel (poort aan agterkant)</translation>
 <translation id="1879018240766558464">Incognito-vensters word nie tans gesteun nie. Ander programme sal gestoor word.</translation>
 <translation id="1882814835921407042">Geen selnetwerk nie</translation>
@@ -562,6 +564,7 @@
 <translation id="423685346499232137">Kan nie op die oomblik inhoud kopieer of plak nie</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">Maak instellings oop</translation>
+<translation id="4247123849143712100">Dateer op en skakel af</translation>
 <translation id="4250229828105606438">Skermkiekie</translation>
 <translation id="425364040945105958">Geen SIM nie</translation>
 <translation id="4261870227682513959">Wys kennisgewinginstellings. Kennisgewings is af</translation>
@@ -921,6 +924,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> is 'n bestuurde sessie wat deur <ph name="MANAGER" /> bestuur word</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> is gekoppel</translation>
 <translation id="6351032674660237738">PROGRAMVOORSTELLE</translation>
+<translation id="6359587239691116345">Kry die jongste kenmerke en veiligheidverbeterings. As jy hierdie opdatering weier, sal jou toestel dalk nie meer reg werk nie en kan jy veiligheid- en werkverrigtingkwessies ervaar.</translation>
 <translation id="6376931439017688372">Bluetooth is aan</translation>
 <translation id="6381109794406942707">Voer jou PIN in om die toestel te ontsluit.</translation>
 <translation id="639644700271529076">HOOFLETTERSLOT is af</translation>
@@ -942,6 +946,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> vereis dat jy hierdie <ph name="DEVICE_TYPE" /> voor die spertyd opdateer</translation>
 <translation id="649452524636452238">Slimkaart-PIN</translation>
 <translation id="6495400115277918834">Prent-in-prent is begin, Alt+Shift+V om te fokus</translation>
+<translation id="6500896621837555595">Dateer op</translation>
 <translation id="6501401484702599040">Saai tans skerm uit na <ph name="RECEIVER_NAME" /></translation>
 <translation id="6515727200518652613">Kamera is verloor; probeer tans herkoppel.</translation>
 <translation id="6520517963145875092">Kies 'n venster om vas te vang</translation>
@@ -1219,6 +1224,7 @@
 <translation id="8054466585765276473">Bereken tans batterytyd.</translation>
 <translation id="8061464966246066292">Hoë kontras</translation>
 <translation id="8083540854303889870">Gestoor vir later</translation>
+<translation id="8091387634532529612">Outomatiese opdaterings</translation>
 <translation id="8098591350844501178">Hou op om skerm na <ph name="RECEIVER_NAME" /> toe uit te saai</translation>
 <translation id="8113423164597455979">Aan; alle prog.</translation>
 <translation id="8120151603115102514">Jou foon het nie 'n sluitskerm nie. Voer wagwoord in om jou Chromebook te ontsluit.</translation>
@@ -1425,4 +1431,5 @@
 <translation id="974545358917229949">Wys tans <ph name="RESULT_COUNT" /> resultate vir <ph name="QUERY" /></translation>
 <translation id="98515147261107953">Landskap</translation>
 <translation id="990277280839877440">Venster <ph name="WINDOW_TITILE" /> is gesluit.</translation>
+<translation id="996204416024568215">Kry die jongste kenmerke en veiligheidverbeterings. Opdaterings gebeur op die agtergrond.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index e88c4030..e31bdc0 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">راست</translation>
 <translation id="1351937230027495976">کوچک کردن منو</translation>
 <translation id="1364382257761975320">‏برای باز کردن قفل Chromebook، از اثر انگشتتان استفاده کنید</translation>
+<translation id="1365866993922957110">دریافت به‌روزرسانی خودکار</translation>
 <translation id="1372545819342940910">ذخیره میزکار برای زمانی دیگر</translation>
 <translation id="1383597849754832576">نمی‌توان فایل‌های گفتاری را بارگیری کرد. بعداً دوباره امتحان کنید.</translation>
 <translation id="1383876407941801731">جستجو</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064">پین <ph name="ITEM_TITLE" /> برداشته شد</translation>
 <translation id="1836215606488044471">دستیار (درحال بار کردن…)</translation>
 <translation id="1838895407229022812">«نور شب» خاموش است</translation>
+<translation id="1862380676329487333">به‌روزرسانی و خروج از سیستم</translation>
 <translation id="1864454756846565995">‏دستگاه USB-C (درگاه عقب)</translation>
 <translation id="1879018240766558464">درحال‌حاضر از پنجره‌های «ناشناس» پشتیبانی نمی‌شود. برنامه‌های دیگر ذخیره خواهد شد.</translation>
 <translation id="1882814835921407042">عدم وجود شبکه تلفن همراه</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">کپی و جای‌گذاری کردن محتوا در این لحظه امکان‌پذیر نیست</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">باز کردن تنظیمات</translation>
+<translation id="4247123849143712100">به‌روزرسانی و خاموش کردن</translation>
 <translation id="4250229828105606438">نماگرفت</translation>
 <translation id="425364040945105958">سیم‌کارتی وجود ندارد</translation>
 <translation id="4261870227682513959">نمایش تنظیمات اعلان. اعلان‌ها خاموش است</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> جلسه مدیریت‌شده‌ای است که توسط <ph name="MANAGER" /> مدیریت می‌شود</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> متصل شد</translation>
 <translation id="6351032674660237738">پیشنهادات برنامه</translation>
+<translation id="6359587239691116345">جدیدترین ویژگی‌ها و قابلیت‌های امنیتی بهبودیافته را دریافت کنید. اگر این به‌روزرسانی را رد کنید، ممکن است دستگاهتان دیگر به‌درستی کار نکند و احتمال دارد با مشکلات امنیتی و عملکردی مواجه شوید.</translation>
 <translation id="6376931439017688372">بلوتوث روشن است</translation>
 <translation id="6381109794406942707">برای باز کردن قفل دستگاه، پین را وارد کنید.</translation>
 <translation id="639644700271529076">‏CAPS LOCK خاموش است</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> از شما می‌خواهد <ph name="DEVICE_TYPE" /> را تا قبل‌از موعد مقرر به‌روزرسانی کنید</translation>
 <translation id="649452524636452238">پین کارت هوشمند</translation>
 <translation id="6495400115277918834">«تصویر در تصویر» شروع شد، برای کانونی کردن، دگرساز+تبدیل+ر را فشار دهید</translation>
+<translation id="6500896621837555595">به‌روزرسانی</translation>
 <translation id="6501401484702599040">ارسال محتوای صفحه به <ph name="RECEIVER_NAME" /></translation>
 <translation id="6515727200518652613">دوربین قطع شد، درحال اتصال مجدد.</translation>
 <translation id="6520517963145875092">پنجره‌ای را برای گرفتن عکس انتخاب کنید</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">درحال محاسبه زمان شارژ باتری.</translation>
 <translation id="8061464966246066292">کنتراست بالا</translation>
 <translation id="8083540854303889870">برای بعد ذخیره شده است</translation>
+<translation id="8091387634532529612">به‌روزرسانی‌های خودکار</translation>
 <translation id="8098591350844501178">توقف ارسال محتوای صفحه به <ph name="RECEIVER_NAME" /></translation>
 <translation id="8113423164597455979">روشن، همه برنامه‌ها</translation>
 <translation id="8120151603115102514">‏تلفنتان صفحه قفل ندارد. برای باز کردن قفل Chromebook، گذرواژه را وارد کنید.</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949">نمایش <ph name="RESULT_COUNT" /> نتیجه برای <ph name="QUERY" /></translation>
 <translation id="98515147261107953">افقی</translation>
 <translation id="990277280839877440">پنجره <ph name="WINDOW_TITILE" /> بسته شد.</translation>
+<translation id="996204416024568215">جدیدترین ویژگی‌ها و قابلیت‌های امنیتی بهبودیافته را دریافت می‌کنید. به‌روزرسانی در پس‌زمینه انجام می‌شود.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 0458fd8..f88de47 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">À droite</translation>
 <translation id="1351937230027495976">Réduire le menu</translation>
 <translation id="1364382257761975320">Utilisez votre empreinte digitale pour déverrouiller votre Chromebook</translation>
+<translation id="1365866993922957110">Recevoir des mises à jour automatiques</translation>
 <translation id="1372545819342940910">Enregistrer le bureau pour plus tard</translation>
 <translation id="1383597849754832576">Impossible de télécharger les fichiers de synthèse textuelle. Réessayez plus tard.</translation>
 <translation id="1383876407941801731">Rechercher</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064">L'épinglage de <ph name="ITEM_TITLE" /> été annulé</translation>
 <translation id="1836215606488044471">Assistant Google (chargement en cours…)</translation>
 <translation id="1838895407229022812">Le mode Éclairage nocturne est désactivé.</translation>
+<translation id="1862380676329487333">Mettre à jour et se déconnecter</translation>
 <translation id="1864454756846565995">Appareil USB-C (port arrière)</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>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">Impossible de copier ni de coller du contenu pour le moment</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">Ouvrir les paramètres</translation>
+<translation id="4247123849143712100">Mettre à jour et éteindre</translation>
 <translation id="4250229828105606438">Saisie d'écran</translation>
 <translation id="425364040945105958">Aucune carte SIM</translation>
 <translation id="4261870227682513959">Afficher les paramètres de notification. Les notifications sont désactivées</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> est une session gérée par <ph name="MANAGER" /></translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> connecté</translation>
 <translation id="6351032674660237738">SUGGESTIONS D'APPLICATIONS</translation>
+<translation id="6359587239691116345">Bénéficiez des dernières fonctionnalités et améliorations de la sécurité. Si vous refusez cette mise à jour, votre appareil pourrait ne plus fonctionner correctement, et vous pourriez rencontrer des problèmes de sécurité et de performance.</translation>
 <translation id="6376931439017688372">Le Bluetooth est activé</translation>
 <translation id="6381109794406942707">Pour déverrouiller l'appareil, entrez votre NIP.</translation>
 <translation id="639644700271529076">Touche de verrouillage des majuscules désactivée</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> exige que vous mettiez à jour votre <ph name="DEVICE_TYPE" /> avant la date limite</translation>
 <translation id="649452524636452238">NIP de la carte à puce</translation>
 <translation id="6495400115277918834">Début de l'incrustation d'image, appuyez sur les touches Alt+Majuscule+V pour sélectionner</translation>
+<translation id="6500896621837555595">Mettre à jour</translation>
 <translation id="6501401484702599040">Diffusion de l'écran sur <ph name="RECEIVER_NAME" /> en cours</translation>
 <translation id="6515727200518652613">Caméra déconnectée; tentative de reconnexion en cours…</translation>
 <translation id="6520517963145875092">Sélectionnez une fenêtre à capturer</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">Calcul de l'autonomie de la batterie en cours…</translation>
 <translation id="8061464966246066292">Contraste élevé</translation>
 <translation id="8083540854303889870">Enregistré pour plus tard</translation>
+<translation id="8091387634532529612">Mises à jour automatiques</translation>
 <translation id="8098591350844501178">Arrêter la diffusion de l'écran sur <ph name="RECEIVER_NAME" /></translation>
 <translation id="8113423164597455979">Activées, toutes applis</translation>
 <translation id="8120151603115102514">Votre téléphone n'a pas d'écran de verrouillage. Pour déverrouiller votre Chromebook, entrez votre mot de passe.</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949">Affichage de <ph name="RESULT_COUNT" /> résultats pour <ph name="QUERY" /></translation>
 <translation id="98515147261107953">Paysage</translation>
 <translation id="990277280839877440">La fenêtre <ph name="WINDOW_TITILE" /> a été fermée.</translation>
+<translation id="996204416024568215">Bénéficiez des dernières fonctionnalités et améliorations de la sécurité. Les mises à jour s'effectuent en arrière-plan.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 0ea6c6e9..e1a18db 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">જમણે</translation>
 <translation id="1351937230027495976">મેનૂ સંકુચિત કરો</translation>
 <translation id="1364382257761975320">તમારી Chromebook અનલૉક કરવા માટે, તમારી ફિંગરપ્રિન્ટનો ઉપયોગ કરો</translation>
+<translation id="1365866993922957110">ઑટોમૅટિક અપડેટ મેળવો</translation>
 <translation id="1372545819342940910">પછીથી ઉપયોગ માટે ડૅસ્ક સાચવો</translation>
 <translation id="1383597849754832576">સ્પીચ ફાઇલો ડાઉનલોડ કરી શકાતી નથી. થોડા સમય પછી ફરી પ્રયાસ કરો.</translation>
 <translation id="1383876407941801731">શોધો</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" />ને અનપિન કરી હતી</translation>
 <translation id="1836215606488044471">Assistant (લોડ થઈ રહ્યું છે…)</translation>
 <translation id="1838895407229022812">રાત્રિ પ્રકાશ બંધ છે.</translation>
+<translation id="1862380676329487333">અપડેટ કરીને સાઇન આઉટ કરો</translation>
 <translation id="1864454756846565995">USB-C ઉપકરણ (પાછળનું પોર્ટ)</translation>
 <translation id="1879018240766558464">છૂપી વિન્ડોને હાલમાં સપોર્ટ કરવામાં આવતો નથી. અન્ય ઍપ સાચવવામાં આવશે.</translation>
 <translation id="1882814835921407042">કોઈ મોબાઇલ નેટવર્ક નથી</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">આ સમયે કન્ટેન્ટ કૉપિ કે પેસ્ટ કરી શકાતું નથી</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">સેટિંગ ખોલો</translation>
+<translation id="4247123849143712100">અપડેટ કરીને શટ ડાઉન કરો</translation>
 <translation id="4250229828105606438">સ્ક્રીનશૉટ</translation>
 <translation id="425364040945105958">કોઈ સિમ કાર્ડ નથી</translation>
 <translation id="4261870227682513959">નોટિફિકેશન સેટિંગ બતાવો. નોટિફિકેશન બંધ છે</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913">મેનેજ કરાયેલું સત્ર <ph name="DISPLAY_NAME" />ને <ph name="MANAGER" /> દ્વારા મેનેજ કરવામાં આવે છે</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> કનેક્ટ થયું</translation>
 <translation id="6351032674660237738">ઍપ સૂચનો</translation>
+<translation id="6359587239691116345">નવીનતમ સુવિધાઓ અને સુરક્ષા સંબંધિત સુધારણાઓ મેળવો. જો તમે આ અપડેટ નકારશો, તો તમારું ડિવાઇસ હવે કદાચ યોગ્ય રીતે કામ કરશે નહીં અને તમે સુરક્ષા તથા પર્ફોર્મન્સ સંબંધિત સમસ્યાઓ અનુભવી શકો છો.</translation>
 <translation id="6376931439017688372">બ્લૂટૂથ ચાલુ છે</translation>
 <translation id="6381109794406942707">ડિવાઇસને અનલૉક કરવા માટે. તમારો પિન દાખલ કરો.</translation>
 <translation id="639644700271529076">CAPS LOCK બંધ છે</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> માટે જરૂરી છે કે તમે સમયસીમા સમાપ્ત થાય તે પહેલાં તમારું <ph name="DEVICE_TYPE" /> અપડેટ કરો</translation>
 <translation id="649452524636452238">સ્માર્ટ કાર્ડ પિન</translation>
 <translation id="6495400115277918834">ચિત્ર-માં-ચિત્ર સુવિધા ચાલુ થઈ ગઈ છે, ફોકસ કરવા માટે Alt+Shift+V દબાવો</translation>
+<translation id="6500896621837555595">અપડેટ કરો</translation>
 <translation id="6501401484702599040"><ph name="RECEIVER_NAME" /> પર સ્ક્રીન કાસ્ટ કરી રહ્યાં છીએ</translation>
 <translation id="6515727200518652613">કૅમેરા સાથેનું કનેક્શન ગુમાવ્યું, ફરીથી કનેક્ટ કરવાનો પ્રયાસ કરી રહ્યાં છીએ.</translation>
 <translation id="6520517963145875092">કૅપ્ચર કરવા માટે વિન્ડો પસંદ કરો</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">બેટરી સમયની ગણના કરે છે.</translation>
 <translation id="8061464966246066292">ઉચ્ચ કોન્ટ્રાસ્ટ</translation>
 <translation id="8083540854303889870">પછીના માટે સાચવેલી</translation>
+<translation id="8091387634532529612">ઑટોમૅટિક અપડેટ</translation>
 <translation id="8098591350844501178"><ph name="RECEIVER_NAME" /> પર સ્ક્રીન કાસ્ટ કરવાનું રોકો</translation>
 <translation id="8113423164597455979">ચાલુ, બધી ઍપ</translation>
 <translation id="8120151603115102514">તમારા ફોનમાં લૉક સ્ક્રીનની સુવિધા ચાલુ નથી. તમારી Chromebook અનલૉક કરવા માટે પાસવર્ડ દાખલ કરો.</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949"><ph name="QUERY" /> માટે <ph name="RESULT_COUNT" /> પરિણામ બતાવી રહ્યાં છીએ</translation>
 <translation id="98515147261107953">લેન્ડસ્કૅપ</translation>
 <translation id="990277280839877440">વિંડો <ph name="WINDOW_TITILE" /> બંધ કરેલી છે.</translation>
+<translation id="996204416024568215">નવીનતમ સુવિધાઓ અને સુરક્ષા સંબંધિત સુધારણાઓ મેળવો. અપડેટ બૅકગ્રાઉન્ડમાં મેળવવામાં આવે છે.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index fe6574d2..01fa679 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">दाएं</translation>
 <translation id="1351937230027495976">मेन्यू छोटा करें</translation>
 <translation id="1364382257761975320">Chromebook अनलॉक करने के लिए, अपना फ़िंगरप्रिंट इस्तेमाल करें</translation>
+<translation id="1365866993922957110">अपने-आप अपडेट होने की सुविधा पाएं</translation>
 <translation id="1372545819342940910">डेस्क को बाद में इस्तेमाल करने के लिए सेव करें</translation>
 <translation id="1383597849754832576">स्पीच फ़ाइलें डाउनलोड नहीं की जा सकतीं. कुछ देर बाद कोशिश करें.</translation>
 <translation id="1383876407941801731">Search</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> को अनपिन किया गया</translation>
 <translation id="1836215606488044471">Assistant (सेवा लोड हो रही है...)</translation>
 <translation id="1838895407229022812">नाइट लाइट बंद है.</translation>
+<translation id="1862380676329487333">अपडेट करके साइन आउट करें</translation>
 <translation id="1864454756846565995">USB-C डिवाइस (पिछला पोर्ट)</translation>
 <translation id="1879018240766558464">फ़िलहाल, गुप्त विंडो काम नहीं कर रही हैं. अन्य ऐप्लिकेशन सेव हो जाएंगे.</translation>
 <translation id="1882814835921407042">आपके फ़ोन में मोबाइल नेटवर्क उपलब्ध नहीं है</translation>
@@ -562,6 +564,7 @@
 <translation id="423685346499232137">फ़िलहाल, कॉन्टेंट को कॉपी या पेस्ट नहीं किया जा सकता</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">सेटिंग खोलें</translation>
+<translation id="4247123849143712100">अपडेट करके शट डाउन करें</translation>
 <translation id="4250229828105606438">स्क्रीनशॉट</translation>
 <translation id="425364040945105958">कोई सिम कार्ड नहीं लगाया गया है</translation>
 <translation id="4261870227682513959">सूचना सेटिंग दिखाएं. सूचनाएं बंद हैं</translation>
@@ -921,6 +924,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> एक प्रबंधित सत्र है. इसे <ph name="MANAGER" /> प्रबंधित करता है</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> कनेक्ट किया गया</translation>
 <translation id="6351032674660237738">ऐप्लिकेशन सुझाव</translation>
+<translation id="6359587239691116345">नई सुविधाएं और बेहतर सुरक्षा पाएं. अगर आपने इस अपडेट को अस्वीकार किया है, तो हो सकता है कि आपका डिवाइस ठीक से काम न करे. इसके अलावा, सुरक्षा और परफ़ॉर्मेंस से जुड़ी समस्याएं आ सकती हैं.</translation>
 <translation id="6376931439017688372">ब्लूटूथ चालू है</translation>
 <translation id="6381109794406942707">यह डिवाइस अनलॉक करने के लिए, अपना पिन डालें.</translation>
 <translation id="639644700271529076">CAPS LOCK बंद है</translation>
@@ -942,6 +946,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> के लिए ज़रूरी है आप अपने <ph name="DEVICE_TYPE" /> को समयसीमा खत्म होने से पहले अपडेट करें</translation>
 <translation id="649452524636452238">स्मार्ट कार्ड पिन</translation>
 <translation id="6495400115277918834">'पिक्चर में पिक्चर' मोड चालू किया गया, फ़ोकस करने के लिए Alt+Shift+V दबाएं</translation>
+<translation id="6500896621837555595">अपडेट करें</translation>
 <translation id="6501401484702599040">स्‍क्रीन को <ph name="RECEIVER_NAME" /> पर कास्‍ट किया जा रहा है</translation>
 <translation id="6515727200518652613">कैमरा डिसकनेक्ट हो गया है. हम इसे फिर से कनेक्ट कर रहे हैं.</translation>
 <translation id="6520517963145875092">कैप्चर करने के लिए कोई विंडो चुनें</translation>
@@ -1219,6 +1224,7 @@
 <translation id="8054466585765276473">बैटरी समय की गणना की जा रही है.</translation>
 <translation id="8061464966246066292">उच्च स्क्रीन की रोशनी</translation>
 <translation id="8083540854303889870">बाद के लिए सेव किया गया</translation>
+<translation id="8091387634532529612">अपने-आप होने वाले अपडेट</translation>
 <translation id="8098591350844501178"><ph name="RECEIVER_NAME" /> को स्‍क्रीन कास्‍ट करना बंद करें</translation>
 <translation id="8113423164597455979">चालू, सभी ऐप</translation>
 <translation id="8120151603115102514">आपके फ़ोन में लॉक स्क्रीन की सुविधा चालू नहीं है. अपना Chromebook अनलॉक करने के लिए, पासवर्ड डालें.</translation>
@@ -1425,4 +1431,5 @@
 <translation id="974545358917229949"><ph name="QUERY" /> के लिए <ph name="RESULT_COUNT" /> नतीजे दिखाए जा रहे हैं</translation>
 <translation id="98515147261107953">लैंडस्केप</translation>
 <translation id="990277280839877440"><ph name="WINDOW_TITILE" /> विंडो बंद है.</translation>
+<translation id="996204416024568215">नई सुविधाएं और बेहतर सुरक्षा पाएं. अपडेट बैकग्राउंड में होते हैं.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb
index 5616a636..09a1418 100644
--- a/ash/strings/ash_strings_kk.xtb
+++ b/ash/strings/ash_strings_kk.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">Оңға</translation>
 <translation id="1351937230027495976">Мәзірді жию</translation>
 <translation id="1364382257761975320">Chromebook құлпын ашу үшін саусақ ізін пайдаланыңыз.</translation>
+<translation id="1365866993922957110">Автоматты жаңартуларды алу</translation>
 <translation id="1372545819342940910">Жұмыс үстелін сақтау</translation>
 <translation id="1383597849754832576">Автоматты субтитр файлдары жүктеп алынбады. Кейінірек қайталап көріңіз.</translation>
 <translation id="1383876407941801731">Іздеу</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> босатылды.</translation>
 <translation id="1836215606488044471">Assistant (жүктелуде...)</translation>
 <translation id="1838895407229022812">"Түнгі жарық" функциясы өшірулі.</translation>
+<translation id="1862380676329487333">Жаңарту және шығу</translation>
 <translation id="1864454756846565995">USB-C құрылғысы (артқы ұяшық)</translation>
 <translation id="1879018240766558464">Инкогнито терезелеріне қазір қолдау көрсетілмейді. Басқа қолданбалар сақталады.</translation>
 <translation id="1882814835921407042">Мобильдік желі жоқ.</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">Мазмұнды қазір көшіру немесе қою мүмкін емес.</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">Параметрлерді ашу</translation>
+<translation id="4247123849143712100">Жаңарту және өшіру</translation>
 <translation id="4250229828105606438">Скриншот</translation>
 <translation id="425364040945105958">SIM картасы жоқ.</translation>
 <translation id="4261870227682513959">Хабарландыру параметрлерін көрсету. Хабарландырулар өшірулі</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> – <ph name="MANAGER" /> басқаратын сеанс.</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> қосылды</translation>
 <translation id="6351032674660237738">ҚОЛДАНБА ҰСЫНЫСТАРЫ</translation>
+<translation id="6359587239691116345">Соңғы шыққан функцияларды және қауіпсіздікті жақсарту мүмкіндіктерін пайдаланыңыз. Бұл жаңартуды қабылдамасаңыз, құрылғыңыз дұрыс жұмыс істемей, қауіпсіздік пен өнімділікке қатысты ақаулар туындауы мүмкін.</translation>
 <translation id="6376931439017688372">Bluetooth қосулы</translation>
 <translation id="6381109794406942707">Құрылғының құлпын ашу үшін PIN кодын енгізіңіз.</translation>
 <translation id="639644700271529076">CAPS LOCK өшірулі</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820">Мерзім аяқталғанға дейін, <ph name="MANAGER" /> сізден <ph name="DEVICE_TYPE" /> құрылғысын жаңартуыңызды талап етеді.</translation>
 <translation id="649452524636452238">Смарт картаның PIN коды</translation>
 <translation id="6495400115277918834">"Суреттегі сурет" режимі қосылды, ерекшелеу үшін Alt+Shift+V пернелер тіркесімін басыңыз.</translation>
+<translation id="6500896621837555595">Жаңарту</translation>
 <translation id="6501401484702599040">Экранды <ph name="RECEIVER_NAME" /> құрылғысына трансляциялау</translation>
 <translation id="6515727200518652613">Камера ажырап кетті, қайта жалғанып жатыр.</translation>
 <translation id="6520517963145875092">Түсіру үшін терезені таңдаңыз</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">Батарея уақытын есептеу.</translation>
 <translation id="8061464966246066292">Жоғары контраст</translation>
 <translation id="8083540854303889870">Кейінге сақталған</translation>
+<translation id="8091387634532529612">Автоматты жаңартулар</translation>
 <translation id="8098591350844501178">Экран мазмұнын <ph name="RECEIVER_NAME" /> құрылғысына трансляциялауды тоқтату</translation>
 <translation id="8113423164597455979">Қосулы</translation>
 <translation id="8120151603115102514">Телефоныңызда құлып экраны жоқ. Chromebook құлпын ашу үшін құпия сөзді енгізіңіз.</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949"><ph name="QUERY" /> бойынша <ph name="RESULT_COUNT" /> нәтиже көрсетілуде</translation>
 <translation id="98515147261107953">Альбомдық</translation>
 <translation id="990277280839877440"><ph name="WINDOW_TITILE" /> терезесі жабық.</translation>
+<translation id="996204416024568215">Соңғы шыққан функцияларды және қауіпсіздікті жақсарту мүмкіндіктерін пайдаланыңыз. Жаңарту әрекеттері фондық режимде жасалады.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index dcdab37..1d5852c4 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">ស្តាំ</translation>
 <translation id="1351937230027495976">បង្រួម​ម៉ឺនុយ​</translation>
 <translation id="1364382257761975320">ដើម្បីដោះសោ Chromebook របស់អ្នក សូមប្រើ​ស្នាមម្រាមដៃ​របស់អ្នក</translation>
+<translation id="1365866993922957110">ធ្វើ​ការដំឡើងកំណែ​ដោយស្វ័យប្រវត្តិ</translation>
 <translation id="1372545819342940910">រក្សាទុកតុសម្រាប់​ពេលក្រោយ</translation>
 <translation id="1383597849754832576">មិនអាចទាញយក​ឯកសារនិយាយ​បានទេ។ សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ។</translation>
 <translation id="1383876407941801731">ស្វែងរក</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> ត្រូវបាន​ដកការដៅ</translation>
 <translation id="1836215606488044471">ជំនួយការ (កំពុង​ផ្ទុក...)</translation>
 <translation id="1838895407229022812">បានបិទពន្លឺពេលយប់។</translation>
+<translation id="1862380676329487333">ដំឡើងកំណែ រួច​ចេញ</translation>
 <translation id="1864454756846565995">ឧបករណ៍ USB-C (រន្ធខាងក្រោយ)</translation>
 <translation id="1879018240766558464">បច្ចុប្បន្ន មិនអាចប្រើ​ផ្ទាំងឯកជន​បានទេ។ កម្មវិធីផ្សេងទៀតនឹងត្រូវបានរក្សាទុក។</translation>
 <translation id="1882814835921407042">គ្មានបណ្ដាញ​ទូរសព្ទចល័តទេ</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">មិនអាច​ចម្លង ឬ​ដាក់​ខ្លឹមសារ​ចូល​នៅពេលនេះ​បានទេ</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">បើកការកំណត់</translation>
+<translation id="4247123849143712100">ដំឡើងកំណែ រួច​បិទ</translation>
 <translation id="4250229828105606438">ថតអេក្រង់</translation>
 <translation id="425364040945105958">មិនមានស៊ីមទេ</translation>
 <translation id="4261870227682513959">បង្ហាញ​ការកំណត់​ការជូនដំណឹង។ ការជូនដំណឹង​ត្រូវបាន​បិទ</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> គឺជា​រយៈពេល​ចូលប្រើ​ដែល​ស្ថិតក្រោមការគ្រប់គ្រងរបស់ <ph name="MANAGER" /></translation>
 <translation id="6344138931392227467">បានភ្ជាប់ <ph name="DEVICE_NAME" /></translation>
 <translation id="6351032674660237738">ការណែនាំកម្មវិធី</translation>
+<translation id="6359587239691116345">ទទួលបាន​មុខងារ និងការកែលម្អផ្នែកសុវត្ថិភាពចុងក្រោយបំផុត។ ប្រសិនបើ​អ្នក​បដិសេធ​ការដំឡើងកំណែ​នេះ ឧបករណ៍​របស់អ្នក​ប្រហែលជា​មិន​ដំណើរការ​ត្រឹមត្រូវ​ទៀតទេ ហើយ​អ្នកប្រហែល​ជាជួប​បញ្ហា​ពាក់ព័ន្ធ​នឹងសុវត្ថិភាព និងប្រតិបត្តិការ។</translation>
 <translation id="6376931439017688372">ប៊្លូធូស​ត្រូវបាន​បើក</translation>
 <translation id="6381109794406942707">ដើម្បីដោះសោឧបករណ៍នេះ សូមបញ្ចូលកូដ PIN របស់អ្នក។</translation>
 <translation id="639644700271529076">CAPS LOCK ត្រូវបានបិទ</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> តម្រូវឱ្យ​អ្នក​ដំឡើងកំណែ <ph name="DEVICE_TYPE" /> របស់អ្នក​ឱ្យបានមុន​ថ្ងៃផុតកំណត់</translation>
 <translation id="649452524636452238">កូដ PIN របស់​កាត​ឆ្លាតវៃ</translation>
 <translation id="6495400115277918834">មុខងាររូបក្នុងរូបបានចាប់ផ្ដើម, ចុច Alt+Shift+V ដើម្បីផ្ដោត</translation>
+<translation id="6500896621837555595">ដំឡើងកំណែ</translation>
 <translation id="6501401484702599040">កំពុងខាសអេក្រង់ទៅ <ph name="RECEIVER_NAME" /></translation>
 <translation id="6515727200518652613">កាមេរ៉ា​បានដាច់ កំពុងព្យាយាម​ភ្ជាប់ឡើងវិញ។</translation>
 <translation id="6520517963145875092">ជ្រើសរើសវិនដូណាមួយ ដើម្បីថត</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">កំពុងគណនារយៈពេលថាមពលថ្ម។</translation>
 <translation id="8061464966246066292">កម្រិត​ពន្លឺខ្ពស់</translation>
 <translation id="8083540854303889870">បានរក្សាទុកសម្រាប់ពេលក្រោយ</translation>
+<translation id="8091387634532529612">ការដំឡើងកំណែ​ដោយស្វ័យប្រវត្តិ</translation>
 <translation id="8098591350844501178">បញ្ឈប់​ការបញ្ជូន​អេក្រង់ទៅ <ph name="RECEIVER_NAME" /></translation>
 <translation id="8113423164597455979">បើក កម្មវិធីទាំងអស់</translation>
 <translation id="8120151603115102514">ទូរសព្ទរបស់អ្នកមិនមានអេក្រង់ចាក់សោទេ។ ដើម្បីដោះសោ Chromebook របស់អ្នក សូមបញ្ចូលពាក្យសម្ងាត់។</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949">កំពុង​បង្ហាញ​លទ្ធផល <ph name="RESULT_COUNT" /> សម្រាប់ <ph name="QUERY" /></translation>
 <translation id="98515147261107953">ផ្តេក</translation>
 <translation id="990277280839877440">បានបិទវិនដូ <ph name="WINDOW_TITILE" /> ។</translation>
+<translation id="996204416024568215">ទទួលបាន​មុខងារ និងការកែលម្អផ្នែកសុវត្ថិភាពចុងក្រោយបំផុត។ ការដំឡើងកំណែ​កើតឡើងនៅ​ផ្ទៃខាងក្រោយ។</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index 85c80ad..6aadc8d7 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">ಬಲಕ್ಕೆ</translation>
 <translation id="1351937230027495976">ಮೆನುವನ್ನು ಕುಗ್ಗಿಸಿ</translation>
 <translation id="1364382257761975320">ನಿಮ್ಮ Chromebook ಅನ್‌ಲಾಕ್ ಮಾಡಲು, ನಿಮ್ಮ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಬಳಸಿ</translation>
+<translation id="1365866993922957110">ಸ್ವಯಂಚಾಲಿತ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ</translation>
 <translation id="1372545819342940910">ಡೆಸ್ಕ್ ಅನ್ನು ನಂತರದ ಬಳಕೆಗಾಗಿ ಉಳಿಸಿ</translation>
 <translation id="1383597849754832576">ಧ್ವನಿ ಫೈಲ್‌ಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="1383876407941801731">Search</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> ಅನ್ನು ಅನ್‌ಪಿನ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="1836215606488044471">ಸಹಾಯಕ (ಲೋಡ್ ಆಗುತ್ತಿದೆ...)</translation>
 <translation id="1838895407229022812">ನೈಟ್ ಲೈಟ್ ಆಫ್ ಆಗಿದೆ.</translation>
+<translation id="1862380676329487333">ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ ಮತ್ತು ಸೈನ್ ಔಟ್ ಮಾಡಿ</translation>
 <translation id="1864454756846565995">USB-C ಸಾಧನ (ಹಿಂದಿನ ಪೋರ್ಟ್)</translation>
 <translation id="1879018240766558464">ಅಜ್ಞಾತ ವಿಂಡೋಗಳು ಪ್ರಸ್ತುತ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ. ಇತರ ಆ್ಯಪ್‌ಗಳನ್ನು ಉಳಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="1882814835921407042">ಮೊಬೈಲ್ ನೆಟ್‌ವರ್ಕ್ ಇಲ್ಲ</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">ಈ ಸಮಯದಲ್ಲಿ ವಿಷಯವನ್ನು ನಕಲಿಸಲು ಅಥವಾ ಅಂಟಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆ</translation>
+<translation id="4247123849143712100">ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ ಮತ್ತು ಶಟ್ ಡೌನ್ ಮಾಡಿ</translation>
 <translation id="4250229828105606438">ಸ್ಕ್ರೀನ್‌ಶಾಟ್</translation>
 <translation id="425364040945105958">ಸಿಮ್‌ ಇಲ್ಲ</translation>
 <translation id="4261870227682513959">ಅಧಿಸೂಚನೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೋರಿಸಿ. ಅಧಿಸೂಚನೆಗಳು ಆಫ್ ಆಗಿವೆ</translation>
@@ -921,6 +924,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> ಎಂಬುದು <ph name="MANAGER" /> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾದ ಒಂದು ನಿರ್ವಹಿಸಿದ ಸೆಶನ್ ಆಗಿದೆ</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> ಅನ್ನು ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="6351032674660237738">ಅಪ್ಲಿಕೇಶನ್ ಸಲಹೆಗಳು</translation>
+<translation id="6359587239691116345">ಇತ್ತೀಚಿನ ಫೀಚರ್‌ಗಳು ಮತ್ತು ಭದ್ರತಾ ಸುಧಾರಣೆಗಳನ್ನು ಪಡೆಯಿರಿ. ನೀವು ಈ ಅಪ್‌ಡೇಟ್‌ ಅನ್ನು ನಿರಾಕರಿಸಿದರೆ, ನಿಮ್ಮ ಸಾಧನವು ಇನ್ನು ಮುಂದೆ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೇ ಇರಬಹುದು ಮತ್ತು ನೀವು ಭದ್ರತೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ಸಮಸ್ಯೆಗಳನ್ನು ಅನುಭವಿಸಬಹುದು.</translation>
 <translation id="6376931439017688372">ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿದೆ</translation>
 <translation id="6381109794406942707">ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಲು, ನಿಮ್ಮ ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ.</translation>
 <translation id="639644700271529076">CAPS LOCK ಆಫ್ ಆಗಿದೆ</translation>
@@ -942,6 +946,7 @@
 <translation id="6491071886865974820">ಗಡುವಿನ ಮೊದಲು ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ನೀವು ಅಪ್‌ಡೇಟ್ ಮಾಡಬೇಕೆಂದು <ph name="MANAGER" /> ಬಯಸುತ್ತದೆ</translation>
 <translation id="649452524636452238">ಸ್ಮಾರ್ಟ್ ಕಾರ್ಡ್ ಪಿನ್</translation>
 <translation id="6495400115277918834">ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ ಪ್ರಾರಂಭವಾಗಿದೆ, ಫೋಕಸ್ ಮಾಡಲು Alt+Shift+V ಬಳಸಿ</translation>
+<translation id="6500896621837555595">ಅಪ್‌ಡೇಟ್ ಮಾಡಿ</translation>
 <translation id="6501401484702599040">ಪರದೆಯನ್ನು <ph name="RECEIVER_NAME" /> ಗೆ ಬಿತ್ತರಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="6515727200518652613">ಕ್ಯಾಮರಾ ಕಳೆದುಹೋಗಿದೆ, ಮರುಕನೆಕ್ಟ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ.</translation>
 <translation id="6520517963145875092">ಕ್ಯಾಪ್ಚರ್ ಮಾಡಲು ವಿಂಡೋ ಒಂದನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
@@ -1219,6 +1224,7 @@
 <translation id="8054466585765276473">ಬ್ಯಾಟರಿ ಸಮಯವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲಾಗುತ್ತಿದೆ.</translation>
 <translation id="8061464966246066292">ಉನ್ನತ ಕಾಂಟ್ರಾಸ್ಟ್</translation>
 <translation id="8083540854303889870">ನಂತರ ಬಳಕೆಗಾಗಿ ಉಳಿಸಲಾಗಿದೆ</translation>
+<translation id="8091387634532529612">ಸ್ವಯಂಚಾಲಿತ ಅಪ್‌ಡೇಟ್‌ಗಳು</translation>
 <translation id="8098591350844501178">ಪರದೆಯನ್ನು <ph name="RECEIVER_NAME" /> ಗೆ ಬಿತ್ತರಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಿ</translation>
 <translation id="8113423164597455979">ಆನ್, ಎಲ್ಲಾ ಆ್ಯಪ್</translation>
 <translation id="8120151603115102514">ನಿಮ್ಮ ಫೋನ್ ಲಾಕ್ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಹೊಂದಿಲ್ಲ. ನಿಮ್ಮ Chromebook ಅನ್‌ಲಾಕ್ ಮಾಡಲು, ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ.</translation>
@@ -1425,4 +1431,5 @@
 <translation id="974545358917229949"><ph name="QUERY" /> ಕುರಿತಾದ <ph name="RESULT_COUNT" /> ಫಲಿತಾಂಶಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="98515147261107953">ಲ್ಯಾಂಡ್‌ಸ್ಕೇಪ್</translation>
 <translation id="990277280839877440"><ph name="WINDOW_TITILE" />ವಿಂಡೋವನ್ನು ಮುಚ್ಚಲಾಗಿದೆ.</translation>
+<translation id="996204416024568215">ಇತ್ತೀಚಿನ ಫೀಚರ್‌ಗಳು ಮತ್ತು ಭದ್ರತಾ ಸುಧಾರಣೆಗಳನ್ನು ಪಡೆಯಿರಿ. ಅಪ್‌ಡೇಟ್‌ಗಳು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index 721378e..2c7776b 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">Оң</translation>
 <translation id="1351937230027495976">Менюну жыйыштыруу</translation>
 <translation id="1364382257761975320">Chromebook'тун кулпусун манжаңыздын изи менен ачыңыз</translation>
+<translation id="1365866993922957110">Автоматтык жаңыртууларды алуу</translation>
 <translation id="1372545819342940910">Иш тактаны кийинкиге сактоо</translation>
 <translation id="1383597849754832576">Кеп файлдары жүктөлүп алынган жок. Кийинчерээк кайталаңыз.</translation>
 <translation id="1383876407941801731">Издөө</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> бошотулду</translation>
 <translation id="1836215606488044471">Жардамчы (жүктөлүүдө...)</translation>
 <translation id="1838895407229022812">Түнкү жарык өчүк.</translation>
+<translation id="1862380676329487333">Жаңыртуу жана чыгуу</translation>
 <translation id="1864454756846565995">USB-C түзмөгү (арткы оюкча)</translation>
 <translation id="1879018240766558464">Жашыруун терезелер учурда колдоого алынбайт. Башка колдонмолор сакталат.</translation>
 <translation id="1882814835921407042">Мобилдик Интернет жок</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">Учурда контентти көчүрүп же чаптоого болбойт</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">Жөндөөлөрдү ачуу</translation>
+<translation id="4247123849143712100">Жаңыртуу жана өчүрүү</translation>
 <translation id="4250229828105606438">Скриншот</translation>
 <translation id="425364040945105958">SIM-карта жок</translation>
 <translation id="4261870227682513959">Билдирмелердин жөндөөлөрүн көрсөтүү. Билдирмелер өчүк</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> – <ph name="MANAGER" /> тарабынан башкарылган сеанс</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> туташты</translation>
 <translation id="6351032674660237738">СУНУШТАЛГАН КОЛДОНМОЛОР</translation>
+<translation id="6359587239691116345">Жаңы функцияларды жана коопсуздук жакшыртууларын алыңыз. Эгер бул жаңыртууну четке какчаңыз, түзмөгүңүз туура иштебей, коопсуздук жана майнаптуулук көйгөйлөрү чыгышы мүмкүн.</translation>
 <translation id="6376931439017688372">Bluetooth күйүк</translation>
 <translation id="6381109794406942707">Түзмөктүн кулпусун ачуу үчүн PIN кодуңузду киргизиңиз.</translation>
 <translation id="639644700271529076">CAPS LOCK өчүк</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> <ph name="DEVICE_TYPE" /> түзмөгүңүздү мөөнөтү бүткөнгө чейин жаңыртууну талап кылууда</translation>
 <translation id="649452524636452238">Акылдуу картанын PIN коду</translation>
 <translation id="6495400115277918834">Сүрөттөгү сүрөт режими башталды, өтүү үчүн Alt+Shift+V баскычтарын басыңыз</translation>
+<translation id="6500896621837555595">Жаңыртуу</translation>
 <translation id="6501401484702599040">Тышкы экранга чыгаруу <ph name="RECEIVER_NAME" /></translation>
 <translation id="6515727200518652613">Камера ажырап калды. Кайра туташтырылууда.</translation>
 <translation id="6520517963145875092">Сүрөткө тартуу үчүн терезе тандаңыз</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">Батареянын убакыты эсептелүүдө.</translation>
 <translation id="8061464966246066292">Жогорку контраст</translation>
 <translation id="8083540854303889870">Кийинкиге сакталды</translation>
+<translation id="8091387634532529612">Автоматтык жаңыртуулар</translation>
 <translation id="8098591350844501178">Экранды <ph name="RECEIVER_NAME" /> түзмөгүнө чыгарууну токтотуу</translation>
 <translation id="8113423164597455979">Бүт колд. күйүк</translation>
 <translation id="8120151603115102514">Телефонуңуздун кулпу экраны иштетилген эмес. Chromebook'тун кулпусун ачуу үчүн сырсөздү териңиз.</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949"><ph name="QUERY" /> сурамы боюнча <ph name="RESULT_COUNT" /> натыйжа көрсөтүлүүдө</translation>
 <translation id="98515147261107953">Туурасынан</translation>
 <translation id="990277280839877440"><ph name="WINDOW_TITILE" /> терезеси жабылды.</translation>
+<translation id="996204416024568215">Жаңы функцияларды жана коопсуздук жакшыртууларын алыңыз. Жаңыртуулар фондо аткарылат.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index 8051a7b..71a78910 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">Dešinė</translation>
 <translation id="1351937230027495976">Sutraukti meniu</translation>
 <translation id="1364382257761975320">Kad atrakintumėte „Chromebook“, naudokite kontrolinį kodą</translation>
+<translation id="1365866993922957110">Gauti automatinius naujinius</translation>
 <translation id="1372545819342940910">Išsaugoti darbalaukį naudoti vėliau</translation>
 <translation id="1383597849754832576">Nepavyko atsisiųsti kalbos failų. Vėliau bandykite dar kartą.</translation>
 <translation id="1383876407941801731">Ieškoti</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064">Atsegta: <ph name="ITEM_TITLE" /></translation>
 <translation id="1836215606488044471">Padėjėjas (įkeliama...)</translation>
 <translation id="1838895407229022812">Nakties šviesa išjungta.</translation>
+<translation id="1862380676329487333">Atnaujinti ir atsijungti</translation>
 <translation id="1864454756846565995">USB-C įrenginys (prievadas gale)</translation>
 <translation id="1879018240766558464">Inkognito langai šiuo metu nepalaikomi. Kitos programos bus išsaugotos.</translation>
 <translation id="1882814835921407042">Nėra mobiliojo ryšio tinklo</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">Šiuo metu negalima kopijuoti ar įklijuoti turinio</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">Atidaryti nustatymus</translation>
+<translation id="4247123849143712100">Atnaujinti ir išjungti</translation>
 <translation id="4250229828105606438">Ekrano kopija</translation>
 <translation id="425364040945105958">Nėra SIM kortelės</translation>
 <translation id="4261870227682513959">Rodyti pranešimų nustatymus. Pranešimai išjungti</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> yra valdomas seansas, kurį valdo <ph name="MANAGER" /></translation>
 <translation id="6344138931392227467">Prijungta: <ph name="DEVICE_NAME" /></translation>
 <translation id="6351032674660237738">PROGRAMŲ PASIŪLYMAI</translation>
+<translation id="6359587239691116345">Gaukite naujausias funkcijas ir saugos patobulinimus. Jei atmesite šį naujinį, įrenginys gali tinkamai nebeveikti ir gali kilti saugos bei našumo problemų.</translation>
 <translation id="6376931439017688372">„Bluetooth“ įjungtas</translation>
 <translation id="6381109794406942707">Jei norite atrakinti įrenginį, įveskite PIN kodą.</translation>
 <translation id="639644700271529076">DIDŽIŲJŲ RAIDŽIŲ RAŠYMAS išjungtas</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> reikalauja atnaujinti „<ph name="DEVICE_TYPE" />“ iki termino</translation>
 <translation id="649452524636452238">Išmaniosios kortelės PIN kodas</translation>
 <translation id="6495400115277918834">Funkcija vaizdas vaizde paleista, jei norite sufokusuoti, spauskite „Alt“ + „Shift“ + V</translation>
+<translation id="6500896621837555595">Atnaujinti</translation>
 <translation id="6501401484702599040">Perduodamas ekranas į „<ph name="RECEIVER_NAME" />“</translation>
 <translation id="6515727200518652613">Fotoaparatas atsijungė, bandoma prijungti iš naujo.</translation>
 <translation id="6520517963145875092">Pasirinkite norimą užfiksuoti langą</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">Apskaičiuojamas laikas, likęs iki akumuliatoriaus išsikrovimo.</translation>
 <translation id="8061464966246066292">Didelis kontrastas</translation>
 <translation id="8083540854303889870">Išsaugota vėlesniam laikui</translation>
+<translation id="8091387634532529612">Automatiniai naujiniai</translation>
 <translation id="8098591350844501178">Sustabdyti ekrano perdavimą į: <ph name="RECEIVER_NAME" /></translation>
 <translation id="8113423164597455979">Visų programų pranešimai įjungti</translation>
 <translation id="8120151603115102514">Jūsų telefone nėra užrakinimo ekrano. Jei norite atrakinti „Chromebook“, įveskite slaptažodį.</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949">Pagal užklausą „<ph name="QUERY" />“ pateikiama rezultatų: <ph name="RESULT_COUNT" /></translation>
 <translation id="98515147261107953">Gulsčias</translation>
 <translation id="990277280839877440">Langas „<ph name="WINDOW_TITILE" />“ uždarytas.</translation>
+<translation id="996204416024568215">Gaukite naujausias funkcijas ir saugos patobulinimus. Atnaujinimai vykdomi fone.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index ee2fd06..7cb81504 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">ശരി</translation>
 <translation id="1351937230027495976">മെനു ചുരുക്കുക</translation>
 <translation id="1364382257761975320">Chromebook അൺലോക്ക് ചെയ്യാൻ നിങ്ങളുടെ ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കുക</translation>
+<translation id="1365866993922957110">സ്വയമേവയുള്ള അപ്ഡേറ്റുകൾ നേടുക</translation>
 <translation id="1372545819342940910">പിന്നീട് ഉപയോഗിക്കാൻ ഡെസ്ക്ക് സംരക്ഷിക്കുക</translation>
 <translation id="1383597849754832576">സംഭാഷണ ഫയലുകൾ ഡൗൺലോഡ് ചെയ്യാനായില്ല. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="1383876407941801731">Search</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> അൺപിൻ ചെയ്‌തു</translation>
 <translation id="1836215606488044471">സഹായി (ലോഡുചെയ്യുന്നു...)</translation>
 <translation id="1838895407229022812">നൈറ്റ് ലൈറ്റ് ഓഫാണ്.</translation>
+<translation id="1862380676329487333">അപ്ഡേറ്റ് ചെയ്ത് സൈൻ ഔട്ട് ചെയ്യുക</translation>
 <translation id="1864454756846565995">USB-C ഉപകരണം (പുറകിലെ പോർട്ട്)</translation>
 <translation id="1879018240766558464">അദൃശ്യ വിൻഡോകൾ നിലവിൽ പിന്തുണയ്ക്കുന്നില്ല. മറ്റ് ആപ്പുകൾ സംരക്ഷിക്കും.</translation>
 <translation id="1882814835921407042">മൊബൈൽ നെറ്റ്‌വർക്ക് ഇല്ല</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">ഇപ്പോൾ ഉള്ളടക്കം പകർത്താനോ ഒട്ടിക്കാനോ കഴിയില്ല</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">ക്രമീകരണം തുറക്കുക</translation>
+<translation id="4247123849143712100">അപ്ഡേറ്റ് ചെയ്ത് ഷട്ട് ഡൗൺ ചെയ്യുക</translation>
 <translation id="4250229828105606438">സ്‌ക്രീൻഷോട്ട്</translation>
 <translation id="425364040945105958">സിം ഇല്ല</translation>
 <translation id="4261870227682513959">അറിയിപ്പ് ക്രമീകരണം കാണിക്കുക. അറിയിപ്പുകൾ ഓഫാണ്</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="MANAGER" /> മാനേജ് ചെയ്യുന്ന ഒരു മാനേജ് ചെയ്യപ്പെടുന്ന സെഷനാണ് <ph name="DISPLAY_NAME" /></translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> കണക്‌റ്റ് ചെയ്‌തു</translation>
 <translation id="6351032674660237738">ആപ്പ് നിർദ്ദേശങ്ങൾ</translation>
+<translation id="6359587239691116345">ഏറ്റവും പുതിയ ഫീച്ചറുകളും സുരക്ഷാ മെച്ചപ്പെടുത്തലുകളും നേടുക. ഈ അപ്ഡേറ്റ് നിങ്ങൾ നിരസിക്കുകയാണെങ്കിൽ, ഉപകരണം ഇനി ശരിയായി പ്രവർത്തിച്ചേക്കില്ല, സുരക്ഷയും പ്രകടനവുമായി ബന്ധപ്പെട്ട പ്രശ്നങ്ങൾ നിങ്ങൾ നേരിട്ടേക്കാം.</translation>
 <translation id="6376931439017688372">Bluetooth ഓണാണ്</translation>
 <translation id="6381109794406942707">ഉപകരണം അൺലോക്ക് ചെയ്യാൻ, നിങ്ങളുടെ പിൻ നൽകുക.</translation>
 <translation id="639644700271529076">CAPS LOCK ഓഫാണ്</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820">സമയപരിധി അവസാനിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> അപ്‌ഡേറ്റ് ചെയ്യാൻ <ph name="MANAGER" /> ആവശ്യപ്പെടുന്നു.</translation>
 <translation id="649452524636452238">സ്‌മാർട്ട് കാർഡ് പിൻ</translation>
 <translation id="6495400115277918834">ചിത്രത്തിനുള്ളിൽ ചിത്രം ആരംഭിച്ചു, ഫോക്കസ് ചെയ്യാൻ Alt+Shift+V അമർത്തുക</translation>
+<translation id="6500896621837555595">അപ്ഡേറ്റ് ചെയ്യുക</translation>
 <translation id="6501401484702599040"><ph name="RECEIVER_NAME" /> എന്നതിലേക്ക് സ്‌ക്രീൻ കാസ്‌റ്റുചെയ്യുന്നു</translation>
 <translation id="6515727200518652613">ക്യാമറ വിച്ഛേദിക്കപ്പെട്ടു, വീണ്ടും കണക്റ്റ് ചെയ്യാൻ ശ്രമിക്കുന്നു.</translation>
 <translation id="6520517963145875092">ക്യാപ്‌ചർ ചെയ്യാൻ വിൻഡോ തിരഞ്ഞെടുക്കുക</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">ബാറ്ററി സമയം കണക്കാക്കുന്നു.</translation>
 <translation id="8061464966246066292">ഉയർന്ന ദൃശ്യ തീവ്രത</translation>
 <translation id="8083540854303889870">പിന്നീട് കാണാൻ സംരക്ഷിച്ചവ</translation>
+<translation id="8091387634532529612">സ്വയമേവയുള്ള അപ്‌ഡേറ്റുകൾ</translation>
 <translation id="8098591350844501178"><ph name="RECEIVER_NAME" /> എന്നതിലേക്ക് സ്‌ക്രീൻ കാസ്‌റ്റുചെയ്യുന്നത് നിർത്തുക</translation>
 <translation id="8113423164597455979">ആപ്പിലെല്ലാം ഓൺ</translation>
 <translation id="8120151603115102514">നിങ്ങളുടെ ഫോണിന് ലോക്ക് സ്ക്രീനില്ല. Chromebook അൺലോക്ക് ചെയ്യാൻ പാസ്‌വേഡ് നൽകുക.</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949"><ph name="QUERY" /> എന്നതിനുള്ള <ph name="RESULT_COUNT" /> ഫലങ്ങൾ കാണിക്കുന്നു</translation>
 <translation id="98515147261107953">ലാന്‍ഡ്‌സ്‌കേപ്പ്</translation>
 <translation id="990277280839877440"><ph name="WINDOW_TITILE" /> വിൻഡോ അടച്ചു.</translation>
+<translation id="996204416024568215">ഏറ്റവും പുതിയ ഫീച്ചറുകളും സുരക്ഷാ മെച്ചപ്പെടുത്തലുകളും നേടുക. അപ്‌ഡേറ്റുകൾ പശ്ചാത്തലത്തിൽ സംഭവിക്കുന്നു.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 3a16f47..83e123ef 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">ညာ</translation>
 <translation id="1351937230027495976">မီနူးကို လျှော့ပြရန်</translation>
 <translation id="1364382257761975320">သင့် Chromebook ကို လော့ခ်ဖွင့်ရန် သင့်လက်ဗွေကို အသုံးပြုပါ</translation>
+<translation id="1365866993922957110">အလိုအလျောက် အပ်ဒိတ်များ ရယူရန်</translation>
 <translation id="1372545819342940910">နောင်အတွက် မျက်နှာပြင်ကို သိမ်းရန်</translation>
 <translation id="1383597849754832576">တိုက်ရိုက်စာတန်းဖိုင်များကို ဒေါင်းလုဒ်လုပ်၍ မရပါ။ နောက်မှ ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="1383876407941801731">ရှာဖွေမှု</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> ကို ပင်ဖြုတ်လိုက်သည်</translation>
 <translation id="1836215606488044471">Assistant (ဖွင့်နေပါသည်...)</translation>
 <translation id="1838895407229022812">'ညအလင်းရောင်' ပိတ်ထားသည်။</translation>
+<translation id="1862380676329487333">အပ်ဒိတ်လုပ်ပြီး ထွက်ရန်</translation>
 <translation id="1864454756846565995">USB-C ကိရိယာ (နောက်ဘက် ပို့တ်)</translation>
 <translation id="1879018240766558464">‘ရုပ်ဖျက်’ ဝင်ဒိုးများကို လောလောဆယ် ပံ့ပိုးမထားပါ။ အခြားအက်ပ်များကို သိမ်းပါမည်။</translation>
 <translation id="1882814835921407042">မိုဘိုင်းကွန်ရက် မရှိပါ</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">ယခုအချိန်တွင် အကြောင်းအရာကို မိတ္တူကူး၍ (သို့) ကူးထည့်၍ မရပါ</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">ဆက်တင်များကို ဖွင့်ရန်</translation>
+<translation id="4247123849143712100">အပ်ဒိတ်လုပ်ပြီး ပိတ်ရန်</translation>
 <translation id="4250229828105606438">မျက်နှာပြင် လျှပ်တပြက်ပုံ</translation>
 <translation id="425364040945105958">ဆင်းကတ်မရှိပါ</translation>
 <translation id="4261870227682513959">အကြောင်းကြားချက်ဆက်တင်များကို ပြရန်။ အကြောင်းကြားချက်များကို ပိတ်ထားသည်</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> သည် <ph name="MANAGER" /> က စီမံခန့်ခွဲထားသည့် စက်ရှင်ဖြစ်သည်</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> ချိတ်ဆက်ပြီးပြီ</translation>
 <translation id="6351032674660237738">အက်ပ်အကြံပြုချက်များ</translation>
+<translation id="6359587239691116345">နောက်ဆုံးထုတ်ဝန်ဆောင်မှုနှင့် လုံခြုံရေးတိုးမြှင့်မှုများ ရယူနိုင်သည်။ ဤအပ်ဒိတ်ကို ငြင်းပယ်ပါက သင့်စက် မှန်ကန်စွာ အလုပ်မလုပ်တော့ဘဲ လုံခြုံရေးနှင့် စွမ်းဆောင်မှုပြဿနာများ ကြုံတွေ့ရနိုင်သည်။</translation>
 <translation id="6376931439017688372">ဘလူးတုသ်ကို ဖွင့်ထားသည်</translation>
 <translation id="6381109794406942707">ဤစက်ကိုဖွင့်ရန် သင့်ပင်နံပါတ် ထည့်ပါ။</translation>
 <translation id="639644700271529076">စာလုံးကြီးများကို နှိပ်မထား</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820">နောက်ဆုံးသတ်မှတ်ချိန်မတိုင်မီ သင့် <ph name="DEVICE_TYPE" /> ကိုအပ်ဒိတ်လုပ်ရန် <ph name="MANAGER" /> ကသတ်မှတ်ထားသည်</translation>
 <translation id="649452524636452238">အဆင့်မြင့်ကတ် ပင်နံပါတ်</translation>
 <translation id="6495400115277918834">နှစ်ခုထပ်၍ကြည့်ခြင်းကို စတင်ထားပြီး အထူးပြသရန် Alt+Shift+V နှိပ်ပါ</translation>
+<translation id="6500896621837555595">အပ်ဒိတ်လုပ်ရန်</translation>
 <translation id="6501401484702599040"><ph name="RECEIVER_NAME" />သို့ မျက်နှာပြင်ကို ကာစ် လုပ်နေသည်</translation>
 <translation id="6515727200518652613">ကင်မရာပျောက်သွား၍ ပြန်လည်ချိတ်ဆက်နေသည်။</translation>
 <translation id="6520517963145875092">ရိုက်ယူရန် ဝင်းဒိုးတစ်ခု ရွေးပါ</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">ဘက်ထရီ အချိန်တွက်နေ</translation>
 <translation id="8061464966246066292">ခြားနားမှုမြင့်သော</translation>
 <translation id="8083540854303889870">နောင်အတွက် သိမ်းထားသည်</translation>
+<translation id="8091387634532529612">အလိုအလျောက် အပ်ဒိတ်များ</translation>
 <translation id="8098591350844501178"><ph name="RECEIVER_NAME" /> သို့ မျက်နှာပြင်အား ကာစ်လုပ်နေခြင်းကို ရပ်ပါ</translation>
 <translation id="8113423164597455979">ဖွင့်- အားလုံး</translation>
 <translation id="8120151603115102514">သင့်ဖုန်းတွင် လော့ခ်မျက်နှာပြင် မရှိပါ။ သင့် Chromebook ကိုလော့ခ်ဖွင့်ရန် စကားဝှက်ထည့်ပါ။</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949"><ph name="QUERY" /> အတွက် ရလဒ် <ph name="RESULT_COUNT" /> ခုကို ပြနေသည်</translation>
 <translation id="98515147261107953">ဘေးတိုက်</translation>
 <translation id="990277280839877440"><ph name="WINDOW_TITILE" /> ဝင်းဒိုးကို ပိတ်ထားသည်။</translation>
+<translation id="996204416024568215">နောက်ဆုံးထုတ်ဝန်ဆောင်မှုနှင့် လုံခြုံရေးတိုးမြှင့်မှုများ ရယူနိုင်သည်။ နောက်ခံတွင် အပ်ဒိတ်လုပ်သည်။</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb
index b8f1129..4a6606b 100644
--- a/ash/strings/ash_strings_ne.xtb
+++ b/ash/strings/ash_strings_ne.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">दायाँ</translation>
 <translation id="1351937230027495976">मेनु संक्षिप्त गर्नुहोस्</translation>
 <translation id="1364382257761975320">तपाईं आफ्नो Chromebook अनलक गर्न चाहनुहुन्छ भने आफ्नो फिंगरप्रिन्ट प्रयोग गर्नुहोस्</translation>
+<translation id="1365866993922957110">स्वतः अपडेट गरियोस्</translation>
 <translation id="1372545819342940910">यो डेस्क पछिका लागि सेभ गर्नुहोस्</translation>
 <translation id="1383597849754832576">बोलीसम्बन्धी फाइलहरू डाउनलोड गर्न सकिएन। पछि फेरि प्रयास गर्नुहोस्।</translation>
 <translation id="1383876407941801731">खोज्नुहोस्</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> अनपिन गरिएको थियो</translation>
 <translation id="1836215606488044471">सहायक (लोड गर्दै...)</translation>
 <translation id="1838895407229022812">रात्रि प्रकाश निष्क्रिय छ।</translation>
+<translation id="1862380676329487333">अपडेट गर्नुहोस् अनि साइन आउट गर्नुहोस्</translation>
 <translation id="1864454756846565995">USB-C यन्त्र (पछाडिको पोर्ट)</translation>
 <translation id="1879018240766558464">इन्कोग्निटो विन्डो हाल प्रयोग गर्न मिल्दैन। अन्य एपहरू सेभ गरिने छन्।</translation>
 <translation id="1882814835921407042">मोबाइल नेटवर्कमा कनेक्ट भएको छैन</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">यस बखत सामग्री कपी वा पेस्ट गर्न सकिँदैन</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">सेटिङहरू खोल्नुहोस्</translation>
+<translation id="4247123849143712100">अपडेट गर्नुहोस् अनि सट डाउन गर्नुहोस्</translation>
 <translation id="4250229828105606438">स्क्रिसट</translation>
 <translation id="425364040945105958">SIM कार्ड छैन</translation>
 <translation id="4261870227682513959">सूचनासम्बन्धी सेटिङहरू देखाउनुहोस्। सूचनाहरू निष्क्रिय छन्</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> <ph name="MANAGER" /> ले व्यवस्थापन गर्ने सत्र हो</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> कनेक्ट गरियो</translation>
 <translation id="6351032674660237738">एपसम्बन्धी सुझावहरू</translation>
+<translation id="6359587239691116345">नयाँ सुविधा तथा सुरक्षासम्बन्धी सुधारहरू प्राप्त गर्नुहोस्। तपाईंले यो अपडेट लागू गर्नुभएन भने तपाईंको डिभाइसले राम्रोसँग काम गर्न छाड्न सक्छ र सुरक्षा तथा पर्फर्मेन्ससम्बन्धी समस्या आउन सक्छ।</translation>
 <translation id="6376931439017688372">ब्लुटुथ सक्रिय छ</translation>
 <translation id="6381109794406942707">यो डिभाइस अनलक गर्न आफ्नो PIN प्रविष्टि गर्नुहोस्।</translation>
 <translation id="639644700271529076">CAPS LOCK बन्द छ</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> का अनुसार तपाईंले म्याद सकिनुअघि नै आफ्नो <ph name="DEVICE_TYPE" /> अपडेट गर्नु पर्ने हुन्छ</translation>
 <translation id="649452524636452238">स्मार्ट कार्डको PIN</translation>
 <translation id="6495400115277918834">picture-in-picture मोड सुरु गरिएको छ, फोकस गर्न Alt+Shift+V थिच्नुहोस्</translation>
+<translation id="6500896621837555595">अपडेट गर्नुहोस्</translation>
 <translation id="6501401484702599040">स्क्रिन <ph name="RECEIVER_NAME" /> मा cast गर्दै</translation>
 <translation id="6515727200518652613">क्यामेरा डिस्कनेक्ट भयो। पुनः कनेक्ट गर्ने प्रयास गरिँदै छ।</translation>
 <translation id="6520517963145875092">फोटो खिच्न कुनै विन्डो चयन गर्नुहोस्</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">ब्याटरि समय हिसाब गर्दै।</translation>
 <translation id="8061464966246066292">उच्च कन्ट्रास्ट</translation>
 <translation id="8083540854303889870">पछि खरिद गर्नका लागि सेभ गरिएका वस्तु</translation>
+<translation id="8091387634532529612">स्वतः अपडेट गर्ने सुविधा</translation>
 <translation id="8098591350844501178"><ph name="RECEIVER_NAME" /> मा स्क्रिन casting गर्ने काम रोक्नुहोस्</translation>
 <translation id="8113423164597455979">सबै डिभाइसमा अन</translation>
 <translation id="8120151603115102514">तपाईंको फोनमा लक स्क्रिन छैन। Chromebook अनलक गर्न पासवर्ड हाल्नुहोस्।</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949"><ph name="RESULT_COUNT" /> सम्बन्धी <ph name="QUERY" /> परिणामहरू देखाउँदै</translation>
 <translation id="98515147261107953">ल्यान्डस्केप</translation>
 <translation id="990277280839877440">विन्डो <ph name="WINDOW_TITILE" /> बन्द गरियो।</translation>
+<translation id="996204416024568215">नयाँ सुविधा तथा सुरक्षासम्बन्धी सुधारहरू प्राप्त गर्नुहोस्। अपडेट गर्ने प्रक्रिया ब्याकग्राउन्डमा चल्छ।</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index eafc9af..5474164e 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">À direita</translation>
 <translation id="1351937230027495976">Recolher menu</translation>
 <translation id="1364382257761975320">Para desbloquear o Chromebook, use sua impressão digital</translation>
+<translation id="1365866993922957110">Receber atualizações automáticas</translation>
 <translation id="1372545819342940910">Salvar espaço de trabalho para mais tarde</translation>
 <translation id="1383597849754832576">Não foi possível fazer o download dos arquivos de fala. Tente novamente mais tarde.</translation>
 <translation id="1383876407941801731">Pesquisar</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064">O <ph name="ITEM_TITLE" /> foi liberado</translation>
 <translation id="1836215606488044471">Assistente (carregando…)</translation>
 <translation id="1838895407229022812">O Modo noturno está desativado.</translation>
+<translation id="1862380676329487333">Atualizar e sair</translation>
 <translation id="1864454756846565995">Dispositivo USB-C (porta traseira)</translation>
 <translation id="1879018240766558464">No momento, não há suporte para janelas anônimas. Outros apps serão salvos.</translation>
 <translation id="1882814835921407042">Rede móvel indisponível</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">Não é possível copiar nem colar conteúdo no momento</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">Abrir configurações.</translation>
+<translation id="4247123849143712100">Atualizar e desligar</translation>
 <translation id="4250229828105606438">Captura de tela</translation>
 <translation id="425364040945105958">Sem chip</translation>
 <translation id="4261870227682513959">Mostrar configurações de notificação. As notificações estão desativadas</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> é uma sessão gerenciada por <ph name="MANAGER" /></translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> conectado</translation>
 <translation id="6351032674660237738">SUGESTÕES DE APPS</translation>
+<translation id="6359587239691116345">Instale os recursos e melhorias de segurança mais recentes. Caso você recuse essa atualização, o dispositivo pode deixar de funcionar corretamente e você pode enfrentar problemas de segurança e performance.</translation>
 <translation id="6376931439017688372">Bluetooth ativado</translation>
 <translation id="6381109794406942707">Para desbloquear o dispositivo, digite o PIN.</translation>
 <translation id="639644700271529076">CAPS LOCK está desativado</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> precisa que você atualize seu <ph name="DEVICE_TYPE" /> antes do fim do prazo</translation>
 <translation id="649452524636452238">PIN do cartão inteligente</translation>
 <translation id="6495400115277918834">O picture-in-picture foi iniciado. Pressione "Alt + Shift + V" para focar</translation>
+<translation id="6500896621837555595">Atualizar</translation>
 <translation id="6501401484702599040">Transmitindo tela para <ph name="RECEIVER_NAME" /></translation>
 <translation id="6515727200518652613">Câmera perdida, tentando reconectar.</translation>
 <translation id="6520517963145875092">Selecione uma janela para a captura</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">Calculando duração da bateria.</translation>
 <translation id="8061464966246066292">Alto contraste</translation>
 <translation id="8083540854303889870">Salvos para mais tarde</translation>
+<translation id="8091387634532529612">Atualizações automáticas</translation>
 <translation id="8098591350844501178">Parar de transmitir tela para <ph name="RECEIVER_NAME" /></translation>
 <translation id="8113423164597455979">Ativ. nos apps</translation>
 <translation id="8120151603115102514">Seu smartphone não tem uma tela de bloqueio. Para desbloquear o Chromebook, digite sua senha</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949">Exibindo <ph name="RESULT_COUNT" /> resultados para <ph name="QUERY" /></translation>
 <translation id="98515147261107953">Paisagem</translation>
 <translation id="990277280839877440">Janela <ph name="WINDOW_TITILE" /> fechada.</translation>
+<translation id="996204416024568215">Instale os recursos e melhorias de segurança mais recentes. As atualizações ocorrem em segundo plano.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 9c2c413..c8b3ab4 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">வலது</translation>
 <translation id="1351937230027495976">மெனுவைச் சுருக்கு</translation>
 <translation id="1364382257761975320">Chromebookகை அன்லாக் செய்ய, உங்கள் கைரேகையைப் பயன்படுத்தவும்</translation>
+<translation id="1365866993922957110">தானாகவே புதுப்பிப்புகளை அனுப்பு</translation>
 <translation id="1372545819342940910">பின்னர் பயன்படுத்துவதற்காக டெஸ்க்கைச் சேமி</translation>
 <translation id="1383597849754832576">உடனடி வசனத்தின் ஃபைல்களைப் பதிவிறக்க முடியவில்லை. பிறகு முயலவும்.</translation>
 <translation id="1383876407941801731">Search</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> ஷெல்ஃபிலிருந்து அகற்றப்பட்டது</translation>
 <translation id="1836215606488044471">அசிஸ்டண்ட் (ஏற்றுகிறது...)</translation>
 <translation id="1838895407229022812">நைட் லைட் ஆஃப் செய்யப்பட்டுள்ளது.</translation>
+<translation id="1862380676329487333">புதுப்பித்து வெளியேறு</translation>
 <translation id="1864454756846565995">USB-C சாதனம் (பின்பக்கப் போர்ட்)</translation>
 <translation id="1879018240766558464">மறைநிலைச் சாளரங்களைத் தற்போது பயன்படுத்த முடியாது. பிற ஆப்ஸ் சேமிக்கப்படும்.</translation>
 <translation id="1882814835921407042">மொபைலில் நெட்வொர்க் இல்லை</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">தற்சமயம் உள்ளடக்கத்தை நகலெடுக்கவோ ஒட்டவோ முடியாது</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">அமைப்புகளைத் திற</translation>
+<translation id="4247123849143712100">புதுப்பித்து ஷட் டவுன் செய்</translation>
 <translation id="4250229828105606438">ஸ்கிரீன்ஷாட்</translation>
 <translation id="425364040945105958">சிம் இல்லை</translation>
 <translation id="4261870227682513959">அறிவிப்பு அமைப்புகளைக் காண்பிக்கும். அறிவிப்புகள் முடக்கப்பட்டுள்ளன</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> என்பது நிர்வகிக்கப்பட்ட ஓர் அமர்வாகும், <ph name="MANAGER" /> இதை நிர்வகிக்கிறது</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> இணைக்கப்பட்டது</translation>
 <translation id="6351032674660237738">பயன்பாட்டுப் பரிந்துரைகள்</translation>
+<translation id="6359587239691116345">சமீபத்திய அம்சங்களையும் பாதுகாப்பு மேம்பாடுகளையும் பெறலாம். இந்தப் புதுப்பிப்பை நிராகரித்தால் உங்கள் சாதனம் சரியாகச் செயல்படாமல் போகக்கூடும். அத்துடன் பாதுகாப்பு மற்றும் செயல்திறன் சிக்கல்களும் ஏற்படக்கூடும்.</translation>
 <translation id="6376931439017688372">புளூடூத் இயக்கப்பட்டுள்ளது</translation>
 <translation id="6381109794406942707">சாதனத்தை அன்லாக் செய்ய உங்கள் பின்னை உள்ளிடவும்.</translation>
 <translation id="639644700271529076">CAPS LOCK முடக்கப்பட்டுள்ளது</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820">காலக்கெடுவுக்கு முன்பு இந்த <ph name="DEVICE_TYPE" /> ஐப் புதுப்பிக்குமாறு <ph name="MANAGER" /> கோருகிறது</translation>
 <translation id="649452524636452238">ஸ்மார்ட் கார்டு பின்</translation>
 <translation id="6495400115277918834">பிக்ச்சர்-இன்-பிக்ச்சர் காட்டப்படுகிறது, ஃபோகஸ் செய்ய Alt+Shift+V அழுத்தவும்</translation>
+<translation id="6500896621837555595">புதுப்பி</translation>
 <translation id="6501401484702599040"><ph name="RECEIVER_NAME" />க்குத் திரையை அனுப்புகிறது</translation>
 <translation id="6515727200518652613">கேமரா இணைப்பு துண்டிக்கப்பட்டது. மீண்டும் இணைக்க முயலவும்.</translation>
 <translation id="6520517963145875092">படமெடுக்க, சாளரத்தைத் தேர்ந்தெடுக்கவும்</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">பேட்டரி நேரத்தைக் கணக்கிடுகிறது.</translation>
 <translation id="8061464966246066292">உயர் மாறுபாடு</translation>
 <translation id="8083540854303889870">பின்னர் பயன்படுத்தச் சேமிக்கப்பட்டவை</translation>
+<translation id="8091387634532529612">தானியங்குப் புதுப்பிப்புகள்</translation>
 <translation id="8098591350844501178"><ph name="RECEIVER_NAME" />க்குத் திரையை அனுப்புவதை நிறுத்து</translation>
 <translation id="8113423164597455979">எல்லா ஆப்ஸுக்கும் இயக்கு</translation>
 <translation id="8120151603115102514">மொபைலில் பூட்டுத்திரை இல்லை. Chromebookகை திறக்க கடவுச்சொல் உள்ளிடுக</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949"><ph name="QUERY" />க்கான <ph name="RESULT_COUNT" /> முடிவுகளைக் காட்டுகிறது</translation>
 <translation id="98515147261107953">லேண்ட்ஸ்கேப்</translation>
 <translation id="990277280839877440"><ph name="WINDOW_TITILE" /> சாளரம் மூடப்பட்டது.</translation>
+<translation id="996204416024568215">சமீபத்திய அம்சங்களையும் பாதுகாப்பு மேம்பாடுகளையும் பெறலாம். புதுப்பித்தல் செயல்பாடு பின்னணியில் நடைபெறும்.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index dcc9416..9a96761 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">Sağa</translation>
 <translation id="1351937230027495976">Menüyü daralt</translation>
 <translation id="1364382257761975320">Chromebook'unuzun kilidini açmak için parmak izinizi kullanın</translation>
+<translation id="1365866993922957110">Otomatik güncellemeler al</translation>
 <translation id="1372545819342940910">Masayı daha sonra kullanmak için kaydet</translation>
 <translation id="1383597849754832576">Canlı Altyazı dosyaları indirilemiyor. Daha sonra tekrar deneyin.</translation>
 <translation id="1383876407941801731">Ara</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> sabitlemesi kaldırıldı</translation>
 <translation id="1836215606488044471">Asistan (yükleniyor...)</translation>
 <translation id="1838895407229022812">Gece Işığı kapalı.</translation>
+<translation id="1862380676329487333">Güncelle ve oturumu kapat</translation>
 <translation id="1864454756846565995">USB-C cihaz (arka bağlantı noktası)</translation>
 <translation id="1879018240766558464">Gizli pencereler şu anda desteklenmiyor. Diğer uygulamalar kaydedilecek.</translation>
 <translation id="1882814835921407042">Mobil ağ yok</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">Şu anda içerik kopyalama veya yapıştırma işlemi yapılamıyor</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">Ayarları aç</translation>
+<translation id="4247123849143712100">Güncelle ve kapat</translation>
 <translation id="4250229828105606438">Ekran görüntüsü</translation>
 <translation id="425364040945105958">SIM kart yok</translation>
 <translation id="4261870227682513959">Bildirim ayarlarını göster. Bildirimler kapalı</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" />, <ph name="MANAGER" /> tarafından yönetilen bir oturumdur</translation>
 <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> bağlandı</translation>
 <translation id="6351032674660237738">UYGULAMA ÖNERİLERİ</translation>
+<translation id="6359587239691116345">En son özellikleri ve güvenlik iyileştirmelerini edinin. Bu güncellemeyi reddederseniz cihazınız artık düzgün çalışmayabilir, ayrıca güvenlik ve performans sorunları yaşayabilirsiniz.</translation>
 <translation id="6376931439017688372">Bluetooth açık</translation>
 <translation id="6381109794406942707">Cihazın kilidini açmak için PIN'inizi girin.</translation>
 <translation id="639644700271529076">CAPS LOCK kapalı</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820"><ph name="MANAGER" /> son tarihten önce bu <ph name="DEVICE_TYPE" /> cihazı güncellemenizi gerektiriyor</translation>
 <translation id="649452524636452238">Akıllı kart PIN'i</translation>
 <translation id="6495400115277918834">Pencere içinde pencere başlatıldı, odaklamak için Alt+Üst Karakter+V tuşlarına basın</translation>
+<translation id="6500896621837555595">Güncelle</translation>
 <translation id="6501401484702599040">Ekran, <ph name="RECEIVER_NAME" /> üzerinde yayınlanıyor</translation>
 <translation id="6515727200518652613">Kamera bağlantısı kesildi, yeniden bağlanmaya çalışılıyor.</translation>
 <translation id="6520517963145875092">Ekran görüntüsünü almak için pencere seçin</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">Pilin süresi hesaplanıyor.</translation>
 <translation id="8061464966246066292">Yüksek kontrast</translation>
 <translation id="8083540854303889870">Daha sonra kullanmak için kaydedildi</translation>
+<translation id="8091387634532529612">Otomatik güncellemeler</translation>
 <translation id="8098591350844501178">Ekranın <ph name="RECEIVER_NAME" /> cihazına yayınını durdur</translation>
 <translation id="8113423164597455979">Açık, tümü</translation>
 <translation id="8120151603115102514">Telefonunuzda kilit ekranı yok. Chromebook'un kilidini açmak için şifreyi girin.</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949"><ph name="QUERY" /> için <ph name="RESULT_COUNT" /> sonuç gösteriliyor</translation>
 <translation id="98515147261107953">Yatay</translation>
 <translation id="990277280839877440"><ph name="WINDOW_TITILE" /> penceresi kapandı.</translation>
+<translation id="996204416024568215">En son özellikleri ve güvenlik iyileştirmelerini edinin. Güncellemeler arka planda gerçekleşir.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index c3adf63d..afb7557 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">Phải</translation>
 <translation id="1351937230027495976">Thu gọn menu</translation>
 <translation id="1364382257761975320">Hãy dùng vân tay của bạn để mở khóa Chromebook</translation>
+<translation id="1365866993922957110">Nhận bản cập nhật tự động</translation>
 <translation id="1372545819342940910">Lưu không gian làm việc để dùng sau</translation>
 <translation id="1383597849754832576">Không thể tải tệp mã chuyển lời nói thành văn bản xuống. Hãy thử lại sau.</translation>
 <translation id="1383876407941801731">Tìm kiếm</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064">Đã bỏ ghim <ph name="ITEM_TITLE" /></translation>
 <translation id="1836215606488044471">Trợ lý (đang tải...)</translation>
 <translation id="1838895407229022812">Chế độ Ánh sáng đêm đang tắt.</translation>
+<translation id="1862380676329487333">Cập nhật và đăng xuất</translation>
 <translation id="1864454756846565995">Thiết bị USB-C (cổng phía sau)</translation>
 <translation id="1879018240766558464">Hiện không hỗ trợ cửa sổ ẩn danh. Các ứng dụng khác sẽ được lưu.</translation>
 <translation id="1882814835921407042">Không có mạng di động</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">Không thể sao chép hoặc dán nội dung vào lúc này</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4242533952199664413">Mở phần cài đặt</translation>
+<translation id="4247123849143712100">Cập nhật và tắt</translation>
 <translation id="4250229828105606438">Ảnh chụp màn hình</translation>
 <translation id="425364040945105958">Không có SIM</translation>
 <translation id="4261870227682513959">Hiển thị các tùy chọn cài đặt thông báo. Thông báo hiện đang tắt</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> là phiên do <ph name="MANAGER" /> quản lý</translation>
 <translation id="6344138931392227467">Đã kết nối <ph name="DEVICE_NAME" /></translation>
 <translation id="6351032674660237738">ĐỀ XUẤT ỨNG DỤNG</translation>
+<translation id="6359587239691116345">Nhận các tính năng mới nhất và mức độ bảo mật cao hơn. Nếu bạn từ chối bản cập nhật này, thiết bị của bạn có thể sẽ không còn hoạt động bình thường. Đồng thời, bạn có thể gặp các vấn đề về hiệu suất và bảo mật.</translation>
 <translation id="6376931439017688372">Bluetooth đang bật</translation>
 <translation id="6381109794406942707">Để mở khóa thiết bị, hãy nhập mã PIN của bạn.</translation>
 <translation id="639644700271529076">CAPS LOCK tắt</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820">Theo yêu cầu của <ph name="MANAGER" />, bạn phải cập nhật thiết bị <ph name="DEVICE_TYPE" /> của mình trước thời hạn</translation>
 <translation id="649452524636452238">Mã PIN của thẻ thông minh</translation>
 <translation id="6495400115277918834">Tính năng hình trong hình đã bắt đầu, hãy nhấn tổ hợp phím Alt+Shift+V để lấy tâm điểm</translation>
+<translation id="6500896621837555595">Cập nhật</translation>
 <translation id="6501401484702599040">Đang truyền màn hình tới <ph name="RECEIVER_NAME" /></translation>
 <translation id="6515727200518652613">Máy ảnh bị mất kết nối, đang cố gắng kết nối lại.</translation>
 <translation id="6520517963145875092">Chọn một cửa sổ để chụp</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">Đang tính toán thời lượng pin.</translation>
 <translation id="8061464966246066292">Độ tương phản cao</translation>
 <translation id="8083540854303889870">Lưu để dùng sau</translation>
+<translation id="8091387634532529612">Cập nhật tự động</translation>
 <translation id="8098591350844501178">Dừng truyền màn hình tới <ph name="RECEIVER_NAME" /></translation>
 <translation id="8113423164597455979">Bật, tất cả</translation>
 <translation id="8120151603115102514">Điện thoại của bạn không có màn hình khoá. Hãy nhập mật khẩu để mở khoá chiếc Chromebook của bạn.</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949">Đang hiển thị <ph name="RESULT_COUNT" /> kết quả cho <ph name="QUERY" /></translation>
 <translation id="98515147261107953">Khổ ngang</translation>
 <translation id="990277280839877440">Đã đóng cửa sổ <ph name="WINDOW_TITILE" />.</translation>
+<translation id="996204416024568215">Nhận các tính năng mới nhất và mức độ bảo mật cao hơn. Quá trình cập nhật diễn ra trong nền.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index f474536..db470e3 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -1231,7 +1231,7 @@
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" />:此设置由您的管理员管理。</translation>
 <translation id="8155628902202578800">打开与 <ph name="USER_EMAIL_ADDRESS" /> 对应的信息对话框</translation>
 <translation id="8167567890448493835">目前使用的是“<ph name="LOCALE_NAME" />”</translation>
-<translation id="8183592608247778598">在 <ph name="DEVICE_TYPE" /> 上查看手机中的近期照片、媒体、通知和应用</translation>
+<translation id="8183592608247778598">在 <ph name="DEVICE_TYPE" /> 上查看手机中近期的照片、媒体、通知和应用</translation>
 <translation id="8192202700944119416">已隐藏通知。</translation>
 <translation id="8196787716797768628">在平板电脑模式下,使用手势快速切换应用以及与 Chromebook 互动。</translation>
 <translation id="8200772114523450471">继续</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb
index 63636ac..aaa67f6 100644
--- a/ash/strings/ash_strings_zu.xtb
+++ b/ash/strings/ash_strings_zu.xtb
@@ -84,6 +84,7 @@
 <translation id="1346748346194534595">Kwesokudla</translation>
 <translation id="1351937230027495976">Goqa imenyu</translation>
 <translation id="1364382257761975320">Ukuze uvule i-Chromebook yakho, sebenzisa isigxivizo somunwe wakho</translation>
+<translation id="1365866993922957110">Thola izibuyekezo ezizenzakalelayo</translation>
 <translation id="1372545819342940910">Londolozela itafula okwakamuva</translation>
 <translation id="1383597849754832576">Ayikwazi ukulanda amafayela wenkulumo. Zama futhi emuva kwesikhathi.</translation>
 <translation id="1383876407941801731">Sesha</translation>
@@ -161,6 +162,7 @@
 <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> isuswe ukuphina</translation>
 <translation id="1836215606488044471">Umsizi (uyalayisha...)</translation>
 <translation id="1838895407229022812">Isibani sasebusuku sivaliwe.</translation>
+<translation id="1862380676329487333">Buyekeza bese uyaphuma ngemvume</translation>
 <translation id="1864454756846565995">Idivayisi ye-USB-C (imbobo esemuva)</translation>
 <translation id="1879018240766558464">Amawindi e-Incognito awasekelwa okwamanje. Amanye ama-app azolondolozwa.</translation>
 <translation id="1882814835921407042">Ayikho inethiwekhi yeselula</translation>
@@ -561,6 +563,7 @@
 <translation id="423685346499232137">Ayikwazi ukukopisha noma ukunamathisela okuqukethwe ngalesi sikhathi</translation>
 <translation id="4239069858505860023">I-GPRS</translation>
 <translation id="4242533952199664413">Vula izilungiselelo</translation>
+<translation id="4247123849143712100">Buyekeza bese uyacisha</translation>
 <translation id="4250229828105606438">Isithombe-skrini</translation>
 <translation id="425364040945105958">Ayikho i-SIM</translation>
 <translation id="4261870227682513959">Bonisa izilungiselelo zesaziso. Izaziso zivaliwe</translation>
@@ -920,6 +923,7 @@
 <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> iseshini ephethwe ngu-<ph name="MANAGER" /></translation>
 <translation id="6344138931392227467">I-<ph name="DEVICE_NAME" /> ixhunyiwe</translation>
 <translation id="6351032674660237738">IZIPHAKAMISO ZOHLELO LOKUSEBENZA</translation>
+<translation id="6359587239691116345">Thola izakhi zakamuva nokuthuthukiswa kokuvikeleka. Uma wenqaba lesi sibuyekezo, idivayisi yakho ingase ingasasebenzi kahle futhi ungase ube nezinkinga zokuvikeleka nokusebenza.</translation>
 <translation id="6376931439017688372">I-Bluetooth ivuliwe</translation>
 <translation id="6381109794406942707">Ukuze uvule idivayisi, faka iphinikhodi.</translation>
 <translation id="639644700271529076">I-CAPS LOCK ivaliwe</translation>
@@ -941,6 +945,7 @@
 <translation id="6491071886865974820">I-<ph name="MANAGER" /> ifuna ukuba ubuyekeze i-<ph name="DEVICE_TYPE" /> yakho ngaphambi komnqamulajuqu</translation>
 <translation id="649452524636452238">Iphinikhodi yekhadi elisebenzisa ubuchwepheshe besimanje</translation>
 <translation id="6495400115277918834">Isithombe esithombeni siqalile, Alt+Shift+V ukuze ugxile</translation>
+<translation id="6500896621837555595">Buyekeza</translation>
 <translation id="6501401484702599040">Isakaza isikrini ku-<ph name="RECEIVER_NAME" /></translation>
 <translation id="6515727200518652613">Ikhamera ilahlekile, izama ukuxhuma.</translation>
 <translation id="6520517963145875092">Khetha iwindi lokuthathwa</translation>
@@ -1218,6 +1223,7 @@
 <translation id="8054466585765276473">Ibala isikhathi sebhethri</translation>
 <translation id="8061464966246066292">Ukugqama okuphezulu</translation>
 <translation id="8083540854303889870">Kulondolozelwe kamuva</translation>
+<translation id="8091387634532529612">Ukubuyekezwa okuzenzekelayo</translation>
 <translation id="8098591350844501178">Misa ukusakaza isikrini ku-<ph name="RECEIVER_NAME" /></translation>
 <translation id="8113423164597455979">Uvule ama-app</translation>
 <translation id="8120151603115102514">Ifoni yakho ayinaso isikrini sokukhiya. Ukuze uvule i-Chromebook yakho, faka iphasiwedi.</translation>
@@ -1424,4 +1430,5 @@
 <translation id="974545358917229949">Kuboniswa imphumela engu-<ph name="RESULT_COUNT" /> ye-<ph name="QUERY" /></translation>
 <translation id="98515147261107953">Ukwakheka kwezwe</translation>
 <translation id="990277280839877440">Iwindi elingu-<ph name="WINDOW_TITILE" /> livaliwe.</translation>
+<translation id="996204416024568215">Thola izakhi zakamuva nokuthuthukiswa kokuvikeleka. Izibuyekezo zenzeka ngemuva.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/system/accessibility/autoclick_menu_bubble_controller.cc b/ash/system/accessibility/autoclick_menu_bubble_controller.cc
index e431f2f..55b7e43 100644
--- a/ash/system/accessibility/autoclick_menu_bubble_controller.cc
+++ b/ash/system/accessibility/autoclick_menu_bubble_controller.cc
@@ -163,8 +163,12 @@
       gfx::Insets::TLBR(kUnifiedTopShortcutSpacing, 0, 0, 0)));
   bubble_view_->AddChildView(menu_view_);
 
-  menu_view_->SetPaintToLayer();
-  menu_view_->layer()->SetFillsBoundsOpaquely(false);
+  // In dark light mode, we switch TrayBubbleView to use a textured layer
+  // instead of solid color layer, so no need to create an extra layer here.
+  if (!features::IsDarkLightModeEnabled()) {
+    menu_view_->SetPaintToLayer();
+    menu_view_->layer()->SetFillsBoundsOpaquely(false);
+  }
 
   bubble_widget_ = views::BubbleDialogDelegateView::CreateBubble(bubble_view_);
   TrayBackgroundView::InitializeBubbleAnimations(bubble_widget_);
diff --git a/ash/system/accessibility/autoclick_scroll_bubble_controller.cc b/ash/system/accessibility/autoclick_scroll_bubble_controller.cc
index 8e18307..f9f5e7bb 100644
--- a/ash/system/accessibility/autoclick_scroll_bubble_controller.cc
+++ b/ash/system/accessibility/autoclick_scroll_bubble_controller.cc
@@ -211,8 +211,13 @@
   scroll_view_->SetBorder(views::CreateEmptyBorder(
       gfx::Insets::TLBR(kUnifiedTopShortcutSpacing, 0, 0, 0)));
   bubble_view_->AddChildView(scroll_view_);
-  scroll_view_->SetPaintToLayer();
-  scroll_view_->layer()->SetFillsBoundsOpaquely(false);
+
+  // In dark light mode, we switch TrayBubbleView to use a textured layer
+  // instead of solid color layer, so no need to create an extra layer here.
+  if (!features::IsDarkLightModeEnabled()) {
+    scroll_view_->SetPaintToLayer();
+    scroll_view_->layer()->SetFillsBoundsOpaquely(false);
+  }
 
   bubble_widget_ = views::BubbleDialogDelegateView::CreateBubble(bubble_view_);
   TrayBackgroundView::InitializeBubbleAnimations(bubble_widget_);
diff --git a/ash/system/accessibility/floating_accessibility_controller.cc b/ash/system/accessibility/floating_accessibility_controller.cc
index d268411..450dc22 100644
--- a/ash/system/accessibility/floating_accessibility_controller.cc
+++ b/ash/system/accessibility/floating_accessibility_controller.cc
@@ -81,8 +81,12 @@
   bubble_view_->SetFocusBehavior(
       ActionableView::FocusBehavior::ACCESSIBLE_ONLY);
 
-  menu_view_->SetPaintToLayer();
-  menu_view_->layer()->SetFillsBoundsOpaquely(false);
+  // In dark light mode, we switch TrayBubbleView to use a textured layer
+  // instead of solid color layer, so no need to create an extra layer here.
+  if (!features::IsDarkLightModeEnabled()) {
+    menu_view_->SetPaintToLayer();
+    menu_view_->layer()->SetFillsBoundsOpaquely(false);
+  }
 
   bubble_widget_ = views::BubbleDialogDelegateView::CreateBubble(bubble_view_);
   bubble_view_->SetCanActivate(true);
diff --git a/ash/system/accessibility/floating_accessibility_detailed_controller.cc b/ash/system/accessibility/floating_accessibility_detailed_controller.cc
index f37a0548..1ec4052e 100644
--- a/ash/system/accessibility/floating_accessibility_detailed_controller.cc
+++ b/ash/system/accessibility/floating_accessibility_detailed_controller.cc
@@ -87,8 +87,13 @@
   bubble_view_->SetPreferredSize(
       gfx::Size(kTrayMenuWidth, kDetailedViewHeightDip));
   bubble_view_->SetFocusBehavior(ActionableView::FocusBehavior::ALWAYS);
-  detailed_view_->SetPaintToLayer();
-  detailed_view_->layer()->SetFillsBoundsOpaquely(false);
+
+  // In dark light mode, we switch TrayBubbleView to use a textured layer
+  // instead of solid color layer, so no need to create an extra layer here.
+  if (!features::IsDarkLightModeEnabled()) {
+    detailed_view_->SetPaintToLayer();
+    detailed_view_->layer()->SetFillsBoundsOpaquely(false);
+  }
 
   bubble_widget_ = views::BubbleDialogDelegateView::CreateBubble(bubble_view_);
   bubble_view_->SetCanActivate(true);
diff --git a/ash/system/accessibility/select_to_speak/select_to_speak_menu_bubble_controller.cc b/ash/system/accessibility/select_to_speak/select_to_speak_menu_bubble_controller.cc
index 7066e3d..9da932a 100644
--- a/ash/system/accessibility/select_to_speak/select_to_speak_menu_bubble_controller.cc
+++ b/ash/system/accessibility/select_to_speak/select_to_speak_menu_bubble_controller.cc
@@ -62,8 +62,13 @@
         gfx::Insets::TLBR(kUnifiedTopShortcutSpacing, 0, 0, 0)));
     bubble_view_->AddChildView(menu_view_);
     menu_view_->SetSpeedButtonToggled(false);
-    menu_view_->SetPaintToLayer();
-    menu_view_->layer()->SetFillsBoundsOpaquely(false);
+
+    // In dark light mode, we switch TrayBubbleView to use a textured layer
+    // instead of solid color layer, so no need to create an extra layer here.
+    if (!features::IsDarkLightModeEnabled()) {
+      menu_view_->SetPaintToLayer();
+      menu_view_->layer()->SetFillsBoundsOpaquely(false);
+    }
 
     bubble_widget_ =
         views::BubbleDialogDelegateView::CreateBubble(bubble_view_);
diff --git a/ash/system/accessibility/select_to_speak/select_to_speak_speed_bubble_controller.cc b/ash/system/accessibility/select_to_speak/select_to_speak_speed_bubble_controller.cc
index 4475a8d..c4357c90 100644
--- a/ash/system/accessibility/select_to_speak/select_to_speak_speed_bubble_controller.cc
+++ b/ash/system/accessibility/select_to_speak/select_to_speak_speed_bubble_controller.cc
@@ -62,8 +62,13 @@
 
     speed_view_ = new SelectToSpeakSpeedView(this, speech_rate);
     bubble_view_->AddChildView(speed_view_);
-    speed_view_->SetPaintToLayer();
-    speed_view_->layer()->SetFillsBoundsOpaquely(false);
+
+    // In dark light mode, we switch TrayBubbleView to use a textured layer
+    // instead of solid color layer, so no need to create an extra layer here.
+    if (!features::IsDarkLightModeEnabled()) {
+      speed_view_->SetPaintToLayer();
+      speed_view_->layer()->SetFillsBoundsOpaquely(false);
+    }
 
     bubble_widget_ =
         views::BubbleDialogDelegateView::CreateBubble(bubble_view_);
diff --git a/ash/system/accessibility/switch_access/switch_access_menu_bubble_controller.cc b/ash/system/accessibility/switch_access/switch_access_menu_bubble_controller.cc
index 4f1d6e5..fa759a1 100644
--- a/ash/system/accessibility/switch_access/switch_access_menu_bubble_controller.cc
+++ b/ash/system/accessibility/switch_access/switch_access_menu_bubble_controller.cc
@@ -56,8 +56,12 @@
     menu_view_->SetBorder(views::CreateEmptyBorder(kBubbleMenuPadding));
     bubble_view_->AddChildView(menu_view_);
 
-    menu_view_->SetPaintToLayer();
-    menu_view_->layer()->SetFillsBoundsOpaquely(false);
+    // In dark light mode, we switch TrayBubbleView to use a textured layer
+    // instead of solid color layer, so no need to create an extra layer here.
+    if (!features::IsDarkLightModeEnabled()) {
+      menu_view_->SetPaintToLayer();
+      menu_view_->layer()->SetFillsBoundsOpaquely(false);
+    }
 
     widget_ = views::BubbleDialogDelegateView::CreateBubble(bubble_view_);
     TrayBackgroundView::InitializeBubbleAnimations(widget_);
diff --git a/ash/system/channel_indicator/channel_indicator.cc b/ash/system/channel_indicator/channel_indicator.cc
index a9fe873..e8a4dc0 100644
--- a/ash/system/channel_indicator/channel_indicator.cc
+++ b/ash/system/channel_indicator/channel_indicator.cc
@@ -5,39 +5,49 @@
 #include "ash/system/channel_indicator/channel_indicator.h"
 
 #include "ash/resources/vector_icons/vector_icons.h"
+#include "ash/session/session_controller_impl.h"
 #include "ash/shelf/shelf.h"
+#include "ash/shell.h"
 #include "ash/system/channel_indicator/channel_indicator_utils.h"
 #include "ash/system/tray/tray_constants.h"
+#include "base/memory/weak_ptr.h"
+#include "base/strings/strcat.h"
+#include "components/session_manager/session_manager_types.h"
+#include "components/version_info/channel.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/size.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/views/background.h"
 #include "ui/views/border.h"
 #include "ui/views/controls/image_view.h"
+#include "ui/views/layout/box_layout.h"
+#include "ui/views/view.h"
 
 namespace ash {
 
 namespace {
 
+// Background rounded rectangle corner radius.
 constexpr int kIndicatorBgCornerRadius = 50;
 
+// Size of vertical padding area around the icon or text.
+constexpr int kIndicatorVerticalInset = 8;
+
 }  // namespace
 
 ChannelIndicatorView::ChannelIndicatorView(Shelf* shelf,
                                            version_info::Channel channel)
-    : TrayItemView(shelf), channel_(channel) {
+    : TrayItemView(shelf), channel_(channel), session_observer_(this) {
   SetVisible(false);
-  CreateImageView();
-  Update(channel_);
+  SetBorder(
+      views::CreateEmptyBorder(gfx::Insets::VH(kIndicatorVerticalInset, 0)));
+  Update();
 }
 
 ChannelIndicatorView::~ChannelIndicatorView() = default;
 
-gfx::Size ChannelIndicatorView::CalculatePreferredSize() const {
-  return gfx::Size(kUnifiedTrayChannelIndicatorDimension,
-                   kUnifiedTrayChannelIndicatorDimension);
-}
-
 void ChannelIndicatorView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
   node_data->SetName(accessible_name_);
 }
@@ -57,63 +67,120 @@
 
 void ChannelIndicatorView::OnThemeChanged() {
   TrayItemView::OnThemeChanged();
-  Update(channel_);
-}
 
-void ChannelIndicatorView::HandleLocaleChange() {
-  Update(channel_);
-}
-
-void ChannelIndicatorView::Update(version_info::Channel channel) {
-  if (!channel_indicator_utils::IsDisplayableChannel(channel))
+  if (Shell::Get()->session_controller()->GetSessionState() ==
+      session_manager::SessionState::ACTIVE) {
+    // User is logged in, set image view colors.
+    if (image_view()) {
+      image_view()->SetBackground(views::CreateRoundedRectBackground(
+          channel_indicator_utils::GetBgColor(channel_),
+          kIndicatorBgCornerRadius));
+      image_view()->SetImage(gfx::CreateVectorIcon(
+          channel_indicator_utils::GetVectorIcon(channel_),
+          kUnifiedTrayChannelIndicatorDimension,
+          channel_indicator_utils::GetFgColor(channel_)));
+    }
     return;
+  }
 
-  SetVisible(true);
-  SetAccessibleName(channel);
-  SetTooltip(channel);
-  SetImage(channel);
-}
-
-void ChannelIndicatorView::SetImage(version_info::Channel channel) {
-  DCHECK(channel_indicator_utils::IsDisplayableChannel(channel));
-
-  SetBorder(views::CreateEmptyBorder(
-      gfx::Insets::VH(kUnifiedTrayChannelIndicatorDimension / 2, 0)));
-  image_view()->SetBackground(views::CreateRoundedRectBackground(
-      channel_indicator_utils::GetBgColor(channel), kIndicatorBgCornerRadius));
-
-  switch (channel) {
-    case version_info::Channel::BETA:
-      image_view()->SetImage(gfx::CreateVectorIcon(
-          kChannelBetaIcon, kUnifiedTrayChannelIndicatorDimension,
-          channel_indicator_utils::GetFgColor(channel)));
-      break;
-    case version_info::Channel::DEV:
-      image_view()->SetImage(gfx::CreateVectorIcon(
-          kChannelDevIcon, kUnifiedTrayChannelIndicatorDimension,
-          channel_indicator_utils::GetFgColor(channel)));
-      break;
-    case version_info::Channel::CANARY:
-      image_view()->SetImage(gfx::CreateVectorIcon(
-          kChannelCanaryIcon, kUnifiedTrayChannelIndicatorDimension,
-          channel_indicator_utils::GetFgColor(channel)));
-      break;
-    default:
-      break;
+  // User is not logged in, set label colors.
+  if (label()) {
+    label()->SetBackground(views::CreateRoundedRectBackground(
+        channel_indicator_utils::GetBgColor(channel_),
+        kIndicatorBgCornerRadius));
+    label()->SetEnabledColor(channel_indicator_utils::GetFgColor(channel_));
   }
 }
 
-void ChannelIndicatorView::SetAccessibleName(version_info::Channel channel) {
-  DCHECK(channel_indicator_utils::IsDisplayableChannel(channel));
-  accessible_name_ = l10n_util::GetStringUTF16(
-      channel_indicator_utils::GetChannelNameStringResourceID(channel, true));
-  image_view()->SetAccessibleName(accessible_name_);
+void ChannelIndicatorView::HandleLocaleChange() {
+  Update();
 }
 
-void ChannelIndicatorView::SetTooltip(version_info::Channel channel) {
-  DCHECK(channel_indicator_utils::IsDisplayableChannel(channel));
+void ChannelIndicatorView::Update() {
+  if (!channel_indicator_utils::IsDisplayableChannel(channel_))
+    return;
+
+  SetImageOrText();
+  SetVisible(true);
+  SetAccessibleName();
+  SetTooltip();
+}
+
+void ChannelIndicatorView::SetImageOrText() {
+  DCHECK(channel_indicator_utils::IsDisplayableChannel(channel_));
+
+  if (Shell::Get()->session_controller()->GetSessionState() ==
+      session_manager::SessionState::ACTIVE) {
+    // User is logged in, show the icon.
+    if (image_view())
+      return;
+
+    DestroyLabel();
+    CreateImageView();
+    image_view()->SetBackground(views::CreateRoundedRectBackground(
+        channel_indicator_utils::GetBgColor(channel_),
+        kIndicatorBgCornerRadius));
+    image_view()->SetImage(
+        gfx::CreateVectorIcon(channel_indicator_utils::GetVectorIcon(channel_),
+                              kUnifiedTrayChannelIndicatorDimension,
+                              channel_indicator_utils::GetFgColor(channel_)));
+    PreferredSizeChanged();
+    return;
+  }
+
+  // User is not logged in, show the channel name.
+  if (label())
+    return;
+
+  DestroyImageView();
+  CreateLabel();
+  label()->SetBorder(views::CreateEmptyBorder(gfx::Insets::VH(0, 6)));
+  label()->SetBackground(views::CreateRoundedRectBackground(
+      channel_indicator_utils::GetBgColor(channel_), kIndicatorBgCornerRadius));
+  label()->SetEnabledColor(channel_indicator_utils::GetFgColor(channel_));
+  label()->SetText(l10n_util::GetStringUTF16(
+      channel_indicator_utils::GetChannelNameStringResourceID(
+          channel_,
+          /*append_channel=*/false)));
+  PreferredSizeChanged();
+}
+
+void ChannelIndicatorView::SetAccessibleName() {
+  DCHECK(channel_indicator_utils::IsDisplayableChannel(channel_));
+  accessible_name_ = l10n_util::GetStringUTF16(
+      channel_indicator_utils::GetChannelNameStringResourceID(
+          channel_, /*append_channel=*/true));
+
+  // If icon is showing, set it on the image view.
+  if (image_view()) {
+    DCHECK(!label());
+    image_view()->SetAccessibleName(accessible_name_);
+    return;
+  }
+
+  // Otherwise set it on the label.
+  if (label())
+    label()->SetAccessibleName(accessible_name_);
+}
+
+void ChannelIndicatorView::SetTooltip() {
+  DCHECK(channel_indicator_utils::IsDisplayableChannel(channel_));
   tooltip_ = l10n_util::GetStringUTF16(
-      channel_indicator_utils::GetChannelNameStringResourceID(channel, true));
+      channel_indicator_utils::GetChannelNameStringResourceID(
+          channel_, /*append_channel=*/true));
+}
+
+void ChannelIndicatorView::OnSessionStateChanged(
+    session_manager::SessionState state) {
+  Update();
+}
+
+bool ChannelIndicatorView::IsLabelVisibleForTesting() {
+  return label() && label()->GetVisible();
+}
+
+bool ChannelIndicatorView::IsImageViewVisibleForTesting() {
+  return image_view() && image_view()->GetVisible();
 }
 
 }  // namespace ash
diff --git a/ash/system/channel_indicator/channel_indicator.h b/ash/system/channel_indicator/channel_indicator.h
index d05075f..3fbd15b 100644
--- a/ash/system/channel_indicator/channel_indicator.h
+++ b/ash/system/channel_indicator/channel_indicator.h
@@ -5,14 +5,18 @@
 #ifndef ASH_SYSTEM_CHANNEL_INDICATOR_CHANNEL_INDICATOR_H_
 #define ASH_SYSTEM_CHANNEL_INDICATOR_CHANNEL_INDICATOR_H_
 
+#include "ash/public/cpp/session/session_observer.h"
 #include "ash/system/tray/tray_item_view.h"
+#include "base/memory/weak_ptr.h"
+#include "components/session_manager/session_manager_types.h"
 #include "components/version_info/channel.h"
 
 namespace ash {
 
 // A view that resides in the system tray, to make it obvious to the user when a
 // device is running on a release track other than "stable."
-class ChannelIndicatorView : public TrayItemView {
+class ASH_EXPORT ChannelIndicatorView : public TrayItemView,
+                                        public SessionObserver {
  public:
   ChannelIndicatorView(Shelf* shelf, version_info::Channel channel);
   ChannelIndicatorView(const ChannelIndicatorView&) = delete;
@@ -21,7 +25,6 @@
   ~ChannelIndicatorView() override;
 
   // views::View:
-  gfx::Size CalculatePreferredSize() const override;
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
   views::View* GetTooltipHandlerForPoint(const gfx::Point& point) override;
   std::u16string GetTooltipText(const gfx::Point& p) const override;
@@ -31,13 +34,18 @@
   // TrayItemView:
   void HandleLocaleChange() override;
 
+  // SessionObserver:
+  void OnSessionStateChanged(session_manager::SessionState state) override;
+
+  // Introspection methods for testing.
+  bool IsLabelVisibleForTesting();
+  bool IsImageViewVisibleForTesting();
+
  private:
-  // Functions called downstream from Update(), that make no assumptions about
-  // the value of the `channel_` member variable.
-  void Update(version_info::Channel channel);
-  void SetImage(version_info::Channel channel);
-  void SetAccessibleName(version_info::Channel channel);
-  void SetTooltip(version_info::Channel channel);
+  void Update();
+  void SetImageOrText();
+  void SetAccessibleName();
+  void SetTooltip();
 
   // The localized string used to announce this view in accessibility mode.
   std::u16string accessible_name_;
@@ -47,6 +55,10 @@
 
   // The release track on which this devices resides.
   const version_info::Channel channel_;
+
+  ScopedSessionObserver session_observer_;
+
+  base::WeakPtrFactory<ChannelIndicatorView> weak_factory_{this};
 };
 
 }  // namespace ash
diff --git a/ash/system/channel_indicator/channel_indicator_quick_settings_view.cc b/ash/system/channel_indicator/channel_indicator_quick_settings_view.cc
index 9c5d623..b6dccc07 100644
--- a/ash/system/channel_indicator/channel_indicator_quick_settings_view.cc
+++ b/ash/system/channel_indicator/channel_indicator_quick_settings_view.cc
@@ -4,6 +4,8 @@
 
 #include "ash/system/channel_indicator/channel_indicator_quick_settings_view.h"
 
+#include <algorithm>
+
 #include "ash/public/cpp/system_tray_client.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/shell.h"
@@ -34,11 +36,20 @@
 
 constexpr int kVersionButtonLargeCornerRadius = 16;
 constexpr int kVersionButtonSmallCornerRadius = 4;
-constexpr SkScalar kVersionButtonCorners[] = {
-    kVersionButtonLargeCornerRadius, kVersionButtonLargeCornerRadius,
-    kVersionButtonSmallCornerRadius, kVersionButtonSmallCornerRadius,
-    kVersionButtonSmallCornerRadius, kVersionButtonSmallCornerRadius,
-    kVersionButtonLargeCornerRadius, kVersionButtonLargeCornerRadius};
+
+constexpr size_t kNumVersionButtonCornerRadii = 8;
+constexpr SkScalar
+    kPartneredVersionButtonCorners[kNumVersionButtonCornerRadii] = {
+        kVersionButtonLargeCornerRadius, kVersionButtonLargeCornerRadius,
+        kVersionButtonSmallCornerRadius, kVersionButtonSmallCornerRadius,
+        kVersionButtonSmallCornerRadius, kVersionButtonSmallCornerRadius,
+        kVersionButtonLargeCornerRadius, kVersionButtonLargeCornerRadius};
+constexpr SkScalar
+    kStandaloneVersionButtonCorners[kNumVersionButtonCornerRadii] = {
+        kVersionButtonLargeCornerRadius, kVersionButtonLargeCornerRadius,
+        kVersionButtonLargeCornerRadius, kVersionButtonLargeCornerRadius,
+        kVersionButtonLargeCornerRadius, kVersionButtonLargeCornerRadius,
+        kVersionButtonLargeCornerRadius, kVersionButtonLargeCornerRadius};
 
 constexpr int kSubmitFeedbackButtonMarginVertical = 6;
 constexpr int kSubmitFeedbackButtonMarginHorizontal = 16;
@@ -57,14 +68,13 @@
 
 constexpr int kButtonSpacing = 2;
 
-}  // namespace
-
-// VersionButton provides a styled button, for devices on a
+// VersionButton is a base class that provides a styled button, for devices on a
 // non-stable release track, that has a label for the channel and ChromeOS
 // version.
-class ASH_EXPORT VersionButton : public views::LabelButton {
+class VersionButton : public views::LabelButton {
  public:
-  explicit VersionButton(version_info::Channel channel)
+  VersionButton(version_info::Channel channel,
+                const SkScalar (&corners)[kNumVersionButtonCornerRadii])
       : LabelButton(
             base::BindRepeating([] {
               Shell::Get()
@@ -74,6 +84,7 @@
             }),
             channel_indicator_utils::GetFullReleaseTrackString(channel)),
         channel_(channel) {
+    std::copy(corners, corners + kNumVersionButtonCornerRadii, corners_);
     SetBorder(views::CreateEmptyBorder(gfx::Insets::VH(
         kVersionButtonMarginVertical, kVersionButtonMarginHorizontal)));
     SetImageLabelSpacing(kVersionButtonImageLabelSpacing);
@@ -93,10 +104,9 @@
     cc::PaintFlags flags;
     flags.setColor(channel_indicator_utils::GetBgColor(channel_));
     flags.setStyle(cc::PaintFlags::kFill_Style);
-    canvas->DrawPath(
-        SkPath().addRoundRect(gfx::RectToSkRect(GetLocalBounds()),
-                              kVersionButtonCorners, SkPathDirection::kCW),
-        flags);
+    canvas->DrawPath(SkPath().addRoundRect(gfx::RectToSkRect(GetLocalBounds()),
+                                           corners_, SkPathDirection::kCW),
+                     flags);
   }
 
   void OnThemeChanged() override {
@@ -111,12 +121,16 @@
     SetEnabledTextColors(channel_indicator_utils::GetFgColor(channel_));
   }
 
+  // The channel itself, BETA, DEV, or CANARY.
   const version_info::Channel channel_;
+
+  // Array of values that represents the rounded rect corners.
+  SkScalar corners_[kNumVersionButtonCornerRadii];
 };
 
 // SubmitFeedbackButton provides a styled button, for devices on a
 // non-stable release track, that allows the user to submit feedback.
-class ASH_EXPORT SubmitFeedbackButton : public IconButton {
+class SubmitFeedbackButton : public IconButton {
  public:
   explicit SubmitFeedbackButton(version_info::Channel channel)
       : IconButton(base::BindRepeating([] {
@@ -154,8 +168,11 @@
   const version_info::Channel channel_;
 };
 
+}  // namespace
+
 ChannelIndicatorQuickSettingsView::ChannelIndicatorQuickSettingsView(
-    version_info::Channel channel) {
+    version_info::Channel channel,
+    bool allow_user_feedback) {
   auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kHorizontal, kUnifiedSystemInfoViewPadding,
       kUnifiedSystemInfoSpacing));
@@ -163,18 +180,23 @@
       views::BoxLayout::CrossAxisAlignment::kCenter);
   layout->set_between_child_spacing(kButtonSpacing);
 
-  version_button_ = AddChildView(std::make_unique<VersionButton>(channel));
-  feedback_button_ =
-      AddChildView(std::make_unique<SubmitFeedbackButton>(channel));
+  version_button_ = AddChildView(std::make_unique<VersionButton>(
+      channel, allow_user_feedback ? kPartneredVersionButtonCorners
+                                   : kStandaloneVersionButtonCorners));
+
+  if (allow_user_feedback) {
+    feedback_button_ =
+        AddChildView(std::make_unique<SubmitFeedbackButton>(channel));
+  }
 }
 
 bool ChannelIndicatorQuickSettingsView::IsVersionButtonVisibleForTesting() {
-  return version_button_->GetVisible();
+  return version_button_ && version_button_->GetVisible();
 }
 
 bool ChannelIndicatorQuickSettingsView::
     IsSubmitFeedbackButtonVisibleForTesting() {
-  return feedback_button_->GetVisible();
+  return feedback_button_ && feedback_button_->GetVisible();
 }
 
 }  // namespace ash
diff --git a/ash/system/channel_indicator/channel_indicator_quick_settings_view.h b/ash/system/channel_indicator/channel_indicator_quick_settings_view.h
index 32f7a9a..31c0f6d 100644
--- a/ash/system/channel_indicator/channel_indicator_quick_settings_view.h
+++ b/ash/system/channel_indicator/channel_indicator_quick_settings_view.h
@@ -11,14 +11,12 @@
 
 namespace ash {
 
-class VersionButton;
-class SubmitFeedbackButton;
-
 // ChannelIndicatorQuickSettingsView contains all of the views included in the
 // channel indicator UI that resides in UnifiedSystemInfoView.
 class ASH_EXPORT ChannelIndicatorQuickSettingsView : public views::View {
  public:
-  explicit ChannelIndicatorQuickSettingsView(version_info::Channel channel);
+  ChannelIndicatorQuickSettingsView(version_info::Channel channel,
+                                    bool allow_user_feedback);
   ChannelIndicatorQuickSettingsView(const ChannelIndicatorQuickSettingsView&) =
       delete;
   ChannelIndicatorQuickSettingsView& operator=(
@@ -31,8 +29,8 @@
 
  private:
   // Refs maintained for unit test introspection methods.
-  VersionButton* version_button_ = nullptr;
-  SubmitFeedbackButton* feedback_button_ = nullptr;
+  views::View* version_button_ = nullptr;
+  views::View* feedback_button_ = nullptr;
 };
 
 }  // namespace ash
diff --git a/ash/system/channel_indicator/channel_indicator_quick_settings_view_unittest.cc b/ash/system/channel_indicator/channel_indicator_quick_settings_view_unittest.cc
index 4cbfc906..0207bdc8 100644
--- a/ash/system/channel_indicator/channel_indicator_quick_settings_view_unittest.cc
+++ b/ash/system/channel_indicator/channel_indicator_quick_settings_view_unittest.cc
@@ -5,6 +5,7 @@
 #include "ash/system/channel_indicator/channel_indicator_quick_settings_view.h"
 
 #include "ash/constants/ash_features.h"
+#include "ash/public/cpp/test/test_system_tray_client.h"
 #include "ash/test/ash_test_base.h"
 #include "components/version_info/channel.h"
 
@@ -25,17 +26,24 @@
   void SetUp() override {
     AshTestBase::SetUp();
 
-    // Instantiate members.
+    // Param is whether user feedback is allowed.
+    system_tray_client_ = GetSystemTrayClient();
+    system_tray_client_->set_user_feedback_enabled(GetParam());
+
+    // Instantiate view.
     view_ = std::make_unique<ChannelIndicatorQuickSettingsView>(
-        static_cast<version_info::Channel>(GetParam()));
+        version_info::Channel::BETA,
+        system_tray_client_->IsUserFeedbackEnabled());
   }
 
-  // Ignored for now, will come into play with the fix for crbug.com/1344855.
-  bool IsFeedbackShown() { return GetParam(); }
+  bool IsFeedbackShown() {
+    return system_tray_client_->IsUserFeedbackEnabled();
+  }
 
   ChannelIndicatorQuickSettingsView* view() { return view_.get(); }
 
  private:
+  TestSystemTrayClient* system_tray_client_;
   std::unique_ptr<ChannelIndicatorQuickSettingsView> view_;
 };
 
@@ -51,9 +59,10 @@
   // Version button is always visible.
   EXPECT_TRUE(view()->IsVersionButtonVisibleForTesting());
 
-  // Feedback button is always visible, for now. This will change with the fix
-  // for crbug.com/1344855.
-  EXPECT_TRUE(view()->IsSubmitFeedbackButtonVisibleForTesting());
+  // Feedback button is visible if `SystemTrayClient` says the user preference
+  // is set that allows user feedback.
+  EXPECT_EQ(view()->IsSubmitFeedbackButtonVisibleForTesting(),
+            IsFeedbackShown());
 }
 
 }  // namespace ash
diff --git a/ash/system/channel_indicator/channel_indicator_unittest.cc b/ash/system/channel_indicator/channel_indicator_unittest.cc
index 17a13c2..5489bc59 100644
--- a/ash/system/channel_indicator/channel_indicator_unittest.cc
+++ b/ash/system/channel_indicator/channel_indicator_unittest.cc
@@ -6,13 +6,16 @@
 
 #include "ash/constants/ash_features.h"
 #include "ash/resources/vector_icons/vector_icons.h"
+#include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
+#include "ash/system/channel_indicator/channel_indicator_utils.h"
 #include "ash/system/model/system_tray_model.h"
 #include "ash/system/status_area_widget_test_helper.h"
 #include "ash/system/unified/unified_system_tray.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/test_shell_delegate.h"
 #include "base/test/scoped_feature_list.h"
+#include "components/session_manager/session_manager_types.h"
 #include "components/version_info/channel.h"
 
 namespace ash {
@@ -39,6 +42,12 @@
     AshTestBase::SetUp(std::move(shell_delegate));
   }
 
+  void SetSessionState(session_manager::SessionState state) {
+    SessionInfo info;
+    info.state = state;
+    Shell::Get()->session_controller()->SetSessionInfo(info);
+  }
+
  private:
   base::test::ScopedFeatureList feature_list_;
 };
@@ -65,16 +74,32 @@
 
   // The `ChannelIndicatorView` should be visible for BETA, DEV, and CANARY
   // channels, not visible otherwise.
-  switch (shell_delegate->GetChannel()) {
-    case version_info::Channel::BETA:
-    case version_info::Channel::DEV:
-    case version_info::Channel::CANARY:
-      EXPECT_TRUE(channel_indicator_view->GetVisible());
-      break;
-    case version_info::Channel::UNKNOWN:
-    case version_info::Channel::STABLE:
-      EXPECT_FALSE(channel_indicator_view->GetVisible());
-      break;
+  EXPECT_EQ(channel_indicator_view->GetVisible(),
+            channel_indicator_utils::IsDisplayableChannel(
+                shell_delegate->GetChannel()));
+
+  // If the view is visible, verify what we display depending on the session
+  // state.
+  if (channel_indicator_view->GetVisible()) {
+    // User is not logged in, view should display text, no image.
+    SetSessionState(session_manager::SessionState::LOGIN_PRIMARY);
+    EXPECT_TRUE(channel_indicator_view->IsLabelVisibleForTesting());
+    EXPECT_FALSE(channel_indicator_view->IsImageViewVisibleForTesting());
+
+    // User is logged in, view should display image, no text.
+    SetSessionState(session_manager::SessionState::ACTIVE);
+    EXPECT_FALSE(channel_indicator_view->IsLabelVisibleForTesting());
+    EXPECT_TRUE(channel_indicator_view->IsImageViewVisibleForTesting());
+
+    // User locks the session, view should display text, no image.
+    SetSessionState(session_manager::SessionState::LOCKED);
+    EXPECT_TRUE(channel_indicator_view->IsLabelVisibleForTesting());
+    EXPECT_FALSE(channel_indicator_view->IsImageViewVisibleForTesting());
+
+    // User is logged in again, view should display image, no text.
+    SetSessionState(session_manager::SessionState::ACTIVE);
+    EXPECT_FALSE(channel_indicator_view->IsLabelVisibleForTesting());
+    EXPECT_TRUE(channel_indicator_view->IsImageViewVisibleForTesting());
   }
 }
 
diff --git a/ash/system/channel_indicator/channel_indicator_utils.cc b/ash/system/channel_indicator/channel_indicator_utils.cc
index a42e2e1..79a5cd0 100644
--- a/ash/system/channel_indicator/channel_indicator_utils.cc
+++ b/ash/system/channel_indicator/channel_indicator_utils.cc
@@ -7,9 +7,11 @@
 #include <string>
 
 #include "ash/public/cpp/style/dark_light_mode_controller.h"
+#include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/shell.h"
 #include "ash/shell_delegate.h"
 #include "ash/strings/grit/ash_strings.h"
+#include "base/notreached.h"
 #include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -97,4 +99,20 @@
        base::UTF8ToUTF16(Shell::Get()->shell_delegate()->GetVersionString())});
 }
 
+const gfx::VectorIcon& GetVectorIcon(version_info::Channel channel) {
+  DCHECK(IsDisplayableChannel(channel));
+  switch (channel) {
+    case version_info::Channel::BETA:
+      return kChannelBetaIcon;
+    case version_info::Channel::DEV:
+      return kChannelDevIcon;
+    case version_info::Channel::CANARY:
+      return kChannelCanaryIcon;
+    case version_info::Channel::UNKNOWN:
+    case version_info::Channel::STABLE:
+      NOTREACHED();
+      return kChannelCanaryIcon;
+  }
+}
+
 }  // namespace ash::channel_indicator_utils
diff --git a/ash/system/channel_indicator/channel_indicator_utils.h b/ash/system/channel_indicator/channel_indicator_utils.h
index 28eb15e..9d75b94 100644
--- a/ash/system/channel_indicator/channel_indicator_utils.h
+++ b/ash/system/channel_indicator/channel_indicator_utils.h
@@ -10,6 +10,7 @@
 #include "ash/ash_export.h"
 #include "components/version_info/channel.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/vector_icon_types.h"
 
 namespace ash::channel_indicator_utils {
 
@@ -39,6 +40,11 @@
 ASH_EXPORT std::u16string GetFullReleaseTrackString(
     version_info::Channel channel);
 
+// Returns a reference to the pre-constructed vector icon for release track
+// `channel`. The function performs a DCHECK() that `channel` is one of the
+// displayable values, but if it isn't then the icon for `CANARY` is returned.
+const gfx::VectorIcon& GetVectorIcon(version_info::Channel channel);
+
 }  // namespace ash::channel_indicator_utils
 
 #endif  // ASH_SYSTEM_CHANNEL_INDICATOR_CHANNEL_INDICATOR_UTILS_H_
\ No newline at end of file
diff --git a/ash/system/eche/eche_tray.cc b/ash/system/eche/eche_tray.cc
index 4e40bd0c..c6b71a0 100644
--- a/ash/system/eche/eche_tray.cc
+++ b/ash/system/eche/eche_tray.cc
@@ -460,10 +460,12 @@
   static_cast<views::BoxLayout*>(bubble_view->GetLayoutManager())
       ->set_inside_border_insets(kBubblePadding);
 
-  // The layer is needed to draw the header non-opaquely that is needed to
-  // match the phone hub behavior.
-  header_view->SetPaintToLayer();
-  header_view->layer()->SetFillsBoundsOpaquely(false);
+  // In dark light mode, we switch TrayBubbleView to use a textured layer
+  // instead of solid color layer, so no need to create an extra layer here.
+  if (!features::IsDarkLightModeEnabled()) {
+    header_view->SetPaintToLayer();
+    header_view->layer()->SetFillsBoundsOpaquely(false);
+  }
 
   AshWebView::InitParams params;
   params.can_record_media = true;
diff --git a/ash/system/holding_space/holding_space_item_chip_view.cc b/ash/system/holding_space/holding_space_item_chip_view.cc
index b0aed12..bb1e1961 100644
--- a/ash/system/holding_space/holding_space_item_chip_view.cc
+++ b/ash/system/holding_space/holding_space_item_chip_view.cc
@@ -639,10 +639,14 @@
   if (!item())
     return;
 
-  // NOTE: Only download type items currently support secondary actions.
+  // NOTE: Only in-progress items currently support secondary actions.
   const bool has_secondary_action =
       !checkmark()->GetVisible() && !item()->progress().IsComplete() &&
-      HoldingSpaceItem::IsDownload(item()->type()) && IsMouseHovered();
+      (base::Contains(item()->in_progress_commands(),
+                      HoldingSpaceCommandId::kPauseItem) ||
+       base::Contains(item()->in_progress_commands(),
+                      HoldingSpaceCommandId::kResumeItem)) &&
+      IsMouseHovered();
 
   if (!has_secondary_action) {
     secondary_action_container_->SetVisible(false);
@@ -651,7 +655,8 @@
   }
 
   // Pause/resume.
-  const bool is_item_paused = item()->IsPaused();
+  const bool is_item_paused = base::Contains(
+      item()->in_progress_commands(), HoldingSpaceCommandId::kResumeItem);
   secondary_action_pause_->SetVisible(!is_item_paused);
   secondary_action_resume_->SetVisible(is_item_paused);
 
diff --git a/ash/system/holding_space/holding_space_item_view.cc b/ash/system/holding_space/holding_space_item_view.cc
index 14f1861..60da819 100644
--- a/ash/system/holding_space/holding_space_item_view.cc
+++ b/ash/system/holding_space/holding_space_item_view.cc
@@ -495,10 +495,12 @@
   }
 
   // Cancel.
-  // NOTE: Only download type items currently support cancellation.
+  // NOTE: Only in-progress items currently support cancellation.
   const bool is_item_in_progress = !item()->progress().IsComplete();
   primary_action_cancel_->SetVisible(
-      is_item_in_progress && HoldingSpaceItem::IsDownload(item()->type()));
+      is_item_in_progress &&
+      base::Contains(item()->in_progress_commands(),
+                     HoldingSpaceCommandId::kCancelItem));
 
   // Pin.
   const bool is_item_pinned =
diff --git a/ash/system/holding_space/holding_space_tray_unittest.cc b/ash/system/holding_space/holding_space_tray_unittest.cc
index 7c6b5fd..5d1b61a 100644
--- a/ash/system/holding_space/holding_space_tray_unittest.cc
+++ b/ash/system/holding_space/holding_space_tray_unittest.cc
@@ -2654,10 +2654,18 @@
   StartSession();
 
   // Add multiple in-progress holding space items.
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake1"),
-          HoldingSpaceProgress(0, 100));
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake2"),
-          HoldingSpaceProgress(0, 100));
+  std::vector<HoldingSpaceItem*> items = {
+      AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake1"),
+              HoldingSpaceProgress(0, 100)),
+      AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake2"),
+              HoldingSpaceProgress(0, 100))};
+
+  // In-progress download items typically support in-progress commands.
+  for (HoldingSpaceItem* item : items) {
+    EXPECT_TRUE(
+        item->SetInProgressCommands({HoldingSpaceCommandId::kCancelItem,
+                                     HoldingSpaceCommandId::kPauseItem}));
+  }
 
   // Show UI.
   test_api()->Show();
@@ -3021,6 +3029,13 @@
   HoldingSpaceItem* item = AddItem(GetType(), base::FilePath("/tmp/fake"),
                                    HoldingSpaceProgress(0, 100));
 
+  // In-progress download items typically support in-progress commands.
+  if (HoldingSpaceItem::IsDownload(item->type())) {
+    EXPECT_TRUE(
+        item->SetInProgressCommands({HoldingSpaceCommandId::kCancelItem,
+                                     HoldingSpaceCommandId::kPauseItem}));
+  }
+
   // Show holding space UI.
   test_api()->Show();
   ASSERT_TRUE(test_api()->IsShowing());
diff --git a/ash/system/holding_space/holding_space_view_delegate.cc b/ash/system/holding_space/holding_space_view_delegate.cc
index 0d14631..c7fdf7e 100644
--- a/ash/system/holding_space/holding_space_view_delegate.cc
+++ b/ash/system/holding_space/holding_space_view_delegate.cc
@@ -569,19 +569,22 @@
     const HoldingSpaceItem* item = view->item();
 
     // NOTE: The "Pause"/"Resume"/"Cancel" commands are only currently supported
-    // by download type holding space items.
-    if (HoldingSpaceItem::IsDownload(item->type())) {
+    // by in-progress holding space items.
+    if (!item->progress().IsComplete()) {
       // The "Pause" command should only be present if *all* of the selected
       // holding space items are pausable.
-      is_pausable &= !item->progress().IsComplete() && !item->IsPaused();
+      is_pausable &= base::Contains(item->in_progress_commands(),
+                                    HoldingSpaceCommandId::kPauseItem);
 
       // The "Resume" command should only be present if *all* of the selected
       // holding space items are resumable.
-      is_resumable &= item->IsPaused();
+      is_resumable &= base::Contains(item->in_progress_commands(),
+                                     HoldingSpaceCommandId::kResumeItem);
 
       // The "Cancel" command should only be present if *all* of the selected
       // holding space items are cancelable.
-      is_cancelable &= !item->progress().IsComplete();
+      is_cancelable &= base::Contains(item->in_progress_commands(),
+                                      HoldingSpaceCommandId::kCancelItem);
     } else {
       is_pausable = is_resumable = is_cancelable = false;
     }
diff --git a/ash/system/ime_menu/ime_menu_tray.cc b/ash/system/ime_menu/ime_menu_tray.cc
index f174137..0dc724af 100644
--- a/ash/system/ime_menu/ime_menu_tray.cc
+++ b/ash/system/ime_menu/ime_menu_tray.cc
@@ -350,6 +350,10 @@
   init_params.reroute_event_handler = true;
 
   auto setup_layered_view = [](views::View* view) {
+    // In dark light mode, we switch TrayBubbleView to use a textured layer
+    // instead of solid color layer, so no need to create an extra layer here.
+    if (features::IsDarkLightModeEnabled())
+      return;
     view->SetPaintToLayer();
     view->layer()->SetFillsBoundsOpaquely(false);
   };
diff --git a/ash/system/palette/palette_tray.cc b/ash/system/palette/palette_tray.cc
index 1c6d7ef..9db4f174 100644
--- a/ash/system/palette/palette_tray.cc
+++ b/ash/system/palette/palette_tray.cc
@@ -660,6 +660,10 @@
       gfx::Insets::TLBR(0, 0, kPaddingBetweenBottomAndLastTrayItem, 0)));
 
   auto setup_layered_view = [](views::View* view) {
+    // In dark light mode, we switch TrayBubbleView to use a textured layer
+    // instead of solid color layer, so no need to create an extra layer here.
+    if (features::IsDarkLightModeEnabled())
+      return;
     view->SetPaintToLayer();
     view->layer()->SetFillsBoundsOpaquely(false);
   };
diff --git a/ash/system/phonehub/phone_connected_view.cc b/ash/system/phonehub/phone_connected_view.cc
index 08fa905c..c3d3faca 100644
--- a/ash/system/phonehub/phone_connected_view.cc
+++ b/ash/system/phonehub/phone_connected_view.cc
@@ -49,6 +49,10 @@
   SetID(PhoneHubViewID::kPhoneConnectedView);
 
   auto setup_layered_view = [](views::View* view) {
+    // In dark light mode, we switch TrayBubbleView to use a textured layer
+    // instead of solid color layer, so no need to create an extra layer here.
+    if (features::IsDarkLightModeEnabled())
+      return;
     view->SetPaintToLayer();
     view->layer()->SetFillsBoundsOpaquely(false);
   };
diff --git a/ash/system/phonehub/phone_hub_interstitial_view.cc b/ash/system/phonehub/phone_hub_interstitial_view.cc
index 10eb0f3..2a86d31 100644
--- a/ash/system/phonehub/phone_hub_interstitial_view.cc
+++ b/ash/system/phonehub/phone_hub_interstitial_view.cc
@@ -41,8 +41,12 @@
 
 PhoneHubInterstitialView::PhoneHubInterstitialView(bool show_progress,
                                                    bool show_image) {
-  SetPaintToLayer();
-  layer()->SetFillsBoundsOpaquely(false);
+  // In dark light mode, we switch TrayBubbleView to use a textured layer
+  // instead of solid color layer, so no need to create an extra layer here.
+  if (!features::IsDarkLightModeEnabled()) {
+    SetPaintToLayer();
+    layer()->SetFillsBoundsOpaquely(false);
+  }
 
   auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>());
   layout->SetOrientation(views::BoxLayout::Orientation::kVertical);
diff --git a/ash/system/phonehub/phone_status_view.cc b/ash/system/phonehub/phone_status_view.cc
index 336fe19..1192e05 100644
--- a/ash/system/phonehub/phone_status_view.cc
+++ b/ash/system/phonehub/phone_status_view.cc
@@ -93,8 +93,13 @@
       battery_label_(new views::Label) {
   DCHECK(delegate);
 
-  SetPaintToLayer();
-  layer()->SetFillsBoundsOpaquely(false);
+  // In dark light mode, we switch TrayBubbleView to use a textured layer
+  // instead of solid color layer, so no need to create an extra layer here.
+  if (!features::IsDarkLightModeEnabled()) {
+    SetPaintToLayer();
+    layer()->SetFillsBoundsOpaquely(false);
+  }
+
   SetID(PhoneHubViewID::kPhoneStatusView);
 
   SetBorder(views::CreateEmptyBorder(kBorderInsets));
diff --git a/ash/system/phonehub/quick_action_item.cc b/ash/system/phonehub/quick_action_item.cc
index c5f1c01b..d6392cb 100644
--- a/ash/system/phonehub/quick_action_item.cc
+++ b/ash/system/phonehub/quick_action_item.cc
@@ -4,6 +4,7 @@
 
 #include "ash/system/phonehub/quick_action_item.h"
 
+#include "ash/constants/ash_features.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/style/ash_color_provider.h"
@@ -75,8 +76,12 @@
 
   SetEnabled(true /* enabled */);
 
-  SetPaintToLayer();
-  layer()->SetFillsBoundsOpaquely(false);
+  // In dark light mode, we switch TrayBubbleView to use a textured layer
+  // instead of solid color layer, so no need to create an extra layer here.
+  if (!features::IsDarkLightModeEnabled()) {
+    SetPaintToLayer();
+    layer()->SetFillsBoundsOpaquely(false);
+  }
 }
 
 QuickActionItem::~QuickActionItem() = default;
diff --git a/ash/system/phonehub/sub_feature_opt_in_view.cc b/ash/system/phonehub/sub_feature_opt_in_view.cc
index f22d394..b1af3417 100644
--- a/ash/system/phonehub/sub_feature_opt_in_view.cc
+++ b/ash/system/phonehub/sub_feature_opt_in_view.cc
@@ -6,6 +6,7 @@
 
 #include <string>
 
+#include "ash/constants/ash_features.h"
 #include "ash/style/ash_color_provider.h"
 #include "ash/style/pill_button.h"
 #include "ash/system/phonehub/phone_hub_view_ids.h"
@@ -56,8 +57,13 @@
 }
 
 void SubFeatureOptInView::InitLayout() {
-  SetPaintToLayer();
-  layer()->SetFillsBoundsOpaquely(false);
+  // The dark light mode, we switch TrayBubbleView to use a textured layer
+  // instead of solid color layer, so no need to create an extra layer here.
+  if (!features::IsDarkLightModeEnabled()) {
+    SetPaintToLayer();
+    layer()->SetFillsBoundsOpaquely(false);
+  }
+
   const SkColor border_color = AshColorProvider::Get()->GetContentLayerColor(
       AshColorProvider::ContentLayerType::kSeparatorColor);
   SetBorder(views::CreateRoundedRectBorder(
diff --git a/ash/system/privacy_screen/privacy_screen_toast_view.cc b/ash/system/privacy_screen/privacy_screen_toast_view.cc
index 8eea7e33..0946f1b 100644
--- a/ash/system/privacy_screen/privacy_screen_toast_view.cc
+++ b/ash/system/privacy_screen/privacy_screen_toast_view.cc
@@ -4,6 +4,7 @@
 
 #include "ash/system/privacy_screen/privacy_screen_toast_view.h"
 
+#include "ash/constants/ash_features.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/style/ash_color_provider.h"
@@ -131,8 +132,12 @@
   label_ = new PrivacyScreenToastLabelView();
   AddChildView(label_);
 
-  SetPaintToLayer();
-  layer()->SetFillsBoundsOpaquely(false);
+  // In dark light mode, we switch TrayBubbleView to use a textured layer
+  // instead of solid color layer, so no need to create an extra layer here.
+  if (!features::IsDarkLightModeEnabled()) {
+    SetPaintToLayer();
+    layer()->SetFillsBoundsOpaquely(false);
+  }
 }
 
 PrivacyScreenToastView::~PrivacyScreenToastView() {
diff --git a/ash/system/tray/tray_item_view.cc b/ash/system/tray/tray_item_view.cc
index 8bbdcc99..3fe2ab39 100644
--- a/ash/system/tray/tray_item_view.cc
+++ b/ash/system/tray/tray_item_view.cc
@@ -93,6 +93,22 @@
   PreferredSizeChanged();
 }
 
+void TrayItemView::DestroyLabel() {
+  if (!label_)
+    return;
+
+  RemoveChildViewT(label_);
+  label_ = nullptr;
+}
+
+void TrayItemView::DestroyImageView() {
+  if (!image_view_)
+    return;
+
+  RemoveChildViewT(image_view_);
+  image_view_ = nullptr;
+}
+
 void TrayItemView::SetVisible(bool set_visible) {
   if (!GetWidget() ||
       ui::ScopedAnimationDurationScaleMode::duration_multiplier() ==
diff --git a/ash/system/tray/tray_item_view.h b/ash/system/tray/tray_item_view.h
index 4aed2764..2d6bd9a 100644
--- a/ash/system/tray/tray_item_view.h
+++ b/ash/system/tray/tray_item_view.h
@@ -64,6 +64,12 @@
   void CreateLabel();
   void CreateImageView();
 
+  // Methods for destroying a child label or ImageView, which a user of
+  // `TrayItemView` should do if they know a child view is no longer visible and
+  // is expected to remain as such for longer than ~0.1 seconds.
+  void DestroyLabel();
+  void DestroyImageView();
+
   // Called when locale change is detected (which should not happen after the
   // user session starts). It should reload any strings the view is using.
   virtual void HandleLocaleChange() = 0;
diff --git a/ash/system/unified/unified_system_info_view.cc b/ash/system/unified/unified_system_info_view.cc
index 301a052..4f54df0 100644
--- a/ash/system/unified/unified_system_info_view.cc
+++ b/ash/system/unified/unified_system_info_view.cc
@@ -7,6 +7,7 @@
 #include "ash/constants/ash_features.h"
 #include "ash/public/cpp/ash_view_ids.h"
 #include "ash/public/cpp/session/session_observer.h"
+#include "ash/public/cpp/system_tray_client.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
@@ -669,8 +670,12 @@
   auto channel = Shell::Get()->shell_delegate()->GetChannel();
   if (features::IsReleaseTrackUiEnabled() &&
       channel_indicator_utils::IsDisplayableChannel(channel)) {
-    channel_view_ = AddChildView(
-        std::make_unique<ChannelIndicatorQuickSettingsView>(channel));
+    channel_view_ =
+        AddChildView(std::make_unique<ChannelIndicatorQuickSettingsView>(
+            channel, Shell::Get()
+                         ->system_tray_model()
+                         ->client()
+                         ->IsUserFeedbackEnabled()));
   }
 }
 
diff --git a/ash/system/unified/unified_system_tray_view.cc b/ash/system/unified/unified_system_tray_view.cc
index ec6f009d..b84c158 100644
--- a/ash/system/unified/unified_system_tray_view.cc
+++ b/ash/system/unified/unified_system_tray_view.cc
@@ -6,6 +6,7 @@
 
 #include <numeric>
 
+#include "ash/constants/ash_features.h"
 #include "ash/public/cpp/shelf_config.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
@@ -192,8 +193,12 @@
 
   auto add_layered_child = [](views::View* parent, views::View* child) {
     parent->AddChildView(child);
-    child->SetPaintToLayer();
-    child->layer()->SetFillsBoundsOpaquely(false);
+    // In dark light mode, we switch TrayBubbleView to use a textured layer
+    // instead of solid color layer, so no need to create an extra layer here.
+    if (!features::IsDarkLightModeEnabled()) {
+      child->SetPaintToLayer();
+      child->layer()->SetFillsBoundsOpaquely(false);
+    }
   };
 
   SessionControllerImpl* session_controller =
@@ -257,8 +262,6 @@
 }
 
 void UnifiedSystemTrayView::AddSliderView(views::View* slider_view) {
-  slider_view->SetPaintToLayer();
-  slider_view->layer()->SetFillsBoundsOpaquely(false);
   sliders_container_->AddChildView(slider_view);
 }
 
diff --git a/ash/webui/os_feedback_ui/resources/confirmation_page.html b/ash/webui/os_feedback_ui/resources/confirmation_page.html
index 1931625..ab1d04a 100644
--- a/ash/webui/os_feedback_ui/resources/confirmation_page.html
+++ b/ash/webui/os_feedback_ui/resources/confirmation_page.html
@@ -25,12 +25,8 @@
     flex-direction: column;
   }
 
-  #message {
-    color: var(--cros-text-color-secondary);
-    font-family: var(--feedback-roboto-font-family);
-    font-size: 13px;
-    font-weight: var(--feedback-regular-font-weight);
-    line-height: 20px;
+  #helpResourcesLabel {
+    margin: 24px 0 12px 0;
   }
 
   .label {
@@ -67,9 +63,9 @@
     <h1 class="page-title">[[getTitle_(sendReportStatus)]]</h1>
   </div>
   <div id="content">
-    <div id="message">[[getMessage_(sendReportStatus)]]</div>
+    <div id="message" class="sub-label">[[getMessage_(sendReportStatus)]]</div>
     <div id="helpResources">
-      <p id="helpResourcesLabel">[[i18n('helpResourcesLabel')]]</p>
+      <h2 id="helpResourcesLabel">[[i18n('helpResourcesLabel')]]</h2>
       <cr-link-row id="explore" start-icon="help-resources:explore"
           external using-slotted-label
           on-click="handleLinkClicked_">
diff --git a/ash/webui/shimless_rma/resources/onboarding_choose_destination_page.html b/ash/webui/shimless_rma/resources/onboarding_choose_destination_page.html
index 066297d..ac0be0f 100644
--- a/ash/webui/shimless_rma/resources/onboarding_choose_destination_page.html
+++ b/ash/webui/shimless_rma/resources/onboarding_choose_destination_page.html
@@ -9,19 +9,16 @@
         on-selected-changed="onDestinationSelectionChanged_"
         disabled="[[allButtonsDisabled]]">
       <cr-radio-button name="newOwner" id="destinationNewOwner"
-          aria-label="[[i18n('newOwnerText')]]">
-        [[i18n('newOwnerText')]]
+          label="[[i18n('newOwnerText')]]">
       </cr-radio-button>
-      <div class="indented-description">
+      <div class="indented-description" aria-hidden="true">
         [[i18n('newOwnerDescriptionText')]]
       </div>
       <cr-radio-button name="originalOwner" id="destinationOriginalOwner"
-          aria-label="[[i18n('sameOwnerText')]]">
-        [[i18n('sameOwnerText')]]
+          label="[[i18n('sameOwnerText')]]">
       </cr-radio-button>
       <cr-radio-button name="notSureOwner" id="destinationNotSureOwner"
-          aria-label="[[i18n('notSureOwnerText')]]">
-        [[i18n('notSureOwnerText')]]
+          label="[[i18n('notSureOwnerText')]]">
       </cr-radio-button>
     </cr-radio-group>
   </div>
diff --git a/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.html b/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.html
index e565f47..b532ae7c 100644
--- a/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.html
+++ b/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.html
@@ -7,15 +7,13 @@
     <cr-radio-group id="wipeDeviceRadioGroup" disabled="[[allButtonsDisabled]]"
         on-selected-changed="onOptionChanged_">
       <cr-radio-button name="[[wipeDeviceOption_.WIPE_DEVICE]]"
-          aria-label="[[i18n('wipeDeviceRemoveDataLabel')]]">
-        [[i18n('wipeDeviceRemoveDataLabel')]]
+          label="[[i18n('wipeDeviceRemoveDataLabel')]]">
       </cr-radio-button>
-      <div class="indented-description">
+      <div class="indented-description" aria-hidden="true">
         [[i18n('wipeDeviceRemoveDataDescription')]]
       </div>
       <cr-radio-button name="[[wipeDeviceOption_.PRESERVE_DATA]]"
-          aria-label="[[i18n('wipeDevicePreserveDataLabel')]]">
-        [[i18n('wipeDevicePreserveDataLabel')]]
+          label="[[i18n('wipeDevicePreserveDataLabel')]]">
       </cr-radio-button>
     </cr-radio-group>
   </div>
diff --git a/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.html b/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.html
index 6bb0ee83..c374b28 100644
--- a/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.html
+++ b/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.html
@@ -10,19 +10,17 @@
       <cr-radio-button
           name="hwwpDisableMethodManual"
           id="hwwpDisableMethodManual"
-          aria-label="[[i18n('manualWpDisableMethodOptionText')]]">
-          [[i18n('manualWpDisableMethodOptionText')]]
+          label="[[i18n('manualWpDisableMethodOptionText')]]">
       </cr-radio-button>
-      <div class="indented-description">
+      <div class="indented-description" aria-hidden="true">
         [[i18n('manualWpDisableMethodDescriptionText')]]
       </div>
       <cr-radio-button
           name="hwwpDisableMethodRsu"
           id="hwwpDisableMethodRsu"
-          aria-label="[[i18n('rsuWpDisableMethodOptionText')]]">
-          [[i18n('rsuWpDisableMethodOptionText')]]
+          label="[[i18n('rsuWpDisableMethodOptionText')]]">
       </cr-radio-button>
-      <div class="indented-description">
+      <div class="indented-description" aria-hidden>
         [[i18n('rsuWpDisableMethodDescriptionText')]]
       </div>
     </cr-radio-group>
diff --git a/base/metrics/histogram_macros.h b/base/metrics/histogram_macros.h
index 89d1f1f9..32d9dce 100644
--- a/base/metrics/histogram_macros.h
+++ b/base/metrics/histogram_macros.h
@@ -54,13 +54,14 @@
 //
 // The second variant requires three arguments: the first two are the same as
 // before, and the third argument is the enum boundary: this must be strictly
-// greater than any other enumerator that will be sampled.
+// greater than any other enumerator that will be sampled. This only works for
+// enums with a fixed underlying type.
 //
 // Sample usage:
 //   // These values are logged to UMA. Entries should not be renumbered and
 //   // numeric values should never be reused. Please keep in sync with "MyEnum"
 //   // in src/tools/metrics/histograms/enums.xml.
-//   enum class MyEnum {
+//   enum class MyEnum : uint8_t {
 //     FIRST_VALUE = 0,
 //     SECOND_VALUE = 1,
 //     ...
diff --git a/base/metrics/histogram_macros_internal.h b/base/metrics/histogram_macros_internal.h
index 23c714b..191dc03 100644
--- a/base/metrics/histogram_macros_internal.h
+++ b/base/metrics/histogram_macros_internal.h
@@ -42,6 +42,10 @@
     Enum,
     std::enable_if_t<std::is_enum<decltype(Enum::kMaxValue)>::value>> {
   static constexpr Enum Count() {
+    // If you're getting
+    //   note: integer value X is outside the valid range of values [0, X] for
+    //         this enumeration type
+    // Then you need to give your enum a fixed underlying type.
     return static_cast<Enum>(
         static_cast<std::underlying_type_t<Enum>>(Enum::kMaxValue) + 1);
   }
diff --git a/base/time/time.cc b/base/time/time.cc
index 6a7cf04..b19d455 100644
--- a/base/time/time.cc
+++ b/base/time/time.cc
@@ -10,7 +10,7 @@
 // time.h is a widely included header and its size impacts build time.
 // Try not to raise this limit unless necessary. See
 // https://chromium.googlesource.com/chromium/src/+/HEAD/docs/wmax_tokens.md
-#pragma clang max_tokens_here 491000
+#pragma clang max_tokens_here 492000
 #endif  // BUILDFLAG(IS_LINUX)
 
 #include <atomic>
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index 7a114a39..de44cbd 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-9.20220729.2.1
+9.20220731.3.1
diff --git a/buildtools/deps_revisions.gni b/buildtools/deps_revisions.gni
index c4a76f1c..5b09a5a 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 = "253791a5ba1afef6f94d739e89c726c48169b1da"
+  libcxx_revision = "e3598c2dc07b5a5320fd3fedb8a4afaa95f09142"
 }
diff --git a/chrome/VERSION b/chrome/VERSION
index 84d75ff..497f0ec 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=106
 MINOR=0
-BUILD=5211
+BUILD=5214
 PATCH=0
diff --git a/chrome/android/java/res_app/layout/main.xml b/chrome/android/java/res_app/layout/main.xml
index 7ee95d1..686b260 100644
--- a/chrome/android/java/res_app/layout/main.xml
+++ b/chrome/android/java/res_app/layout/main.xml
@@ -171,6 +171,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="bottom|center"
+            android:layout_margin="@dimen/page_zoom_view_margins"
             android:inflatedId="@+id/page_zoom_layout"
             android:layout="@layout/page_zoom_view" />
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderTest.java
index 6ad3fa8..04d7cd6d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderTest.java
@@ -17,8 +17,8 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import org.chromium.base.Log;
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
@@ -40,7 +40,6 @@
 @RunWith(ChromeJUnit4ClassRunner.class)
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
 @DisableFeatures({ChromeFeatureList.OPTIMIZE_GEOLOCATION_HEADER_GENERATION})
-@DisabledTest(message = "https://crbug.com/1338183")
 public class GeolocationHeaderTest {
     @Rule
     public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
@@ -55,12 +54,12 @@
     private static final double LOCATION_LAT = 20.3;
     private static final double LOCATION_LONG = 155.8;
     private static final float LOCATION_ACCURACY = 20f;
+    private static final String TAG = "GeolocationHeaderTst";
 
     @Before
     public void setUp() throws InterruptedException {
         mActivityTestRule.startMainActivityOnBlankPage();
         mOmniboxTestUtils = new OmniboxTestUtils(mActivityTestRule.getActivity());
-        GeolocationHeader.setAppPermissionGrantedForTesting(true);
     }
 
     @Test
@@ -311,9 +310,30 @@
 
     private void setPermission(final @ContentSettingValues int setting) {
         TestThreadUtils.runOnUiThreadBlocking(() -> {
+            Profile profile = Profile.getLastUsedRegularProfile();
             PermissionInfo infoHttps =
                     new PermissionInfo(ContentSettingsType.GEOLOCATION, SEARCH_URL_1, null, false);
-            infoHttps.setContentSetting(Profile.getLastUsedRegularProfile(), setting);
+            Log.i(TAG,
+                    "[crbug/1338183] Before Settting|isNativeInitialized: "
+                            + profile.isNativeInitialized());
+            Log.i(TAG,
+                    "[crbug/1338183] Before Settting|getBrowserProfileTypeFromProfile: "
+                            + Profile.getBrowserProfileTypeFromProfile(profile));
+            Log.i(TAG,
+                    "[crbug/1338183] Before Settting|getNativeBrowserContextPointer: "
+                            + profile.getNativeBrowserContextPointer());
+
+            infoHttps.setContentSetting(profile, setting);
+
+            Log.i(TAG,
+                    "[crbug/1338183] After Settting|isNativeInitialized: "
+                            + profile.isNativeInitialized());
+            Log.i(TAG,
+                    "[crbug/1338183] Before Settting|getBrowserProfileTypeFromProfile: "
+                            + Profile.getBrowserProfileTypeFromProfile(profile));
+            Log.i(TAG,
+                    "[crbug/1338183] Before Settting|getNativeBrowserContextPointer: "
+                            + profile.getNativeBrowserContextPointer());
         });
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShowTwiceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShowTwiceTest.java
index 28de4f72d..e639fcf 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShowTwiceTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShowTwiceTest.java
@@ -18,8 +18,9 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.autofill.AutofillTestHelper;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
-import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.payments.PaymentRequestTestRule.AppPresence;
+import org.chromium.chrome.browser.payments.PaymentRequestTestRule.FactorySpeed;
 import org.chromium.chrome.browser.payments.PaymentRequestTestRule.MainActivityStartCallback;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.components.payments.NotShownReason;
@@ -43,9 +44,6 @@
         String billingAddressId = helper.setProfile(new AutofillProfile("", "https://example.com",
                 true, "" /* honorific prefix */, "Jon Doe", "Google", "340 Main St", "CA",
                 "Los Angeles", "", "90291", "", "US", "555-555-5555", "", "en-US"));
-        helper.setCreditCard(new CreditCard("", "https://example.com", true, true, "Jon Doe",
-                "4111111111111111", "1111", "12", "2050", "visa", R.drawable.visa_card,
-                billingAddressId, "" /* serverId */));
     }
 
     /**
@@ -75,8 +73,13 @@
     @Test
     @MediumTest
     @Feature({"Payments"})
-    @CommandLineFlags.Add({"enable-features=PaymentRequestBasicCard"})
     public void testSecondShowRequestCancelled() throws TimeoutException {
+        // Install two payment apps, so that the PaymentRequest UI is shown rather than skipped.
+        mPaymentRequestTestRule.addPaymentAppFactory(
+                "https://bobpay.com", AppPresence.HAVE_APPS, FactorySpeed.FAST_FACTORY);
+        mPaymentRequestTestRule.addPaymentAppFactory(
+                "https://alicepay.com", AppPresence.HAVE_APPS, FactorySpeed.FAST_FACTORY);
+
         mPaymentRequestTestRule.openPage();
         runJavascriptAndWaitFor("showFirst()", mPaymentRequestTestRule.getReadyToPay());
         Assert.assertEquals(
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ContextMenuCoordinatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ContextMenuCoordinatorTest.java
index 646be1d..350507e 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ContextMenuCoordinatorTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ContextMenuCoordinatorTest.java
@@ -18,6 +18,7 @@
 import android.view.View;
 
 import androidx.annotation.Nullable;
+import androidx.test.ext.junit.rules.ActivityScenarioRule;
 
 import org.junit.Assert;
 import org.junit.Before;
@@ -28,7 +29,6 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.robolectric.Robolectric;
 import org.robolectric.annotation.Config;
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
@@ -101,6 +101,10 @@
         @Override
         @Implementation
         public void show() {}
+
+        @Override
+        @Implementation
+        public void dismiss() {}
     }
 
     /** No-op constructor for test cases that does not care of creation of real object. */
@@ -129,6 +133,9 @@
     public TestRule mProcessor = new Features.JUnitProcessor();
     @Rule
     public JniMocker mocker = new JniMocker();
+    @Rule
+    public ActivityScenarioRule<TestActivity> mActivityScenarioRule =
+            new ActivityScenarioRule<>(TestActivity.class);
 
     @Mock
     PerformanceHintsObserver.Natives mNativeMock;
@@ -143,7 +150,7 @@
 
     @Before
     public void setUpTest() {
-        mActivity = Robolectric.buildActivity(TestActivity.class).setup().get();
+        mActivityScenarioRule.getScenario().onActivity((activity) -> mActivity = activity);
         mCoordinator = new ContextMenuCoordinator(TOP_CONTENT_OFFSET_PX, mNativeDelegate);
         MockitoAnnotations.initMocks(this);
         mocker.mock(PerformanceHintsObserverJni.TEST_HOOKS, mNativeMock);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ContextMenuHeaderMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ContextMenuHeaderMediatorTest.java
index 17f75f57..4334e886 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ContextMenuHeaderMediatorTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ContextMenuHeaderMediatorTest.java
@@ -16,6 +16,8 @@
 import android.app.Activity;
 import android.graphics.Bitmap;
 
+import androidx.test.ext.junit.rules.ActivityScenarioRule;
+
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
@@ -27,7 +29,6 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.robolectric.Robolectric;
 
 import org.chromium.base.Callback;
 import org.chromium.base.test.BaseRobolectricTestRunner;
@@ -55,6 +56,9 @@
     public TestRule mProcessor = new Features.JUnitProcessor();
     @Rule
     public JniMocker mocker = new JniMocker();
+    @Rule
+    public ActivityScenarioRule<TestActivity> mActivityScenarioRule =
+            new ActivityScenarioRule<>(TestActivity.class);
 
     @Mock
     PerformanceHintsObserver.Natives mMockPerformanceHintsObserverJni;
@@ -73,7 +77,7 @@
 
     @Before
     public void setUpTest() {
-        mActivity = Robolectric.setupActivity(TestActivity.class);
+        mActivityScenarioRule.getScenario().onActivity((activity) -> mActivity = activity);
         MockitoAnnotations.initMocks(this);
         mocker.mock(PerformanceHintsObserverJni.TEST_HOOKS, mMockPerformanceHintsObserverJni);
         mocker.mock(LargeIconBridgeJni.TEST_HOOKS, mMockLargeIconBridgeJni);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunIntegrationUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunIntegrationUnitTest.java
index 2f60662..f0f336b 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunIntegrationUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/firstrun/FirstRunIntegrationUnitTest.java
@@ -14,6 +14,7 @@
 
 import androidx.browser.customtabs.CustomTabsIntent;
 
+import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
@@ -45,6 +46,9 @@
 import org.chromium.webapk.lib.common.WebApkConstants;
 import org.chromium.webapk.test.WebApkTestHelper;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /** JUnit tests for first run triggering code. */
 @RunWith(BaseRobolectricTestRunner.class)
 @Config(manifest = Config.NONE,
@@ -63,6 +67,8 @@
     @Rule
     public MockitoRule mMockitoRule = MockitoJUnit.rule();
 
+    private final List<ActivityController> mActivityControllerList = new ArrayList<>();
+
     private Context mContext;
     private ShadowApplication mShadowApplication;
 
@@ -79,6 +85,13 @@
         WebApkValidator.setDisableValidationForTesting(true);
     }
 
+    @After
+    public void tearDown() {
+        for (ActivityController activityController : mActivityControllerList) {
+            activityController.destroy();
+        }
+    }
+
     /** Checks that the intent component targets the passed-in class. */
     private boolean checkIntentComponentClass(Intent intent, Class componentClass) {
         return checkIntentComponentClassOneOf(intent, new Class[] {componentClass});
@@ -106,7 +119,7 @@
 
     /** Builds activity using the component class name from the provided intent. */
     @SuppressWarnings("unchecked")
-    private static ActivityController buildActivityWithClassNameFromIntent(Intent intent) {
+    private void buildActivityWithClassNameFromIntent(Intent intent) {
         Class<? extends Activity> activityClass = null;
         try {
             activityClass =
@@ -114,7 +127,7 @@
         } catch (ClassNotFoundException e) {
             Assert.fail();
         }
-        return Robolectric.buildActivity(activityClass, intent).create();
+        createActivity(activityClass, intent);
     }
 
     /**
@@ -122,7 +135,7 @@
      * the relaunch to occur.
      */
     private void launchWebappLauncherActivityProcessRelaunch(Intent intent) {
-        Robolectric.buildActivity(WebappLauncherActivity.class, intent).create();
+        createActivity(WebappLauncherActivity.class, intent);
         Intent launchedIntent = mShadowApplication.peekNextStartedActivity();
         if (checkIntentComponentClass(launchedIntent, WebappLauncherActivity.class)) {
             // Pop the WebappLauncherActivity from the 'started activities' list.
@@ -142,13 +155,20 @@
         Assert.assertTrue(checkIntentIsForFre(launchedIntent));
     }
 
+    private <T extends Activity> Activity createActivity(Class<T> clazz, Intent intent) {
+        ActivityController<T> activityController =
+                Robolectric.buildActivity(clazz, intent).create();
+        T activity = activityController.get();
+        mActivityControllerList.add(activityController);
+        return activity;
+    }
+
     @Test
     public void testGenericViewIntentGoesToFirstRun() {
         Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://test.com"));
         intent.setPackage(mContext.getPackageName());
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        Activity launcherActivity =
-                Robolectric.buildActivity(ChromeLauncherActivity.class, intent).create().get();
+        Activity launcherActivity = createActivity(ChromeLauncherActivity.class, intent);
         assertFirstRunActivityLaunched();
         Assert.assertTrue(launcherActivity.isFinishing());
     }
@@ -162,10 +182,7 @@
         Intent launchedIntent = mShadowApplication.getNextStartedActivity();
         Assert.assertNotNull(launchedIntent);
 
-        Activity launcherActivity =
-                Robolectric.buildActivity(ChromeLauncherActivity.class, launchedIntent)
-                        .create()
-                        .get();
+        Activity launcherActivity = createActivity(ChromeLauncherActivity.class, launchedIntent);
         assertFirstRunActivityLaunched();
         Assert.assertTrue(launcherActivity.isFinishing());
     }
@@ -174,8 +191,7 @@
     public void testRedirectChromeTabbedActivityToFirstRun() {
         Intent intent = new Intent();
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        Activity tabbedActivity =
-                Robolectric.buildActivity(ChromeTabbedActivity.class, intent).create().get();
+        Activity tabbedActivity = createActivity(ChromeTabbedActivity.class, intent);
         assertFirstRunActivityLaunched();
         Assert.assertTrue(tabbedActivity.isFinishing());
     }
@@ -184,8 +200,7 @@
     public void testRedirectSearchActivityToFirstRun() {
         Intent intent = new Intent();
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        Activity searchActivity =
-                Robolectric.buildActivity(SearchActivity.class, intent).create().get();
+        Activity searchActivity = createActivity(SearchActivity.class, intent);
         assertFirstRunActivityLaunched();
         Assert.assertTrue(searchActivity.isFinishing());
     }
@@ -244,11 +259,10 @@
 
         Intent launchedIntent = mShadowApplication.getNextStartedActivity();
         Assert.assertTrue(checkIntentComponentClass(launchedIntent, WebappActivity.class));
-        ActivityController controller = buildActivityWithClassNameFromIntent(launchedIntent);
+        buildActivityWithClassNameFromIntent(launchedIntent);
 
         // No FRE should have been launched.
         Assert.assertNull(mShadowApplication.getNextStartedActivity());
-        controller.destroy();
     }
 
     /**
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index be9182ab6..9ac2f18 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-106.0.5204.0_rc-r1-merged.afdo.bz2
+chromeos-chrome-amd64-106.0.5211.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 9c7a58f..6f6250e 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -7442,6 +7442,16 @@
           Right-click on a tab and select "Add tab to new group"
         </message>
       </if>
+      <if expr="use_titlecase">
+        <message name="IDS_TUTORIAL_ADD_TAB_TO_GROUP_WITH_EXISTING_GROUP_IN_TAB_STRIP" desc="The description of the add tab step in the tab group tutorial when there's already a group in the tabstrip.">
+          Right-click on a tab and select "Add Tab To Group" and then select "New Group"
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_TUTORIAL_ADD_TAB_TO_GROUP_WITH_EXISTING_GROUP_IN_TAB_STRIP" desc="The description of the add tab step in the tab group tutorial when there's already a group in the tabstrip.">
+          Right-click on a tab and select "Add tab to group" and then select "New group"
+        </message>
+      </if>
       <message name="IDS_TUTORIAL_TAB_GROUP_EDIT_BUBBLE" desc="The description of the editor bubble step in the tab group tutorial">
         Name your group, choose a color, then press Esc
       </message>
diff --git a/chrome/app/generated_resources_grd/IDS_TUTORIAL_ADD_TAB_TO_GROUP_WITH_EXISTING_GROUP_IN_TAB_STRIP.png.sha1 b/chrome/app/generated_resources_grd/IDS_TUTORIAL_ADD_TAB_TO_GROUP_WITH_EXISTING_GROUP_IN_TAB_STRIP.png.sha1
new file mode 100644
index 0000000..d55dddd
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_TUTORIAL_ADD_TAB_TO_GROUP_WITH_EXISTING_GROUP_IN_TAB_STRIP.png.sha1
@@ -0,0 +1 @@
+c85ce58586429ddf2a9e0bf294c92712d68cb645
\ 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 d433f25..b0a4e78 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -1081,6 +1081,7 @@
 <translation id="1997616988432401742">Jou sertifikate</translation>
 <translation id="1999115740519098545">Met afskop</translation>
 <translation id="2000419248597011803">Stuur 'n paar webkoekies en soektogte vanaf die adresbalk en soekkassie na jou versteksoekenjin toe</translation>
+<translation id="2001148512690747464">Daar is geen Kitsbind-toestelle in <ph name="PRIMARY_EMAIL" /> gestoor nie</translation>
 <translation id="2002109485265116295">Intyds</translation>
 <translation id="2003130567827682533">Om "<ph name="NAME" />"-data te aktiveer, koppel eers aan 'n Wi-Fi-netwerk</translation>
 <translation id="2004697686368036666">Kenmerke op sommige webwerwe sal dalk nie werk nie</translation>
@@ -1345,6 +1346,7 @@
 <translation id="2241053333139545397">Lees en verander jou data op 'n hele aantal webwerwe</translation>
 <translation id="2241634353105152135">Net een keer</translation>
 <translation id="2242687258748107519">Lêerinligting</translation>
+<translation id="2245296100676446525">Skakel sinkroniseer aan om jou boekmerke, wagwoorde, geskiedenis en meer op hierdie toestel en enige ander plek waar jy tans sinkroniseer, te kry.</translation>
 <translation id="2245603955208828424">Gebruik die pylsleutels om letter vir letter deur items te beweeg</translation>
 <translation id="2246129643805925002">Jou <ph name="DEVICE_TYPE" /> dateer op die agtergrond op om vir jou die jongste kenmerke en sekuriteitverbeteringe te gee. Jy kan opdateringvoorkeure in Instellings kontroleer.</translation>
 <translation id="2246549592927364792">Kry prentbeskrywings van Google af?</translation>
@@ -1789,6 +1791,7 @@
 <translation id="2642111877055905627">Sokkerbal</translation>
 <translation id="2643698698624765890">Bestuur jou uitbreidings deur Uitbreidings in die Venster-kieslys te klik.</translation>
 <translation id="2645047101481282803">Jou toestel word bestuur deur <ph name="PROFILE_NAME" /></translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 wagwoord is op hierdie toestel ingevoer}other{{NUM_PASSWORDS} wagwoorde is op hierdie toestel ingevoer}}</translation>
 <translation id="2645435784669275700">Chrome-bedryfstelsel</translation>
 <translation id="2649045351178520408">Basis64-geënkodeerde ASCII, sertifikaatketting</translation>
 <translation id="2652129567809778422">Kies wagwoord</translation>
@@ -2966,6 +2969,7 @@
 <translation id="3789841737615482174">Installeer</translation>
 <translation id="3790417903123637354">Iets is fout. Probeer later weer</translation>
 <translation id="379082410132524484">Jou kaart het verval</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> uitbreidings</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome het nie enige skadelike sagteware op jou rekenaar gekry nie • 1 dag gelede nagegaan}other{Chrome het nie enige skadelike sagteware op jou rekenaar gekry nie • {NUM_DAYS} dae gelede nagegaan}}</translation>
 <translation id="379500251094592809">Maak seker dat albei toestelle ontsluit is, naby mekaar is, en dat Bluetooth aangeskakel is om Nabydeling te gebruik. As jy met 'n Chromebook deel wat nie in jou kontakte is nie, moet jy seker maak dat Naby-sigbaarheid daarop aangeskakel is (maak die statusarea oop deur die tyd te kies en skakel dan Naby-sigbaarheid aan) <ph name="LINK_BEGIN" />Kom meer te wete<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Af</translation>
@@ -4753,6 +4757,7 @@
 <translation id="5542750926112347543">Webkoekies van <ph name="DOMAIN" /> af word geblokkeer</translation>
 <translation id="5542949973455282971">Koppel tans aan <ph name="CARRIER_NAME" /></translation>
 <translation id="5543983818738093899">Kontroleer tans status …</translation>
+<translation id="5544482392629385159">Toestel <ph name="DEVICE_INDEX" /> van <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Leweraar</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Voeg oortjie by groep}other{Voeg oortjies by groep}}</translation>
 <translation id="5545693483061321551">Werwe kan nie jou webkoekies gebruik om jou blaai-aktiwiteit op verskillende werwe te sien nie, byvoorbeeld om advertensies te publiseer. Kenmerke op sommige werwe sal dalk nie werk nie.</translation>
@@ -5555,6 +5560,7 @@
 <translation id="6333170995003625229">Jou e-posadres of wagwoord kon nie geverifieer word nie. Probeer weer aanmeld.</translation>
 <translation id="6335920438823100346"><ph name="MANAGER" /> vereis dat jy jou data rugsteun en hierdie Chromebook na die fabriekinstellings terugstel om Linux te begin.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> het ADB-ontfouting gedeaktiveer. Dit sal jou <ph name="DEVICE_TYPE" /> oor 24 uur terugstel. Rugsteun enige lêers wat jy wil hou.</translation>
+<translation id="6338402296920404442">Oorweeg dit om <ph name="FILENAME" /> uit te vee sodat ander wat hierdie toestel gebruik, nie jou wagwoorde kan sien nie.</translation>
 <translation id="6338981933082930623">Alle werwe kan enige advertensies vir jou wys</translation>
 <translation id="6339668969738228384">Skep 'n nuwe profiel vir <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="6340071272923955280">Internetdrukkerprotokol (IPPS)</translation>
@@ -7627,6 +7633,7 @@
 <translation id="8338952601723052325">Ontwikkelaarwebwerf</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> se data wat plaaslik geberg is</translation>
 <translation id="833986336429795709">Kies 'n program om hierdie skakel oop te maak</translation>
+<translation id="8340547030807793004">Meer handelinge vir <ph name="DEVICE" /></translation>
 <translation id="8342221978608739536">Het nie probeer nie</translation>
 <translation id="8342861492835240085">Kies 'n versameling</translation>
 <translation id="8345848587667658367">Jy kan nou jou foon se onlangse foto's, media, kennisgewings en programme bekyk</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index 99ad0a1..df3bcc901 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -4220,7 +4220,6 @@
 <translation id="5026874946691314267">Bunu bir daha göstərməyin</translation>
 <translation id="5027550639139316293">E-poçt Sertifikatı</translation>
 <translation id="5027562294707732951">Artırma əlavə edin</translation>
-<translation id="5028202297152853903"><ph name="DEVICE" /> <ph name="PRIMARY_EMAIL" /> hesabından silinəcək və bu Chromebook'dan ayrılacaq.</translation>
 <translation id="5029568752722684782">Kopyanı təmizləyin</translation>
 <translation id="5029873138381728058">VM'ləri yoxlamaq alınmadı</translation>
 <translation id="503155457707535043">Tətbiqlər endirilir</translation>
@@ -6493,7 +6492,6 @@
 <translation id="7280877790564589615">İcazə sorğusu göndərildi</translation>
 <translation id="7282547042039404307">Problemsiz</translation>
 <translation id="7282992757463864530">Məlumat paneli</translation>
-<translation id="728334460283296316">Cihazı silin</translation>
 <translation id="7283555985781738399">Qonaq rejimi</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Bu cihaz 1 gün saxlanacaq və növbəti dəfə kod olmadan qoşula bilərsiniz. Bu, administratorunuz tərəfindən ayarlanıb.}other{Bu cihaz {DAYS} gün saxlanacaq və növbəti dəfə kod olmadan qoşula bilərsiniz. Bu, administratorunuz tərəfindən ayarlanıb.}}</translation>
 <translation id="7284411326658527427">Hər bir şəxs öz hesabını fərdiləşdirə və datanı məxfi saxlaya bilər.</translation>
@@ -7788,8 +7786,6 @@
 <translation id="8531701051932785007">Qabaqcıl Güvənli Baxış deaktivdir</translation>
 <translation id="8534656636775144800">Ups! Domenə qoşularkən xəta baş verdi. Yenidən cəhd edin.</translation>
 <translation id="8535005006684281994">Netscape Sertifikat Yeniləmə URL</translation>
-<translation id="8536565869707961418"><ph name="DEVICE" /> <ph name="PRIMARY_EMAIL" /> hesabından silinsin?
-    Cihaz hələ də lokal olaraq istifadə edilə bilər.</translation>
 <translation id="8536713137312218707">Sürətli Əmrlər</translation>
 <translation id="8536956381488731905">Düyməyə basma səsi</translation>
 <translation id="8539727552378197395">Yoxdur (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 63ae936f..efecfec 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -4239,7 +4239,6 @@
 <translation id="5026874946691314267">Ne prikazuj ponovo</translation>
 <translation id="5027550639139316293">Potvrda za e-poštu</translation>
 <translation id="5027562294707732951">Dodaj ekstenziju</translation>
-<translation id="5028202297152853903">Uređaj <ph name="DEVICE" /> uklonit će se s e-adrese <ph name="PRIMARY_EMAIL" /> i raspariti s ovim Chromebookom.</translation>
 <translation id="5029568752722684782">Obriši kopiju</translation>
 <translation id="5029873138381728058">Provjera VM-ova nije uspjela</translation>
 <translation id="503155457707535043">Preuzimanje aplikacija</translation>
@@ -6518,7 +6517,6 @@
 <translation id="7280877790564589615">Upućen je zahtjev za odobrenje</translation>
 <translation id="7282547042039404307">Glatko</translation>
 <translation id="7282992757463864530">Infotraka</translation>
-<translation id="728334460283296316">Uklanjanje uređaja</translation>
 <translation id="7283555985781738399">Način rada za gosta</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Ovaj uređaj će biti sačuvan jedan dan i sljedeći put se možete povezati bez koda. Ovo je postavio vaš administrator.}one{Ovaj uređaj će biti sačuvan {DAYS} dan i sljedeći put se možete povezati bez koda. Ovo je postavio vaš administrator.}few{Ovaj uređaj će biti sačuvan {DAYS} dana i sljedeći put se možete povezati bez koda. Ovo je postavio vaš administrator.}other{Ovaj uređaj će biti sačuvan {DAYS} dana i sljedeći put se možete povezati bez koda. Ovo je postavio vaš administrator.}}</translation>
 <translation id="7284411326658527427">Svaka osoba može personalizirati svoj račun i čuvati privatnost podataka.</translation>
@@ -7815,8 +7813,6 @@
 <translation id="8531701051932785007">Poboljšano Sigurno pregledanje je isključeno</translation>
 <translation id="8534656636775144800">Ups! Došlo je do pogreške pri pokušaju pridruživanja domeni. Pokušajte ponovo.</translation>
 <translation id="8535005006684281994">URL za obnovu Netscape potvrde</translation>
-<translation id="8536565869707961418">Uklonite uređaj <ph name="DEVICE" /> s e-adrese <ph name="PRIMARY_EMAIL" />.
-    Uređaj se i dalje može lokalno upotrebljavati.</translation>
 <translation id="8536713137312218707">Brze komande</translation>
 <translation id="8536956381488731905">Zvuk pri pritisku tipke</translation>
 <translation id="8539727552378197395">Ne (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb
index 3ec1be1a..364157b 100644
--- a/chrome/app/resources/generated_resources_cy.xtb
+++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -1084,6 +1084,7 @@
 <translation id="1997616988432401742">Eich tystysgrifau</translation>
 <translation id="1999115740519098545">Wrth gychwyn</translation>
 <translation id="2000419248597011803">Yn anfon rhai cwcis a chwiliadau o'r bar cyfeiriadau a'r blwch chwilio i'ch peiriant chwilio diofyn</translation>
+<translation id="2001148512690747464">Dim dyfeisiau Paru Cyflym wedi'u cadw i <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="2002109485265116295">Amser real</translation>
 <translation id="2003130567827682533">I weithredu data '<ph name="NAME" />' cysylltwch â rhwydwaith Wi-Fi yn gyntaf</translation>
 <translation id="2004697686368036666">Mae'n bosib na fydd nodweddion ar rai gwefannau yn gweithio</translation>
@@ -1792,6 +1793,7 @@
 <translation id="2642111877055905627">Pêl-droed</translation>
 <translation id="2643698698624765890">Rheoli eich estyniadau drwy glicio Estyniadau yn y ddewislen Windows.</translation>
 <translation id="2645047101481282803">Rheolir eich dyfais gan <ph name="PROFILE_NAME" /></translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{Mewnforiwyd 1 cyfrinair i'r ddyfais hon}zero{Mewnforiwyd {NUM_PASSWORDS} cyfrinair i'r ddyfais hon}two{Mewnforiwyd {NUM_PASSWORDS} gyfrinair i'r ddyfais hon}few{Mewnforiwyd {NUM_PASSWORDS} chyfrinair i'r ddyfais hon}many{Mewnforiwyd {NUM_PASSWORDS} chyfrinair i'r ddyfais hon}other{Mewnforiwyd {NUM_PASSWORDS} cyfrinair i'r ddyfais hon}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">Base64-encodiwyd ASCII, cadwyn tystysgrif</translation>
 <translation id="2652129567809778422">Dewiswch gyfrinair</translation>
@@ -2969,6 +2971,7 @@
 <translation id="3789841737615482174">Gosod</translation>
 <translation id="3790417903123637354">Aeth rhywbeth o'i le. Rhowch gynnig arall arni'n nes ymlaen</translation>
 <translation id="379082410132524484">Mae'ch cerdyn wedi darfod</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> estyniad</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Ni ddaeth Chrome o hyd i feddalwedd niweidiol ar eich cyfrifiadur • Wedi'i wirio 1 diwrnod yn ôl}zero{Ni ddaeth Chrome o hyd i feddalwedd niweidiol ar eich cyfrifiadur • Wedi'i wirio {NUM_DAYS} diwrnod yn ôl}two{Ni ddaeth Chrome o hyd i feddalwedd niweidiol ar eich cyfrifiadur • Wedi'i wirio {NUM_DAYS} ddiwrnod yn ôl}few{Ni ddaeth Chrome o hyd i feddalwedd niweidiol ar eich cyfrifiadur • Wedi'i wirio {NUM_DAYS} diwrnod yn ôl}many{Ni ddaeth Chrome o hyd i feddalwedd niweidiol ar eich cyfrifiadur • Wedi'i wirio {NUM_DAYS} diwrnod yn ôl}other{Ni ddaeth Chrome o hyd i feddalwedd niweidiol ar eich cyfrifiadur • Wedi'i wirio {NUM_DAYS} diwrnod yn ôl}}</translation>
 <translation id="379500251094592809">Er mwyn defnyddio Rhannu Gerllaw, gwnewch yn siŵr bod y ddwy ddyfais wedi'u datgloi, yn agos at ei gilydd a bod Bluetooth ymlaen. Os ydych yn rhannu gyda Chromebook nad yw yn eich cysylltiadau, gwnewch yn siŵr bod Gwelededd Gerllaw ymlaen (agorwch yr ardal statws drwy ddewis yr amser, yna trowch y Gwelededd Gerllaw ymlaen) <ph name="LINK_BEGIN" />Dysgu rhagor<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Diffodd</translation>
@@ -4283,6 +4286,7 @@
 <translation id="5074761966806028321">Mae angen caniatâd o hyd i gwblhau'r gosodiad</translation>
 <translation id="5075563999073408211">Rheolwch eich dyfais gydag un switsh neu fwy. Gall switshis fod yn fysellau bysellfwrdd, botymau rheolydd gêm, neu ddyfeisiau pwrpasol.</translation>
 <translation id="5075910247684008552">Mae cynnwys anniogel wedi'i rwystro yn ddiofyn ar wefannau diogel</translation>
+<translation id="5078490485380754244">Anghofio'r ddyfais</translation>
 <translation id="5078638979202084724">Creu nod tudalen ar gyfer pob tab</translation>
 <translation id="5078796286268621944">PIN anghywir</translation>
 <translation id="5079010647467150187">Ychwanegu VPN integredig...</translation>
@@ -4755,6 +4759,7 @@
 <translation id="5542750926112347543">Mae'r cwcis o <ph name="DOMAIN" /> wedi'u rhwystro</translation>
 <translation id="5542949973455282971">Wrthi'n cysylltu â <ph name="CARRIER_NAME" /></translation>
 <translation id="5543983818738093899">Wrthi'n gwirio am statws...</translation>
+<translation id="5544482392629385159">Dyfais <ph name="DEVICE_INDEX" /> o <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Troswr</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Ychwanegu tab at grŵp}zero{Ychwanegu tabiau at grŵp}two{Ychwanegu tabiau at grŵp}few{Ychwanegu tabiau at grŵp}many{Ychwanegu tabiau at grŵp}other{Ychwanegu tabiau at grŵp}}</translation>
 <translation id="5545693483061321551">Ni all gwefannau ddefnyddio eich cwcis i weld eich gweithgarwch pori ar draws gwahanol wefannau, er enghraifft, i bersonoleiddio hysbysebion. Mae'n bosib na fydd nodweddion ar rai gwefannau yn gweithio.</translation>
@@ -5556,6 +5561,7 @@
 <translation id="6333170995003625229">Nid oedd modd dilysu'ch cyfeiriad e-bost na'ch cyfrinair. Rhowch gynnig arall ar fewngofnodi.</translation>
 <translation id="6335920438823100346">I ddechrau Linux, mae <ph name="MANAGER" /> yn gofyn i chi wneud copïau wrth gefn o'ch data ac i ailosod y Chromebook hwn i'r gosodiadau ffatri.</translation>
 <translation id="6336038146639916978">Mae <ph name="MANAGER" /> wedi analluogi dadfygio ADB. Bydd hyn yn ailosod eich <ph name="DEVICE_TYPE" /> mewn 24 awr. Gwnewch gopi wrth gefn o unrhyw ffeiliau yr hoffech eu cadw.</translation>
+<translation id="6338402296920404442">Ystyriwch ddileu <ph name="FILENAME" />, fel na all eraill sy'n defnyddio'r ddyfais hon weld eich cyfrineiriau.</translation>
 <translation id="6338981933082930623">Gall pob gwefan ddangos unrhyw hysbysebion i chi</translation>
 <translation id="6339668969738228384">Creu proffil newydd ar gyfer <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="6340071272923955280">Protocol Argraffu Rhyngrwyd (IPPS)</translation>
@@ -7636,6 +7642,7 @@
 <translation id="8338952601723052325">Gwefan datblygwyr</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> data a gedwir yn lleol</translation>
 <translation id="833986336429795709">I agor y ddolen hon, dewiswch ap</translation>
+<translation id="8340547030807793004">Rhagor o gamau gweithredu ar gyfer <ph name="DEVICE" /></translation>
 <translation id="8342221978608739536">Heb geisio</translation>
 <translation id="8342861492835240085">Dewis casgliad</translation>
 <translation id="8345848587667658367">Gallwch bellach weld lluniau, cyfryngau, hysbysiadau ac apiau diweddar eich ffôn</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index fca5713..2bd41eb 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1082,6 +1082,7 @@
 <translation id="1997616988432401742">Dine certifikater</translation>
 <translation id="1999115740519098545">Ved opstart</translation>
 <translation id="2000419248597011803">Sender visse cookies og søgninger fra adresselinjen og søgefeltet til din standardsøgemaskine</translation>
+<translation id="2001148512690747464">Der er ikke gemt nogen enheder med Hurtig parring på <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="2002109485265116295">Realtid</translation>
 <translation id="2003130567827682533">Hvis du vil aktivere data fra "<ph name="NAME" />", skal du først oprette forbindelse til et Wi-Fi-netværk</translation>
 <translation id="2004697686368036666">Funktionerne på visse websites virker muligvis ikke</translation>
@@ -1790,6 +1791,7 @@
 <translation id="2642111877055905627">Fodbold</translation>
 <translation id="2643698698624765890">Administrer dine udvidelser ved at klikke på Udvidelser i menuen Vindue.</translation>
 <translation id="2645047101481282803">Din enhed administreres af <ph name="PROFILE_NAME" /></translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 adgangskode er importeret til denne enhed}one{{NUM_PASSWORDS} adgangskode er importeret til denne enhed}other{{NUM_PASSWORDS} adgangskoder er importeret til denne enhed}}</translation>
 <translation id="2645435784669275700">Chrome OS</translation>
 <translation id="2649045351178520408">Base64-kodet ASCII, certifikatkæde</translation>
 <translation id="2652129567809778422">Vælg adgangskode</translation>
@@ -2967,6 +2969,7 @@
 <translation id="3789841737615482174">Installer</translation>
 <translation id="3790417903123637354">Noget gik galt. Prøv igen</translation>
 <translation id="379082410132524484">Dit kort er udløbet</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> udvidelser</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome registrerede ingen skadelig software på din computer • Tjekket for 1 dag siden}one{Chrome registrerede ingen skadelig software på din computer • Tjekket for {NUM_DAYS} dag siden}other{Chrome registrerede ingen skadelig software på din computer • Tjekket for {NUM_DAYS} dage siden}}</translation>
 <translation id="379500251094592809">Sørg for, at begge enheder er låst op, er i nærheden af hinanden, og at både Bluetooth og placering er aktiveret, hvis du vil bruge Deling tæt på. Hvis du deler med en Chromebook, der ikke er i dine kontakter, skal du sørge for, at den har aktiveret Deling tæt på (åbn statusområdet ved at vælge klokkeslættet, og aktivér derefter Deling tæt på). <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Fra</translation>
@@ -4754,6 +4757,7 @@
 <translation id="5542750926112347543">Cookies fra <ph name="DOMAIN" /> er blokeret</translation>
 <translation id="5542949973455282971">Opretter forbindelse til <ph name="CARRIER_NAME" /></translation>
 <translation id="5543983818738093899">Kontrollerer status...</translation>
+<translation id="5544482392629385159">Enhed <ph name="DEVICE_INDEX" /> af <ph name="DEVICE_COUNT" />: <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Gengivelse</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Føj fane til gruppe}one{Føj fane til gruppe}other{Føj faner til gruppe}}</translation>
 <translation id="5545693483061321551">Websites kan ikke bruge dine cookies til at se din browseraktivitet på forskellige websites for f.eks. at tilpasse annoncer. Funktionerne på visse websites virker muligvis ikke.</translation>
@@ -5555,6 +5559,7 @@
 <translation id="6333170995003625229">Din mailadresse eller adgangskode kunne ikke bekræftes. Prøv at logge ind igen.</translation>
 <translation id="6335920438823100346"><ph name="MANAGER" /> kræver, at du sikkerhedskopierer dine data og gendanner fabriksindstillingerne på denne Chromebook, før du kan starte Linux.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> har deaktiveret ADB-fejlretning. Dette medfører, at din <ph name="DEVICE_TYPE" /> nulstilles om 24 timer. Sikkerhedskopiér de filer, du vil beholde.</translation>
+<translation id="6338402296920404442">Du bør overveje at slette <ph name="FILENAME" />, så andre, der bruger denne enhed, ikke kan se dine adgangskoder.</translation>
 <translation id="6338981933082930623">Alle websites kan vise dig alle slags annoncer</translation>
 <translation id="6339668969738228384">Opret en ny profil for <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="6340071272923955280">Internet Printing Protocol (IPPS)</translation>
@@ -7629,6 +7634,7 @@
 <translation id="8338952601723052325">Udviklerens website</translation>
 <translation id="8339059274628563283">Data fra <ph name="SITE" />, der er gemt lokalt</translation>
 <translation id="833986336429795709">Vælg en app for at åbne dette link</translation>
+<translation id="8340547030807793004">Flere handlinger for <ph name="DEVICE" /></translation>
 <translation id="8342221978608739536">Jeg prøvede ikke</translation>
 <translation id="8342861492835240085">Vælg en samling</translation>
 <translation id="8345848587667658367">Du kan nu se din telefons seneste billeder, medier, notifikationer og apps</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index eac523c0..4aff03e 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -1066,6 +1066,7 @@
 <translation id="1997616988432401742">Meine Zertifikate</translation>
 <translation id="1999115740519098545">Beim Start</translation>
 <translation id="2000419248597011803">Suchanfragen, die in die Adressleiste und das Suchfeld eingegeben wurden, sowie einige Cookies werden an deine Standardsuchmaschine gesendet</translation>
+<translation id="2001148512690747464">Keine Geräte mit Unterstützung der Funktion „Schnelles Pairing“ für <ph name="PRIMARY_EMAIL" /> gespeichert</translation>
 <translation id="2002109485265116295">Echtzeit</translation>
 <translation id="2003130567827682533">Damit du "<ph name="NAME" />"-Daten aktivieren kannst, musst du zuerst eine Verbindung zu einem WLAN herstellen</translation>
 <translation id="2004697686368036666">Einige Websites funktionieren dann möglicherweise nicht mehr richtig</translation>
@@ -1772,6 +1773,7 @@
 <translation id="2642111877055905627">Fußball</translation>
 <translation id="2643698698624765890">Klicke zum Verwalten deiner Erweiterungen im Menü „Fenster“ auf „Erweiterungen“.</translation>
 <translation id="2645047101481282803">Das Gerät wird von <ph name="PROFILE_NAME" /> verwaltet</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 Passwort auf dieses Gerät importiert}other{{NUM_PASSWORDS} Passwörter auf dieses Gerät importiert}}</translation>
 <translation id="2645435784669275700">Chrome OS</translation>
 <translation id="2649045351178520408">Base64-codierter ASCII-Code, Zertifikatkette</translation>
 <translation id="2652129567809778422">Passwort auswählen</translation>
@@ -2949,6 +2951,7 @@
 <translation id="3789841737615482174">Installieren</translation>
 <translation id="3790417903123637354">Ein Fehler ist aufgetreten. Versuche es später noch einmal.</translation>
 <translation id="379082410132524484">Deine Karte ist abgelaufen.</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> Erweiterungen</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome hat auf deinem Computer keine schädliche Software gefunden • Vor 1 Tag geprüft}other{Chrome hat auf deinem Computer keine schädliche Software gefunden • Vor {NUM_DAYS} Tagen geprüft}}</translation>
 <translation id="379500251094592809">Zur Verwendung von „Nearby Share“ müssen beide Geräte entsperrt sein und sich nah beieinander befinden. Außerdem muss Bluetooth aktiviert sein. Wenn du Inhalte mit einem Chromebook teilen möchtest, das sich nicht in deinen Kontakten befindet, muss die Nearby-Sichtbarkeit aktiviert sein. Wähle dazu die Uhrzeit aus, öffne den Statusbereich und aktiviere die Nearby-Sichtbarkeit. <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Aus</translation>
@@ -4735,6 +4738,7 @@
 <translation id="5542750926112347543">Cookies von <ph name="DOMAIN" /> blockiert</translation>
 <translation id="5542949973455282971">Verbindung mit <ph name="CARRIER_NAME" /> wird hergestellt</translation>
 <translation id="5543983818738093899">Status wird überprüft...</translation>
+<translation id="5544482392629385159">Gerät <ph name="DEVICE_INDEX" /> von <ph name="DEVICE_COUNT" />, „<ph name="DEVICE_NAME" />“</translation>
 <translation id="554517701842997186">Renderer</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Tab zu Gruppe hinzufügen}other{Tabs zu Gruppe hinzufügen}}</translation>
 <translation id="5545693483061321551">Websites können deine Cookies nicht verwenden, um deine Browseraktivitäten auf anderen Websites zu sehen und beispielsweise zur Personalisierung von Werbung zu nutzen. Einige Websites funktionieren dann möglicherweise nicht mehr richtig.</translation>
@@ -5533,6 +5537,7 @@
 <translation id="6333170995003625229">Deine E-Mail-Adresse oder dein Passwort konnte nicht bestätigt werden. Melde dich noch einmal an.</translation>
 <translation id="6335920438823100346">Bevor du Linux starten kannst, musst du gemäß <ph name="MANAGER" /> deine Daten sichern und dieses Chromebook auf die Werkseinstellungen zurücksetzen.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> hat die ADB-Fehlerbehebung deaktiviert. Dadurch wird <ph name="DEVICE_TYPE" /> in 24 Stunden zurückgesetzt. Sichere alle Dateien, die du behalten möchtest.</translation>
+<translation id="6338402296920404442">Am besten löschst du „<ph name="FILENAME" />“, damit andere Nutzer dieses Geräts deine Passwörter nicht sehen können.</translation>
 <translation id="6338981933082930623">Alle Websites dürfen mir beliebige Werbung zeigen</translation>
 <translation id="6339668969738228384">Neues Profil für <ph name="USER_EMAIL_ADDRESS" /> erstellen</translation>
 <translation id="6340071272923955280">Internet Printing Protocol (IPPS)</translation>
@@ -7605,6 +7610,7 @@
 <translation id="8338952601723052325">Website des Entwicklers</translation>
 <translation id="8339059274628563283">Für <ph name="SITE" /> lokal gespeicherte Daten</translation>
 <translation id="833986336429795709">App auswählen, um diesen Link zu öffnen</translation>
+<translation id="8340547030807793004">Weitere Aktionen für „<ph name="DEVICE" />“</translation>
 <translation id="8342221978608739536">Nicht ausprobiert</translation>
 <translation id="8342861492835240085">Sammlung auswählen</translation>
 <translation id="8345848587667658367">Du kannst jetzt die neuesten Fotos, Medien, Benachrichtigungen und Apps von deinem Smartphone aufrufen</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 41a3b8c..d4bccece 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -1081,6 +1081,7 @@
 <translation id="1997616988432401742">Τα πιστοποιητικά σας</translation>
 <translation id="1999115740519098545">Κατά την εκκίνηση</translation>
 <translation id="2000419248597011803">Στέλνει ορισμένα cookie και αναζητήσεις από τη γραμμή διευθύνσεων και το πλαίσιο αναζήτησης στην προεπιλεγμένη μηχανή αναζήτησης</translation>
+<translation id="2001148512690747464">Δεν έχουν αποθηκευτεί συσκευές Γρήγορης σύζευξης στον λογαριασμό <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="2002109485265116295">Σε πραγματικό χρόνο</translation>
 <translation id="2003130567827682533">Για να ενεργοποιήσετε τα δεδομένα "<ph name="NAME" />", πρώτα συνδεθείτε σε κάποιο δίκτυο Wi-Fi</translation>
 <translation id="2004697686368036666">Ορισμένες λειτουργίες κάποιων ιστοτόπων μπορεί να μην είναι διαθέσιμες.</translation>
@@ -1790,6 +1791,7 @@
 <translation id="2642111877055905627">Μπάλα ποδοσφαίρου</translation>
 <translation id="2643698698624765890">Διαχειριστείτε τις επεκτάσεις σας, κάνοντας κλικ στην επιλογή "Επεκτάσεις" στο μενού "Παράθυρο".</translation>
 <translation id="2645047101481282803">Η διαχείριση της συσκευής σας γίνεται από τον διαχειριστή <ph name="PROFILE_NAME" />.</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{Έγινε εισαγωγή 1 κωδικού πρόσβασης σε αυτήν τη συσκευή}other{Έγινε εισαγωγή {NUM_PASSWORDS} κωδικών πρόσβασης σε αυτήν τη συσκευή}}</translation>
 <translation id="2645435784669275700">Chrome OS</translation>
 <translation id="2649045351178520408">ASCII με κωδικοποίηση Base64, αλυσίδα πιστοποιητικού</translation>
 <translation id="2652129567809778422">Επιλογή κωδικού πρόσβασης</translation>
@@ -2967,6 +2969,7 @@
 <translation id="3789841737615482174">Εγκατάσταση</translation>
 <translation id="3790417903123637354">Παρουσιάστηκε κάποιο πρόβλημα. Δοκιμάστε ξανά αργότερα.</translation>
 <translation id="379082410132524484">Η κάρτα σας έληξε</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> επεκτάσεις</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Το Chrome δεν εντόπισε επιβλαβές λογισμικό στον υπολογιστή σας • Ο έλεγχος έγινε πριν από 1 ημέρα}other{Το Chrome δεν εντόπισε επιβλαβές λογισμικό στον υπολογιστή σας • Ο έλεγχος έγινε πριν από {NUM_DAYS} ημέρες}}</translation>
 <translation id="379500251094592809">Για να χρησιμοποιήσετε την Κοινοποίηση κοντά, βεβαιωθείτε ότι και οι δύο συσκευές είναι ξεκλειδωμένες, βρίσκονται κοντά η μία στην άλλη και έχουν ενεργοποιημένο το Bluetooth. Εάν κάνετε κοινή χρήση με ένα Chromebook που δεν βρίσκεται στις επαφές σας, βεβαιωθείτε ότι είναι ενεργοποιημένη η επιλογή Ορατότητα κοντά (ανοίξτε την περιοχή κατάστασης επιλέγοντας την ώρα και έπειτα ενεργοποιήστε την Ορατότητα κοντά). <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Ανενεργό</translation>
@@ -4754,6 +4757,7 @@
 <translation id="5542750926112347543">Τα cookie από τον τομέα <ph name="DOMAIN" /> αποκλείστηκαν</translation>
 <translation id="5542949973455282971">Σύνδεση σε <ph name="CARRIER_NAME" /></translation>
 <translation id="5543983818738093899">Έλεγχος κατάστασης…</translation>
+<translation id="5544482392629385159">Συσκευή <ph name="DEVICE_INDEX" /> από <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Λειτουργία απόδοσης</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Προσθήκη καρτέλας στην ομάδα}other{Προσθήκη καρτελών στην ομάδα}}</translation>
 <translation id="5545693483061321551">Οι ιστότοποι δεν μπορούν να χρησιμοποιήσουν cookie για να βλέπουν τη δραστηριότητα περιήγησης μεταξύ διαφορετικών ιστοτόπων, για παράδειγμα, για την εξατομίκευση των διαφημίσεων. Ορισμένες λειτουργίες κάποιων ιστοτόπων μπορεί να μην είναι διαθέσιμες.</translation>
@@ -5556,6 +5560,7 @@
 <translation id="6333170995003625229">Δεν ήταν δυνατή η επαλήθευση της διεύθυνσης ηλεκτρονικού ταχυδρομείου ή του κωδικού πρόσβασής σας. Δοκιμάστε να συνδεθείτε ξανά.</translation>
 <translation id="6335920438823100346">Για εκκίνηση του Linux, ο οργανισμός <ph name="MANAGER" /> απαιτεί τη δημιουργία αντιγράφων ασφαλείας των δεδομένων σας και την επαναφορά του Chromebook στις εργοστασιακές ρυθμίσεις του.</translation>
 <translation id="6336038146639916978">Ο τομέας <ph name="MANAGER" /> απενεργοποίησε τον εντοπισμό και τη διόρθωση σφαλμάτων adb. Αυτό θα επαναφέρει τη συσκευή σας <ph name="DEVICE_TYPE" /> σε 24 ώρες. Δημιουργήστε αντίγραφα ασφαλείας των αρχείων που θέλετε να κρατήσετε.</translation>
+<translation id="6338402296920404442">Μπορείτε να διαγράψετε το αρχείο <ph name="FILENAME" />, έτσι ώστε τα άλλα άτομα που χρησιμοποιούν αυτήν τη συσκευή να μην μπορούν να δουν τους κωδικούς πρόσβασής σας.</translation>
 <translation id="6338981933082930623">Όλοι οι ιστότοποι μπορούν να προβάλλουν οποιεσδήποτε διαφημίσεις σε εσάς</translation>
 <translation id="6339668969738228384">Δημιουργία νέου προφίλ για τη διεύθυνση <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="6340071272923955280">Πρωτόκολλο εκτύπωσης στο διαδίκτυο (IPPS)</translation>
@@ -7629,6 +7634,7 @@
 <translation id="8338952601723052325">Ιστότοπος προγραμματιστή</translation>
 <translation id="8339059274628563283">Τοπικά αποθηκευμένα δεδομένα στο <ph name="SITE" /></translation>
 <translation id="833986336429795709">Για να ανοίξετε αυτόν τον σύνδεσμο, επιλέξτε μια εφαρμογή</translation>
+<translation id="8340547030807793004">Περισσότερες ενέργειες για <ph name="DEVICE" /></translation>
 <translation id="8342221978608739536">Δεν το δοκίμασα</translation>
 <translation id="8342861492835240085">Επιλέξτε μια συλλογή</translation>
 <translation id="8345848587667658367">Μπορείτε πλέον να βλέπετε τις πρόσφατες φωτογραφίες, τα μέσα, τις ειδοποιήσεις και τις εφαρμογές του τηλεφώνου σας.</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 472cd8b..c94aa51 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -906,6 +906,7 @@
 <translation id="1829129547161959350">Penguin</translation>
 <translation id="1829192082282182671">Zoom &amp;Out</translation>
 <translation id="1830550083491357902">Not signed in</translation>
+<translation id="1831848493690504725">We can't reach Google through the connected network. Try choosing a different network or checking your network settings or proxy settings (if you are using a proxy).</translation>
 <translation id="1832459821645506983">Yes, I’m in</translation>
 <translation id="1832511806131704864">Phone change updated</translation>
 <translation id="1832848789136765277">To make sure that you can always access your sync data, verify that it's you</translation>
@@ -2208,6 +2209,7 @@
 <translation id="3021065318976393105">While on battery</translation>
 <translation id="3021066826692793094">Butterfly</translation>
 <translation id="3021678814754966447">&amp;View Frame Source</translation>
+<translation id="3022361196600037287"><ph name="DEVICE" /> will be removed from this Chromebook and won’t be saved to <ph name="PRIMARY_EMAIL" />.</translation>
 <translation id="3022978424994383087">Didn't get that.</translation>
 <translation id="3023464535986383522">Select to speak</translation>
 <translation id="3024374909719388945">Use 24-hour clock</translation>
@@ -3747,6 +3749,7 @@
 <translation id="4535127706710932914">Default Profile</translation>
 <translation id="4535767533210902251">The fingerprint sensor is the top-right key on your keyboard. Touch it lightly with any finger.</translation>
 <translation id="4536140153723794651">Sites that can always use cookies</translation>
+<translation id="4536769240747010177">Tethering capabilities:</translation>
 <translation id="4538417792467843292">Delete word</translation>
 <translation id="4538792345715658285">Installed by enterprise policy.</translation>
 <translation id="4541123282641193691">Couldn't verify your account. Please try again or restart your Chromebook.</translation>
@@ -3774,6 +3777,7 @@
 <translation id="4561893854334016293">No recently changed permissions</translation>
 <translation id="4562155214028662640">Add Fingerprint</translation>
 <translation id="4563210852471260509">Initial input language is Chinese</translation>
+<translation id="4563382028841851106">Remove from account</translation>
 <translation id="4563880231729913339">Finger 3</translation>
 <translation id="4564245002465020751">Finish setting up on your phone</translation>
 <translation id="4565377596337484307">Hide password</translation>
@@ -4240,7 +4244,6 @@
 <translation id="5026874946691314267">Don't show this again</translation>
 <translation id="5027550639139316293">Email Certificate</translation>
 <translation id="5027562294707732951">Add extension</translation>
-<translation id="5028202297152853903"><ph name="DEVICE" /> will be removed from <ph name="PRIMARY_EMAIL" /> and unpaired with this Chromebook.</translation>
 <translation id="5029568752722684782">Clear copy</translation>
 <translation id="5029873138381728058">Failed to check VMs</translation>
 <translation id="503155457707535043">Apps downloading</translation>
@@ -4752,6 +4755,7 @@
 <translation id="5533001281916885985"><ph name="SITE_NAME" /> wants to</translation>
 <translation id="5534304873398226603">Discard photo or video</translation>
 <translation id="5537725057119320332">Cast</translation>
+<translation id="5539070192556911367">Can't reach Google</translation>
 <translation id="5539221284352502426">The password that you entered was rejected by the server. Possible reasons include: The password is too short. The password must include numbers or symbols. The password must be different from previous passwords.</translation>
 <translation id="5541694225089836610">Action is disabled by your administrator</translation>
 <translation id="5542132724887566711">Profile</translation>
@@ -4815,6 +4819,7 @@
 <translation id="5585912436068747822">Formatting failed</translation>
 <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation>
 <translation id="558918721941304263">Loading apps...</translation>
+<translation id="5590418976913374224">Play sound on device start-up</translation>
 <translation id="5592595402373377407">Not enough data available yet.</translation>
 <translation id="5595307023264033512">Total storage used by sites: <ph name="TOTAL_USAGE" /></translation>
 <translation id="5595485650161345191">Edit address</translation>
@@ -6192,6 +6197,10 @@
 <translation id="6943939122536910181">Disconnected from <ph name="DEVICE" /></translation>
 <translation id="6945221475159498467">Select</translation>
 <translation id="694592694773692225">Redirect blocked on this page.</translation>
+<translation id="6947015141909171112">You’re seeing recipes based on your recent search activity for recipes.
+        <ph name="BREAK" />
+        <ph name="BREAK" />
+        You can manage settings from the card menu or see more options in Customise Chrome.</translation>
 <translation id="6949434160682548041">Password (optional)</translation>
 <translation id="6950627417367801484">Restore apps</translation>
 <translation id="6952242901357037157">You can also show passwords from your <ph name="BEGIN_LINK" />Google Account<ph name="END_LINK" /> here</translation>
@@ -6359,6 +6368,7 @@
 <translation id="7102687220333134671">Automatic updates are turned on</translation>
 <translation id="7102832101143475489">The request timed out</translation>
 <translation id="710640343305609397">Open network settings</translation>
+<translation id="7107609441453408294">Play the same audio through all speakers</translation>
 <translation id="7108338896283013870">Hide</translation>
 <translation id="7108668606237948702">enter</translation>
 <translation id="7108933416628942903">Lock now</translation>
@@ -6515,7 +6525,6 @@
 <translation id="7280877790564589615">Permission requested</translation>
 <translation id="7282547042039404307">Smooth</translation>
 <translation id="7282992757463864530">Infobar</translation>
-<translation id="728334460283296316">Remove device</translation>
 <translation id="7283555985781738399">Guest mode</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{This device will be saved for one day and you can connect without a code next time. This is set by your administrator.}other{This device will be saved for {DAYS} days and you can connect without a code next time. This is set by your administrator.}}</translation>
 <translation id="7284411326658527427">Each person can personalise their account and keep data private.</translation>
@@ -6591,6 +6600,7 @@
 <translation id="7364745943115323529">Cast...</translation>
 <translation id="7364796246159120393">Choose file</translation>
 <translation id="7365076891350562061">Monitor size</translation>
+<translation id="7365995455115045224"><ph name="WINDOW_TITLE" /> – Pinned</translation>
 <translation id="7366316827772164604">Scanning for nearby devices…</translation>
 <translation id="7366415735885268578">Add a site</translation>
 <translation id="7366909168761621528">Browsing data</translation>
@@ -6987,6 +6997,7 @@
 <translation id="7737115349420013392">Pairing with "<ph name="DEVICE_NAME" />" ...</translation>
 <translation id="7737846262459425222">You can change this at any time in Settings &gt; Google Assistant &gt; Screen context.</translation>
 <translation id="7737948071472253612">Not allowed to use your camera</translation>
+<translation id="77381465218432215">Show accent marks and special characters</translation>
 <translation id="7740996059027112821">Standard</translation>
 <translation id="7741307896921365578">Enables a browser-level side panel for a useful and persistent way to access your reading list and bookmarks.</translation>
 <translation id="7742558784808143689">Clear site data and permissions for <ph name="SITE_NAME" />, all sites under it, and installed apps?</translation>
@@ -7777,6 +7788,7 @@
 <translation id="8486666913807228950">Reason: The inverted rule <ph name="REVERT_RULE" /> was found in the 'Force open in' list.</translation>
 <translation id="848666842773560761">An app is trying to access the camera. Turn off the camera privacy switch to allow access.</translation>
 <translation id="8487678622945914333">Zoom In</translation>
+<translation id="8487699605742506766">Hotspot</translation>
 <translation id="8489156414266187072">Personal suggestions are only shown on your account</translation>
 <translation id="8490896350101740396">The following kiosk apps "<ph name="UPDATED_APPS" />" have been updated. Please reboot the device to complete the update process.</translation>
 <translation id="8492685019009920170">Touch the fingerprint sensor with your finger. Your data is stored securely and never leaves your <ph name="DEVICE_TYPE" />.</translation>
@@ -7812,8 +7824,6 @@
 <translation id="8531701051932785007">Enhanced Safe Browsing is off</translation>
 <translation id="8534656636775144800">Oops!  Something went wrong when trying to join the domain. Please try again.</translation>
 <translation id="8535005006684281994">Netscape Certificate Renewal URL</translation>
-<translation id="8536565869707961418">Remove <ph name="DEVICE" /> from <ph name="PRIMARY_EMAIL" />.
-    Device can still be used locally.</translation>
 <translation id="8536713137312218707">Quick Commands</translation>
 <translation id="8536956381488731905">Sound on key-press</translation>
 <translation id="8539727552378197395">No (HttpOnly)</translation>
@@ -8272,6 +8282,7 @@
 <translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" and 1 other tab}other{"<ph name="TAB_TITLE" />" and # other tabs}}</translation>
 <translation id="8977811652087512276">Incorrect password or corrupt file</translation>
 <translation id="8978154919215542464">On – sync everything</translation>
+<translation id="8978670037548431647">Refresh tethering capabilities</translation>
 <translation id="897939795688207351">On <ph name="ORIGIN" /></translation>
 <translation id="8980345560318123814">Feedback reports</translation>
 <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – Crashed</translation>
@@ -8536,6 +8547,7 @@
 <translation id="935854577147268200">Smart Lock phone changed. Enter your password to update Smart Lock. Next time, your phone will unlock your <ph name="DEVICE_TYPE" />. You can turn off Smart Lock in Settings</translation>
 <translation id="936646668635477464">Camera and microphone</translation>
 <translation id="936801553271523408">System diagnostic data</translation>
+<translation id="937053962468712792">Remove <ph name="DEVICE" /> from <ph name="PRIMARY_EMAIL" />?</translation>
 <translation id="93766956588638423">Repair extension</translation>
 <translation id="938568644810664664">Try 'Hey Google, what song is this?' or 'Hey Google, what's on my screen?'</translation>
 <translation id="938623846785894166">Uncommon file</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index 436e22d..f4febdc 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -4223,7 +4223,6 @@
 <translation id="5026874946691314267">Ez erakutsi berriro</translation>
 <translation id="5027550639139316293">Posta elektronikoko ziurtagiria</translation>
 <translation id="5027562294707732951">Gehitu luzapena</translation>
-<translation id="5028202297152853903"><ph name="DEVICE" /> <ph name="PRIMARY_EMAIL" /> kontutik kenduko da, eta Chromebook-etik desparekatuko.</translation>
 <translation id="5029568752722684782">Garbitu kopia</translation>
 <translation id="5029873138381728058">Ezin izan dira egiaztatu makina birtualak</translation>
 <translation id="503155457707535043">Deskargatzen ari dira aplikazioak</translation>
@@ -6495,7 +6494,6 @@
 <translation id="7280877790564589615">Baimena behar da</translation>
 <translation id="7282547042039404307">Leuna</translation>
 <translation id="7282992757463864530">Informazio-barra</translation>
-<translation id="728334460283296316">Kendu gailua</translation>
 <translation id="7283555985781738399">Gonbidatu modua</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Gailua egun batez gordeko da; hurrengoan, koderik erabili gabe konektatu ahal izango zara. Administratzaileak ezarri du arau hori.}other{Gailua {DAYS} egunez gordeko da; hurrengoan, koderik erabili gabe konektatu ahal izango zara. Administratzaileak ezarri du arau hori.}}</translation>
 <translation id="7284411326658527427">Bakoitzak bere kontua pertsonaliza dezake, eta datuak pribatu mantendu.</translation>
@@ -7790,8 +7788,6 @@
 <translation id="8531701051932785007">Arakatze seguru hobetua desaktibatuta dago</translation>
 <translation id="8534656636775144800">Arazo bat izan da domeinuan sartzen saiatzean. Saiatu berriro.</translation>
 <translation id="8535005006684281994">Netscape ziurtagiria berritzeko URLa</translation>
-<translation id="8536565869707961418"><ph name="PRIMARY_EMAIL" /> kontutik kendu nahi duzu <ph name="DEVICE" />?
-    Hala ere, gailua lokalki erabiltzen jarraitu ahal izango duzu.</translation>
 <translation id="8536713137312218707">Agindu bizkorrak</translation>
 <translation id="8536956381488731905">Aktibatu soinua teklak sakatzean</translation>
 <translation id="8539727552378197395">Ez (Http soilik)</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 366f8c9..3c51463 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -1342,6 +1342,7 @@
 <translation id="2241053333139545397">خواندن و تغییر داده‌هایتان در تعدادی از وب‌سایت‌ها</translation>
 <translation id="2241634353105152135">فقط یک بار</translation>
 <translation id="2242687258748107519">اطلاعات فایل</translation>
+<translation id="2245296100676446525">برای دریافت نشانک‌ها، گذرواژه‌ها، سابقه، و موارد دیگر در این دستگاه و هر جای دیگری که همگام‌سازی می‌کنید، همگام‌سازی را روشن کنید.</translation>
 <translation id="2245603955208828424">استفاده از کلیدهای جهت‌نما برای جابه‌جایی بین موارد به‌صورت حرف به حرف</translation>
 <translation id="2246129643805925002"><ph name="DEVICE_TYPE" /> به‌طور خودکار در پس‌زمینه به‌روزرسانی می‌شود تا جدیدترین ویژگی‌ها و بهبودهای امنیتی را دراختیارتان قرار دهد. می‌توانید اولویت‌های به‌روزرسانی را در «تنظیمات» مرور کنید.</translation>
 <translation id="2246549592927364792">‏توضیحات تصویر از Google دریافت شود؟</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index e295b48..de8b2228 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -1070,6 +1070,7 @@
 <translation id="1997616988432401742">Vos certificats</translation>
 <translation id="1999115740519098545">Au démarrage</translation>
 <translation id="2000419248597011803">Envoie des témoins et des recherches à partir de la barre d'adresse et du champ de recherche à votre moteur de recherche par défaut</translation>
+<translation id="2001148512690747464">Aucun appareil connecté à l'aide de la fonctionnalité Association rapide enregistré dans <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="2002109485265116295">En temps réel</translation>
 <translation id="2003130567827682533">Pour activer les données « <ph name="NAME" /> », connectez-vous d'abord à un réseau Wi-Fi</translation>
 <translation id="2004697686368036666">Des fonctionnalités de certains sites pourraient ne pas fonctionner</translation>
@@ -1334,6 +1335,7 @@
 <translation id="2241053333139545397">Accéder à vos données sur un certain nombre de sites Web et les modifier</translation>
 <translation id="2241634353105152135">Une fois</translation>
 <translation id="2242687258748107519">Information sur le fichier</translation>
+<translation id="2245296100676446525">Activez la synchronisation pour accéder à vos favoris, vos mots de passe, votre historique et plus encore sur cet appareil et sur tous les autres appareils que vous synchronisez.</translation>
 <translation id="2245603955208828424">Utilisez les touches fléchées pour parcourir les éléments lettre par lettre</translation>
 <translation id="2246129643805925002">Votre <ph name="DEVICE_TYPE" /> se met automatiquement à jour en arrière-plan pour vous offrir les dernières fonctionnalités et améliorations de sécurité. Vous pouvez examiner vos préférences de mise à jour dans les paramètres.</translation>
 <translation id="2246549592927364792">Télécharger les descriptions d'image de Google?</translation>
@@ -1776,6 +1778,7 @@
 <translation id="2642111877055905627">Ballon de soccer</translation>
 <translation id="2643698698624765890">Pour gérer vos extensions, cliquez sur « Extensions » dans le menu « Fenêtre ».</translation>
 <translation id="2645047101481282803">Votre appareil est géré par <ph name="PROFILE_NAME" /></translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 mot de passe importé sur cet appareil}one{{NUM_PASSWORDS} mot de passe importé sur cet appareil}other{{NUM_PASSWORDS} mots de passe importés sur cet appareil}}</translation>
 <translation id="2645435784669275700">Chrome OS</translation>
 <translation id="2649045351178520408">Chaîne de certificats codés Base 64 ASCII</translation>
 <translation id="2652129567809778422">Sélectionner un mot de passe</translation>
@@ -2953,6 +2956,7 @@
 <translation id="3789841737615482174">Installer</translation>
 <translation id="3790417903123637354">Une erreur s'est produite. Réessayez plus tard</translation>
 <translation id="379082410132524484">Votre carte est expirée</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> extensions</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome n'a détecté aucun logiciel malveillant sur votre ordinateur • Vérification effectuée il y a 1 jour}one{Chrome n'a détecté aucun logiciel malveillant sur votre ordinateur • Vérification effectuée il y a {NUM_DAYS} jour}other{Chrome n'a détecté aucun logiciel malveillant sur votre ordinateur • Vérification effectuée il y a {NUM_DAYS} jours}}</translation>
 <translation id="379500251094592809">Pour utiliser le partage à proximité, assurez-vous que les deux appareils sont déverrouillés, à proximité l'un de l'autre, et que le Bluetooth est activé. Si vous effectuez le partage avec un Chromebook qui ne figure pas dans vos contacts, assurez-vous que le partage à proximité est activé sur celui-ci (ouvrez la zone de notifications en sélectionnant l'heure, puis en activant le partage à proximité). <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Désactivé</translation>
@@ -4739,6 +4743,7 @@
 <translation id="5542750926112347543">Les témoins de <ph name="DOMAIN" /> sont bloqués</translation>
 <translation id="5542949973455282971">Connexion à <ph name="CARRIER_NAME" /> en cours…</translation>
 <translation id="5543983818738093899">Vérification de l'état en cours...</translation>
+<translation id="5544482392629385159">Appareil <ph name="DEVICE_INDEX" /> sur <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Processus de rendu</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Ajouter un onglet au groupe}one{Ajouter un onglet au groupe}other{Ajouter des onglets au groupe}}</translation>
 <translation id="5545693483061321551">Les sites ne peuvent pas utiliser vos témoins pour voir votre activité de navigation sur différents sites (par exemple, pour personnaliser les annonces). Des fonctionnalités de certains sites pourraient ne pas fonctionner.</translation>
@@ -5540,6 +5545,7 @@
 <translation id="6333170995003625229">Impossible de vérifier votre adresse de courriel ni votre mot de passe. Essayez de vous connecter à nouveau.</translation>
 <translation id="6335920438823100346">Pour démarrer Linux, <ph name="MANAGER" /> vous demande de sauvegarder vos données et de réinitialiser ce Chromebook à ses paramètres par défaut.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> a désactivé le débogage PDA. Cela entraînera la réinitialisation de votre <ph name="DEVICE_TYPE" /> dans 24 heures. Sauvegardez tout fichier que vous souhaitez garder.</translation>
+<translation id="6338402296920404442">Envisagez de supprimer <ph name="FILENAME" /> afin que les autres utilisateurs de cet appareil ne puissent pas voir vos mots de passe.</translation>
 <translation id="6338981933082930623">Tous les sites peuvent afficher n'importe quelle annonce</translation>
 <translation id="6339668969738228384">Créer un autre profil pour <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="6340071272923955280">Protocole IPPS d'impression Internet</translation>
@@ -7614,6 +7620,7 @@
 <translation id="8338952601723052325">Site Web du développeur</translation>
 <translation id="8339059274628563283">Données du site <ph name="SITE" /> stockées localement</translation>
 <translation id="833986336429795709">Pour ouvrir ce lien, choisissez une application</translation>
+<translation id="8340547030807793004">Autres actions pour <ph name="DEVICE" /></translation>
 <translation id="8342221978608739536">Je n'ai pas essayé</translation>
 <translation id="8342861492835240085">Sélectionner une collection</translation>
 <translation id="8345848587667658367">Vous pouvez maintenant afficher les photos, les notifications, les applications et les contenus multimédias récents de votre téléphone</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 0086c6f..cdd23a38 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1066,6 +1066,7 @@
 <translation id="1997616988432401742">તમારા પ્રમાણપત્રો</translation>
 <translation id="1999115740519098545">સ્ટાર્ટઅપ પર</translation>
 <translation id="2000419248597011803">ઍડ્રેસ બાર અને શોધ બૉક્સમાંથી કેટલીક કુકી અને શોધને તમારા ડિફૉલ્ટ શોધ એન્જિન પર મોકલે છે</translation>
+<translation id="2001148512690747464"><ph name="PRIMARY_EMAIL" />માં કોઈ ઝડપી જોડાણ ડિવાઇસ સાચવ્યા નથી</translation>
 <translation id="2002109485265116295">રિઅલ-ટાઇમ</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' ડેટાને સક્રિય કરવા માટે, પહેલા વાઇ-ફાઇ નેટવર્કથી કનેક્ટ કરો</translation>
 <translation id="2004697686368036666">અમુક સુવિધાઓ કેટલીક સાઇટ પર કામ કરી શકશે નહીં</translation>
@@ -1330,6 +1331,7 @@
 <translation id="2241053333139545397">ઘણી બધી વેબસાઇટ્સ પર તમારો ડેટા વાંચો અને બદલો</translation>
 <translation id="2241634353105152135">માત્ર એક વખત</translation>
 <translation id="2242687258748107519">ફાઇલ માહિતી</translation>
+<translation id="2245296100676446525">આ અને જ્યાં પણ તમે સિંક કરી રહ્યાં હો તે ડિવાઇસ પર તમારા બુકમાર્ક, પાસવર્ડ અને ઇતિહાસ જેવું બીજું ઘણું મેળવવા માટે, સિંકની સુવિધા ચાલુ કરો.</translation>
 <translation id="2245603955208828424">આઇટમમાં એક પછી એક અક્ષર પર કર્સરને ખસેડવા માટે ઍરો કીનો ઉપયોગ કરો</translation>
 <translation id="2246129643805925002">તમને નવીનતમ સુવિધાઓ અને સુરક્ષાના સુધારા આપવા માટે, તમારી <ph name="DEVICE_TYPE" /> બૅકગ્રાઉન્ડમાં ઑટોમૅટિક રીતે અપડેટ થાય છે. તમે સેટિંગમાં પસંદગીઓની અપડેટને રિવ્યૂ કરી શકો છો.</translation>
 <translation id="2246549592927364792">Google તરફથી છબીનાં વર્ણનો મેળવીએ?</translation>
@@ -1772,6 +1774,7 @@
 <translation id="2642111877055905627">સૉકર બૉલ</translation>
 <translation id="2643698698624765890">વિંડો મેનૂમાં એક્સટેંશનને ક્લિક કરીને તમારા એક્સ્ટેંશન્સને મેનેજ કરો.</translation>
 <translation id="2645047101481282803">તમારું ડિવાઇસ <ph name="PROFILE_NAME" /> દ્વારા મેનેજ કરવામાં આવે છે</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{આ ડિવાઇસ પર 1 પાસવર્ડની આયાત કરી}one{આ ડિવાઇસ પર {NUM_PASSWORDS} પાસવર્ડની આયાત કરી}other{આ ડિવાઇસ પર {NUM_PASSWORDS} પાસવર્ડની આયાત કરી}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">Base64-encoded ASCII, પ્રમાણપત્ર ચેન</translation>
 <translation id="2652129567809778422">પાસવર્ડ પસંદ કરો</translation>
@@ -2949,6 +2952,7 @@
 <translation id="3789841737615482174">ઇન્સ્ટોલ કરો</translation>
 <translation id="3790417903123637354">કંઈક ખોટું થયું હતું. થોડા સમય પછી ફરી પ્રયાસ કરો</translation>
 <translation id="379082410132524484">તમારા કાર્ડની સમયસીમા સમાપ્ત થઈ ગઈ છે</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> એક્સ્ટેન્શન</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chromeને તમારા કમ્પ્યુટરમાં હાનિકારક સૉફ્ટવેર મળ્યું નથી • 1 દિવસ પહેલાં ચેક કર્યું}one{Chromeને તમારા કમ્પ્યુટરમાં હાનિકારક સૉફ્ટવેર મળ્યું નથી • {NUM_DAYS} દિવસ પહેલાં ચેક કર્યું}other{Chromeને તમારા કમ્પ્યુટરમાં હાનિકારક સૉફ્ટવેર મળ્યું નથી • {NUM_DAYS} દિવસ પહેલાં ચેક કર્યું}}</translation>
 <translation id="379500251094592809">'નજીકના શેર' સુવિધાનો ઉપયોગ કરવા માટે, ખાતરી કરો કે બન્ને ડિવાઇસ અનલૉક કરેલા અને નજીક જ હોય તેમજ તેમાં બ્લૂટૂથની સુવિધા ચાલુ કરેલી હોય. જો તમે તમારા સંપર્કોમાં ન હોય એવા Chromebook સાથે શેર કરી રહ્યાં હો, તો ખાતરી કરો કે તેમાં 'નજીકની દૃશ્યતા' સુવિધા ચાલુ કરી હોય (સમય પસંદ કરીને સ્ટેટસ એરિયા ખોલો, પછી 'નજીકની દૃશ્યતા' ચાલુ કરો) <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">બંધ</translation>
@@ -4735,6 +4739,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" />ની કુકીને બ્લૉક કરેલ છે</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> સાથે કનેક્ટ થઈ રહ્યું છે</translation>
 <translation id="5543983818738093899">સ્થિતિ માટે તપાસી રહ્યું છે...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_COUNT" />માંથી ડિવાઇસ <ph name="DEVICE_INDEX" />, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">રેન્ડરર</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{ગ્રૂપમાં ટૅબ ઉમેરો}one{ગ્રૂપમાં ટૅબ ઉમેરો}other{ગ્રૂપમાં ટૅબ ઉમેરો}}</translation>
 <translation id="5545693483061321551">અલગ-અલગ સાઇટ પરની તમારી બ્રાઉઝિંગ પ્રવૃત્તિ જોવા માટે સાઇટ તમારી કુકીનો ઉપયોગ કરી શકશે નહીં, ઉદાહરણ તરીકે, જાહેરાતોને વ્યક્તિગત બનાવવા માટે. અમુક સુવિધાઓ કેટલીક સાઇટ પર કામ કરી શકશે નહીં.</translation>
@@ -5538,6 +5543,7 @@
 <translation id="6333170995003625229">તમારું ઇમેઇલ ઍડ્રેસ કે પાસવર્ડ ચકાસી શકાયો નથી. ફરીથી સાઇન ઇન કરવાનો પ્રયાસ કરો.</translation>
 <translation id="6335920438823100346">Linux શરૂ કરવા, <ph name="MANAGER" /> માટે જરૂરી છે કે તમે તમારા ડેટાનું બૅકઅપ લો અને આ Chromebookને ફેક્ટરી સેટિંગ પર રીસેટ કરો.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> દ્વારા ADB ડિબગીંગ બંધ કરાયું છે. આમ કરવાથી 24 કલાકમાં તમારું <ph name="DEVICE_TYPE" /> રીસેટ થશે. તમે રાખવા માગતા હો તેવી કોઈપણ ફાઇલોનું બૅકઅપ લો.</translation>
+<translation id="6338402296920404442"><ph name="FILENAME" />ને ડિલીટ કરવાનું વિચારો, જેથી આ ડિવાઇસનો ઉપયોગ કરનારા અન્ય લોકો તમારા પાસવર્ડ ન જોઈ શકે.</translation>
 <translation id="6338981933082930623">બધી સાઇટ તમને બધા પ્રકારની જાહેરાતો બતાવી શકે છે</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> માટે એક નવી પ્રોફાઇલ બનાવો</translation>
 <translation id="6340071272923955280">ઇન્ટરનેટ પ્રિંટિંગ પ્રોટોકોલ (IPPS)</translation>
@@ -7607,6 +7613,7 @@
 <translation id="8338952601723052325">વિકાસકર્તા વેબસાઇટ</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> એ સ્થાનિક રીતે સ્ટોર કરેલો ડેટા</translation>
 <translation id="833986336429795709">આ લિંક ખોલવા માટે, એક ઍપ પસંદ કરો</translation>
+<translation id="8340547030807793004"><ph name="DEVICE" /> માટે વધુ ક્રિયાઓ</translation>
 <translation id="8342221978608739536">પ્રયાસ કર્યો ન હતો</translation>
 <translation id="8342861492835240085">સંગ્રહ પસંદ કરો</translation>
 <translation id="8345848587667658367">હવે તમે તમારા ફોનના તાજેતરના ફોટા, મીડિયા, નોટિફિકેશન અને ઍપ જોઈ શકો છો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 11dbbee..4138bcc 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1082,6 +1082,7 @@
 <translation id="1997616988432401742">आपके प्रमाणपत्र</translation>
 <translation id="1999115740519098545">शुरुआत करने पर</translation>
 <translation id="2000419248597011803">'पता बार' और 'खोज बॉक्स' की कुछ कुकी और खोजों को आपके डिफ़ॉल्ट खोज इंजन पर भेजा जाता है</translation>
+<translation id="2001148512690747464"><ph name="PRIMARY_EMAIL" /> पर, फ़ास्ट पेयर वाला कोई भी डिवाइस सेव नहीं किया गया है</translation>
 <translation id="2002109485265116295">रीयल-टाइम</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' डेटा चालू करने के लिए, सबसे पहले किसी वाई-फ़ाई नेटवर्क से जुड़ें</translation>
 <translation id="2004697686368036666">हो सकता है कि कुछ साइटों पर खास सुविधाएं काम न करें</translation>
@@ -1346,6 +1347,7 @@
 <translation id="2241053333139545397">कई वेबसाइटों पर अपना डेटा पढ़ें और बदलें</translation>
 <translation id="2241634353105152135">बस एक बार</translation>
 <translation id="2242687258748107519">फ़ाइल जानकारी</translation>
+<translation id="2245296100676446525">अपने बुकमार्क, पासवर्ड, इतिहास वगैरह को इस डिवाइस और दूसरे डिवाइसों पर पाने के लिए, सिंक करने की सुविधा चालू करें.</translation>
 <translation id="2245603955208828424">आइटम के एक-एक अक्षर पर जाने के लिए, ऐरो वाले बटनों का इस्तेमाल करें</translation>
 <translation id="2246129643805925002">आपका <ph name="DEVICE_TYPE" /> बैकग्राउंड में अपने-आप अपडेट हो जाता है. इससे, आपको नई सुविधाएं और सुरक्षा से जुड़े अपडेट मिलते रहते हैं. सेटिंग में जाकर, अपडेट से जुड़ी प्राथमिकताओं की समीक्षा की जा सकती है.</translation>
 <translation id="2246549592927364792">क्या Google से इमेज की जानकारी चाहते हैं?</translation>
@@ -1790,6 +1792,7 @@
 <translation id="2642111877055905627">सॉकर बॉल</translation>
 <translation id="2643698698624765890">विंडो मेन्यू में एक्सटेंशन पर क्लिक करके अपने एक्सटेंशन प्रबंधित करें.</translation>
 <translation id="2645047101481282803">आपके डिवाइस को <ph name="PROFILE_NAME" /> मैनेज करता है</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{इस डिवाइस पर 1 पासवर्ड इंपोर्ट किया गया}one{इस डिवाइस पर {NUM_PASSWORDS} पासवर्ड इंपोर्ट किया गया}other{इस डिवाइस पर {NUM_PASSWORDS} पासवर्ड इंपोर्ट किए गए}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">Base64 में एन्कोड किया गया ASCII प्रमाणपत्र चेन</translation>
 <translation id="2652129567809778422">पासवर्ड चुनें</translation>
@@ -2967,6 +2970,7 @@
 <translation id="3789841737615482174">इंस्‍टॉल करें</translation>
 <translation id="3790417903123637354">कोई गड़बड़ी हुई. बाद में कोशिश करें</translation>
 <translation id="379082410132524484">आपके कार्ड की समय-सीमा खत्म हो गई है</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> एक्सटेंशन</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome को आपके कंप्यूटर पर, नुकसान पहुंचाने वाला कोई सॉफ़्टवेयर नहीं मिला • 1 दिन पहले जांच की गई}one{Chrome को आपके कंप्यूटर पर, नुकसान पहुंचाने वाला कोई सॉफ़्टवेयर नहीं मिला • {NUM_DAYS} दिन पहले जांच की गई}other{Chrome को आपके कंप्यूटर पर, नुकसान पहुंचाने वाला कोई सॉफ़्टवेयर नहीं मिला • {NUM_DAYS} दिन पहले जांच की गई}}</translation>
 <translation id="379500251094592809">आस-पास शेयर करने की सुविधा का इस्तेमाल करने के लिए, पक्का करें कि दोनों डिवाइस को अनलॉक किया गया हो और ये एक-दूसरे के पास रखे हों. साथ ही, उन पर ब्लूटूथ चालू हो. अगर आप किसी ऐसे Chromebook के साथ फ़ाइलें शेयर कर रहे हैं जो आपके संपर्क में नहीं है, तो पक्का करें कि उसमें 'आस-पास के डिवाइस को दिखे' सुविधा चालू हो (समय चुनकर, स्टेटस एरिया खोलें और फिर 'आस-पास के डिवाइस को दिखे' सुविधा चालू करें). <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">बंद है</translation>
@@ -4753,6 +4757,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" /> की कुकी ब्लॉक की गई हैं</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> से कनेक्ट हो रहा है</translation>
 <translation id="5543983818738093899">स्थिति की जाँच की जा रही है...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_COUNT" /> में से <ph name="DEVICE_INDEX" /> डिवाइस, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">बनाने वाला</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{टैब को ग्रुप में शामिल करें}one{टैब को ग्रुप में शामिल करें}other{टैब को ग्रुप में शामिल करें}}</translation>
 <translation id="5545693483061321551">अलग-अलग साइटों पर की गई आपकी ब्राउज़िंग गतिविधि देखने के लिए साइटें कुकी का इस्तेमाल नहीं कर सकतीं. जैसे, लोगों के हिसाब से विज्ञापन दिखाने के लिए. हो सकता है कि कुछ साइटों पर खास सुविधाएं काम न करें.</translation>
@@ -5554,6 +5559,7 @@
 <translation id="6333170995003625229">आपके ईमेल पते या पासवर्ड की पुष्टि नहीं की जा सकी. फिर से साइन इन करने की कोशिश करें.</translation>
 <translation id="6335920438823100346">Linux शुरू करने के लिए, <ph name="MANAGER" /> के लिए यह ज़रूरी है कि आप अपने डेटा का बैक अप ले लें. साथ ही, इस Chromebook को फ़ैक्ट्री सेटिंग पर रीसेट कर लें.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> ने ADB को डीबग करने की सुविधा बंद कर दी है. इससे आपका <ph name="DEVICE_TYPE" />, 24 घंटे में रीसेट हो जाएगा. आप जिन फ़ाइलों को सेव रखना चाहते हैं उनका बैक अप लें.</translation>
+<translation id="6338402296920404442"><ph name="FILENAME" /> को मिटाएं, ताकि इस डिवाइस का इस्तेमाल करने वाले दूसरे लोग आपके पासवर्ड न देख सकें.</translation>
 <translation id="6338981933082930623">सभी साइटें आपको कोई भी विज्ञापन दिखा सकती हैं</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> के लिए एक नया प्रोफ़ाइल बनाएं</translation>
 <translation id="6340071272923955280">इंटरनेट प्रिंटिंग प्रोटोकॉल (IPPS)</translation>
@@ -7628,6 +7634,7 @@
 <translation id="8338952601723052325">डेवलपर वेबसाइट</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> स्थानीय रूप से संग्रहित डेटा</translation>
 <translation id="833986336429795709">यह लिंक खोलने के लिए कोई ऐप्लिकेशन चुनें</translation>
+<translation id="8340547030807793004"><ph name="DEVICE" /> से जुड़ी और कार्रवाइयां</translation>
 <translation id="8342221978608739536">कोशिश नहीं की गई</translation>
 <translation id="8342861492835240085">कोई संग्रह चुनें</translation>
 <translation id="8345848587667658367">अब आपके पास अपने फ़ोन में मौजूद हाल की फ़ोटो, मीडिया, सूचनाएं, और ऐप्लिकेशन देखने का विकल्प है</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index a3644e14..a47ae53 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -4227,7 +4227,6 @@
 <translation id="5026874946691314267">Ne prikazuj to ponovo</translation>
 <translation id="5027550639139316293">Certifikat e-pošte</translation>
 <translation id="5027562294707732951">Dodaj proširenje</translation>
-<translation id="5028202297152853903">Uređaj <ph name="DEVICE" /> uklonit će se s e-adrese <ph name="PRIMARY_EMAIL" /> i raspariti s ovim Chromebookom.</translation>
 <translation id="5029568752722684782">Izbriši kopiju</translation>
 <translation id="5029873138381728058">Provjera VM-ova nije uspjela</translation>
 <translation id="503155457707535043">Preuzimanje aplikacija</translation>
@@ -6503,7 +6502,6 @@
 <translation id="7280877790564589615">Traženje dopuštenja</translation>
 <translation id="7282547042039404307">Glatko</translation>
 <translation id="7282992757463864530">Infotraka</translation>
-<translation id="728334460283296316">Uklanjanje uređaja</translation>
 <translation id="7283555985781738399">Način rada za goste</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Uređaj će biti spremljen jedan dan te se sljedeći put možete povezati bez koda. To postavlja vaš administrator.}one{Uređaj će biti spremljen {DAYS} dan te se sljedeći put možete povezati bez koda. To postavlja vaš administrator.}few{Uređaj će biti spremljen {DAYS} dana te se sljedeći put možete povezati bez koda. To postavlja vaš administrator.}other{Uređaj će biti spremljen {DAYS} dana te se sljedeći put možete povezati bez koda. To postavlja vaš administrator.}}</translation>
 <translation id="7284411326658527427">Svaka osoba može prilagoditi svoj račun i zadržati privatnost svojih podataka.</translation>
@@ -7799,8 +7797,6 @@
 <translation id="8531701051932785007">Isključeno je poboljšano sigurno pregledavanje</translation>
 <translation id="8534656636775144800">Ups! Došlo je do pogreške pri pokušaju pridruživanja domeni. Pokušajte ponovo.</translation>
 <translation id="8535005006684281994">URL za obnavljanje Netscape certifikata</translation>
-<translation id="8536565869707961418">Uklonite uređaj <ph name="DEVICE" /> s e-adrese <ph name="PRIMARY_EMAIL" />.
-    Uređaj se i dalje može lokalno upotrebljavati.</translation>
 <translation id="8536713137312218707">Brze naredbe</translation>
 <translation id="8536956381488731905">Zvuk pritiska tipke</translation>
 <translation id="8539727552378197395">Ne (samo http)</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index c9ed98d..9d5438b 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -4237,7 +4237,6 @@
 <translation id="5026874946691314267">Ez ne jelenjen meg többé</translation>
 <translation id="5027550639139316293">E-mail tanúsítvány</translation>
 <translation id="5027562294707732951">Bővítmény hozzáadása</translation>
-<translation id="5028202297152853903">A(z) <ph name="DEVICE" /> el lesz távolítva a(z) <ph name="PRIMARY_EMAIL" /> fiókból, és megszakad a Chromebookkal való párosítása.</translation>
 <translation id="5029568752722684782">Példány törlése</translation>
 <translation id="5029873138381728058">Nem sikerült a VM-ek ellenőrzése</translation>
 <translation id="503155457707535043">Alkalmazások letöltése folyamatban</translation>
@@ -6514,7 +6513,6 @@
 <translation id="7280877790564589615">Engedély kérelmezve</translation>
 <translation id="7282547042039404307">Folyamatos</translation>
 <translation id="7282992757463864530">Információs sáv</translation>
-<translation id="728334460283296316">Eszköz eltávolítása</translation>
 <translation id="7283555985781738399">Vendég mód</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Az eszközt a rendszer egy napig menti el, Ön pedig legközelebb kód nélkül csatlakozhat. Ezt a rendszergazda állítja be.}other{Az eszközt a rendszer {DAYS} napig menti el, Ön pedig legközelebb kód nélkül csatlakozhat. Ezt a rendszergazda állítja be.}}</translation>
 <translation id="7284411326658527427">Bárki személyre szabhatja a saját fiókját, és gondoskodhat adatainak biztonságáról.</translation>
@@ -7810,8 +7808,6 @@
 <translation id="8531701051932785007">A „Biztonságos Böngészés fokozott védelemmel” funkció ki van kapcsolva.</translation>
 <translation id="8534656636775144800">Hoppá! Hiba történt a domainhez való csatlakozás közben. Próbálja újra.</translation>
 <translation id="8535005006684281994">Netscape tanúsítvány - megújítási URL</translation>
-<translation id="8536565869707961418">A következő eltávolítása a(z) <ph name="PRIMARY_EMAIL" /> fiókból: <ph name="DEVICE" />.
-    Az eszköz továbbra is használható a helyszínen.</translation>
 <translation id="8536713137312218707">Gyorsparancsok</translation>
 <translation id="8536956381488731905">Hangjelzés gombnyomásra</translation>
 <translation id="8539727552378197395">Nem (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 769b84d9..8174bfac 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -4239,7 +4239,6 @@
 <translation id="5026874946691314267">Jangan tampilkan pemberitahuan ini lagi</translation>
 <translation id="5027550639139316293">Sertifikat Email</translation>
 <translation id="5027562294707732951">Tambahkan ekstensi</translation>
-<translation id="5028202297152853903"><ph name="DEVICE" /> akan dihapus dari <ph name="PRIMARY_EMAIL" /> dan dilepas sambungannya dengan Chromebook ini.</translation>
 <translation id="5029568752722684782">Hapus salinan</translation>
 <translation id="5029873138381728058">Gagal memeriksa VM</translation>
 <translation id="503155457707535043">Aplikasi sedang didownload</translation>
@@ -6514,7 +6513,6 @@
 <translation id="7280877790564589615">Izin diminta</translation>
 <translation id="7282547042039404307">Halus</translation>
 <translation id="7282992757463864530">Infobar</translation>
-<translation id="728334460283296316">Hapus perangkat</translation>
 <translation id="7283555985781738399">Mode tamu</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Perangkat ini akan disimpan selama 1 hari dan Anda dapat terhubung pada waktu berikutnya tanpa kode. Ini disetel oleh administrator Anda.}other{Perangkat ini akan disimpan selama {DAYS} hari dan Anda dapat terhubung pada waktu berikutnya tanpa kode. Ini disetel oleh administrator Anda.}}</translation>
 <translation id="7284411326658527427">Setiap pengguna dapat mempersonalisasi akunnya dan menjaga privasi datanya.</translation>
@@ -7811,8 +7809,6 @@
 <translation id="8531701051932785007">Safe Browsing yang Disempurnakan nonaktif</translation>
 <translation id="8534656636775144800">Maaf.  Terjadi masalah saat mencoba bergabung dengan domain. Harap coba lagi.</translation>
 <translation id="8535005006684281994">Netscape Certificate Renewal URL</translation>
-<translation id="8536565869707961418">Menghapus <ph name="DEVICE" /> dari <ph name="PRIMARY_EMAIL" />.
-    Perangkat masih dapat digunakan secara lokal.</translation>
 <translation id="8536713137312218707">Perintah Cepat</translation>
 <translation id="8536956381488731905">Suara saat tombol ditekan</translation>
 <translation id="8539727552378197395">Tidak (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 0a7a0e4..763e05cc 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -4224,7 +4224,6 @@
 <translation id="5026874946691314267">Non visualizzare più</translation>
 <translation id="5027550639139316293">Certificato email</translation>
 <translation id="5027562294707732951">Aggiungi estensione</translation>
-<translation id="5028202297152853903">Il dispositivo <ph name="DEVICE" /> verrà rimosso da <ph name="PRIMARY_EMAIL" /> e non sarà associato a questo Chromebook.</translation>
 <translation id="5029568752722684782">Cancella copia</translation>
 <translation id="5029873138381728058">Impossibile controllare le VM</translation>
 <translation id="503155457707535043">Download delle app in corso</translation>
@@ -6496,7 +6495,6 @@
 <translation id="7280877790564589615">Richiesta di autorizzazione</translation>
 <translation id="7282547042039404307">Fluido</translation>
 <translation id="7282992757463864530">Barra delle informazioni</translation>
-<translation id="728334460283296316">Rimuovi dispositivo</translation>
 <translation id="7283555985781738399">Modalità ospite</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Questo dispositivo verrà salvato per 1 giorno e la prossima volta potrai connetterti senza un codice. Questa impostazione è stata configurata dal tuo amministratore.}other{Questo dispositivo verrà salvato per {DAYS} giorni e la prossima volta potrai connetterti senza un codice. Questa impostazione è stata configurata dal tuo amministratore.}}</translation>
 <translation id="7284411326658527427">Ogni persona potrà personalizzare il proprio account e mantenere privati i dati.</translation>
@@ -7793,8 +7791,6 @@
 <translation id="8531701051932785007">Navigazione sicura avanzata è disattivata</translation>
 <translation id="8534656636775144800">Spiacenti. Si è verificato un problema durante il tentativo di aggiunta al dominio. Riprova.</translation>
 <translation id="8535005006684281994">URL di rinnovo certificato Netscape</translation>
-<translation id="8536565869707961418">Vuoi rimuovere <ph name="DEVICE" /> da <ph name="PRIMARY_EMAIL" />?
-    Il dispositivo può ancora essere utilizzato localmente.</translation>
 <translation id="8536713137312218707">Comandi rapidi</translation>
 <translation id="8536956381488731905">Suono tasti</translation>
 <translation id="8539727552378197395">No (solo Http)</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index dbd4238..a30ba88 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -3492,7 +3492,7 @@
 <translation id="431076611119798497">詳細(&amp;D)</translation>
 <translation id="4312701113286993760">{COUNT,plural, =1{1 件の Google アカウント}other{<ph name="EXTRA_ACCOUNTS" /> 件の Google アカウント}}</translation>
 <translation id="4312866146174492540">ブロック(デフォルト)</translation>
-<translation id="4314497418046265427">スマートフォンと <ph name="DEVICE_TYPE" /> を接続すると、生産性が向上します</translation>
+<translation id="4314497418046265427">スマートフォンと <ph name="DEVICE_TYPE" /> をリンクすれば、生産性が向上します</translation>
 <translation id="4314815835985389558">同期を管理</translation>
 <translation id="4315933848520197627">アカウントのリンク解除</translation>
 <translation id="4316850752623536204">デベロッパーのウェブサイト</translation>
@@ -3934,7 +3934,7 @@
 <translation id="474609389162964566">「OK Google」と話しかけてアシスタントにアクセス</translation>
 <translation id="4746351372139058112">メッセージ</translation>
 <translation id="4748783296226936791">一般的ではないキーボードや、ゲーム コントローラなどのデバイスを使用する機能に対応するために、多くのサイトは HID デバイスに接続します</translation>
-<translation id="4750185073185658673">スマートフォンでいくつかのアクセス許可を確認してください。スマートフォンの Bluetooth と Wi-Fi がオンになっていることをご確認ください。</translation>
+<translation id="4750185073185658673">スマートフォンでアクセス許可の設定を見直し、スマートフォンの Bluetooth と Wi-Fi がオンになっていることをご確認ください。</translation>
 <translation id="4750394297954878236">候補</translation>
 <translation id="475088594373173692">最初のユーザー</translation>
 <translation id="4756378406049221019">停止 / 再読み込み</translation>
@@ -7270,7 +7270,7 @@
 <translation id="8037357227543935929">確認(デフォルト)</translation>
 <translation id="803771048473350947">ファイル</translation>
 <translation id="8041089156583427627">フィードバックを送信</translation>
-<translation id="8041267120753677077">スマートフォンのアプリのストリーミング</translation>
+<translation id="8041267120753677077">スマートフォンのアプリをストリーミングします</translation>
 <translation id="8042142357103597104">テキストの透明度</translation>
 <translation id="8042331986490021244">Google パスワード マネージャーに保存する前にデバイス上でパスワードを暗号化します</translation>
 <translation id="8044262338717486897"><ph name="LINUX_APP_NAME" /> から応答がありません。</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index 53e93939..0be9004 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -1066,6 +1066,7 @@
 <translation id="1997616988432401742">Сертификаттарыңыз</translation>
 <translation id="1999115740519098545">Іске қосу кезінде</translation>
 <translation id="2000419248597011803">Мекенжай жолағына және іздеу өрісіне енгізілген сұрауларды, сонымен қатар кейбір cookie файлдарын әдепкі іздеу жүйесіне жібереді</translation>
+<translation id="2001148512690747464"><ph name="PRIMARY_EMAIL" /> электрондық поштасына сақталған Fast Pair құрылғысы жоқ.</translation>
 <translation id="2002109485265116295">Нақты уақыт</translation>
 <translation id="2003130567827682533">"<ph name="NAME" />" деректерін іске қосу үшін алдымен Wi-Fi желісіне жалғаныңыз.</translation>
 <translation id="2004697686368036666">Кейбір сайттың функциялары жұмыс істемеуі мүмкін.</translation>
@@ -1330,6 +1331,7 @@
 <translation id="2241053333139545397">Бірнеше сайттағы деректеріңізді оқу және өзгерту</translation>
 <translation id="2241634353105152135">Бір-ақ рет</translation>
 <translation id="2242687258748107519">Файл ақпараты</translation>
+<translation id="2245296100676446525">Осы құрылғыдағы және синхрондалатын барлық жердегі бетбелгілерді, құпия сөздерді, тарихты және басқа да мәліметтерді алу үшін синхрондауды қосыңыз.</translation>
 <translation id="2245603955208828424">Элементтер арасында әріптеп жылжу үшін бағыт пернелерін пайдаланыңыз.</translation>
 <translation id="2246129643805925002">Сізге соңғы функцияларды ұсыну және қауіпсіздікті жақсарту үшін <ph name="DEVICE_TYPE" /> құрылғысы фондық режимде автоматты түрде жаңартылады. Жаңарту параметрлерін "Параметрлер" бөлімінен қарауға болады.</translation>
 <translation id="2246549592927364792">Google-дан кескін сипаттамаларын алу керек пе?</translation>
@@ -1771,6 +1773,7 @@
 <translation id="2642111877055905627">Футбол добы</translation>
 <translation id="2643698698624765890">Кеңейтімдерді реттеу үшін "Терезе" мәзіріндегі "Кеңейтімдер" опциясын басыңыз.</translation>
 <translation id="2645047101481282803">Құрылғыңызды <ph name="PROFILE_NAME" /> басқарады.</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 құпия сөз осы құрылғыға импортталды.}other{{NUM_PASSWORDS} құпия сөз осы құрылғыға импортталды.}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">Base64 арқылы шифрланған ASCII, сертификаттар тізбегі</translation>
 <translation id="2652129567809778422">Құпия сөз таңдау</translation>
@@ -2948,6 +2951,7 @@
 <translation id="3789841737615482174">Орнату</translation>
 <translation id="3790417903123637354">Бірдеңе дұрыс болмады. Кейінірек қайталап көріңіз</translation>
 <translation id="379082410132524484">Картаңыздың мерзімі біткен</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> кеңейтім</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome браузері компьютеріңізден ешқандай зиянды бағдарламалық құрал таппады. • 1 күн бұрын тексерілді.}other{Chrome браузері компьютеріңізден ешқандай зиянды бағдарламалық құрал таппады. • {NUM_DAYS} күн бұрын тексерілді.}}</translation>
 <translation id="379500251094592809">Nearby Share функциясын пайдалану үшін екі құрылғының да құлпы ашық, бір-біріне жақын және Bluetooth функциялары қосулы екеніне көз жеткізіңіз. Егер контактілеріңізде жоқ Chromebook құрылғысымен бөлісетін болсаңыз, Nearby көрсетілуі қосулы екеніне көз жеткізіңіз (ол үшін уақытты таңдау арқылы күй аумағын ашып, Nearby көрсетілуі функциясын қосыңыз). <ph name="LINK_BEGIN" />Толығырақ<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Өшірулі</translation>
@@ -4734,6 +4738,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" /> cookie файлдары бөгелді</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> операторына қосылуда</translation>
 <translation id="5543983818738093899">Күйі тексерілуде…</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" /> құрылғы, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Рендеринг құралы</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Топқа қойынды қосу}other{Топқа қойындылар қосу}}</translation>
 <translation id="5545693483061321551">Сайттар браузерді қолдану мәліметін көру (мысалы, жарнамаларды жекелендіру) үшін cookie файлдарын пайдалана алмайды. Кейбір сайттың функциялары жұмыс істемеуі мүмкін.</translation>
@@ -5532,6 +5537,7 @@
 <translation id="6333170995003625229">Электрондық мекенжайыңыз не құпия сөзіңіз расталмады. Қайта кіріп көріңіз.</translation>
 <translation id="6335920438823100346">Linux жүйесін іске қосу үшін <ph name="MANAGER" /> деректердің сақтық көшірмесін жасауды және Chromebook құрылғысын зауыттық параметрлерге қайтаруды талап етеді.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> сайты ADB түзетуін өшірді. <ph name="DEVICE_TYPE" /> құрылғыңыз 24 сағаттан кейін бастапқы күйіне қайтарылады. Қалдырғыңыз келетін файлдардың сақтық көшірмесін жасаңыз.</translation>
+<translation id="6338402296920404442"><ph name="FILENAME" /> файлын жойып көріңіз, мұндайда осы құрылғыны пайдаланатын басқа адамдар құпия сөздеріңізді көре алмайды.</translation>
 <translation id="6338981933082930623">Сайттардың барлығы сізге кез келген жарнаманы көрсете алады.</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> үшін жаңа профиль жасау</translation>
 <translation id="6340071272923955280">Internet Printing Protocol (IPPS)</translation>
@@ -7603,6 +7609,7 @@
 <translation id="8338952601723052325">Әзірлеуші веб-сайты</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> сайтының жергілікті сақталған деректері</translation>
 <translation id="833986336429795709">Бұл сілтемені ашу үшін қолданбаны таңдаңыз</translation>
+<translation id="8340547030807793004"><ph name="DEVICE" /> құрылғысына қатысты басқа әрекеттер</translation>
 <translation id="8342221978608739536">Қолданып көрмедім</translation>
 <translation id="8342861492835240085">Жинақ таңдау</translation>
 <translation id="8345848587667658367">Енді телефондағы соңғы фотосуреттерді, медиафайлдарды, хабарландырулар мен қолданбаларды көре аласыз</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index 9833603..a4e1c9b5ea 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -1345,6 +1345,7 @@
 <translation id="2241053333139545397">អាន និងប្តូរទិន្នន័យរបស់អ្នកនៅលើគេហទំព័រមួយចំនួន</translation>
 <translation id="2241634353105152135">ម្តងប៉ុណ្ណោះ</translation>
 <translation id="2242687258748107519">ព័ត៌មានឯកសារ</translation>
+<translation id="2245296100676446525">បើក​ការធ្វើសមកាលកម្ម ដើម្បីទទួលបាន​ចំណាំ ពាក្យសម្ងាត់ ប្រវត្តិ និង​អ្វីៗជាច្រើនទៀត​របស់អ្នក​នៅលើ​ឧបករណ៍​នេះ និង​កន្លែងណាមួយ​ផ្សេងទៀត​ដែល​អ្នក​កំពុងធ្វើសមកាលកម្ម។</translation>
 <translation id="2245603955208828424">ប្រើប្រាស់​គ្រាប់ចុច​ព្រួញ ដើម្បីផ្លាស់ទី​កាត់​ធាតុ​មួយ​អក្សរ​ម្ដងៗ</translation>
 <translation id="2246129643805925002">ការដំឡើងកំណែ <ph name="DEVICE_TYPE" /> របស់អ្នក​ដោយស្វ័យប្រវត្តិ​នៅផ្ទៃខាងក្រោយ​ផ្ដល់ការកែលម្អសុវត្ថិភាព និង​មុខងារ​ចុងក្រោយបំផុត​ដល់អ្នក។ អ្នកអាច​មើលចំណូលចិត្ត​នៃការដំឡើងកំណែ​បាននៅក្នុង​ការកំណត់។</translation>
 <translation id="2246549592927364792">ទាញយក​ការពណ៌នា​រូបភាពពី Google?</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 5e9afe6..aa9a10e 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -1074,6 +1074,7 @@
 <translation id="1997616988432401742">ನಿಮ್ಮ ಪ್ರಮಾಣಪತ್ರಗಳು</translation>
 <translation id="1999115740519098545">ಸ್ಟಾರ್ಟ್‌ಅಪ್‌ನಲ್ಲಿ</translation>
 <translation id="2000419248597011803">ಕೆಲವು ಕುಕೀಗಳನ್ನು ಹಾಗೂ ವಿಳಾಸ ಪಟ್ಟಿ ಮತ್ತು ಹುಡುಕಾಟ ಬಾಕ್ಸ್‌ನಿಂದ ಹುಡುಕಾಟಗಳನ್ನು, ನಿಮ್ಮ ಡಿಫಾಲ್ಟ್ ಹುಡುಕಾಟದ ಎಂಜಿನ್‌ಗೆ ಕಳುಹಿಸುತ್ತದೆ</translation>
+<translation id="2001148512690747464"><ph name="PRIMARY_EMAIL" /> ಗೆ ಯಾವುದೇ ಶೀಘ್ರ ಜೋಡಿಗೊಳಿಸುವಿಕೆ ಸಾಧನಗಳನ್ನು ಉಳಿಸಲಾಗಿಲ್ಲ</translation>
 <translation id="2002109485265116295">ನೈಜ ಸಮಯ</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' ಡೇಟಾವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು, ಮೊದಲು ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ</translation>
 <translation id="2004697686368036666">ಫೀಚರ್‌ಗಳು ಕೆಲವು ಸೈಟ್‌ಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೇ ಇರಬಹುದು</translation>
@@ -1338,6 +1339,7 @@
 <translation id="2241053333139545397">ಹಲವಾರು ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಓದಿ ಮತ್ತು ಬದಲಾಯಿಸಿ</translation>
 <translation id="2241634353105152135">ಕೇವಲ ಒಂದು ಬಾರಿ</translation>
 <translation id="2242687258748107519">ಫೈಲ್ ಮಾಹಿತಿ</translation>
+<translation id="2245296100676446525">ಈ ಸಾಧನದಲ್ಲಿ ಮತ್ತು ನೀವು ಸಿಂಕ್ ಮಾಡುತ್ತಿರುವ ಬೇರೆಲ್ಲಿಯಾದರೂ ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಇತಿಹಾಸ ಮತ್ತು ಹೆಚ್ಚಿನದನ್ನು ಪಡೆಯಲು ಸಿಂಕ್ ಅನ್ನು ಆನ್ ಮಾಡಿ.</translation>
 <translation id="2245603955208828424">ಐಟಂಗಳನ್ನು ಅಕ್ಷರದ ಮೂಲಕ ಸರಿಸಲು ಬಾಣದ ಕೀಲಿಗಳನ್ನು ಬಳಸಿ</translation>
 <translation id="2246129643805925002">ನಿಮಗೆ ಇತ್ತೀಚಿನ ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಭದ್ರತಾ ಸುಧಾರಣೆಗಳನ್ನು ನೀಡಲು, ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅಪ್‌ಡೇಟ್ ಆಗುತ್ತದೆ. ನೀವು ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಆದ್ಯತೆಗಳನ್ನು ಪರಿಶೀಲಿಸಬಹುದು.</translation>
 <translation id="2246549592927364792">Google ನಿಂದ ಚಿತ್ರದ ವಿವರಣೆಗಳನ್ನು ಪಡೆಯುವುದೇ?</translation>
@@ -1782,6 +1784,7 @@
 <translation id="2642111877055905627">ಸಾಕರ್ ಚೆಂಡು</translation>
 <translation id="2643698698624765890">ವಿಂಡೋ ಮೆನುವಿನಲ್ಲಿರುವ ‘ವಿಸ್ತರಣೆಗಳು’ ಅನ್ನು ಕ್ಲಿಕ್‌ ಮಾಡುವ ಮೂಲಕ ನಿಮ್ಮ ವಿಸ್ತರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ.</translation>
 <translation id="2645047101481282803">ನಿಮ್ಮ ಸಾಧನವನ್ನು <ph name="PROFILE_NAME" /> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{ಈ ಸಾಧನಕ್ಕೆ 1 ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಆಮದು ಮಾಡಲಾಗಿದೆ}one{ಈ ಸಾಧನಕ್ಕೆ {NUM_PASSWORDS} ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಆಮದು ಮಾಡಿಕೊಳ್ಳಲಾಗಿದೆ}other{ಈ ಸಾಧನಕ್ಕೆ {NUM_PASSWORDS} ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಆಮದು ಮಾಡಿಕೊಳ್ಳಲಾಗಿದೆ}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">Base64-ಎನ್‌ಕೋಡ್ ಮಾಡಿದ ASCII, ಪ್ರಮಾಣಪತ್ರ ಸರಣಿ</translation>
 <translation id="2652129567809778422">ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
@@ -2960,6 +2963,7 @@
 <translation id="3789841737615482174">ಇನ್‌ಸ್ಟಾಲ್</translation>
 <translation id="3790417903123637354">ಏನೋ ತಪ್ಪಾಗಿದೆ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="379082410132524484">ನಿಮ್ಮ ಕಾರ್ಡ್‌ ಅವಧಿ ಮುಗಿದಿದೆ</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> ವಿಸ್ತರಣೆಗಳು</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ • 1 ದಿನದ ಹಿಂದೆ ಪರಿಶೀಲಿಸಲಾಗಿದೆ}one{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ • {NUM_DAYS} ದಿನಗಳ ಹಿಂದೆ ಪರಿಶೀಲಿಸಲಾಗಿದೆ}other{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ • {NUM_DAYS} ದಿನಗಳ ಹಿಂದೆ ಪರಿಶೀಲಿಸಲಾಗಿದೆ}}</translation>
 <translation id="379500251094592809">Nearby ಶೇರ್ ಅನ್ನು ಬಳಸಲು, ಎರಡೂ ಸಾಧನಗಳು ಅನ್‌ಲಾಕ್ ಆಗಿವೆ, ಪರಸ್ಪರ ಹತ್ತಿರದಲ್ಲಿವೆ ಹಾಗೂ ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ನಿಮ್ಮ ಸಂಪರ್ಕಗಳಲ್ಲಿರದ Chromebook ಜೊತೆಗೆ ನೀವು ಹಂಚಿಕೊಳ್ಳುತ್ತಿದ್ದರೆ, ಅದು ಸಮೀಪದ ಗೋಚರತೆಯನ್ನು ಆನ್ ಮಾಡಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ (ಸಮಯವನ್ನು ಆಯ್ಕೆಮಾಡುವ ಮೂಲಕ ಸ್ಥಿತಿ ಕ್ಷೇತ್ರವನ್ನು ತೆರೆಯಿರಿ, ನಂತರ ಸಮೀಪದ ಗೋಚರತೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ) <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">ಆಫ್ ಆಗಿದೆ</translation>
@@ -4747,6 +4751,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" /> ನ ಕುಕೀಸ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> ಗೆ ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="5543983818738093899">ಸ್ಥಿತಿಯನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_COUNT" /> ರಲ್ಲಿ <ph name="DEVICE_INDEX" />ಸಾಧನ, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">ರೆಂಡರರ್</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{ಗುಂಪಿಗೆ ಟ್ಯಾಬ್ ಸೇರಿಸಿ}one{ಗುಂಪಿಗೆ ಟ್ಯಾಬ್‌ಗಳನ್ನು ಸೇರಿಸಿ}other{ಗುಂಪಿಗೆ ಟ್ಯಾಬ್‌ಗಳನ್ನು ಸೇರಿಸಿ}}</translation>
 <translation id="5545693483061321551">ವಿವಿಧ ಸೈಟ್‌ಗಳಾದ್ಯಂತ ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು, ಉದಾಹರಣೆಗೆ ಜಾಹೀರಾತುಗಳನ್ನು ವೈಯಕ್ತೀಕರಿಸುವುದಕ್ಕಾಗಿ, ನಿಮ್ಮ ಕುಕೀಗಳನ್ನು ಬಳಸಲು ಸೈಟ್‌ಗಳಿಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಫೀಚರ್‌ಗಳು ಕೆಲವು ಸೈಟ್‌ಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೇ ಇರಬಹುದು.</translation>
@@ -5549,6 +5554,7 @@
 <translation id="6333170995003625229">ನಿಮ್ಮ ಇಮೇಲ್ ವಿಳಾಸ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗಲಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="6335920438823100346">Linux ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು, ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡುವುದು ಮತ್ತು ಈ Chromebook ಅನ್ನು ಫ್ಯಾಕ್ಟರಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ರಿಸೆಟ್ ಮಾಡುವುದನ್ನು <ph name="MANAGER" /> ಬಯಸುತ್ತದೆ.</translation>
 <translation id="6336038146639916978">ADB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು <ph name="MANAGER" /> ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದೆ. ಇದು ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು 24 ಗಂಟೆಗಳಲ್ಲಿ ಮರುಹೊಂದಿಸುತ್ತದೆ. ನೀವು ಇರಿಸಿಕೊಳ್ಳಲು ಬಯಸುವ ಯಾವುದೇ ಫೈಲ್‌ಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಿ.</translation>
+<translation id="6338402296920404442"><ph name="FILENAME" /> ಅನ್ನು ಅಳಿಸಲು ಪರಿಗಣಿಸಿ, ಆದ್ದರಿಂದ ಈ ಸಾಧನವನ್ನು ಬಳಸುವ ಇತರರು ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ನೋಡಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="6338981933082930623">ಎಲ್ಲಾ ಸೈಟ್‌ಗಳು ನಿಮಗೆ ಯಾವುದಾದರೂ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸಬಹುದು</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> ಗೆ ಹೊಸ ಪ್ರೊಫೈಲ್ ಅನ್ನು ರಚಿಸಿ</translation>
 <translation id="6340071272923955280">ಇಂಟರ್ನೆಟ್ ಮುದ್ರಿಸುವಿಕೆಯ ಪ್ರೊಟೊಕಾಲ್ (IPPS)</translation>
@@ -7621,6 +7627,7 @@
 <translation id="8338952601723052325">ಡೆವಲಪರ್ ವೆಬ್‌ಸೈಟ್</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> ಸ್ಥಳೀಯವಾಗಿ ಸಂಗ್ರಹಿಸಲಾದ ಡೇಟಾ</translation>
 <translation id="833986336429795709">ಈ ಲಿಂಕ್ ತೆರೆಯಲು, ಅಪ್ಲಿಕೇಶನ್ ಆಯ್ಕೆ ಮಾಡಿ</translation>
+<translation id="8340547030807793004"><ph name="DEVICE" /> ಗಾಗಿ ಇನ್ನಷ್ಟು ಕ್ರಿಯೆಗಳು</translation>
 <translation id="8342221978608739536">ಪ್ರಯತ್ನಿಸಿಲ್ಲ</translation>
 <translation id="8342861492835240085">ಸಂಗ್ರಹವನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="8345848587667658367">ನೀವು ಈಗ ನಿಮ್ಮ ಫೋನ್‌ನ ಇತ್ತೀಚಿನ ಫೋಟೋಗಳು, ಮೀಡಿಯಾ, ಅಧಿಸೂಚನೆಗಳು ಮತ್ತು ಆ್ಯಪ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಬಹುದು</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index 9aa52638..d77b6e5 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -1345,6 +1345,7 @@
 <translation id="2241053333139545397">Дайын-даректериңизди бир нече вебсайттан окуңуз жана өзгөртүңүз</translation>
 <translation id="2241634353105152135">Бир гана жлу</translation>
 <translation id="2242687258748107519">Файл тууралуу маалымат</translation>
+<translation id="2245296100676446525">Кыстармаларды, сырсөздөрдү, таржымалды жана башкаларды ушул жана шайкештирилген башка түзмөктөрдө колдонуу үчүн шайкештирүүнү күйгүзүңүз.</translation>
 <translation id="2245603955208828424">Элементтеги тамгаларга өтүү үчүн жебе баскычтарын колдонуу</translation>
 <translation id="2246129643805925002"><ph name="DEVICE_TYPE" /> түзмөгүңүз фондо жаңыртылып, соңку функцияларды сунуштап, коопсуздукту жакшыртып турат. Жаңыртуу параметрлерин Тууралоолордон башкара аласыз.</translation>
 <translation id="2246549592927364792">Google'дан сүрөттөрдүн түшүндүрмөлөрү алынсынбы?</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 42033e1..84a25d9 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -1084,6 +1084,7 @@
 <translation id="1997616988432401742">Jūsų sertifikatai</translation>
 <translation id="1999115740519098545">Paleidžiant</translation>
 <translation id="2000419248597011803">Numatytajam paieškos varikliui siunčiami kai kurie slapukai ir į adreso juostą bei paieškos laukelį įvestos paieškos</translation>
+<translation id="2001148512690747464">Nėra sparčiojo susiejimo įrenginių, išsaugotų naudojant adresą <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="2002109485265116295">Realusis laikas</translation>
 <translation id="2003130567827682533">Norėdami suaktyvinti „<ph name="NAME" />“ duomenis, pirmiausia prisijunkite prie „Wi-Fi“ tinklo</translation>
 <translation id="2004697686368036666">Funkcijos gali neveikti kai kuriose svetainėse</translation>
@@ -1348,6 +1349,7 @@
 <translation id="2241053333139545397">Skaityti ir keisti duomenis keliose svetainėse</translation>
 <translation id="2241634353105152135">Tik vieną kartą</translation>
 <translation id="2242687258748107519">Failo informacija</translation>
+<translation id="2245296100676446525">Įjunkite sinchronizavimą, kad gautumėte žymes, slaptažodžius, istoriją ir kt. šiame įrenginyje ir visur, kur esate įjungę sinchronizavimą.</translation>
 <translation id="2245603955208828424">Rodyklių klavišais pereikite nuo vienos elemento raidės prie kitos</translation>
 <translation id="2246129643805925002">Jūsų „<ph name="DEVICE_TYPE" />“ atnaujinamas automatiškai fone, kad gautumėte naujausias funkcijas ir saugos patobulinimus. Atnaujinimo nuostatas galite peržiūrėti nustatymuose.</translation>
 <translation id="2246549592927364792">Gauti vaizdų aprašų iš „Google“?</translation>
@@ -1792,6 +1794,7 @@
 <translation id="2642111877055905627">Futbolo kamuolys</translation>
 <translation id="2643698698624765890">„Lango“ meniu spustelėję „Plėtiniai“, tvarkykite plėtinius.</translation>
 <translation id="2645047101481282803">Įrenginį tvarko <ph name="PROFILE_NAME" /></translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 slaptažodis importuotas į šį įrenginį}one{{NUM_PASSWORDS} slaptažodis importuotas į šį įrenginį}few{{NUM_PASSWORDS} slaptažodžiai importuoti į šį įrenginį}many{{NUM_PASSWORDS} slaptažodžio importuota į šį įrenginį}other{{NUM_PASSWORDS} slaptažodžių importuota į šį įrenginį}}</translation>
 <translation id="2645435784669275700">„Chrome“ OS</translation>
 <translation id="2649045351178520408">„Base64“ užkoduotas ASCII, sertifikato grandinė</translation>
 <translation id="2652129567809778422">Pasirinkite slaptažodį</translation>
@@ -2969,6 +2972,7 @@
 <translation id="3789841737615482174">Įdiegti</translation>
 <translation id="3790417903123637354">Įvyko klaida. Vėliau bandykite dar kartą</translation>
 <translation id="379082410132524484">Kortelės galiojimo laikas baigėsi</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> plėtin.</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{„Chrome“ kompiuteryje nerado žalingos programinės įrangos. • Tikrinta prieš 1 dieną}one{„Chrome“ kompiuteryje nerado žalingos programinės įrangos. • Tikrinta prieš {NUM_DAYS} dieną}few{„Chrome“ kompiuteryje nerado žalingos programinės įrangos. • Tikrinta prieš {NUM_DAYS} dienas}many{„Chrome“ kompiuteryje nerado žalingos programinės įrangos. • Tikrinta prieš {NUM_DAYS} dienos}other{„Chrome“ kompiuteryje nerado žalingos programinės įrangos. • Tikrinta prieš {NUM_DAYS} dienų}}</translation>
 <translation id="379500251094592809">Jei norite naudoti „Bendrinimo netoliese“ funkciją, įsitikinkite, kad abu įrenginiai yra atrakinti, vienas šalia kito ir juose įjungtas „Bluetooth“ ryšys. Bendrindami su „Chromebook“ įrenginiu, kurio nėra jūsų kontaktuose, įsitikinkite, kad jame įjungta matomumo netoliese funkcija (pasirinkdami laiką atidarykite būsenos sritį, tada įjunkite matomumo netoliese funkciją). <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Išjungta</translation>
@@ -4756,6 +4760,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" /> slapukai užblokuoti</translation>
 <translation id="5542949973455282971">Jungiamasi prie „<ph name="CARRIER_NAME" />“</translation>
 <translation id="5543983818738093899">Tikrinama būsena...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_INDEX" /> įrenginys iš <ph name="DEVICE_COUNT" />, „<ph name="DEVICE_NAME" />“</translation>
 <translation id="554517701842997186">Pateikėjas</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Pridėti skirtuką prie grupės}one{Pridėti skirtukų prie grupės}few{Pridėti skirtukų prie grupės}many{Pridėti skirtukų prie grupės}other{Pridėti skirtukų prie grupės}}</translation>
 <translation id="5545693483061321551">Svetainės negali naudoti slapukų, siekdamos sužinoti apie naršymo veiklą skirtingose svetainėse, pavyzdžiui, kad galėtų suasmeninti skelbimus. Funkcijos gali neveikti kai kuriose svetainėse.</translation>
@@ -5558,6 +5563,7 @@
 <translation id="6333170995003625229">Nepavyko patvirtinti el. pašto adreso arba slaptažodžio. Bandykite prisijungti dar kartą.</translation>
 <translation id="6335920438823100346">Kad galėtumėte paleisti „Linux“, <ph name="MANAGER" /> reikalauja sukurti atsarginę duomenų kopiją ir atkurti gamyklinius šio „Chromebook“ nustatymus.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> išjungė ADB derinimą. „<ph name="DEVICE_TYPE" />“ bus iš naujo nustatytas po 24 val. Sukurkite visų norimų išsaugoti failų atsarginę kopiją.</translation>
+<translation id="6338402296920404442">Apsvarstykite galimybę ištrinti <ph name="FILENAME" />, kad kiti šį įrenginį naudojantys asmenys negalėtų peržiūrėti jūsų slaptažodžių.</translation>
 <translation id="6338981933082930623">Visose svetainėse galima rodyti jums bet kokius skelbimus</translation>
 <translation id="6339668969738228384">Kurti naują <ph name="USER_EMAIL_ADDRESS" /> profilį</translation>
 <translation id="6340071272923955280">Spausdinimo internetu protokolas (IPPS)</translation>
@@ -7637,6 +7643,7 @@
 <translation id="8338952601723052325">Kūrėjo svetainė</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> vietinėje atmintinėje išsaugojo duomenų</translation>
 <translation id="833986336429795709">Kad atidarytumėte šią nuorodą, pasirinkite programą</translation>
+<translation id="8340547030807793004">Daugiau veiksmų (<ph name="DEVICE" />)</translation>
 <translation id="8342221978608739536">Nebandžiau</translation>
 <translation id="8342861492835240085">Pasirinkti kolekciją</translation>
 <translation id="8345848587667658367">Dabar galite peržiūrėti naujausias telefono nuotraukas, mediją, pranešimus ir programas</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index ea66f1c..ce9e8d7 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -4241,7 +4241,6 @@
 <translation id="5026874946691314267">Не покажувај го ова повторно</translation>
 <translation id="5027550639139316293">Сертификат за е-пошта</translation>
 <translation id="5027562294707732951">Инсталирај екстензија</translation>
-<translation id="5028202297152853903"><ph name="DEVICE" /> ќе се отстрани од <ph name="PRIMARY_EMAIL" /> и ќе се распари од овој Chromebook.</translation>
 <translation id="5029568752722684782">Исчисти копија</translation>
 <translation id="5029873138381728058">Не успеаја да се проверат виртуелните машини</translation>
 <translation id="503155457707535043">Апликациите се преземаат</translation>
@@ -6518,7 +6517,6 @@
 <translation id="7280877790564589615">Побарана е дозвола</translation>
 <translation id="7282547042039404307">Мазен</translation>
 <translation id="7282992757463864530">Лента со информации</translation>
-<translation id="728334460283296316">Отстранете го уредот</translation>
 <translation id="7283555985781738399">Режим на гостин</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Уредов ќе се зачува 1 ден и следниот пат ќе може да се поврзете без код. Ова е поставено од вашиот администратор.}one{Уредов ќе се зачува {DAYS} ден и следниот пат ќе може да се поврзете без код. Ова е поставено од вашиот администратор.}other{Уредов ќе се зачува {DAYS} дена и следниот пат ќе може да се поврзете без код. Ова е поставено од вашиот администратор.}}</translation>
 <translation id="7284411326658527427">Секое лице може да ја персонализира својата сметка и да ја задржи приватноста на податоците.</translation>
@@ -7817,8 +7815,6 @@
 <translation id="8531701051932785007">„Подобреното безбедно прелистување“ е вклучено</translation>
 <translation id="8534656636775144800">Упс! Нешто тргна наопаку при обидот за приклучување на доменот. Обидете се повторно.</translation>
 <translation id="8535005006684281994">URL за обновување сертификат на Netscape</translation>
-<translation id="8536565869707961418">Да се отстрани <ph name="DEVICE" /> од <ph name="PRIMARY_EMAIL" />?
-    Уредот и понатаму ќе може да се користи локално.</translation>
 <translation id="8536713137312218707">Брзи команди</translation>
 <translation id="8536956381488731905">Звук на притискање копче</translation>
 <translation id="8539727552378197395">Не (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 1d527b2..4a50b2e 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -1068,6 +1068,7 @@
 <translation id="1997616988432401742">നിങ്ങളുടെ സർട്ടിഫിക്കറ്റുകൾ</translation>
 <translation id="1999115740519098545">തുടക്കത്തില്‍</translation>
 <translation id="2000419248597011803">നിങ്ങളുടെ ഡിഫോൾട്ട് തിരയൽ എഞ്ചിനിലേക്ക് വിലാസ ബാറിൽ നിന്നും തിരയൽ ബോക്‌സിൽ നിന്നുമുള്ള തിരയലുകളും കുറച്ച് കുക്കികളും അയയ്ക്കുന്നു</translation>
+<translation id="2001148512690747464"><ph name="PRIMARY_EMAIL" /> എന്ന വിലാസത്തിലേക്ക് ഫാസ്റ്റ് പെയർ ഉപകരണങ്ങളൊന്നും സംരക്ഷിച്ചിട്ടില്ല</translation>
 <translation id="2002109485265116295">തത്സമയം</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' ഡാറ്റ സജീവമാക്കാൻ, ആദ്യം ഒരു വൈഫൈ നെറ്റ്‌വർക്കിലേക്ക് കണക്‌റ്റ് ചെയ്യുക</translation>
 <translation id="2004697686368036666">ചില സൈറ്റുകളിലെ ഫീച്ചറുകൾ പ്രവർത്തിച്ചേക്കില്ല</translation>
@@ -1332,6 +1333,7 @@
 <translation id="2241053333139545397">നിരവധി വെബ്‌സൈറ്റുകളിലെ നിങ്ങളുടെ ഡാറ്റ വായിക്കുക, മാറ്റുക</translation>
 <translation id="2241634353105152135">ഒരിക്കൽ മാത്രം</translation>
 <translation id="2242687258748107519">ഫയൽ വിവരം</translation>
+<translation id="2245296100676446525">ഈ ഉപകരണത്തിലും നിങ്ങൾ സമന്വയിപ്പിക്കുന്ന മറ്റെവിടെയും നിങ്ങളുടെ ബുക്ക്‌മാർക്കുകൾ, പാസ്‌വേഡുകൾ, ചരിത്രം എന്നിവയും മറ്റും ലഭിക്കാൻ 'സമന്വയിപ്പിക്കുക' ഓണാക്കുക.</translation>
 <translation id="2245603955208828424">ഇനത്തിലെ ഒരു അക്ഷരത്തിൽ നിന്ന് മറ്റൊന്നിലേക്ക് എന്ന ക്രമത്തിൽ നീങ്ങാൻ അമ്പടയാള കീകൾ ഉപയോഗിക്കുക</translation>
 <translation id="2246129643805925002">പുത്തൻ ഫീച്ചറുകളും സുരക്ഷാ മെച്ചപ്പെടുത്തലുകളും നിങ്ങൾക്ക് ലഭ്യമാക്കാൻ, നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> പശ്ചാത്തലത്തിൽ സ്വയമേവ അപ്ഡേറ്റ് ചെയ്യുന്നു. അപ്ഡേറ്റ് മുൻഗണനകൾ നിങ്ങൾക്ക് ക്രമീകരണത്തിൽ അവലോകനം ചെയ്യാം.</translation>
 <translation id="2246549592927364792">Google-ൽ നിന്ന് ചിത്ര വിവരണങ്ങൾ നേടണോ?</translation>
@@ -1773,6 +1775,7 @@
 <translation id="2642111877055905627">സോക്കർ ബോൾ</translation>
 <translation id="2643698698624765890">വിൻഡോ മെനുവിലെ വിപുലീകരണങ്ങളിൽ ക്ലിക്ക് ചെയ്യുന്നതിലൂടെ നിങ്ങളുടെ വിപുലീകരണങ്ങൾ നിയന്ത്രിക്കുക.</translation>
 <translation id="2645047101481282803">നിങ്ങളുടെ ഉപകരണം മാനേജ് ചെയ്യുന്നത് <ph name="PROFILE_NAME" /> ആണ്</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{ഈ ഉപകരണത്തിലേക്ക് 1 പാസ്‌വേഡ് ഇമ്പോർട്ട് ചെയ്തു}other{ഈ ഉപകരണത്തിലേക്ക് {NUM_PASSWORDS} പാസ്‌വേഡുകൾ ഇമ്പോർട്ട് ചെയ്തു}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">Base64-എന്‍‌കോഡ് ചെയ്‌ത ASCII, സര്‍‌ട്ടിഫിക്കറ്റ് ചെയിന്‍‌</translation>
 <translation id="2652129567809778422">പാസ്‌വേഡ് തിരഞ്ഞെടുക്കുക</translation>
@@ -2950,6 +2953,7 @@
 <translation id="3789841737615482174">ഇന്‍സ്റ്റാൾ ചെയ്യുക</translation>
 <translation id="3790417903123637354">എന്തോ കുഴപ്പം സംഭവിച്ചു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക</translation>
 <translation id="379082410132524484">നിങ്ങളുടെ കാർഡ്‌ കാലഹരണപ്പെട്ടു</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> വിപുലീകരണങ്ങള്‍</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ ദോഷകരമായ സോഫ്റ്റ്‌വെയർ Chrome കണ്ടെത്തിയില്ല • 1 ദിവസം മുമ്പ് പരിശോധിച്ചു}other{നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ ദോഷകരമായ സോഫ്റ്റ്‌വെയർ Chrome കണ്ടെത്തിയില്ല • {NUM_DAYS} ദിവസം മുമ്പ് പരിശോധിച്ചു}}</translation>
 <translation id="379500251094592809">സമീപമുള്ള പങ്കിടൽ ഉപയോഗിക്കാൻ, രണ്ട് ഉപകരണങ്ങളും അൺലോക്ക് ചെയ്‌തിട്ടുണ്ടെന്നും അടുത്തടുത്താണ് ഉള്ളതെന്നും Bluetooth ഓണാക്കിയിട്ടുണ്ടെന്നും ഉറപ്പാക്കുക. നിങ്ങളുടെ കോൺടാക്റ്റുകളിൽ ഇല്ലാത്ത Chromebook-മായാണ് നിങ്ങൾ പങ്കിടുന്നതെങ്കിൽ, അതിൽ സമീപമുള്ള ദൃശ്യപരത ഓണാക്കിയിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക (സമയം തിരഞ്ഞെടുത്ത് സ്റ്റാറ്റസ് ഏരിയ തുറക്കുക, തുടർന്ന് സമീപമുള്ള ദൃശ്യപരത ഓണാക്കുക) <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">ഓഫാണ്</translation>
@@ -4735,6 +4739,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" /> ഡൊമെയ്‌നിൽ നിന്നുള്ള കുക്കികളെ ബ്ലോക്ക് ചെയ്‌തു</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> എന്നതിലേക്ക് കണക്‌റ്റ് ചെയ്യുന്നു</translation>
 <translation id="5543983818738093899">സ്‌റ്റാറ്റസിനായി പരിശോധിക്കുന്നു...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_COUNT" />-ൽ <ph name="DEVICE_INDEX" />-ാമത്തെ ഉപകരണം, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">റെൻഡറർ</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{ഗ്രൂപ്പിലേക്ക് ടാബ് ചേർക്കുക}other{ഗ്രൂപ്പിലേക്ക് ടാബുകൾ ചേർക്കുക}}</translation>
 <translation id="5545693483061321551">വ്യത്യസ്‌ത സൈറ്റുകളിലുടനീളമുള്ള നിങ്ങളുടെ ബ്രൗസിംഗ് ആക്റ്റിവിറ്റി കാണാൻ സൈറ്റുകൾക്ക് നിങ്ങളുടെ കുക്കികൾ ഉപയോഗിക്കാനാവില്ല, ഉദാഹരണത്തിന്, പരസ്യങ്ങൾ വ്യക്തിപരമാക്കാൻ. ചില സൈറ്റുകളിലെ ഫീച്ചറുകൾ പ്രവർത്തിച്ചേക്കില്ല.</translation>
@@ -5538,6 +5543,7 @@
 <translation id="6333170995003625229">നിങ്ങളുടെ ഇമെയിൽ വിലാസം അല്ലെങ്കിൽ പാസ്‌വേഡ് പരിശോധിച്ചുറപ്പിക്കാനായില്ല. വീണ്ടും സൈൻ ഇൻ ചെയ്യാൻ ശ്രമിക്കുക.</translation>
 <translation id="6335920438823100346">Linux ആരംഭിക്കാൻ, നിങ്ങളുടെ ഡാറ്റ ബാക്കപ്പ് ചെയ്‌ത് ഫാക്‌ടറി ക്രമീകരണത്തിലേക്ക് ഈ Chromebook റീസെറ്റ് ചെയ്യാൻ <ph name="MANAGER" /> ആവശ്യപ്പെടുന്നു.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" />, ADB ഡീബഗ് ചെയ്യൽ പ്രവർത്തനരഹിതമാക്കി. ഇത് നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> 24 മണിക്കൂറിനുള്ളിൽ റീസെറ്റ് ചെയ്യും. നിലനിർത്തണമെന്നുള്ള എല്ലാ ഫയലുകളും ബാക്കപ്പ് ചെയ്യുക.</translation>
+<translation id="6338402296920404442"><ph name="FILENAME" /> ഇല്ലാതാക്കുന്നത് പരിഗണനയിലുള്ളതിനാൽ, ഈ ഉപകരണം ഉപയോഗിക്കുന്ന മറ്റുള്ളവർക്ക് നിങ്ങളുടെ പാസ്‌വേഡുകൾ കാണാനാകില്ല.</translation>
 <translation id="6338981933082930623">എല്ലാ സൈറ്റുകൾക്കും നിങ്ങളെ ഏത് പരസ്യം വേണമെങ്കിലും കാണിക്കാം</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> എന്നയാൾക്ക് വേണ്ടി പുതിയ പ്രൊഫൈൽ സൃഷ്‌ടിക്കുക</translation>
 <translation id="6340071272923955280">ഇന്റർനെറ്റ് പ്രിന്റിംഗ് പ്രോട്ടോക്കോൾ (IPPS)</translation>
@@ -7610,6 +7616,7 @@
 <translation id="8338952601723052325">ഡെവലപ്പർ വെബ്‌സൈറ്റ്</translation>
 <translation id="8339059274628563283"><ph name="SITE" />, പ്രാദേശികമായി സൂക്ഷിച്ച വിവരം</translation>
 <translation id="833986336429795709">ഈ ലിങ്ക് തുറക്കാൻ ഒരു ആപ്പ് തിരഞ്ഞെടുക്കുക</translation>
+<translation id="8340547030807793004"><ph name="DEVICE" /> എന്നതിനുള്ള കൂടുതൽ പ്രവർത്തനങ്ങൾ</translation>
 <translation id="8342221978608739536">ശ്രമിച്ചില്ല</translation>
 <translation id="8342861492835240085">ഒരു ശേഖരം തിരഞ്ഞെടുക്കുക</translation>
 <translation id="8345848587667658367">നിങ്ങളുടെ ഫോണിലെ പുതിയ ഫോട്ടോകളും മീഡിയയും അറിയിപ്പുകളും ആപ്പുകളും ഇപ്പോൾ കാണാനാകും</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index baeb2ad..67f154a 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -4235,7 +4235,6 @@
 <translation id="5026874946691314267">Үүнийг дахиж бүү харуул</translation>
 <translation id="5027550639139316293">И-мэйлийн гэрчилгээ</translation>
 <translation id="5027562294707732951">Өргөтгөл нэмэх</translation>
-<translation id="5028202297152853903"><ph name="DEVICE" />-г <ph name="PRIMARY_EMAIL" />-с хасах бөгөөд энэ Chromebook-тэй үл хослуулсан.</translation>
 <translation id="5029568752722684782">Хуулбарыг арилгах</translation>
 <translation id="5029873138381728058">VM-г шалгаж чадсангүй</translation>
 <translation id="503155457707535043">Аппуyдыг татаж байна</translation>
@@ -6510,7 +6509,6 @@
 <translation id="7280877790564589615">Зөвшөөрөл хүссэн</translation>
 <translation id="7282547042039404307">Зөөлөн</translation>
 <translation id="7282992757463864530">Мэдээллийн самбар</translation>
-<translation id="728334460283296316">Төхөөрөмжийг хасах</translation>
 <translation id="7283555985781738399">Зочны горим</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Энэ төхөөрөмжийг 1 хоногийн турш хадгалах бөгөөд та дараагийн удаа кодгүйгээр холбогдох боломжтой. Үүнийг танай администратор тохируулсан.}other{Энэ төхөөрөмжийг {DAYS} хоногийн турш хадгалах бөгөөд та дараагийн удаа кодгүйгээр холбогдох боломжтой. Үүнийг танай администратор тохируулсан.}}</translation>
 <translation id="7284411326658527427">Хүн бүр бүртгэлээ хувийн болгож, өгөгдлөө хувьдаа хадгалж болно.</translation>
@@ -7804,8 +7802,6 @@
 <translation id="8531701051932785007">Сайжруулсан аюулгүй хөтөч унтраалттай байна</translation>
 <translation id="8534656636775144800">Уучлаарай, домайнд нэгдэхэд алдаа гарлаа. Дахин оролдоно уу.</translation>
 <translation id="8535005006684281994">Нетскейп гэрчилгээг шинэчлэх холбоос</translation>
-<translation id="8536565869707961418"><ph name="DEVICE" />-г <ph name="PRIMARY_EMAIL" />-с хасна уу.
-    Төхөөрөмжийг дотоодод ашиглах боломжтой хэвээр байна.</translation>
 <translation id="8536713137312218707">Шуурхай тушаал</translation>
 <translation id="8536956381488731905">Товч дарахад дуу гарах</translation>
 <translation id="8539727552378197395">Үгүй (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 9f8f2ef..a78eee8b 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -1080,6 +1080,7 @@
 <translation id="1997616988432401742">तुमची प्रमाणपत्रे</translation>
 <translation id="1999115740519098545">स्टार्टअप वर</translation>
 <translation id="2000419248597011803">ॲड्रेस बार आणि सर्च बॉक्समधून तुमच्या डीफॉल्ट शोध इंजिनला काही कुकीज आणि शोध पाठवते</translation>
+<translation id="2001148512690747464"><ph name="PRIMARY_EMAIL" /> वर कोणतीही जलद पेअरिंग डिव्हाइस सेव्ह केली नाहीत</translation>
 <translation id="2002109485265116295">रीअल टाइम</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' डेटा ॲक्टिव्हेट करण्यासाठी, आधी वाय-फाय नेटवर्कशी कनेक्ट करा</translation>
 <translation id="2004697686368036666">काही साइटवर वैशिष्ट्ये कदाचित काम करणार नाहीत</translation>
@@ -1789,6 +1790,7 @@
 <translation id="2642111877055905627">सॉकर बॉल</translation>
 <translation id="2643698698624765890">विंडो मेनूमध्‍ये विस्तारांवर क्लिक करुन ‍तुमचे विस्तार व्यवस्थापित करा.</translation>
 <translation id="2645047101481282803">तुमचे डिव्हाइस <ph name="PROFILE_NAME" /> द्वारे व्यवस्थापित केले आहे</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{या डिव्हाइसवर एक पासवर्ड इंपोर्ट केला}other{या डिव्हाइसवर {NUM_PASSWORDS} पासवर्ड इंपोर्ट केले}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">Base64-encoded ASCII, सर्टिफिकेट श्रृंखला</translation>
 <translation id="2652129567809778422">पासवर्ड निवडा</translation>
@@ -2966,6 +2968,7 @@
 <translation id="3789841737615482174">स्थापना करा</translation>
 <translation id="3790417903123637354">काहीतरी चूक झाली. नंतर पुन्हा प्रयत्न करा</translation>
 <translation id="379082410132524484">तुमचे कार्ड एक्सपायर झालेले आहे</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> एक्स्टेंशन</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome ला तुमच्या कॉंप्युटरवर हानिकारक सॉफ्टवेअर आढळले नाही • एका दिवसापूर्वी तपासले}other{Chrome ला तुमच्या कॉंप्युटरवर हानिकारक सॉफ्टवेअर आढळले नाही • {NUM_DAYS} दिवसांपूर्वी तपासले}}</translation>
 <translation id="379500251094592809">Nearby सह शेअरिंग वापरण्यासाठी, दोन्ही डिव्हाइस अनलॉक असल्याची, एकमेकांच्‍या जवळ धरल्‍याची आणि त्‍यांचे ब्लूटूथ सुरू असल्‍याची खात्री करा. तुम्ही तुमच्या संपर्कामध्ये नसलेल्या Chromebook सह शेअर करत असल्यास, त्यामध्ये Nearby दृश्यमानता सुरू असल्याची खात्री करा (वेळ निवडून स्थिती क्षेत्र उघडा, त्यानंतर Nearby दृश्यमानता सुरू करा) <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">बंद</translation>
@@ -4751,6 +4754,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" /> वरील कुकीज ब्‍लॉक केल्‍या आहेत</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> शी कनेक्ट करत आहे</translation>
 <translation id="5543983818738093899">स्थिती तपासत आहे...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" /> पैकी <ph name="DEVICE_INDEX" /> डिव्हाइस</translation>
 <translation id="554517701842997186">रेंडरर</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{गटामध्ये टॅब जोडा}other{गटामध्ये टॅब जोडा}}</translation>
 <translation id="5545693483061321551">वेगवेगळ्या साइटवरील तुमची ब्राउझिंग ॲक्टिव्हिटी पाहण्यासाठी साइट कुकी वापरू शकत नाहीत. उदाहरणार्थ, जाहिराती पर्सनलाइझ करण्याकरिता. काही साइटवर वैशिष्ट्ये कदाचित काम करणार नाहीत.</translation>
@@ -5553,6 +5557,7 @@
 <translation id="6333170995003625229">तुमचा ईमेल अ‍ॅड्रेस किंवा पासवर्डची पडताळणी करता आली नाही. पुन्हा साइन इन करून पहा.</translation>
 <translation id="6335920438823100346">Linux सुरू करण्यासाठी, <ph name="MANAGER" /> नुसार, तुम्ही तुमच्या डेटाचा बॅकअप घेणे आणि हे Chromebook फॅक्टरी सेटिंग्जवर रीसेट करणे आवश्यक आहे.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> ने ADB डीबगिंग बंद केले आहे. यामुळे तुमचे <ph name="DEVICE_TYPE" /> २४ तासांमध्ये रीसेट होईल. तुम्हाला ठेवायच्या असलेल्या सर्व फाइलचा बॅकअप घ्या.</translation>
+<translation id="6338402296920404442"><ph name="FILENAME" /> हटवण्याचा विचार करा, जेणेकरून हे डिव्हाइस वापरणारे इतर लोक तुमचे पासवर्ड पाहू शकणार नाहीत.</translation>
 <translation id="6338981933082930623">सर्व साइट तुम्हाला कोणत्याही जाहिराती दाखवू शकतात</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> साठी एक नवीन प्रोफाइल तयार करा</translation>
 <translation id="6340071272923955280">इंटरनेट प्रिंट प्रोटोकॉल (IPPS)</translation>
@@ -7624,6 +7629,7 @@
 <translation id="8338952601723052325">डेव्हलपर वेबसाइट</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> स्थानिकरित्या संचयित केलेला डेटा</translation>
 <translation id="833986336429795709">ही लिंक उघडण्यासाठी, अ‍ॅप निवडा</translation>
+<translation id="8340547030807793004"><ph name="DEVICE" /> साठी आणखी कृती</translation>
 <translation id="8342221978608739536">वापरून पहिले नाही</translation>
 <translation id="8342861492835240085">संकलन निवडा</translation>
 <translation id="8345848587667658367">तुम्ही आता तुमच्या फोनमधील अलीकडील फोटो, मीडिया, सूचना आणि ॲप्स पाहू शकता</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index dedbe98..0eddf90 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -4240,7 +4240,6 @@
 <translation id="5026874946691314267">Jangan tunjukkannya lagi</translation>
 <translation id="5027550639139316293">Sijil E-mel</translation>
 <translation id="5027562294707732951">Tambahkan sambungan</translation>
-<translation id="5028202297152853903"><ph name="DEVICE" /> akan dialih keluar daripada <ph name="PRIMARY_EMAIL" /> dan dinyahgandingkan dengan Chromebook ini.</translation>
 <translation id="5029568752722684782">Hapuskan salinan</translation>
 <translation id="5029873138381728058">Gagal menyemak VM</translation>
 <translation id="503155457707535043">Apl sedang dimuat turun</translation>
@@ -6515,7 +6514,6 @@
 <translation id="7280877790564589615">Kebenaran diminta</translation>
 <translation id="7282547042039404307">Lancar</translation>
 <translation id="7282992757463864530">Bar Maklumat</translation>
-<translation id="728334460283296316">Alih keluar peranti</translation>
 <translation id="7283555985781738399">Mod tetamu</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Peranti ini akan disimpan selama 1 hari dan anda boleh menyambung tanpa kod masa seterusnya. Ini ditetapkan oleh pentadbir anda.}other{Peranti ini akan disimpan selama {DAYS} hari dan anda boleh menyambung tanpa kod pada masa akan datang. Ini ditetapkan oleh pentadbir anda.}}</translation>
 <translation id="7284411326658527427">Setiap orang boleh memeribadikan akaun mereka dan merahsiakan data.</translation>
@@ -7813,8 +7811,6 @@
 <translation id="8531701051932785007">Penyemakan Imbas Selamat Dipertingkat dimatikan</translation>
 <translation id="8534656636775144800">Op! Berlaku masalah semasa cuba menyertai domain. Sila cuba lagi.</translation>
 <translation id="8535005006684281994">URL Pembaharuan Sijil Netscape</translation>
-<translation id="8536565869707961418">Alih keluar <ph name="DEVICE" /> daripada <ph name="PRIMARY_EMAIL" />.
-    Peranti masih boleh digunakan secara setempat.</translation>
 <translation id="8536713137312218707">Perintah Pantas</translation>
 <translation id="8536956381488731905">Bunyi pada tekanan kekunci</translation>
 <translation id="8539727552378197395">Tidak (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index bfaf544..511848a5 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -1343,6 +1343,7 @@
 <translation id="2241053333139545397">သင်၏ ဒေတာကို ဆိုက် တသီကြီးမှာ ဖတ်ပါ ပြောင်းလဲပါ</translation>
 <translation id="2241634353105152135">တစ်ကြိမ်သာ</translation>
 <translation id="2242687258748107519">ဖိုင် အချက်လက်</translation>
+<translation id="2245296100676446525">ဤစက်နှင့် သင်စင့်ခ်လုပ်နေသော အခြားနေရာများပေါ်ရှိ လိပ်စာ၊ စကားဝှက်၊ မှတ်တမ်းနှင့် အခြားအရာများ စင့်ခ်လုပ်ခြင်းကို ဖွင့်နိုင်သည်။</translation>
 <translation id="2245603955208828424">အကြောင်းအရာတွင် စာလုံးတစ်လုံးချင်းထံသို့ ရွှေ့သွားရန် မြားကီးများသုံးပါ</translation>
 <translation id="2246129643805925002">နောက်ဆုံးပေါ်ဝန်ဆောင်မှုများနှင့် လုံခြုံရေးတိုးမြှင့်မှုများ ပေးရန် သင့် <ph name="DEVICE_TYPE" /> နောက်ခံတွင် အလိုအလျောက် အပ်ဒိတ်လုပ်သည်။ ‘ဆက်တင်များ’ တွင် အပ်ဒိတ်သတ်မှတ်ချက်များကို သင်သုံးသပ်နိုင်သည်။</translation>
 <translation id="2246549592927364792">Google မှ ပုံအကြောင်းအရာများ ရယူမလား။</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 549b3dd..c23b323c 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -1066,6 +1066,7 @@
 <translation id="1997616988432401742">तपाईंका प्रमाणपत्रहरू</translation>
 <translation id="1999115740519098545">सुरूवातमा</translation>
 <translation id="2000419248597011803">यसले ठेगाना पट्टी र खोज बाकसका केही कुकी र खोजहरूलाई तपाईंको डिफल्ट खोज इन्जिनमा पठाउँछ</translation>
+<translation id="2001148512690747464"><ph name="PRIMARY_EMAIL" /> मा कुनै पनि फास्ट पेयर डिभाइस सेभ गरिएको छैन</translation>
 <translation id="2002109485265116295">वास्तविक समय</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' नामक मोबाइल डेटा सेवा सक्रिय गर्न सर्वप्रथम कुनै Wi-Fi नेटवर्कमा कनेक्ट गर्नुहोस्</translation>
 <translation id="2004697686368036666">केही साइटका सुविधाहरूले काम नगर्न सक्छन्</translation>
@@ -1330,6 +1331,7 @@
 <translation id="2241053333139545397">पढ्नुहोस् र वेबसाइटहरूमा डाटा परिवर्तन गर्नुहोस्</translation>
 <translation id="2241634353105152135">एकपटक मात्र</translation>
 <translation id="2242687258748107519">फाइल जानकारी</translation>
+<translation id="2245296100676446525">तपाईं आफ्ना बुकमार्क, पासवर्ड, आफूले विगतमा हेरेका वेबपेज र अन्य कुराहरू यो डिभाइस तथा आफूले सिंक गरिराखेका अन्य सबै ठाउँमा हेर्न चाहनुहुन्छ भने सिंक गर्ने सुविधा अन गर्नुहोस्।</translation>
 <translation id="2245603955208828424">एक एक अक्षर गरेर यताउता सार्न एरो कि प्रयोग गर्नुहोस्</translation>
 <translation id="2246129643805925002">तपाईंलाई नवीनतम सुविधा उपलब्ध गराउन र सुरक्षासम्बन्धी सुधारहरू गर्नका लागि तपाईंको <ph name="DEVICE_TYPE" /> ब्याकग्राउन्डमा स्वतः अपडेट हुन्छ। तपाईं सेटिङमा गई अपडेटसम्बन्धी प्राथमिकताहरू हेर्न सक्नुहुन्छ।</translation>
 <translation id="2246549592927364792">Google बाट छविका विवरणहरू प्राप्त गर्ने हो?</translation>
@@ -1771,6 +1773,7 @@
 <translation id="2642111877055905627">सकर बल</translation>
 <translation id="2643698698624765890">तपाइँका विस्तारहरू विन्डोस मेनुमा क्लिक गरेर व्यवस्थापन गर्नुहोस्।</translation>
 <translation id="2645047101481282803"><ph name="PROFILE_NAME" /> ले तपाईंको डिभाइसको व्यवस्थापन गर्छ</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{यो डिभाइसमा एउटा पासवर्ड इम्पोर्ट गरिएको छ}other{यो डिभाइसमा {NUM_PASSWORDS} वटा पासवर्ड इम्पोर्ट गरिएका छन्}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">आधार64-एन्कोडेड ASCII, प्रमाणपत्र साङ्लो</translation>
 <translation id="2652129567809778422">पासवर्ड चयन गर्नुहोस्</translation>
@@ -2949,6 +2952,7 @@
 <translation id="3789841737615482174">स्थापना गर्नुहोस्</translation>
 <translation id="3790417903123637354">केही चिज गडबड भयो। पछि फेरि प्रयास गर्नुहोस्</translation>
 <translation id="379082410132524484">तपाईंको कार्डको म्याद सकियो</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> वटा एक्स्टेन्सन</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन • १ दिनअघि जाँच गरिएको}other{Chrome ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन • {NUM_DAYS} दिनअघि जाँच गरिएको}}</translation>
 <translation id="379500251094592809">नजिकैका डिभाइससँग सेयर गर्ने सुविधा प्रयोग गर्न दुइटै डिभाइस अनलक गरिएका छन्, एकअर्काको नजिकै छन् र दुवैको ब्लुटुथ अन गरिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस्। तपाईं आफ्ना सम्पर्क ठेगानाहरूको सूचीमा नभएको कुनै Chromebook सँग सेयर गर्दै हुनुहुन्छ भने त्यसमा 'नजिकैका यन्त्रमा फेला पर्ने' सुविधा अन गरिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस् (समय चयन गरेर वस्तुस्थिति क्षेत्र खोल्नुहोस् र त्यसपछि 'नजिकैका यन्त्रमा फेला पर्ने' सुविधा अन गर्नुहोस्) <ph name="LINK_BEGIN" />थप जान्नुहोस्<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">निष्क्रिय छ</translation>
@@ -4734,6 +4738,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" /> का कुकीहरूमाथि रोक लगाइयो</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> मा जोडिँदै</translation>
 <translation id="5543983818738093899">स्थिति जाँच गर्दैछ...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_COUNT" /> वटा डिभाइसमध्ये <ph name="DEVICE_INDEX" /> औँ डिभाइस, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">रेन्डरर</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{समूहमा ट्याब थप्नुहोस्}other{समूहमा ट्याबहरू थप्नुहोस्}}</translation>
 <translation id="5545693483061321551">साइटहरूले तपाईंका गतिविधिअनुसार विज्ञापन देखाउने जस्ता प्रयोजनका लागि विभिन्न साइटहरूमा तपाईंको ब्राउजिङसम्बन्धी गतिविधि हेर्न तपाईंका कुकीहरू प्रयोग गर्न सक्दैनन्। केही साइटका सुविधाहरूले काम नगर्न सक्छन्।</translation>
@@ -5534,6 +5539,7 @@
 <translation id="6333170995003625229">तपाईंको इमेल ठेगाना वा पासवर्ड पुष्टि गर्न सकिएन। फेरि साइन इन गरी हेर्नुहोस्।</translation>
 <translation id="6335920438823100346">Linux सुरु गर्न <ph name="MANAGER" /> का अनुसार तपाईंले आफ्नो डेटा ब्याकअप गरी यो Chromebook रिसेट गरेर फ्याक्ट्री सेटिङमा लैजानु पर्ने हुन्छ।</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> ले ADB डिबग प्रक्रिया अफ गर्नुभएको छ। परिणामस्वरूप, अबको २४ घन्टामा तपाईंको <ph name="DEVICE_TYPE" /> रिसेट हुने छ। आफूले सुरक्षित राख्न चाहेका सबै फाइलहरू ब्याकअप गर्नुहोस्।</translation>
+<translation id="6338402296920404442">यो डिभाइस प्रयोग गर्ने अरू मान्छेले तपाईंका पासवर्ड देख्न नसकून भन्नाका लागि <ph name="FILENAME" /> मेटाउनुहोस्।</translation>
 <translation id="6338981933082930623">सबै साइटहरू तपाईंलाई जुनसुकै विज्ञापन देखाउन सक्छन्</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> को नयाँ प्रोफाइल सिर्जना गर्नुहोस्</translation>
 <translation id="6340071272923955280">इन्टरनेट प्रिन्टिङ प्रोटोकोल (IPPS)</translation>
@@ -7606,6 +7612,7 @@
 <translation id="8338952601723052325">विकासकर्ता वेबसाइट</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> को स्थानीय रूपमा भण्डारण गरिएको डेटा</translation>
 <translation id="833986336429795709">यो लिंक खोल्न, कुनै एप छनौट गर्नुहोस्</translation>
+<translation id="8340547030807793004"><ph name="DEVICE" /> का सम्बन्धमा गर्न सकिने थप कारबाहीहरू</translation>
 <translation id="8342221978608739536">हेरेकै छुइनँ</translation>
 <translation id="8342861492835240085">सङ्ग्रह चयन गर्नुहोस्</translation>
 <translation id="8345848587667658367">तपाईं अब आफ्नो फोनका हालसालैका फोटो, मिडिया, सूचना तथा एपहरू हेर्न सक्नुहुन्छ</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 4dd850f5..d13c50d 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -4222,7 +4222,6 @@
 <translation id="5026874946691314267">Dit bericht niet meer bekijken</translation>
 <translation id="5027550639139316293">Certificaat voor e-mail</translation>
 <translation id="5027562294707732951">Extensie toevoegen</translation>
-<translation id="5028202297152853903"><ph name="DEVICE" /> wordt verwijderd uit <ph name="PRIMARY_EMAIL" /> en ontkoppeld van deze Chromebook.</translation>
 <translation id="5029568752722684782">Kopie wissen</translation>
 <translation id="5029873138381728058">Kan VM's niet checken</translation>
 <translation id="503155457707535043">Apps downloaden</translation>
@@ -6493,7 +6492,6 @@
 <translation id="7280877790564589615">Rechten gevraagd</translation>
 <translation id="7282547042039404307">Vloeiend</translation>
 <translation id="7282992757463864530">Infobalk</translation>
-<translation id="728334460283296316">Apparaat verwijderen</translation>
 <translation id="7283555985781738399">Gastmodus</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Dit apparaat wordt 1 dag bewaard en je kunt de volgende keer verbinding maken zonder een code. Dit wordt ingesteld door je beheerder.}other{Dit apparaat wordt {DAYS} dagen bewaard en je kunt de volgende keer verbinding maken zonder een code. Dit wordt ingesteld door je beheerder.}}</translation>
 <translation id="7284411326658527427">Ze kunnen ieder hun account personaliseren en gegevens privé houden.</translation>
@@ -7787,8 +7785,6 @@
 <translation id="8531701051932785007">Uitgebreide versie van Safe Browsing staat uit</translation>
 <translation id="8534656636775144800">Er is een fout opgetreden bij het verbinden met het domein. Probeer het opnieuw.</translation>
 <translation id="8535005006684281994">URL voor verlengen van Netscape-certificaat</translation>
-<translation id="8536565869707961418"><ph name="DEVICE" /> verwijderen uit <ph name="PRIMARY_EMAIL" />.
-    Het apparaat kan nog steeds lokaal worden gebruikt.</translation>
 <translation id="8536713137312218707">Snelle opdrachten</translation>
 <translation id="8536956381488731905">Geluid bij toetsaanslag</translation>
 <translation id="8539727552378197395">Nee (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index c31a0262..556a86e5 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -1082,6 +1082,7 @@
 <translation id="1997616988432401742">ਤੁਹਾਡੇ ਸਰਟੀਫਿਕੇਟ</translation>
 <translation id="1999115740519098545">ਸਟਾਰਟਅਪ ਤੇ</translation>
 <translation id="2000419248597011803">ਪਤਾ ਬਾਰ ਅਤੇ ਖੋਜ ਬਾਕਸ ਤੋਂ ਕੁਝ ਕੁਕੀਜ਼ ਅਤੇ ਖੋਜਾਂ ਤੁਹਾਡੇ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਖੋਜ ਇੰਜਣ ਨੂੰ ਭੇਜਦੀ ਹੈ</translation>
+<translation id="2001148512690747464">ਕਿਸੇ ਵੀ ਤੇਜ਼ ਜੋੜਾਬੰਦੀ ਵਾਲੇ ਡੀਵਾਈਸ ਨੂੰ <ph name="PRIMARY_EMAIL" /> ਵਿੱਚ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="2002109485265116295">ਅਸਲ-ਸਮਾਂ</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' ਡਾਟਾ ਕਿਰਿਆਸ਼ੀਲ ਕਰਨ ਲਈ, ਪਹਿਲਾਂ ਕਿਸੇ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕਰੋ</translation>
 <translation id="2004697686368036666">ਸ਼ਾਇਦ ਕੁਝ ਸਾਈਟਾਂ 'ਤੇ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਕੰਮ ਨਾ ਕਰਨ</translation>
@@ -1791,6 +1792,7 @@
 <translation id="2642111877055905627">ਫੁੱਟਬਾਲ</translation>
 <translation id="2643698698624765890">ਵਿੰਡੋ ਮੀਨੂ ਵਿੱਚ ਐਕਸਟੈਂਸ਼ਨਾਂ 'ਤੇ ਕਲਿੱਕ ਕਰਕੇ ਆਪਣੇ ਐਕਸਟੈਂਸ਼ਨ ਵਿਵਸਥਿਤ ਕਰੋ।</translation>
 <translation id="2645047101481282803">ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ <ph name="PROFILE_NAME" /> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 ਪਾਸਵਰਡ ਨੂੰ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਆਯਾਤ ਕੀਤਾ ਗਿਆ}one{{NUM_PASSWORDS} ਪਾਸਵਰਡ ਨੂੰ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਆਯਾਤ ਕੀਤਾ ਗਿਆ}other{{NUM_PASSWORDS} ਪਾਸਵਰਡਾਂ ਨੂੰ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਆਯਾਤ ਕੀਤਾ ਗਿਆ}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">Base64-ਐਨਕੋਡਿਡ ASCII, ਸਰਟੀਫਿਕੇਟ ਚੇਨ</translation>
 <translation id="2652129567809778422">ਪਾਸਵਰਡ ਚੁਣੋ</translation>
@@ -2967,6 +2969,7 @@
 <translation id="3789841737615482174">ਸਥਾਪਤ ਕਰੋ</translation>
 <translation id="3790417903123637354">ਕੋਈ ਗੜਬੜ ਹੋਈ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ</translation>
 <translation id="379082410132524484">ਤੁਹਾਡੇ ਕਾਰਡ ਦੀ ਮਿਆਦ ਸਮਾਪਤ ਹੋਈ</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> ਐਕਸਟੈਂਸ਼ਨਾਂ</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome ਨੂੰ ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ 'ਤੇ ਕੋਈ ਹਾਨੀਕਾਰਕ ਸਾਫ਼ਟਵੇਅਰ ਨਹੀਂ ਲੱਭਿਆ • 1 ਦਿਨ ਪਹਿਲਾਂ ਜਾਂਚ ਕੀਤੀ ਗਈ}one{Chrome ਨੂੰ ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ 'ਤੇ ਕੋਈ ਹਾਨੀਕਾਰਕ ਸਾਫ਼ਟਵੇਅਰ ਨਹੀਂ ਲੱਭਿਆ • {NUM_DAYS} ਦਿਨ ਪਹਿਲਾਂ ਜਾਂਚ ਕੀਤੀ ਗਈ}other{Chrome ਨੂੰ ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ 'ਤੇ ਕੋਈ ਹਾਨੀਕਾਰਕ ਸਾਫ਼ਟਵੇਅਰ ਨਹੀਂ ਲੱਭਿਆ • {NUM_DAYS} ਦਿਨ ਪਹਿਲਾਂ ਜਾਂਚ ਕੀਤੀ ਗਈ}}</translation>
 <translation id="379500251094592809">'ਨਜ਼ਦੀਕੀ ਸਾਂਝ' ਵਰਤਣ ਲਈ, ਪੱਕਾ ਕਰੋ ਕਿ ਦੋਵੇਂ ਡੀਵਾਈਸ ਅਣਲਾਕ ਹੋਣ, ਇੱਕ-ਦੂਜੇ ਦੇ ਨੇੜੇ ਹੋਣ ਅਤੇ ਬਲੂਟੁੱਥ ਚਾਲੂ ਹੋਵੇ। ਜੇ ਤੁਸੀਂ ਅਜਿਹੀ Chromebook ਨਾਲ ਸਾਂਝਾ ਕਰ ਰਹੇ ਹੋ ਜੋ ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਵਿੱਚ ਨਹੀਂ ਹੈ, ਤਾਂ ਪੱਕਾ ਕਰੋ ਕਿ ਇਸ ਵਿੱਚ 'ਨਜ਼ਦੀਕੀ ਦਿਖਣਯੋਗਤਾ' ਚਾਲੂ ਹੈ (ਸਮੇਂ ਨੂੰ ਚੁਣ ਕੇ ਸਥਿਤੀ ਖੇਤਰ ਖੋਲ੍ਹੋ, ਫਿਰ ਨਜ਼ਦੀਕੀ ਦਿਖਣਯੋਗਤਾ ਚਾਲੂ ਕਰੋ) <ph name="LINK_BEGIN" />ਹੋਰ ਜਾਣੋ<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">ਬੰਦ</translation>
@@ -4754,6 +4757,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" /> ਤੋਂ ਕੁਕੀਜ਼ ਬਲਾਕ ਕੀਤੀਆਂ ਗਈਆਂ</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation>
 <translation id="5543983818738093899">ਸਥਿਤੀ ਦੀ ਜਾਂਚ ਕਰ ਰਿਹਾ ਹੈ...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_COUNT" /> ਵਿੱਚ <ph name="DEVICE_INDEX" /> ਡੀਵਾਈਸ, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">ਰੈਂਡਰਰ</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{ਟੈਬ ਨੂੰ ਗਰੁੱਪ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ}one{ਟੈਬ ਨੂੰ ਗਰੁੱਪ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ}other{ਟੈਬਾਂ ਨੂੰ ਗਰੁੱਪ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ}}</translation>
 <translation id="5545693483061321551">ਸਾਈਟਾਂ ਵੱਖ-ਵੱਖ ਸਾਈਟਾਂ ਵਿਚਲੀ ਤੁਹਾਡੀ ਬ੍ਰਾਊਜ਼ਿੰਗ ਸਰਗਰਮੀ ਦੇਖਣ ਲਈ ਕੁਕੀਜ਼ ਨੂੰ ਨਹੀਂ ਵਰਤ ਸਕਦੀਆਂ, ਉਦਾਹਰਨ ਲਈ, ਵਿਗਿਆਪਨਾਂ ਨੂੰ ਵਿਅਕਤੀਗਤ ਬਣਾਉਣ ਵਾਸਤੇ। ਸ਼ਾਇਦ ਕੁਝ ਸਾਈਟਾਂ 'ਤੇ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਕੰਮ ਨਾ ਕਰਨ।</translation>
@@ -5555,6 +5559,7 @@
 <translation id="6333170995003625229">ਤੁਹਾਡੇ ਈਮੇਲ ਪਤੇ ਜਾਂ ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ। ਦੁਬਾਰਾ ਸਾਈਨ-ਇਨ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="6335920438823100346">Linux ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਵਾਸਤੇ, <ph name="MANAGER" /> ਲਈ ਤੁਹਾਨੂੰ ਆਪਣੇ ਡਾਟੇ ਦਾ ਬੈਕਅੱਪ ਲੈਣ ਅਤੇ ਇਸ Chromebook ਨੂੰ ਫੈਕਟਰੀ ਸੈਟਿੰਗਾਂ 'ਤੇ ਰੀਸੈੱਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> ਨੇ ADB ਡੀਬੱਗਿੰਗ ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ। ਇਸ ਨਾਲ ਤੁਹਾਡੀ <ph name="DEVICE_TYPE" /> 24 ਘੰਟਿਆਂ ਵਿੱਚ ਰੀਸੈੱਟ ਹੋ ਜਾਵੇਗੀ। ਉਹਨਾਂ ਫ਼ਾਈਲਾਂ ਦਾ ਬੈਕਅੱਪ ਲਓ ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ।</translation>
+<translation id="6338402296920404442"><ph name="FILENAME" /> ਨੂੰ ਮਿਟਾਉਣ 'ਤੇ ਵਿਚਾਰ ਕਰੋ, ਤਾਂ ਕਿ ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਵਰਤਣ ਵਾਲੇ ਵਿਅਕਤੀ ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਨਾ ਦੇਖ ਸਕਣ।</translation>
 <translation id="6338981933082930623">ਸਾਰੀਆਂ ਸਾਈਟਾਂ ਤੁਹਾਨੂੰ ਕੋਈ ਵੀ ਵਿਗਿਆਪਨ ਦਿਖਾ ਸਕਦੀਆਂ ਹਨ</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> ਲਈ ਇੱਕ ਨਵਾਂ ਪ੍ਰੋਫ਼ਾਈਲ ਬਣਾਓ</translation>
 <translation id="6340071272923955280">ਇੰਟਰਨੈੱਟ ਪ੍ਰਿੰਟਿੰਗ ਪ੍ਰੋਟੋਕੋਲ (IPPS)</translation>
@@ -7629,6 +7634,7 @@
 <translation id="8338952601723052325">ਵਿਕਾਸਕਾਰ ਵੈੱਬਸਾਈਟ</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> ਨੇ ਸਥਾਨਕ ਤੌਰ 'ਤੇ  ਡਾਟਾ  ਸਟੋਰ ਕੀਤਾ</translation>
 <translation id="833986336429795709">ਇਸ ਲਿੰਕ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ, ਕੋਈ ਐਪ ਚੁਣੋ</translation>
+<translation id="8340547030807793004"><ph name="DEVICE" /> ਲਈ ਹੋਰ ਕਾਰਵਾਈਆਂ</translation>
 <translation id="8342221978608739536">ਕੋਸ਼ਿਸ਼ ਨਹੀਂ ਕੀਤੀ</translation>
 <translation id="8342861492835240085">ਕੋਈ ਸੰਗ੍ਰਹਿ ਚੁਣੋ</translation>
 <translation id="8345848587667658367">ਤੁਸੀਂ ਹੁਣ ਆਪਣੇ ਫ਼ੋਨ ਦੀਆਂ ਹਾਲੀਆ ਫ਼ੋਟੋਆਂ, ਮੀਡੀਆ, ਸੂਚਨਾਵਾਂ ਅਤੇ ਐਪਾਂ ਨੂੰ ਦੇਖ ਸਕਦੇ ਹੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 1b1c9eb2..986f8fe 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -4211,7 +4211,6 @@
 <translation id="5026874946691314267">Nie pokazuj więcej tego komunikatu</translation>
 <translation id="5027550639139316293">Certyfikat poczty e-mail</translation>
 <translation id="5027562294707732951">Dodaj rozszerzenie</translation>
-<translation id="5028202297152853903">Urządzenie <ph name="DEVICE" /> zostanie usunięte z konta <ph name="PRIMARY_EMAIL" /> i rozparowane z tym Chromebookiem.</translation>
 <translation id="5029568752722684782">Usuń kopię</translation>
 <translation id="5029873138381728058">Nie udało się sprawdzić maszyn wirtualnych</translation>
 <translation id="503155457707535043">Pobieram aplikacje</translation>
@@ -6489,7 +6488,6 @@
 <translation id="7280877790564589615">Prośba o uprawnienia</translation>
 <translation id="7282547042039404307">Płynny</translation>
 <translation id="7282992757463864530">Pasek informacyjny</translation>
-<translation id="728334460283296316">Usuwanie urządzenia</translation>
 <translation id="7283555985781738399">Tryb gościa</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{To urządzenie będzie zapisane przez 1 dzień. Następnym razem możesz połączyć się bez podawania kodu. Tę opcję ustawia administrator.}few{To urządzenie będzie zapisane przez {DAYS} dni. Następnym razem możesz połączyć się bez podawania kodu. Tę opcję ustawia administrator.}many{To urządzenie będzie zapisane przez {DAYS} dni. Następnym razem możesz połączyć się bez podawania kodu. Tę opcję ustawia administrator.}other{To urządzenie będzie zapisane przez {DAYS} dnia. Następnym razem możesz połączyć się bez podawania kodu. Tę opcję ustawia administrator.}}</translation>
 <translation id="7284411326658527427">Każda osoba może spersonalizować swoje konto i zachować prywatność swoich danych.</translation>
@@ -7786,8 +7784,6 @@
 <translation id="8531701051932785007">Ulepszone Bezpieczne przeglądanie jest wyłączone</translation>
 <translation id="8534656636775144800">Ups. Podczas próby dołączenia do domeny wystąpił błąd. Spróbuj ponownie.</translation>
 <translation id="8535005006684281994">Adres URL odnowienia certyfikatu firmy Netscape</translation>
-<translation id="8536565869707961418">Usuń urządzenie <ph name="DEVICE" /> z konta <ph name="PRIMARY_EMAIL" />.
-    Urządzenia można nadal używać lokalnie.</translation>
 <translation id="8536713137312218707">Szybkie polecenia</translation>
 <translation id="8536956381488731905">Dźwięk przy naciśnięciu</translation>
 <translation id="8539727552378197395">Nie (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index ac4f36c..aca88381 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1346,6 +1346,7 @@
 <translation id="2241053333139545397">Ler e alterar seus dados em vários websites</translation>
 <translation id="2241634353105152135">Apenas uma vez</translation>
 <translation id="2242687258748107519">Informações do arquivo</translation>
+<translation id="2245296100676446525">Ative a sincronização para acessar favoritos, senhas, histórico e muito mais neste dispositivo e em qualquer outro lugar em que esse recurso também esteja ativado.</translation>
 <translation id="2245603955208828424">Use as teclas de seta para percorrer os itens letra por letra.</translation>
 <translation id="2246129643805925002">Seu <ph name="DEVICE_TYPE" /> será atualizado automaticamente em segundo plano para que você tenha os recursos e as melhorias de segurança mais recentes. Você pode revisar as preferências de atualização nas configurações.</translation>
 <translation id="2246549592927364792">Ver descrições de imagens do Google?</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 884daa5..962c0b633 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -735,7 +735,7 @@
 <translation id="1688935057616748272">Introduza uma letra.</translation>
 <translation id="168991973552362966">Adicionar uma impressora próxima</translation>
 <translation id="1689945336726856614">Copiar &amp;URL</translation>
-<translation id="1692115862433274081">Utilizar outra conta</translation>
+<translation id="1692115862433274081">Usar outra conta</translation>
 <translation id="1692118695553449118">A sincronização está ativada</translation>
 <translation id="1692210323591458290">Roxo escuro</translation>
 <translation id="1692713444215319269">Inversão de cores, lupa e definições de visualização</translation>
@@ -4225,7 +4225,6 @@
 <translation id="5026874946691314267">Não voltar a mostrar</translation>
 <translation id="5027550639139316293">Certificado de email</translation>
 <translation id="5027562294707732951">Adicionar extensão</translation>
-<translation id="5028202297152853903"><ph name="DEVICE" /> vai ser removido de <ph name="PRIMARY_EMAIL" /> e dessincronizado com este Chromebook.</translation>
 <translation id="5029568752722684782">Limpar cópia</translation>
 <translation id="5029873138381728058">Falha ao verificar VMs</translation>
 <translation id="503155457707535043">A transferir aplicações…</translation>
@@ -6501,7 +6500,6 @@
 <translation id="7280877790564589615">Autorização solicitada</translation>
 <translation id="7282547042039404307">Suave</translation>
 <translation id="7282992757463864530">Barra de informações</translation>
-<translation id="728334460283296316">Remova o dispositivo</translation>
 <translation id="7283555985781738399">Modo convidado</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Este dispositivo vai ser guardado durante 1 dia e pode associar sem um código da próxima vez. Esta opção é definida pelo administrador.}other{Este dispositivo vai ser guardado durante {DAYS} dias e pode associar sem um código da próxima vez. Esta opção é definida pelo administrador.}}</translation>
 <translation id="7284411326658527427">Cada pessoa pode personalizar a respetiva conta e manter os dados privados.</translation>
@@ -7798,8 +7796,6 @@
 <translation id="8531701051932785007">A Navegação segura melhorada está desativada</translation>
 <translation id="8534656636775144800">Ups! Ocorreu um erro ao tentar aderir ao domínio. Tente novamente.</translation>
 <translation id="8535005006684281994">URL de renovação de certificado Netscape</translation>
-<translation id="8536565869707961418">Remova <ph name="DEVICE" /> de <ph name="PRIMARY_EMAIL" />.
-    O dispositivo ainda pode ser usado localmente.</translation>
 <translation id="8536713137312218707">Comandos rápidos</translation>
 <translation id="8536956381488731905">Som ao premir as teclas</translation>
 <translation id="8539727552378197395">Não (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 4722347..232d0cbc 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -1071,6 +1071,7 @@
 <translation id="1997616988432401742">Vaše certifikáty</translation>
 <translation id="1999115740519098545">Pri spustení</translation>
 <translation id="2000419248597011803">Odošle niektoré súbory cookie a vyhľadávania z panela s adresou a vyhľadávacieho poľa do vášho predvoleného vyhľadávača</translation>
+<translation id="2001148512690747464">Do účtu <ph name="PRIMARY_EMAIL" /> neboli uložené žiadne zariadenia s rýchlym párovaním</translation>
 <translation id="2002109485265116295">Reálny čas</translation>
 <translation id="2003130567827682533">Ak chcete aktivovať dáta v sieti <ph name="NAME" />, najprv sa pripojte k sieti Wi-Fi</translation>
 <translation id="2004697686368036666">Funkcie na niektorých weboch nemusia fungovať</translation>
@@ -1777,6 +1778,7 @@
 <translation id="2642111877055905627">Futbalová lopta</translation>
 <translation id="2643698698624765890">Ak chcete spravovať rozšírenia, kliknite na možnosť Rozšírenia v ponuke Okno.</translation>
 <translation id="2645047101481282803">Vaše zariadenie spravuje <ph name="PROFILE_NAME" />.</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{Do tohto zariadenia bolo importované 1 heslo}few{Do tohto zariadenia boli importované {NUM_PASSWORDS} heslá}many{{NUM_PASSWORDS} passwords imported to this device}other{Do tohto zariadenia bolo importovaných {NUM_PASSWORDS} hesiel}}</translation>
 <translation id="2645435784669275700">Chrome OS</translation>
 <translation id="2649045351178520408">ASCII s kódovaním Base64, certifikačná reťaz</translation>
 <translation id="2652129567809778422">Vyberte heslo</translation>
@@ -2954,6 +2956,7 @@
 <translation id="3789841737615482174">Inštalovať</translation>
 <translation id="3790417903123637354">Vyskytol sa problém. Skúste to neskôr.</translation>
 <translation id="379082410132524484">Platnosť vašej karty vypršala</translation>
+<translation id="3792973596468118484">Rozšírenia: <ph name="NUM_EXTENSIONS" /></translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome nenašiel vo vašom počítači škodlivý softvér • skontrolované pred 1 dňom}few{Chrome nenašiel vo vašom počítači škodlivý softvér • skontrolované pred {NUM_DAYS} dňami}many{Chrome nenašiel vo vašom počítači škodlivý softvér • skontrolované pred {NUM_DAYS} dňa}other{Chrome nenašiel vo vašom počítači škodlivý softvér • skontrolované pred {NUM_DAYS} dňami}}</translation>
 <translation id="379500251094592809">Ak chcete používať Zdieľanie nablízku, obe zariadenia musia byť odomknuté, blízko seba a mať zapnuté rozhranie Bluetooth. Ak zdieľate s Chromebookom, ktorý nie je vo vašich kontaktoch, uistite sa, či má zapnutú viditeľnosť nablízku (otvorte stavovú oblasť výberom času a potom zapnite Viditeľnosť nablízku).<ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Vypnuté</translation>
@@ -4740,6 +4743,7 @@
 <translation id="5542750926112347543">Boli zablokované súbory cookie z domény <ph name="DOMAIN" /></translation>
 <translation id="5542949973455282971">Pripája sa k operátorovi <ph name="CARRIER_NAME" /></translation>
 <translation id="5543983818738093899">Kontroluje sa stav...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_INDEX" />. zariadenie z <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Vykresľovací modul</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Pridanie karty do skupiny}few{Pridanie kariet do skupiny}many{Pridanie kariet do skupiny}other{Pridanie kariet do skupiny}}</translation>
 <translation id="5545693483061321551">Weby si nemôžu na základe súborov cookie zobraziť vašu históriu prehliadania v rámci rôznych webov (napríklad na prispôsobenie reklám). Funkcie na niektorých weboch nemusia fungovať.</translation>
@@ -5541,6 +5545,7 @@
 <translation id="6333170995003625229">Vašu e‑mailovú adresu alebo heslo sa nepodarilo overiť. Skúste sa prihlásiť znova.</translation>
 <translation id="6335920438823100346">Ak chcete spustiť Linux, <ph name="MANAGER" /> vyžaduje, aby ste zálohovali svoje dáta a obnovili v Chromebooku výrobné nastavenia.</translation>
 <translation id="6336038146639916978">Doména <ph name="MANAGER" /> deaktivovala ladenie ADB. Vaše zariadenie <ph name="DEVICE_TYPE" /> sa o 24 hodín resetuje. Zálohujte všetky súbory, ktoré si chcete ponechať.</translation>
+<translation id="6338402296920404442">Zvážte odstránenie súboru <ph name="FILENAME" />, aby si ostatní používatelia tohto zariadenia nemohli zobraziť vaše heslá.</translation>
 <translation id="6338981933082930623">Všetky weby vám môžu zobrazovať akékoľvek reklamy</translation>
 <translation id="6339668969738228384">Vytvoriť nový profil pre používateľa <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="6340071272923955280">Protokol IPP (IPPS)</translation>
@@ -7617,6 +7622,7 @@
 <translation id="8338952601723052325">Webové stránky vývojára</translation>
 <translation id="8339059274628563283">Dáta webu <ph name="SITE" /> v miestnom úložisku</translation>
 <translation id="833986336429795709">Ak chcete otvoriť tento odkaz, vyberte aplikáciu</translation>
+<translation id="8340547030807793004">Ďalšie akcie pre zariadenie: <ph name="DEVICE" /></translation>
 <translation id="8342221978608739536">Nepokúsil(a) som sa o to</translation>
 <translation id="8342861492835240085">Vybrať zbierku</translation>
 <translation id="8345848587667658367">Teraz si môžete zobraziť najnovšie fotky, médiá, upozornenia a aplikácie svojho telefónu</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 50ae7dc..9d5089a 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -1066,6 +1066,7 @@
 <translation id="1997616988432401742">Certifikatat e tua</translation>
 <translation id="1999115740519098545">Në nisje</translation>
 <translation id="2000419248597011803">Dërgon disa kuki dhe kërkime nga shiriti i adresës dhe kutia e kërkimit te motori yt i parazgjedhur i kërkimit</translation>
+<translation id="2001148512690747464">Te <ph name="PRIMARY_EMAIL" /> nuk është ruajtur asnjë pajisje me "Çiftimin e shpejtë"</translation>
 <translation id="2002109485265116295">Kohë reale</translation>
 <translation id="2003130567827682533">Për të aktivizuar të dhënat e "<ph name="NAME" />", në fillim lidhu me një rrjet Wi-Fi</translation>
 <translation id="2004697686368036666">Veçoritë në disa sajte mund të mos funksionojnë</translation>
@@ -1772,6 +1773,7 @@
 <translation id="2642111877055905627">Top futbolli</translation>
 <translation id="2643698698624765890">Menaxho shtesat e tua duke klikuar "Shtesat" në menynë e Windows.</translation>
 <translation id="2645047101481282803">Pajisja jote menaxhohet nga <ph name="PROFILE_NAME" /></translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 fjalëkalim u importua në këtë pajisje}other{{NUM_PASSWORDS} fjalëkalime u importuan në këtë pajisje}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">ASCII i koduar me Base64, zinxhir certifikatash</translation>
 <translation id="2652129567809778422">Zgjidh fjalëkalimin</translation>
@@ -2949,6 +2951,7 @@
 <translation id="3789841737615482174">Instalo</translation>
 <translation id="3790417903123637354">Ndodhi një gabim. Provo përsëri më vonë</translation>
 <translation id="379082410132524484">Karta jote ka skaduar</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> shtesa</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome nuk gjeti softuerë të dëmshëm në kompjuterin tënd • Kontrolluar 1 ditë më parë}other{Chrome nuk gjeti softuerë të dëmshëm në kompjuterin tënd • Kontrolluar {NUM_DAYS} ditë më parë}}</translation>
 <translation id="379500251094592809">Për të përdorur "Ndarjen në afërsi", sigurohu që të dyja pajisjet të jenë të shkyçura, pranë njëra-tjetrës, si dhe ta kenë të aktivizuar Bluetooth-in. Nëse po ndan me një Chromebook që nuk është në kontaktet e tua, sigurohu që ta ketë të aktivizuar dukshmërinë e "Ndarjes në afërsi" (hap zonën e statusit duke zgjedhur orën dhe më pas zgjidh dukshmërinë "Në afërsi") <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Joaktiv</translation>
@@ -4735,6 +4738,7 @@
 <translation id="5542750926112347543">Kukit nga <ph name="DOMAIN" /> u bllokuan</translation>
 <translation id="5542949973455282971">Po lidhet me <ph name="CARRIER_NAME" /></translation>
 <translation id="5543983818738093899">Po kontrollon për statusin...</translation>
+<translation id="5544482392629385159">Pajisja <ph name="DEVICE_INDEX" /> nga <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Interpretuesi</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Shto një skedë te grupi}other{Shto skeda te grupi}}</translation>
 <translation id="5545693483061321551">Sajtet nuk mund të përdorin kukit e tua për të parë aktivitetin tënd të shfletimit nëpër sajte të ndryshme, p.sh. për të personalizuar reklamat. Veçoritë në disa sajte mund të mos funksionojnë.</translation>
@@ -5536,6 +5540,7 @@
 <translation id="6333170995003625229">Adresa e email-it ose fjalëkalimi yt nuk mund të verifikohej. Provo të identifikohesh përsëri.</translation>
 <translation id="6335920438823100346">Për të nisur Linux, <ph name="MANAGER" /> kërkon që të rezervosh të dhënat e tua dhe ta rivendosësh këtë Chromebook te cilësimet e fabrikës.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> ka çaktivizuar korrigjimin e ADB-së. Kjo do ta rivendosë pajisjen tënde <ph name="DEVICE_TYPE" /> brenda 24 orësh. Rezervo çdo skedar që dëshiron ta mbash.</translation>
+<translation id="6338402296920404442">Ki parasysh që ta fshish <ph name="FILENAME" />, në mënyrë që të tjerët që e përdorin këtë pajisje të mos arrijnë t'i shikojnë fjalëkalimet e tua.</translation>
 <translation id="6338981933082930623">Të gjitha sajtet mund të të shfaqin çdo reklamë</translation>
 <translation id="6339668969738228384">Krijo një profil të ri për <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="6340071272923955280">Protokolli i printimit në internet (IPPS)</translation>
@@ -7606,6 +7611,7 @@
 <translation id="8338952601723052325">Sajti i uebit i zhvilluesit</translation>
 <translation id="8339059274628563283">Të dhënat e <ph name="SITE" /> të ruajtura lokalisht</translation>
 <translation id="833986336429795709">Për të hapur këtë lidhje, zgjidh një aplikacion</translation>
+<translation id="8340547030807793004">Më shumë veprime për <ph name="DEVICE" /></translation>
 <translation id="8342221978608739536">Nuk e provova</translation>
 <translation id="8342861492835240085">Zgjidh një koleksion</translation>
 <translation id="8345848587667658367">Tani mund të shikosh aplikacionet, njoftimet, mediat dhe fotografitë më të fundit të telefonit</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index cf35c91..06a80f38 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1345,6 +1345,7 @@
 <translation id="2241053333139545397">பல இணையதளங்களில் உங்கள் தரவைப் படித்தல் மற்றும் திருத்துதல்</translation>
 <translation id="2241634353105152135">ஒருமுறை மட்டுமே</translation>
 <translation id="2242687258748107519">ஃபைல் தகவல்</translation>
+<translation id="2245296100676446525">புக்மார்க்குகள், கடவுச்சொற்கள், பதிவுகள் மற்றும் பலவற்றை இந்தச் சாதனத்திலும் நீங்கள் ஒத்திசைக்கும் எல்லாச் சாதனங்களிலும் பெற ஒத்திசைவை இயக்கவும்.</translation>
 <translation id="2245603955208828424">திரையில் இருப்பவற்றை ஒவ்வொரு எழுத்தாகப் பார்க்க அம்புக்குறி பட்டன்களைப் பயன்படுத்தலாம்</translation>
 <translation id="2246129643805925002">சமீபத்திய அம்சங்கள் மற்றும் பாதுகாப்பு மேம்பாடுகளை வழங்குவதற்காக உங்கள் <ph name="DEVICE_TYPE" /> தானாகவே பின்னணியில் புதுப்பிக்கப்படும். புதுப்பிப்பு விருப்பங்களை அமைப்புகளுக்குச் சென்று சரிபார்க்கலாம்.</translation>
 <translation id="2246549592927364792">பட விவரங்களை Googleளிலிருந்து பெற வேண்டுமா?</translation>
@@ -3910,6 +3911,7 @@
 <translation id="4689421377817139245">இந்தப் புத்தகக்குறியை iPhone உடன் ஒத்திசையுங்கள்</translation>
 <translation id="4690091457710545971">&lt;Intel வைஃபை நிலைபொருள் உருவாக்கிய நான்கு கோப்புகள்: csr.lst, fh_regs.lst, radio_reg.lst, monitor.lst.sysmon.  முதல் மூன்று கோப்புகளும் பதிவு டம்ப்களைக் கொண்டுள்ள பைனரிக் கோப்புகளாகும், அவற்றில் தனிப்பட்ட அல்லது சாதனத்தை அடையாளப்படுத்தும் தகவல்கள் எதுவும் இல்லை என்று Intel உறுதிப்படுத்தியுள்ளது.  கடைசிக் கோப்பு, Intel நிலைபொருளைச் சேர்ந்த ஓர் இயக்கக் கண்காணிப்புக் கோப்பாகும்; அதிலிருந்து தனிப்பட்ட அல்லது சாதனத்தை அடையாளப்படுத்தும் தகவல்கள் அகற்றப்பட்டுள்ளன, ஆனால் கோப்பு மிகப் பெரிதாக இருப்பதால் அதை இங்கு காட்ட முடியாது.  இந்தக் கோப்புகள் உங்கள் சாதனத்தில் சமீபத்தில் ஏற்பட்ட வைஃபை குறித்த சிக்கல்களுக்குப் பதிலளிக்கையில் உருவாக்கப்பட்டன, அவை இந்தச் சிக்கல்களைப் பிழையறிந்து திருத்துவதற்கு உதவ, Intelலுடன் பகிரப்படும்.&gt;</translation>
 <translation id="4691791363716065510">இந்தத் தளத்தின் தாவல்கள் அனைத்தையும் மூடும் வரை <ph name="ORIGIN" /> தளத்தால் <ph name="FILENAME" /> ஃபைலைப் பார்க்க முடியும்</translation>
+<translation id="4692342362587775867">இந்தத் தளத்தில் இருந்து வரும் அறிவிப்புகள் தவறானதாக இருக்கக்கூடும்</translation>
 <translation id="4692623383562244444">தேடல் இன்ஜின்கள்</translation>
 <translation id="4692736633446859167"><ph name="SITE" /> தளத்தில் நீட்டிப்புகளை அனுமதிக்க வேண்டாம் என முன்பு தேர்வுசெய்துள்ளீர்கள். இந்தத் தளத்தை இங்கே சேர்த்தால், <ph name="SITE" /> தளத்தில் உள்ள உங்கள் தளத் தரவைப் படிக்கவும் மாற்றவும் பிற நீட்டிப்புகளும் அனுமதி கோரும்.</translation>
 <translation id="4693155481716051732">சூஷி</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index c8456fe..18c9637 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -1080,6 +1080,7 @@
 <translation id="1997616988432401742">మీ ప్రమాణపత్రాలు</translation>
 <translation id="1999115740519098545">ప్రారంభించిన తరువాత</translation>
 <translation id="2000419248597011803">అడ్రస్ బార్, సెర్చ్ బాక్స్‌లలో చేసే సెర్చ్‌లు, కొన్ని కుక్కీలను మీరు ఆటోమేటిక్ ఆప్షన్‌గా సెట్ చేసిన సెర్చ్ ఇంజిన్‌కు పంపుతుంది</translation>
+<translation id="2001148512690747464">ఫాస్ట్ పెయిర్ పరికరాలేవీ <ph name="PRIMARY_EMAIL" />‌కు సేవ్ చేయబడలేదు</translation>
 <translation id="2002109485265116295">నిజ-సమయం</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' డేటాను యాక్టివేట్ చేయడానికి, ముందుగా ఒక Wi-Fi నెట్‌వర్క్‌కు కనెక్ట్ చేయండి</translation>
 <translation id="2004697686368036666">కొన్ని సైట్‌లలోని ఫీచర్‌లు పని చేయకపోవచ్చు</translation>
@@ -1789,6 +1790,7 @@
 <translation id="2642111877055905627">సాకర్ బంతి</translation>
 <translation id="2643698698624765890">విండో మెనూలోని ఎక్స్‌టెన్షన్‌లను క్లిక్ చేయడం ద్వారా మీ ఎక్స్‌టెన్షన్‌లను నిర్వహించండి.</translation>
 <translation id="2645047101481282803">మీ పరికరం <ph name="PROFILE_NAME" /> ద్వారా మేనేజ్ చేయబడుతుంది</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{ఈ పరికరంలో 1 పాస్‌వర్డ్ దిగుమతి చేయబడింది}other{ఈ పరికరంలో {NUM_PASSWORDS} పాస్‌వర్డ్‌లు దిగుమతి చేయబడ్డాయి}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">Base64-ఎన్‌కోడ్ చేసిన ASCII, సర్టిఫికెట్ చైన్</translation>
 <translation id="2652129567809778422">పాస్‌వర్డ్‌ను ఎంచుకోండి</translation>
@@ -2966,6 +2968,7 @@
 <translation id="3789841737615482174">ఇన్‌స్టాల్ చేయి</translation>
 <translation id="3790417903123637354">ఏదో తప్పు జరిగింది. తర్వాత మళ్లీ ప్రయత్నించండి</translation>
 <translation id="379082410132524484">మీ కార్డ్ గడువు ముగిసింది</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> ఎక్స్‌టెన్షన్‌లు</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome మీ కంప్యూటర్‌లో హానికరమైన సాఫ్ట్‌వేర్‌ను కనుగొనలేదు • 1 రోజు క్రితం చెక్ చేయబడింది}other{Chrome మీ కంప్యూటర్‌లో హానికరమైన సాఫ్ట్‌వేర్‌ను కనుగొనలేదు • {NUM_DAYS} రోజుల క్రితం చెక్ చేయబడింది}}</translation>
 <translation id="379500251094592809">సమీప షేరింగ్‌ను ఉపయోగించడానికి, రెండు పరికరాలూ అన్‌లాక్ అయి, దగ్గరగా ఉన్నాయని, వాటిలో బ్లూటూత్ ఆన్ చేసి ఉందని నిర్ధారించుకోండి. మీరు మీ కాంటాక్ట్‌లలో లేని Chromebookతో షేర్ చేస్తుంటే, దానిలో సమీప విజిబిలిటీ ఫీచర్ ఆన్‌లో ఉందని నిర్ధారించుకోండి (సమయాన్ని ఎంచుకోవడం ద్వారా స్టేటస్ ప్రాంతాన్ని తెరిచి, ఆపై సమీప విజిబిలిటీని ఆన్ చేయండి) <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">ఆఫ్ చేయబడి ఉంది</translation>
@@ -4753,6 +4756,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" /> నుండి కుక్కీలు బ్లాక్ చేయబడ్డాయి</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" />కు కనెక్ట్ చేయబడుతోంది</translation>
 <translation id="5543983818738093899">స్థితి కోసం చెక్ చేస్తోంది...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_COUNT" />లో <ph name="DEVICE_INDEX" />వ పరికరం, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">రెండరర్</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{ట్యాబ్‌ను గ్రూప్‌నకు జోడించు}other{ట్యాబ్‌లను గ్రూప్‌నకు జోడించు}}</translation>
 <translation id="5545693483061321551">వివిధ సైట్‌లలో మీ బ్రౌజింగ్ యాక్టివిటీని చూడటానికి సైట్‌లు మీ కుక్కీలను ఉపయోగించలేవు, ఉదాహరణకు, యాడ్‌లను వ్యక్తిగతీకరించడం. కొన్ని సైట్‌లలోని ఫీచర్‌లు పని చేయకపోవచ్చు.</translation>
@@ -5554,6 +5558,7 @@
 <translation id="6333170995003625229">మీ ఈమెయిల్ అడ్రస్ లేదా పాస్‌వర్డ్‌ను వెరిఫై చేయడం సాధ్యం కాలేదు. తిరిగి సైన్ ఇన్ చేయడాన్ని ట్రై చేయండి.</translation>
 <translation id="6335920438823100346">Linuxను ప్రారంభించడానికి, <ph name="MANAGER" />కు మీ డేటాను బ్యాకప్ చేసి, ఈ Chromebookను ఫ్యాక్టరీ సెట్టింగ్‌లకు రీసెట్ చేయాలి.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" />, ADB డీబగ్గింగ్‌ను డిజేబుల్ చేసింది. ఇది మీ <ph name="DEVICE_TYPE" />ను 24 గంటలలో రీసెట్ చేస్తుంది. మీరు ఉంచాలనుకునే ఫైళ్లను బ్యాకప్ చేసుకోండి.</translation>
+<translation id="6338402296920404442"><ph name="FILENAME" />‌ను తొలగించండి, తద్వారా ఈ పరికరాన్ని ఉపయోగించే ఇతర వ్యక్తులు మీ పాస్‌వర్డ్‌లను చూడలేరు.</translation>
 <translation id="6338981933082930623">అన్నీ సైట్‌లు మీకు ఎటువంటి యాడ్‌లనైనా చూపించగలవు</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> కోసం కొత్త ప్రొఫైల్‌ను క్రియేట్ చేయండి</translation>
 <translation id="6340071272923955280">ఇంటర్నెట్ ముద్రణ ప్రోటోకాల్ (IPPS)</translation>
@@ -7623,6 +7628,7 @@
 <translation id="8338952601723052325">డెవలపర్ వెబ్‌సైట్</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> స్థానికంగా నిల్వ చేసిన డేటా</translation>
 <translation id="833986336429795709">ఈ లింక్‌ను తెరవడానికి, ఒక యాప్‌ను ఎంచుకోండి</translation>
+<translation id="8340547030807793004"><ph name="DEVICE" /> కోసం మరిన్ని చర్యలు</translation>
 <translation id="8342221978608739536">ట్రై చేయలేదు</translation>
 <translation id="8342861492835240085">సేకరణను ఎంచుకోండి</translation>
 <translation id="8345848587667658367">మీరు ఇప్పుడు మీ ఫోన్‌లోని ఇటీవలి ఫోటోలు, మీడియా, నోటిఫికేషన్‌లు, ఇంకా యాప్‌లను చూడవచ్చు</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 2e2fd361..fe77377 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -1069,6 +1069,7 @@
 <translation id="1997616988432401742">Sertifikalarınız</translation>
 <translation id="1999115740519098545">Başlangıçta</translation>
 <translation id="2000419248597011803">Adres çubuğundan ve arama kutusundan bazı çerezleri ve aramaları varsayılan arama motorunuza gönderir</translation>
+<translation id="2001148512690747464"><ph name="PRIMARY_EMAIL" /> hesabına kaydedilmiş Hızlı Eşleme cihazı yok</translation>
 <translation id="2002109485265116295">Gerçek zamanlı</translation>
 <translation id="2003130567827682533">"<ph name="NAME" />" veri hizmetini etkinleştirmek için ilk olarak kablosuz bir ağa bağlanın</translation>
 <translation id="2004697686368036666">Bazı sitelerdeki özellikler çalışmayabilir</translation>
@@ -1332,6 +1333,7 @@
 <translation id="2241053333139545397">Çeşitli web sitelerinde verilerinizi okuma ve değiştirme</translation>
 <translation id="2241634353105152135">Sadece bir defa</translation>
 <translation id="2242687258748107519">Dosya Bilgileri</translation>
+<translation id="2245296100676446525">Yer işaretleri, şifreler, geçmiş ve diğer öğelerinizi bu cihazda ve senkronize ettiğiniz cihazlarda görmek için senkronizasyonu açın.</translation>
 <translation id="2245603955208828424">Öğelerdeki harfler arasında gezinmek için ok tuşlarını kullanın</translation>
 <translation id="2246129643805925002"><ph name="DEVICE_TYPE" /> cihazınız, en son özellikleri ve güvenlik iyileştirmelerini almanız için arka planda otomatik olarak güncellenir. Güncelleme tercihlerini Ayarlar'da inceleyebilirsiniz.</translation>
 <translation id="2246549592927364792">Google'dan resim açıklamaları alınsın mı?</translation>
@@ -1772,6 +1774,7 @@
 <translation id="2642111877055905627">Futbol topu</translation>
 <translation id="2643698698624765890">Pencere menüsünden Uzantılar'ı tıklayarak uzantılarınızı yönetin.</translation>
 <translation id="2645047101481282803">Cihazınız <ph name="PROFILE_NAME" /> tarafından yönetiliyor</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 şifre bu cihaza aktarıldı.}other{{NUM_PASSWORDS} şifre bu cihaza aktarıldı.}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">Base64 kodlu ASCII, sertifika zinciri</translation>
 <translation id="2652129567809778422">Şifre'yi seçin</translation>
@@ -2949,6 +2952,7 @@
 <translation id="3789841737615482174">Yükle</translation>
 <translation id="3790417903123637354">Bir sorun oldu. Daha sonra tekrar deneyin</translation>
 <translation id="379082410132524484">Kartınızın süresi doldu</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> uzantı</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome, bilgisayarınızda zararlı yazılım bulamadı • 1 gün önce kontrol edildi}other{Chrome, bilgisayarınızda zararlı yazılım bulamadı • {NUM_DAYS} gün önce kontrol edildi}}</translation>
 <translation id="379500251094592809">Yakındakilerle Paylaş özelliğini kullanmak için her iki cihazın da kilidinin açık ve birbirine yakın olduğundan, ayrıca Bluetooth ayarlarının etkin olduğundan emin olun. Kişi listenizde yer almayan bir Chromebook ile paylaşımda bulunuyorsanız Yakındakiler görünürlüğünün açık olduğundan emin olun (saati seçerek durum alanını açtıktan sonra Yakındakiler görünürlüğünü açık hale getirin). <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Kapalı</translation>
@@ -4735,6 +4739,7 @@
 <translation id="5542750926112347543"><ph name="DOMAIN" /> tarafından gönderilen çerezler engellendi</translation>
 <translation id="5542949973455282971"><ph name="CARRIER_NAME" /> operatörüne bağlanılıyor</translation>
 <translation id="5543983818738093899">Durum kontrol ediliyor...</translation>
+<translation id="5544482392629385159"><ph name="DEVICE_COUNT" /> cihazdan <ph name="DEVICE_INDEX" />. sıradaki cihaz, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Oluşturucu</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Sekmeyi gruba ekle}other{Sekmeleri gruba ekle}}</translation>
 <translation id="5545693483061321551">Siteler, örneğin reklamları kişiselleştirmek amacıyla farklı sitelerde tarama etkinliğinizi görmek için çerezlerinizi kullanamaz. Bazı sitelerdeki özellikler çalışmayabilir.</translation>
@@ -5537,6 +5542,7 @@
 <translation id="6333170995003625229">E-posta adresiniz veya şifreniz doğrulanamadı. Tekrar oturum açmayı deneyin.</translation>
 <translation id="6335920438823100346"><ph name="MANAGER" />, Linux'u başlatmak için verilerinizi yedekleyip bu Chromebook'u fabrika ayarlarına sıfırlamanızı zorunlu tutuyor.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" />, ADB hata ayıklama işlevini devre dışı bıraktı. Bu işlem, 24 saat içinde <ph name="DEVICE_TYPE" /> cihazınızı sıfırlar. Saklamak istediğiniz dosyaları yedekleyin.</translation>
+<translation id="6338402296920404442">Bu cihazı kullanan diğer kişilerin şifrelerinizi görmemesi için <ph name="FILENAME" /> dosyasını silebilirsiniz.</translation>
 <translation id="6338981933082930623">Tüm siteler her reklamı gösterebilir</translation>
 <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> için yeni profil oluştur</translation>
 <translation id="6340071272923955280">İnternet Yazdırma Protokolü (IPPS)</translation>
@@ -7609,6 +7615,7 @@
 <translation id="8338952601723052325">Geliştirici web sitesi</translation>
 <translation id="8339059274628563283">Yerel olarak depolanan <ph name="SITE" /> verileri</translation>
 <translation id="833986336429795709">Bu bağlantıyı açmak için bir uygulama seçin</translation>
+<translation id="8340547030807793004"><ph name="DEVICE" /> ile ilgili diğer işlemler</translation>
 <translation id="8342221978608739536">Denemedim</translation>
 <translation id="8342861492835240085">Koleksiyon seçin</translation>
 <translation id="8345848587667658367">Artık telefonunuzdaki son fotoğrafları, medya içeriklerini, bildirimleri ve uygulamaları görüntüleyebilirsiniz</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 9bf7f12..5ca8fab 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -4226,7 +4226,6 @@
 <translation id="5026874946691314267">اسے دوبارہ نہ دکھائیں</translation>
 <translation id="5027550639139316293">ای میل سرٹیفکیٹ</translation>
 <translation id="5027562294707732951">ایکسٹینشن شامل کریں</translation>
-<translation id="5028202297152853903">‏<ph name="DEVICE" /> کو <ph name="PRIMARY_EMAIL" /> سے ہٹا دیا جائے گا اور اس Chromebook کے ساتھ اس کا جوڑا ختم کر دیا جائے گا۔</translation>
 <translation id="5029568752722684782">کاپی صاف کریں</translation>
 <translation id="5029873138381728058">‏VMs چیک کرنے میں ناکام</translation>
 <translation id="503155457707535043">ایپس ڈاؤن لوڈ ہو رہی ہیں</translation>
@@ -6500,7 +6499,6 @@
 <translation id="7280877790564589615">اجازت کی درخواست کی گئی</translation>
 <translation id="7282547042039404307">ہموار</translation>
 <translation id="7282992757463864530">معلومات بار</translation>
-<translation id="728334460283296316">آلہ ہٹائیں</translation>
 <translation id="7283555985781738399">مہمان وضع</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{یہ آلہ 1 دن کے لیے محفوظ رہے گا اور آپ اگلی بار بغیر کوڈ کے منسلک ہو سکتے ہیں۔ اس کو آپ کے منتظم نے سیٹ کیا ہے۔}other{یہ آلہ {DAYS} دن کے لیے محفوظ رہے گا اور آپ اگلی بار بغیر کوڈ کے منسلک ہو سکتے ہیں۔ اس کو آپ کے منتظم نے سیٹ کیا ہے۔}}</translation>
 <translation id="7284411326658527427">ہر شخص اپنے اکاؤنٹ کو ذاتی نوعیت کا بنا اور ڈیٹا کو نجی رکھ سکتا ہے۔</translation>
@@ -7795,8 +7793,6 @@
 <translation id="8531701051932785007">بہتر کردہ محفوظ براؤزنگ آف ہے</translation>
 <translation id="8534656636775144800">افوہ!  ڈومین میں شامل ہونے کی کوشش کرتے وقت کچھ غلط ہو گیا۔ براہ کرم دوبارہ کوشش کریں۔</translation>
 <translation id="8535005006684281994">‏Netscape سرٹیفیکیٹ تجدید URL</translation>
-<translation id="8536565869707961418"><ph name="PRIMARY_EMAIL" /> سے <ph name="DEVICE" /> کو ہٹائیں۔
-    آلہ اب بھی مقامی طور پر استعمال کیا جا سکتا ہے۔</translation>
 <translation id="8536713137312218707">فوری ہدایات</translation>
 <translation id="8536956381488731905">کلید دبانے پر آواز</translation>
 <translation id="8539727552378197395">‏کوئی (HttpOnly) نہیں ہے</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 0ae7130..53c1b7d 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -4227,7 +4227,6 @@
 <translation id="5026874946691314267">Bu xabar boshqa ko‘rsatilmasin</translation>
 <translation id="5027550639139316293">Email sertifikati</translation>
 <translation id="5027562294707732951">Kengaytmani o‘rnatish</translation>
-<translation id="5028202297152853903"><ph name="DEVICE" /> qurilmasi <ph name="PRIMARY_EMAIL" /> hisobidan olib tashlanadi va bu Chromebookdan uziladi.</translation>
 <translation id="5029568752722684782">Nusxani o‘chirib tashlash</translation>
 <translation id="5029873138381728058">VM tekshirilmadi</translation>
 <translation id="503155457707535043">Ilovalar yuklab olinishi</translation>
@@ -6502,7 +6501,6 @@
 <translation id="7280877790564589615">Ruxsat so‘ralmoqda</translation>
 <translation id="7282547042039404307">Ravon</translation>
 <translation id="7282992757463864530">Axborot paneli</translation>
-<translation id="728334460283296316">Qurilmani olib tashlash</translation>
 <translation id="7283555985781738399">Mehmon rejimi</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{Bu qurilma 1 kun davomida saqlanadi va unga keyingi safar kodsiz ulanish mumkin. Bu administrator tomonidan sozlangan.}other{Bu qurilma {DAYS} kun davomida saqlanadi va unga keyingi safar kodsiz ulanish mumkin. Bu administrator tomonidan sozlangan.}}</translation>
 <translation id="7284411326658527427">Har bir odamning hisobi alohida moslashtiriladi va ularning maʼlumotlari xavfsiz saqlanadi.</translation>
@@ -7797,8 +7795,6 @@
 <translation id="8531701051932785007">Saytlarni kuchaytirilgan rejimda xavfsiz kezish faolsizlantirildi</translation>
 <translation id="8534656636775144800">Domenga ulanishda xatolik yuz berdi. Qaytadan urining.</translation>
 <translation id="8535005006684281994">Netscape sertifikatini yangilash URL manzili</translation>
-<translation id="8536565869707961418"><ph name="DEVICE" /> qurilmasini <ph name="PRIMARY_EMAIL" /> hisobidan olib tashlash.
-    Qurilma faqat mahalliy ishlatilishi mumkin.</translation>
 <translation id="8536713137312218707">Tezkor buyruqlar</translation>
 <translation id="8536956381488731905">Tugmalar tovushi</translation>
 <translation id="8539727552378197395">Yo‘q (HttpOnly)</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 19ed94ca..94348f4 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -1081,6 +1081,7 @@
 <translation id="1997616988432401742">Chứng chỉ của bạn</translation>
 <translation id="1999115740519098545">Khi khởi động</translation>
 <translation id="2000419248597011803">Gửi một số cookie và nội dung tìm kiếm từ thanh địa chỉ cũng như hộp tìm kiếm tới công cụ tìm kiếm mặc định</translation>
+<translation id="2001148512690747464">Chưa có thiết bị Ghép nối nhanh nào được lưu vào <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="2002109485265116295">Thời gian thực</translation>
 <translation id="2003130567827682533">Để kích hoạt dữ liệu '<ph name="NAME" />', trước tiên hãy kết nối mạng Wi-Fi</translation>
 <translation id="2004697686368036666">Các tính năng trên một số trang web có thể không hoạt động</translation>
@@ -1345,6 +1346,7 @@
 <translation id="2241053333139545397">Đọc và thay đổi dữ liệu của bạn trên một số trang web</translation>
 <translation id="2241634353105152135">Chỉ một lần</translation>
 <translation id="2242687258748107519">Thông tin tệp</translation>
+<translation id="2245296100676446525">Bật tính năng đồng bộ hoá để dùng dấu trang, mật khẩu, nhật ký và nhiều nội dung khác trên thiết bị này cũng như mọi thiết bị khác mà bạn đồng bộ hoá.</translation>
 <translation id="2245603955208828424">Nhấn các phím mũi tên để di chuyển qua từng mục theo chữ cái</translation>
 <translation id="2246129643805925002"><ph name="DEVICE_TYPE" /> của bạn tự động cập nhật ở chế độ nền để đem đến cho bạn những cải tiến về khả năng bảo mật và tính năng mới nhất. Bạn có thể xem xét các lựa chọn ưu tiên về bản cập nhật trong phần Cài đặt.</translation>
 <translation id="2246549592927364792">Lấy nội dung mô tả hình ảnh từ Google?</translation>
@@ -1789,6 +1791,7 @@
 <translation id="2642111877055905627">Bóng đá</translation>
 <translation id="2643698698624765890">Quản lý tiện ích của bạn bằng cách nhấp vào Tiện ích trong menu Cửa sổ.</translation>
 <translation id="2645047101481282803">Thiết bị của bạn do <ph name="PROFILE_NAME" /> quản lý</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{Đã nhập 1 mật khẩu vào thiết bị này}other{Đã nhập {NUM_PASSWORDS} mật khẩu vào thiết bị này}}</translation>
 <translation id="2645435784669275700">ChromeOS</translation>
 <translation id="2649045351178520408">ASCII được mã hóa base64, chuỗi chứng chỉ</translation>
 <translation id="2652129567809778422">Chọn mật khẩu</translation>
@@ -2966,6 +2969,7 @@
 <translation id="3789841737615482174">Cài đặt</translation>
 <translation id="3790417903123637354">Đã xảy ra lỗi. Hãy thử lại sau</translation>
 <translation id="379082410132524484">Thẻ của bạn đã hết hạn</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> tiện ích</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome không tìm thấy phần mềm gây hại trên máy tính của bạn • Đã kiểm tra 1 ngày trước}other{Chrome không tìm thấy phần mềm gây hại trên máy tính của bạn • Đã kiểm tra {NUM_DAYS} ngày trước}}</translation>
 <translation id="379500251094592809">Để dùng tính năng Chia sẻ lân cận, hãy đảm bảo cả hai thiết bị đã mở khóa, ở gần nhau và đã bật Bluetooth. Nếu bạn đang chia sẻ với một thiết bị Chromebook không có trong danh bạ của mình, hãy đảm bảo thiết bị này đã bật Chế độ hiển thị lân cận (mở khu vực trạng thái bằng cách chọn giờ, sau đó bật tính năng Chế độ hiển thị lân cận) <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Đang tắt</translation>
@@ -4753,6 +4757,7 @@
 <translation id="5542750926112347543">Đã chặn cookie từ <ph name="DOMAIN" /></translation>
 <translation id="5542949973455282971">Đang kết nối với <ph name="CARRIER_NAME" /></translation>
 <translation id="5543983818738093899">Đang kiểm tra trạng thái...</translation>
+<translation id="5544482392629385159">Thiết bị <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Trình kết xuất</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Thêm thẻ vào nhóm}other{Thêm các thẻ vào nhóm}}</translation>
 <translation id="5545693483061321551">Các trang web không thể dùng cookie để giám sát hoạt động duyệt web của bạn trên nhiều trang web, chẳng hạn như để điều chỉnh quảng cáo cho phù hợp với bạn. Các tính năng trên một số trang web có thể không hoạt động.</translation>
@@ -5554,6 +5559,7 @@
 <translation id="6333170995003625229">Không xác minh được địa chỉ email hoặc mật khẩu của bạn. Hãy thử đăng nhập lại.</translation>
 <translation id="6335920438823100346">Để khởi động Linux, <ph name="MANAGER" /> yêu cầu bạn sao lưu dữ liệu và đặt lại thiết bị Chromebook này về trạng thái cài đặt ban đầu.</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> đã tắt tùy chọn gỡ lỗi ADB. Thao tác này sẽ đặt lại <ph name="DEVICE_TYPE" /> của bạn sau 24 giờ nữa. Hãy sao lưu mọi tệp bạn muốn giữ lại.</translation>
+<translation id="6338402296920404442">Bạn nên xoá <ph name="FILENAME" /> để những người khác dùng thiết bị này không xem được mật khẩu của bạn.</translation>
 <translation id="6338981933082930623">Mọi trang web đều có thể hiển thị quảng cáo bất kỳ cho bạn</translation>
 <translation id="6339668969738228384">Tạo hồ sơ mới cho <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="6340071272923955280">Giao thức in qua Internet (IPPS)</translation>
@@ -7627,6 +7633,7 @@
 <translation id="8338952601723052325">Trang web dành cho nhà phát triển</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> đã lưu trữ dữ liệu cục bộ</translation>
 <translation id="833986336429795709">Để mở đường liên kết này, hãy chọn một ứng dụng</translation>
+<translation id="8340547030807793004">Thao tác khác cho <ph name="DEVICE" /></translation>
 <translation id="8342221978608739536">Chưa thử</translation>
 <translation id="8342861492835240085">Chọn một bộ sưu tập</translation>
 <translation id="8345848587667658367">Giờ đây, bạn có thể xem ứng dụng, thông báo, nội dung nghe nhìn và ảnh gần đây có trên điện thoại của mình.</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 5ea217c..c1efd9ef 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -3493,7 +3493,7 @@
 <translation id="431076611119798497">详细信息(&amp;D)</translation>
 <translation id="4312701113286993760">{COUNT,plural, =1{1 个 Google 帐号}other{<ph name="EXTRA_ACCOUNTS" /> 个 Google 帐号}}</translation>
 <translation id="4312866146174492540">屏蔽(默认)</translation>
-<translation id="4314497418046265427">通过将手机连接到 <ph name="DEVICE_TYPE" /> 提高工作效率</translation>
+<translation id="4314497418046265427">将手机连接到 <ph name="DEVICE_TYPE" />,可提高工作效率</translation>
 <translation id="4314815835985389558">管理同步数据</translation>
 <translation id="4315933848520197627">解除帐号关联</translation>
 <translation id="4316850752623536204">开发者网站</translation>
@@ -7598,7 +7598,7 @@
 <translation id="833986336429795709">要打开此链接,请选择一个应用</translation>
 <translation id="8342221978608739536">没试过</translation>
 <translation id="8342861492835240085">选择一个集合</translation>
-<translation id="8345848587667658367">您现在可以查看手机中的近期照片、媒体、通知和应用</translation>
+<translation id="8345848587667658367">您现在可以查看手机中近期的照片、媒体、通知和应用</translation>
 <translation id="8347227221149377169">打印任务</translation>
 <translation id="834785183489258869">不过,在无痕模式下,网站无法使用 Cookie 查看您在各个不同网站上的浏览活动,因而无法实现某些功能或目的(例如为您展示个性化广告)。某些网站上的功能可能无法正常运行。</translation>
 <translation id="8350789879725387295">在 Dock 中显示触控笔工具</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index 0392cc76..8b489cb 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -905,6 +905,7 @@
 <translation id="1829129547161959350">企鵝</translation>
 <translation id="1829192082282182671">縮小(&amp;O)</translation>
 <translation id="1830550083491357902">未登入</translation>
+<translation id="1831848493690504725">我們無法透過已連線的網絡連接 Google。請嘗試選取其他網絡,或檢查網絡設定或 Proxy 設定 (如有使用 Proxy)。</translation>
 <translation id="1832459821645506983">是,我同意使用</translation>
 <translation id="1832511806131704864">手機變更內容已更新</translation>
 <translation id="1832848789136765277">為確保您可隨時存取同步資料,請驗證您的身分</translation>
@@ -4240,7 +4241,6 @@
 <translation id="5026874946691314267">不要再顯示這則通知</translation>
 <translation id="5027550639139316293">電郵憑證</translation>
 <translation id="5027562294707732951">新增擴充程式</translation>
-<translation id="5028202297152853903">「<ph name="DEVICE" />」將會由 <ph name="PRIMARY_EMAIL" /> 移除,並與此 Chromebook 取消配對。</translation>
 <translation id="5029568752722684782">清除副本</translation>
 <translation id="5029873138381728058">無法檢查虛擬機器</translation>
 <translation id="503155457707535043">正在下載應用程式</translation>
@@ -4752,6 +4752,7 @@
 <translation id="5533001281916885985"><ph name="SITE_NAME" />要求以下權限:</translation>
 <translation id="5534304873398226603">捨棄相片或影片</translation>
 <translation id="5537725057119320332">投放</translation>
+<translation id="5539070192556911367">無法連接 Google</translation>
 <translation id="5539221284352502426">伺服器已拒絕您輸入的密碼。原因可能包括:密碼太短、密碼必須包含數字或符號、新舊密碼必須有所不同。</translation>
 <translation id="5541694225089836610">您的管理員已停用此操作</translation>
 <translation id="5542132724887566711">設定檔</translation>
@@ -4815,6 +4816,7 @@
 <translation id="5585912436068747822">無法格式化</translation>
 <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation>
 <translation id="558918721941304263">正在載入應用程式…</translation>
+<translation id="5590418976913374224">在裝置啟動時播放音效</translation>
 <translation id="5592595402373377407">目前還沒有足夠的數據。</translation>
 <translation id="5595307023264033512">網站使用的總儲存空間:<ph name="TOTAL_USAGE" /></translation>
 <translation id="5595485650161345191">編輯地址</translation>
@@ -6357,6 +6359,7 @@
 <translation id="7102687220333134671">已開啟自動更新功能</translation>
 <translation id="7102832101143475489">要求逾時</translation>
 <translation id="710640343305609397">開啟網絡設定</translation>
+<translation id="7107609441453408294">透過所有喇叭播放相同的音效</translation>
 <translation id="7108338896283013870">隱藏</translation>
 <translation id="7108668606237948702">Enter 鍵</translation>
 <translation id="7108933416628942903">立即鎖定</translation>
@@ -6513,7 +6516,6 @@
 <translation id="7280877790564589615">已要求許可</translation>
 <translation id="7282547042039404307">流暢</translation>
 <translation id="7282992757463864530">資料列</translation>
-<translation id="728334460283296316">移除裝置</translation>
 <translation id="7283555985781738399">訪客模式</translation>
 <translation id="7284307451964417957">{DAYS,plural, =1{系統會記住此裝置,在 1 天內無需輸入驗證碼即可再次連接。此設定由管理員設定。}other{系統會記住此裝置,在 {DAYS} 天內無需輸入驗證碼即可再次連接。此設定由管理員設定。}}</translation>
 <translation id="7284411326658527427">每位使用者都可將帳戶個人化,以確保資料私隱。</translation>
@@ -6589,6 +6591,7 @@
 <translation id="7364745943115323529">投放…</translation>
 <translation id="7364796246159120393">選擇檔案</translation>
 <translation id="7365076891350562061">顯示器大小</translation>
+<translation id="7365995455115045224"><ph name="WINDOW_TITLE" /> - 固定咗</translation>
 <translation id="7366316827772164604">正在掃瞄附近的裝置…</translation>
 <translation id="7366415735885268578">新增網站</translation>
 <translation id="7366909168761621528">瀏覽資料</translation>
@@ -7810,8 +7813,6 @@
 <translation id="8531701051932785007">「強化安全瀏覽」功能已關閉</translation>
 <translation id="8534656636775144800">抱歉!嘗試加入網域時發生錯誤,請再試一次。</translation>
 <translation id="8535005006684281994">Netscape 憑證更新網址</translation>
-<translation id="8536565869707961418">從 <ph name="PRIMARY_EMAIL" /> 移除「<ph name="DEVICE" />」。
-    裝置仍可在本機使用。</translation>
 <translation id="8536713137312218707">快速指令</translation>
 <translation id="8536956381488731905">按鍵音效</translation>
 <translation id="8539727552378197395">否 (限 Http)</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 5622196..b95485be 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -1069,6 +1069,7 @@
 <translation id="1997616988432401742">您的憑證</translation>
 <translation id="1999115740519098545">起始畫面</translation>
 <translation id="2000419248597011803">將網址列和搜尋框中的部分 Cookie 和搜尋字詞傳送給你的預設搜尋引擎</translation>
+<translation id="2001148512690747464"><ph name="PRIMARY_EMAIL" /> 沒有儲存任何快速配對裝置</translation>
 <translation id="2002109485265116295">即時</translation>
 <translation id="2003130567827682533">如要啟用「<ph name="NAME" />」的數據服務,請先連上 Wi-Fi 網路</translation>
 <translation id="2004697686368036666">某些網站的功能可能無法運作</translation>
@@ -1775,6 +1776,7 @@
 <translation id="2642111877055905627">足球</translation>
 <translation id="2643698698624765890">如要管理擴充功能,只要按一下 [視窗] 選單裡的 [擴充功能] 即可。</translation>
 <translation id="2645047101481282803">你的裝置是由 <ph name="PROFILE_NAME" /> 管理</translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{已將 1 組密碼匯入這部裝置}other{已將 {NUM_PASSWORDS} 組密碼匯入這部裝置}}</translation>
 <translation id="2645435784669275700">Chrome OS</translation>
 <translation id="2649045351178520408">Base64 編碼 ASCII,憑證鏈結</translation>
 <translation id="2652129567809778422">選取密碼</translation>
@@ -2952,6 +2954,7 @@
 <translation id="3789841737615482174">安裝</translation>
 <translation id="3790417903123637354">發生錯誤,請稍後再試</translation>
 <translation id="379082410132524484">你的卡片已過期</translation>
+<translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> 項擴充功能</translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{Chrome 並未在電腦上發現任何有害軟體 • 上次檢查時間:1 天前}other{Chrome 並未在電腦上發現任何有害軟體 • 上次檢查時間:{NUM_DAYS} 天前}}</translation>
 <translation id="379500251094592809">如要使用鄰近分享功能,請確認兩部裝置都已解鎖且彼此相鄰,並已開啟藍牙功能。如果要與未設為聯絡人的 Chromebook 分享內容,請確認該裝置已啟用鄰近分享瀏覽權限 (按一下電腦右下角的時間欄位即可開啟狀態區,再從中啟用鄰近分享瀏覽權限)。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">關閉</translation>
@@ -4737,6 +4740,7 @@
 <translation id="5542750926112347543">系統已封鎖 <ph name="DOMAIN" /> 的 Cookie</translation>
 <translation id="5542949973455282971">正在連線至「<ph name="CARRIER_NAME" />」</translation>
 <translation id="5543983818738093899">正在檢查狀態...</translation>
+<translation id="5544482392629385159">第 <ph name="DEVICE_INDEX" /> 部 <ph name="DEVICE_NAME" /> 裝置 (共 <ph name="DEVICE_COUNT" /> 部)</translation>
 <translation id="554517701842997186">轉譯器</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{將分頁加入群組}other{將分頁加入群組}}</translation>
 <translation id="5545693483061321551">網站無法使用 Cookie 查看你在各網站的瀏覽活動,也無法提供個人化廣告等服務。某些網站的功能可能無法運作。</translation>
@@ -5535,6 +5539,7 @@
 <translation id="6333170995003625229">無法驗證你的電子郵件地址或密碼,請再試一次。</translation>
 <translation id="6335920438823100346"><ph name="MANAGER" /> 要求你備份資料,並將這部 Chromebook 恢復原廠設定,才能啟動 Linux。</translation>
 <translation id="6336038146639916978"><ph name="MANAGER" /> 已停用 ADB 偵錯,這會讓系統在 24 小時後重設 <ph name="DEVICE_TYPE" />。請備份你要保留的檔案。</translation>
+<translation id="6338402296920404442">建議你刪除 <ph name="FILENAME" />,讓這部裝置的其他使用者無法查看你的密碼。</translation>
 <translation id="6338981933082930623">所有網站都可以向你顯示任何廣告</translation>
 <translation id="6339668969738228384">為 <ph name="USER_EMAIL_ADDRESS" /> 建立新的個人資料</translation>
 <translation id="6340071272923955280">網際網路列印通訊協定 (IPPS)</translation>
@@ -7608,6 +7613,7 @@
 <translation id="8338952601723052325">開發人員網站</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> 儲存在本機的資料</translation>
 <translation id="833986336429795709">請選擇要用來開啟這個連結的應用程式</translation>
+<translation id="8340547030807793004">可對 <ph name="DEVICE" /> 執行的其他動作</translation>
 <translation id="8342221978608739536">沒有試過</translation>
 <translation id="8342861492835240085">選取集合</translation>
 <translation id="8345848587667658367">你現在可以查看手機最近的相片、媒體、通知和應用程式</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index 818a9ab0..a879766 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -1080,6 +1080,7 @@
 <translation id="1997616988432401742">Izitifiketi zakho</translation>
 <translation id="1999115740519098545">Ekuqaliseni</translation>
 <translation id="2000419248597011803">Ithumela amakhukhi nosesho kusukela kubha yekheli nebhokisi losesho kunjini yakho yosesho ezenzakalelayo</translation>
+<translation id="2001148512690747464">Awekho amadivayisi Okuhlanganisa Okusheshayo alondolozwe ku-<ph name="PRIMARY_EMAIL" /></translation>
 <translation id="2002109485265116295">Isikhathi sangempela</translation>
 <translation id="2003130567827682533">Ukuze usebenzisa idatha '<ph name="NAME" />', qala ngokuxhuma kunethiwekhi ye-Wi-Fi</translation>
 <translation id="2004697686368036666">Izakhi ezikwamanye amasayithi zingase zingasebenzi</translation>
@@ -1345,6 +1346,7 @@
 <translation id="2241053333139545397">Funda futhi ushintshe idatha yakho kumawebhusayithi ambhalwa</translation>
 <translation id="2241634353105152135">Kanye nje</translation>
 <translation id="2242687258748107519">Ulwazi lwefayela</translation>
+<translation id="2245296100676446525">Vula ukuvumelanisa ukuze uthole amabhukhimakhi akho, amaphasiwedi, umlando, nokunye okwengeziwe kule divayisi nakunoma iyiphi enye indawo ovumelanisa ngayo.</translation>
 <translation id="2245603955208828424">Sebenzisa okhiye bemicibisholo ukuhamba phakathi kwezinto uhlamvu nohlamvu</translation>
 <translation id="2246129643805925002">I-<ph name="DEVICE_TYPE" /> yakho iyazibuyekeza ngokuzenzakalelayo ngemuva ukuze ikunikeze izakhi zakamuva nokuthuthukiswa kokuvikeleka. Ungabuyekeza okuncamelayo kokubuyekeza Kumasethingi.</translation>
 <translation id="2246549592927364792">Thola izincazelo zesithombe kusuka ku-Google?</translation>
@@ -1790,6 +1792,7 @@
 <translation id="2642111877055905627">Ibhola lebhola</translation>
 <translation id="2643698698624765890">Phatha izandiso zakho ngokuchofoza izandiso kumenyu yewindi.</translation>
 <translation id="2645047101481282803">Idivayisi yakho iphethwe yi-<ph name="PROFILE_NAME" /></translation>
+<translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{Iphasiwedi e-1 engeniswe kule divayisi}one{Amaphasiwedi angu-{NUM_PASSWORDS} angeniswe kule divayisi}other{Amaphasiwedi angu-{NUM_PASSWORDS} angeniswe kule divayisi}}</translation>
 <translation id="2645435784669275700">I-ChromeOS</translation>
 <translation id="2649045351178520408">I-Base64-encoded ASCII, uchungechunge lwesitifiketi</translation>
 <translation id="2652129567809778422">Khetha iphasiwedi</translation>
@@ -2967,6 +2970,7 @@
 <translation id="3789841737615482174">Faka</translation>
 <translation id="3790417903123637354">Okuthile akuhambanga kahle. Zama futhi emuva kwesikhathi</translation>
 <translation id="379082410132524484">Ikhadi lakho liphelelwe isikhathi</translation>
+<translation id="3792973596468118484">Izandiso ezingu-<ph name="NUM_EXTENSIONS" /></translation>
 <translation id="3793588272211751505">{NUM_DAYS,plural, =1{I-Chrome ayitholanga isofthiwe enobungozi kukhompuyutha yakho • Ihlolwe osukwini olu-1 olwedlule}one{I-Chrome ayitholanga isofthiwe enobungozi kukhompuyutha yakho • Ihlolwe ezinsukwini ezingu-{NUM_DAYS} ezedlule}other{I-Chrome ayitholanga isofthiwe enobungozi kukhompuyutha yakho • Ihlolwe ezinsukwini ezingu-{NUM_DAYS} ezedlule}}</translation>
 <translation id="379500251094592809">Ukuze usebenzise Ukuthumela Eduze, qiniseka ukuthi womabili amadivayisi avuliwe, asondelene, bese uvule i-Bluetooth. Uma wabelana ne-Chromebook engekho koxhumana nabo, qiniseka ukuthi ukubonakala Eduze kuvuliwe kuyo (vula indawo yesimo ngokukhetha isikhathi, bese uvula ukubonakala Eduze) <ph name="LINK_BEGIN" />Funda kabanzi<ph name="LINK_END" /></translation>
 <translation id="379509625511193653">Valiwe</translation>
@@ -4755,6 +4759,7 @@
 <translation id="5542750926112347543">Amakhukhi asuka ku-<ph name="DOMAIN" /> avinjiwe</translation>
 <translation id="5542949973455282971">Ixhumeka ku-<ph name="CARRIER_NAME" /></translation>
 <translation id="5543983818738093899">Ihlola isimo...</translation>
+<translation id="5544482392629385159">Idivayisi ye-<ph name="DEVICE_INDEX" /> kwangu-<ph name="DEVICE_COUNT" />, e-<ph name="DEVICE_NAME" /></translation>
 <translation id="554517701842997186">Isinikezeli</translation>
 <translation id="5545335608717746497">{NUM_TABS,plural, =1{Engeza ithebhu eqenjini}one{Engeza amathebhu eqenjini}other{Engeza amathebhu eqenjini}}</translation>
 <translation id="5545693483061321551">Amasayithi awakwazi ukusebenzisa amakhukhi akho ukubona umsebenzi wakho wokuphequlula kumasayithi ahlukahlukene, ngokwesibonelo, ukwenza izikhangiso ngokwezifiso. Izakhi ezikwamanye amasayithi zingase zingasebenzi.</translation>
@@ -5557,6 +5562,7 @@
 <translation id="6333170995003625229">Ikheli le-imeyili yakho noma iphasiwedi ayiqinisekiswanga. Zama ukuphinda ungene ngemvume.</translation>
 <translation id="6335920438823100346">Ukuze uqalise i-Linux, i-<ph name="MANAGER" /> idinga ukuba wenza isipele kudatha yakho bese usethe kabusha le-Chromebook kuzilungiselelo zasekuqaleni.</translation>
 <translation id="6336038146639916978">I-<ph name="MANAGER" /> ikhubaze ukulungisa amaphutha e-ADB. Lokhu kuzosetha kabusha i-<ph name="DEVICE_TYPE" /> yakho emahoreni angu-24. Yenza ikhophi yasenqolobaneni noma yimaphi amafayela ongathanda ukuwagcina.</translation>
+<translation id="6338402296920404442">Cabangela ukususa i-<ph name="FILENAME" />, ukuze abanye abasebenzisa le divayisi bangakwazi ukubona amaphasiwedi akho.</translation>
 <translation id="6338981933082930623">Wonke amasayithi angabonisa noma iziphi izikhangiso kuwe</translation>
 <translation id="6339668969738228384">Dala iphrofayela entsha ye-<ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="6340071272923955280">I-Internet Printing Protocol (IPPS)</translation>
@@ -7630,6 +7636,7 @@
 <translation id="8338952601723052325">Iwebhusayithi yonjiniyela</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> idatha egcinwe endaweni</translation>
 <translation id="833986336429795709">Ukuze uvule lesi sixhumanisi, khetha uhlelo lokusebenza</translation>
+<translation id="8340547030807793004">Izenzo ezengeziwe ze-<ph name="DEVICE" /></translation>
 <translation id="8342221978608739536">Ayizamanga</translation>
 <translation id="8342861492835240085">Khetha iqoqo</translation>
 <translation id="8345848587667658367">Manje usungabuka izithombe zefoni yakho zakamuva, imidiya, izaziso, nama-app</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index 6f1c991..b7c58d2 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -824,6 +824,31 @@
   <message name="IDS_SETTINGS_TRUSTED_VAULT_BANNER_SUB_LABEL_OPTED_IN" desc="Sub-label for the on-device encryption banner in settings, when the user is already opted in.">
     Your passwords are encrypted on your device before they‘re saved to Google Password Manager
   </message>
+
+  <if expr="is_win">
+    <message name="IDS_AUTOFILL_MANAGE_PASSKEYS_LABEL" desc="The label on a button that a user can click in order to see and delete passkeys saved on their computer. For consistency, the word 'passkey' is in the glossery with translations already suggested.">
+      Manage passkeys
+    </message>
+    <message name="IDS_AUTOFILL_MANAGE_PASSKEYS_NO_SUPPORT"  desc="An error message that appears when the user's version of Microsoft Windows is too old and doesn't support managing passkeys. For consistency, the word 'passkey' is in the glossery with translations already suggested">
+      To manage passkeys, use a newer version of Windows
+    </message>
+    <message name="IDS_AUTOFILL_MANAGE_PASSKEYS_TITLE" desc="The title on a page where the user can see and delete passkeys saved on their computer. For consistency, the word 'passkey' is in the glossery with translations already suggested.">
+      Passkeys
+    </message>
+    <message name="IDS_AUTOFILL_MANAGE_PASSKEYS_SUB_TITLE" desc="A warning on a page where the user can see and delete passkeys saved on their computer. It communicates that the passkeys shown are stored in Windows Hello, which is a Microsoft product name, and not in the user's Google account. For consistency, the word 'passkey' is in the glossery with translations already suggested.">
+      These passkeys are stored in Windows Hello on this computer. They aren't saved to your Google Account.
+    </message>
+    <message name="IDS_AUTOFILL_MANAGE_PASSKEYS_SEARCH" desc="The label on a field that a user can use to search within a list of passkeys. For consistency, the word 'passkey' is in the glossery with translations already suggested.">
+      Search passkeys
+    </message>
+    <message name="IDS_AUTOFILL_MANAGE_PASSKEYS_CANNOT_DELETE_TITLE" desc="The title of a dialog shown when Chromium fails to delete a passkey. For consistency, the word 'passkey' is in the glossery with translations already suggested.">
+      Can't delete passkey
+    </message>
+    <message name="IDS_AUTOFILL_MANAGE_PASSKEYS_CANNOT_DELETE_BODY" desc="The body of a dialog that explains that we cannot delete certain passkeys on Windows which are involved when the user signs into the Windows computer itself. For consistency, the word 'passkey' is in the glossery with translations already suggested.">
+      You need this passkey to sign in to your computer
+    </message>
+  </if>
+
   <message name="IDS_SETTINGS_PASSWORD_SHOW_PASSWORD_A11Y" desc="The ARIA (accessibility) message for the 'Show Password' button, which sits in every row of the password list. For this row does not include a password, only information of the account. Reveals password when clicked.">
     Show password for <ph name="USERNAME">$1<ex>example@gmail.com</ex></ph> on <ph name="DOMAIN">$2<ex>www.google.com</ex></ph>
   </message>
diff --git a/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_CANNOT_DELETE_BODY.png.sha1 b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_CANNOT_DELETE_BODY.png.sha1
new file mode 100644
index 0000000..4fa15823
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_CANNOT_DELETE_BODY.png.sha1
@@ -0,0 +1 @@
+1f0db647e8ea5e1a729778fd2e6c15b6bd59fae4
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_CANNOT_DELETE_TITLE.png.sha1 b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_CANNOT_DELETE_TITLE.png.sha1
new file mode 100644
index 0000000..4fa15823
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_CANNOT_DELETE_TITLE.png.sha1
@@ -0,0 +1 @@
+1f0db647e8ea5e1a729778fd2e6c15b6bd59fae4
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_LABEL.png.sha1
new file mode 100644
index 0000000..fa47df94
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_LABEL.png.sha1
@@ -0,0 +1 @@
+02fc07835dece8fb6f86ed535207bacead41e9a1
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_NO_SUPPORT.png.sha1 b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_NO_SUPPORT.png.sha1
new file mode 100644
index 0000000..84f8f794
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_NO_SUPPORT.png.sha1
@@ -0,0 +1 @@
+2c0500ed9fcd68b441e6dfd70a03242becb6c883
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_SEARCH.png.sha1 b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_SEARCH.png.sha1
new file mode 100644
index 0000000..811ef2a
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_SEARCH.png.sha1
@@ -0,0 +1 @@
+e9ca7fc2617ec0d91272e0f5dbb16bd58f387b8a
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_SUB_TITLE.png.sha1 b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_SUB_TITLE.png.sha1
new file mode 100644
index 0000000..811ef2a
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_SUB_TITLE.png.sha1
@@ -0,0 +1 @@
+e9ca7fc2617ec0d91272e0f5dbb16bd58f387b8a
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_TITLE.png.sha1 b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_TITLE.png.sha1
new file mode 100644
index 0000000..811ef2a
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_AUTOFILL_MANAGE_PASSKEYS_TITLE.png.sha1
@@ -0,0 +1 @@
+e9ca7fc2617ec0d91272e0f5dbb16bd58f387b8a
\ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 85d092c..2c45bad 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1573,6 +1573,8 @@
     "sharing/ack_message_handler.h",
     "sharing/features.cc",
     "sharing/features.h",
+    "sharing/optimization_guide/optimization_guide_message_handler.cc",
+    "sharing/optimization_guide/optimization_guide_message_handler.h",
     "sharing/ping_message_handler.cc",
     "sharing/ping_message_handler.h",
     "sharing/shared_clipboard/remote_copy_handle_message_result.h",
@@ -3225,8 +3227,6 @@
       "sessions/session_restore_android.cc",
       "sharing/click_to_call/click_to_call_message_handler_android.cc",
       "sharing/click_to_call/click_to_call_message_handler_android.h",
-      "sharing/optimization_guide/optimization_guide_message_handler.cc",
-      "sharing/optimization_guide/optimization_guide_message_handler.h",
       "sharing/shared_clipboard/shared_clipboard_message_handler_android.cc",
       "sharing/shared_clipboard/shared_clipboard_message_handler_android.h",
       "sharing/sharing_service_proxy_android.cc",
@@ -4019,6 +4019,8 @@
       "notifications/screen_capture_notification_blocker.cc",
       "notifications/screen_capture_notification_blocker.h",
       "obsolete_system/obsolete_system.h",
+      "page_info/about_this_site_side_panel_throttle.cc",
+      "page_info/about_this_site_side_panel_throttle.h",
       "page_load_metrics/observers/session_restore_page_load_metrics_observer.cc",
       "page_load_metrics/observers/session_restore_page_load_metrics_observer.h",
       "password_manager/generated_password_leak_detection_pref.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 411c3c2..c56248f 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -8361,7 +8361,7 @@
      flag_descriptions::kDocumentPictureInPictureApiName,
      flag_descriptions::kDocumentPictureInPictureApiDescription,
      kOsMac | kOsWin | kOsLinux | kOsCrOS,
-     FEATURE_VALUE_TYPE(features::kPictureInPictureV2)},
+     FEATURE_VALUE_TYPE(features::kDocumentPictureInPictureAPI)},
 #endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) ||
         // BUILDFLAG(IS_CHROMEOS_ASH)
 
diff --git a/chrome/browser/apps/app_service/app_service_proxy_base.cc b/chrome/browser/apps/app_service/app_service_proxy_base.cc
index 3196c5f..725c92b 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_base.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy_base.cc
@@ -329,6 +329,41 @@
 void AppServiceProxyBase::LaunchAppWithFiles(
     const std::string& app_id,
     int32_t event_flags,
+    LaunchSource launch_source,
+    std::vector<base::FilePath> file_paths) {
+  app_registry_cache_.ForOneApp(
+      app_id, [this, event_flags, launch_source,
+               &file_paths](const apps::AppUpdate& update) {
+        auto* publisher = GetPublisher(update.AppType());
+        if (!publisher) {
+          return;
+        }
+
+        if (MaybeShowLaunchPreventionDialog(update)) {
+          return;
+        }
+
+        RecordAppPlatformMetrics(profile_, update, launch_source,
+                                 LaunchContainer::kLaunchContainerNone);
+
+        // TODO(crbug/1117655): File manager records metrics for apps it
+        // launched. So we only record launches from other places. We should
+        // eventually move those metrics here, after AppService supports all
+        // app types launched by file manager.
+        if (launch_source != LaunchSource::kFromFileManager) {
+          RecordAppLaunch(update.AppId(), launch_source);
+        }
+
+        publisher->LaunchAppWithFiles(update.AppId(), event_flags,
+                                      launch_source, std::move(file_paths));
+
+        PerformPostLaunchTasks(launch_source);
+      });
+}
+
+void AppServiceProxyBase::LaunchAppWithFiles(
+    const std::string& app_id,
+    int32_t event_flags,
     apps::mojom::LaunchSource mojom_launch_source,
     apps::mojom::FilePathsPtr file_paths) {
   if (app_service_.is_connected()) {
diff --git a/chrome/browser/apps/app_service/app_service_proxy_base.h b/chrome/browser/apps/app_service/app_service_proxy_base.h
index 7448b795..f9a12d0 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_base.h
+++ b/chrome/browser/apps/app_service/app_service_proxy_base.h
@@ -154,6 +154,12 @@
   // TODO(crbug.com/1264164): Remove this method.
   void LaunchAppWithFiles(const std::string& app_id,
                           int32_t event_flags,
+                          LaunchSource launch_source,
+                          std::vector<base::FilePath> file_paths);
+  // TODO(crbug.com/1253250): Will be removed soon. Please use the non mojom
+  // interface.
+  void LaunchAppWithFiles(const std::string& app_id,
+                          int32_t event_flags,
                           apps::mojom::LaunchSource launch_source,
                           apps::mojom::FilePathsPtr file_paths);
 
diff --git a/chrome/browser/apps/app_service/app_service_proxy_lacros.cc b/chrome/browser/apps/app_service/app_service_proxy_lacros.cc
index cd7a5214..c07dbe0 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_lacros.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy_lacros.cc
@@ -150,8 +150,8 @@
 void AppServiceProxyLacros::LaunchAppWithFiles(
     const std::string& app_id,
     int32_t event_flags,
-    apps::mojom::LaunchSource launch_source,
-    apps::mojom::FilePathsPtr file_paths) {
+    LaunchSource launch_source,
+    std::vector<base::FilePath> file_paths) {
   if (!remote_crosapi_app_service_proxy_) {
     return;
   }
@@ -165,13 +165,22 @@
     return;
   }
   auto params = CreateCrosapiLaunchParamsWithEventFlags(
-      this, app_id, event_flags,
-      ConvertMojomLaunchSourceToLaunchSource(launch_source),
-      display::kInvalidDisplayId);
-  params->intent = apps_util::CreateCrosapiIntentForViewFiles(file_paths);
+      this, app_id, event_flags, launch_source, display::kInvalidDisplayId);
+  params->intent =
+      apps_util::CreateCrosapiIntentForViewFiles(std::move(file_paths));
   remote_crosapi_app_service_proxy_->Launch(std::move(params));
 }
 
+void AppServiceProxyLacros::LaunchAppWithFiles(
+    const std::string& app_id,
+    int32_t event_flags,
+    apps::mojom::LaunchSource launch_source,
+    apps::mojom::FilePathsPtr file_paths) {
+  LaunchAppWithFiles(app_id, event_flags,
+                     ConvertMojomLaunchSourceToLaunchSource(launch_source),
+                     ConvertMojomFilePathsToFilePaths(std::move(file_paths)));
+}
+
 void AppServiceProxyLacros::LaunchAppWithIntent(const std::string& app_id,
                                                 int32_t event_flags,
                                                 IntentPtr intent,
diff --git a/chrome/browser/apps/app_service/app_service_proxy_lacros.h b/chrome/browser/apps/app_service/app_service_proxy_lacros.h
index e682011..dcf2595 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_lacros.h
+++ b/chrome/browser/apps/app_service/app_service_proxy_lacros.h
@@ -130,6 +130,12 @@
   // TODO(crbug.com/1264164): Remove this method.
   void LaunchAppWithFiles(const std::string& app_id,
                           int32_t event_flags,
+                          LaunchSource launch_source,
+                          std::vector<base::FilePath> file_paths);
+  // TODO(crbug.com/1253250): Will be removed soon. Please use the non mojom
+  // interface.
+  void LaunchAppWithFiles(const std::string& app_id,
+                          int32_t event_flags,
                           apps::mojom::LaunchSource launch_source,
                           apps::mojom::FilePathsPtr file_paths);
 
diff --git a/chrome/browser/apps/platform_apps/app_browsertest.cc b/chrome/browser/apps/platform_apps/app_browsertest.cc
index 62e392f..c9993fe 100644
--- a/chrome/browser/apps/platform_apps/app_browsertest.cc
+++ b/chrome/browser/apps/platform_apps/app_browsertest.cc
@@ -244,14 +244,14 @@
     const extensions::Extension* extension = LoadExtension(extension_path);
     ASSERT_TRUE(extension);
 
-    apps::mojom::FilePathsPtr launch_files = apps::mojom::FilePaths::New();
-    launch_files->file_paths.push_back(file_path);
+    std::vector<base::FilePath> launch_files;
+    launch_files.push_back(file_path);
     apps::AppServiceProxyFactory::GetForProfile(browser()->profile())
         ->LaunchAppWithFiles(
             extension->id(),
             apps::GetEventFlags(WindowOpenDisposition::NEW_FOREGROUND_TAB,
                                 true /* preferred_container */),
-            apps::mojom::LaunchSource::kFromTest, std::move(launch_files));
+            apps::LaunchSource::kFromTest, std::move(launch_files));
     ASSERT_TRUE(catcher.GetNextResult());
   }
 
diff --git a/chrome/browser/ash/borealis/borealis_security_delegate.cc b/chrome/browser/ash/borealis/borealis_security_delegate.cc
index c3361c0e..1122e29b 100644
--- a/chrome/browser/ash/borealis/borealis_security_delegate.cc
+++ b/chrome/browser/ash/borealis/borealis_security_delegate.cc
@@ -11,7 +11,9 @@
 #include "chrome/browser/ash/borealis/borealis_service.h"
 #include "chrome/browser/ash/borealis/borealis_util.h"
 #include "chrome/browser/ash/borealis/borealis_window_manager.h"
+#include "chromeos/ui/base/window_properties.h"
 #include "third_party/cros_system_api/constants/vm_tools.h"
+#include "ui/aura/window.h"
 
 namespace borealis {
 
@@ -50,4 +52,8 @@
              .GetShelfAppId(window) == kClientAppId;
 }
 
+bool BorealisSecurityDelegate::CanLockPointer(aura::Window* window) const {
+  return window->GetProperty(chromeos::kUseOverviewToExitPointerLock);
+}
+
 }  // namespace borealis
diff --git a/chrome/browser/ash/borealis/borealis_security_delegate.h b/chrome/browser/ash/borealis/borealis_security_delegate.h
index 1493469..07e15e93 100644
--- a/chrome/browser/ash/borealis/borealis_security_delegate.h
+++ b/chrome/browser/ash/borealis/borealis_security_delegate.h
@@ -28,6 +28,7 @@
   // exo::SecurityDelegate overrides:
   std::string GetSecurityContext() const override;
   bool CanSelfActivate(aura::Window* window) const override;
+  bool CanLockPointer(aura::Window* window) const override;
 
  private:
   Profile* const profile_;
diff --git a/chrome/browser/ash/browser_context_keyed_service_factories.cc b/chrome/browser/ash/browser_context_keyed_service_factories.cc
index 93ffe22..0c4f4384 100644
--- a/chrome/browser/ash/browser_context_keyed_service_factories.cc
+++ b/chrome/browser/ash/browser_context_keyed_service_factories.cc
@@ -19,6 +19,7 @@
 #include "chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h"
 #include "chrome/browser/ash/lock_screen_apps/lock_screen_apps.h"
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_service_factory.h"
+#include "chrome/browser/ash/login/signin_partition_manager.h"
 #include "chrome/browser/ash/nearby/nearby_dependencies_provider_factory.h"
 #include "chrome/browser/ash/nearby/nearby_process_manager_factory.h"
 #include "chrome/browser/ash/ownership/owner_settings_service_ash_factory.h"
@@ -81,6 +82,7 @@
   guest_os::GuestOsRegistryServiceFactory::GetInstance();
   KerberosCredentialsManagerFactory::GetInstance();
   LockScreenAppsFactory::GetInstance();
+  login::SigninPartitionManager::Factory::GetInstance();
   nearby::NearbyDependenciesProviderFactory::GetInstance();
   nearby::NearbyProcessManagerFactory::GetInstance();
   OwnerSettingsServiceAshFactory::GetInstance();
diff --git a/chrome/browser/ash/crostini/crostini_security_delegate.cc b/chrome/browser/ash/crostini/crostini_security_delegate.cc
index d425f62..7068ec7 100644
--- a/chrome/browser/ash/crostini/crostini_security_delegate.cc
+++ b/chrome/browser/ash/crostini/crostini_security_delegate.cc
@@ -7,7 +7,9 @@
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "chrome/browser/ash/crostini/crostini_features.h"
+#include "chromeos/ui/base/window_properties.h"
 #include "third_party/cros_system_api/constants/vm_tools.h"
+#include "ui/aura/window.h"
 
 namespace crostini {
 
@@ -31,4 +33,8 @@
   return vm_tools::kConciergeSecurityContext;
 }
 
+bool CrostiniSecurityDelegate::CanLockPointer(aura::Window* window) const {
+  return window->GetProperty(chromeos::kUseOverviewToExitPointerLock);
+}
+
 }  // namespace crostini
diff --git a/chrome/browser/ash/crostini/crostini_security_delegate.h b/chrome/browser/ash/crostini/crostini_security_delegate.h
index 2595566d..2d6a163 100644
--- a/chrome/browser/ash/crostini/crostini_security_delegate.h
+++ b/chrome/browser/ash/crostini/crostini_security_delegate.h
@@ -24,6 +24,7 @@
 
   // exo::SecurityDelegate overrides:
   std::string GetSecurityContext() const override;
+  bool CanLockPointer(aura::Window* window) const override;
 
  private:
   // Private constructor to force use of Build().
diff --git a/chrome/browser/ash/events/event_rewriter_unittest.cc b/chrome/browser/ash/events/event_rewriter_unittest.cc
index 53ea08c..688beaf 100644
--- a/chrome/browser/ash/events/event_rewriter_unittest.cc
+++ b/chrome/browser/ash/events/event_rewriter_unittest.cc
@@ -78,9 +78,9 @@
 
 // Values for enum output parameters to IdentifyKeyboard() that do not
 // match any enum types.
-constexpr auto kImpossibleDeviceType =
+const auto kImpossibleDeviceType =
     static_cast<ui::EventRewriterChromeOS::DeviceType>(-1);
-constexpr auto kImpossibleKeyboardTopRowLayout =
+const auto kImpossibleKeyboardTopRowLayout =
     static_cast<ui::EventRewriterChromeOS::KeyboardTopRowLayout>(-1);
 
 class TestEventRewriterContinuation
diff --git a/chrome/browser/ash/guest_os/guest_os_mime_types_service_factory.cc b/chrome/browser/ash/guest_os/guest_os_mime_types_service_factory.cc
index 17bb0e9..34e4c32 100644
--- a/chrome/browser/ash/guest_os/guest_os_mime_types_service_factory.cc
+++ b/chrome/browser/ash/guest_os/guest_os_mime_types_service_factory.cc
@@ -7,7 +7,6 @@
 #include "base/no_destructor.h"
 #include "chrome/browser/ash/guest_os/guest_os_mime_types_service.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace guest_os {
 
@@ -25,9 +24,7 @@
 }
 
 GuestOsMimeTypesServiceFactory::GuestOsMimeTypesServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "GuestOsMimeTypesService",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("GuestOsMimeTypesService") {}
 
 GuestOsMimeTypesServiceFactory::~GuestOsMimeTypesServiceFactory() = default;
 
diff --git a/chrome/browser/ash/guest_os/guest_os_mime_types_service_factory.h b/chrome/browser/ash/guest_os/guest_os_mime_types_service_factory.h
index 80846f4..ace0f3b 100644
--- a/chrome/browser/ash/guest_os/guest_os_mime_types_service_factory.h
+++ b/chrome/browser/ash/guest_os/guest_os_mime_types_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_GUEST_OS_GUEST_OS_MIME_TYPES_SERVICE_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -14,8 +14,7 @@
 
 class GuestOsMimeTypesService;
 
-class GuestOsMimeTypesServiceFactory
-    : public BrowserContextKeyedServiceFactory {
+class GuestOsMimeTypesServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static GuestOsMimeTypesService* GetForProfile(Profile* profile);
   static GuestOsMimeTypesServiceFactory* GetInstance();
diff --git a/chrome/browser/ash/guest_os/guest_os_registry_service_factory.cc b/chrome/browser/ash/guest_os/guest_os_registry_service_factory.cc
index 10e178ef..de4d363 100644
--- a/chrome/browser/ash/guest_os/guest_os_registry_service_factory.cc
+++ b/chrome/browser/ash/guest_os/guest_os_registry_service_factory.cc
@@ -25,9 +25,7 @@
 }
 
 GuestOsRegistryServiceFactory::GuestOsRegistryServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "GuestOsRegistryService",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("GuestOsRegistryService") {}
 
 GuestOsRegistryServiceFactory::~GuestOsRegistryServiceFactory() = default;
 
diff --git a/chrome/browser/ash/guest_os/guest_os_registry_service_factory.h b/chrome/browser/ash/guest_os/guest_os_registry_service_factory.h
index 8811cad7..af57aff 100644
--- a/chrome/browser/ash/guest_os/guest_os_registry_service_factory.h
+++ b/chrome/browser/ash/guest_os/guest_os_registry_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_GUEST_OS_GUEST_OS_REGISTRY_SERVICE_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -14,7 +14,7 @@
 
 class GuestOsRegistryService;
 
-class GuestOsRegistryServiceFactory : public BrowserContextKeyedServiceFactory {
+class GuestOsRegistryServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static guest_os::GuestOsRegistryService* GetForProfile(Profile* profile);
   static GuestOsRegistryServiceFactory* GetInstance();
diff --git a/chrome/browser/ash/guest_os/guest_os_session_tracker_factory.cc b/chrome/browser/ash/guest_os/guest_os_session_tracker_factory.cc
index ec16466..95ba6c3a 100644
--- a/chrome/browser/ash/guest_os/guest_os_session_tracker_factory.cc
+++ b/chrome/browser/ash/guest_os/guest_os_session_tracker_factory.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/ash/guest_os/guest_os_session_tracker.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace guest_os {
 
@@ -26,9 +25,7 @@
 }
 
 GuestOsSessionTrackerFactory::GuestOsSessionTrackerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "GuestOsSessionTracker",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("GuestOsSessionTracker") {}
 
 GuestOsSessionTrackerFactory::~GuestOsSessionTrackerFactory() = default;
 
diff --git a/chrome/browser/ash/guest_os/guest_os_session_tracker_factory.h b/chrome/browser/ash/guest_os/guest_os_session_tracker_factory.h
index d438a21..69a4307 100644
--- a/chrome/browser/ash/guest_os/guest_os_session_tracker_factory.h
+++ b/chrome/browser/ash/guest_os/guest_os_session_tracker_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_GUEST_OS_GUEST_OS_SESSION_TRACKER_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -14,7 +14,7 @@
 
 class GuestOsSessionTracker;
 
-class GuestOsSessionTrackerFactory : public BrowserContextKeyedServiceFactory {
+class GuestOsSessionTrackerFactory : public ProfileKeyedServiceFactory {
  public:
   static GuestOsSessionTracker* GetForProfile(Profile* profile);
   static GuestOsSessionTrackerFactory* GetInstance();
diff --git a/chrome/browser/ash/guest_os/guest_os_share_path_factory.cc b/chrome/browser/ash/guest_os/guest_os_share_path_factory.cc
index b31741d..1b1b08e1 100644
--- a/chrome/browser/ash/guest_os/guest_os_share_path_factory.cc
+++ b/chrome/browser/ash/guest_os/guest_os_share_path_factory.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/ash/crostini/crostini_manager_factory.h"
 #include "chrome/browser/ash/guest_os/guest_os_share_path.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace guest_os {
 
@@ -25,9 +24,7 @@
 }
 
 GuestOsSharePathFactory::GuestOsSharePathFactory()
-    : BrowserContextKeyedServiceFactory(
-          "GuestOsSharePath",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("GuestOsSharePath") {
   DependsOn(crostini::CrostiniManagerFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/guest_os/guest_os_share_path_factory.h b/chrome/browser/ash/guest_os/guest_os_share_path_factory.h
index be00f1bd..5ba28ed 100644
--- a/chrome/browser/ash/guest_os/guest_os_share_path_factory.h
+++ b/chrome/browser/ash/guest_os/guest_os_share_path_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_GUEST_OS_GUEST_OS_SHARE_PATH_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -14,7 +14,7 @@
 
 class GuestOsSharePath;
 
-class GuestOsSharePathFactory : public BrowserContextKeyedServiceFactory {
+class GuestOsSharePathFactory : public ProfileKeyedServiceFactory {
  public:
   static GuestOsSharePath* GetForProfile(Profile* profile);
   static GuestOsSharePathFactory* GetInstance();
diff --git a/chrome/browser/ash/guest_os/public/guest_os_service_factory.cc b/chrome/browser/ash/guest_os/public/guest_os_service_factory.cc
index a6b7645..657fb5c4 100644
--- a/chrome/browser/ash/guest_os/public/guest_os_service_factory.cc
+++ b/chrome/browser/ash/guest_os/public/guest_os_service_factory.cc
@@ -6,7 +6,6 @@
 
 #include "chrome/browser/ash/guest_os/public/guest_os_service.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace guest_os {
 
@@ -30,9 +29,7 @@
 }
 
 GuestOsServiceFactory::GuestOsServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "GuestOsService",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("GuestOsService") {}
 
 GuestOsServiceFactory::~GuestOsServiceFactory() = default;
 
diff --git a/chrome/browser/ash/guest_os/public/guest_os_service_factory.h b/chrome/browser/ash/guest_os/public/guest_os_service_factory.h
index e9f2afa..b4741051 100644
--- a/chrome/browser/ash/guest_os/public/guest_os_service_factory.h
+++ b/chrome/browser/ash/guest_os/public/guest_os_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_GUEST_OS_PUBLIC_GUEST_OS_SERVICE_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -14,7 +14,7 @@
 
 class GuestOsService;
 
-class GuestOsServiceFactory : public BrowserContextKeyedServiceFactory {
+class GuestOsServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static guest_os::GuestOsService* GetForProfile(Profile* profile);
   static GuestOsServiceFactory* GetInstance();
diff --git a/chrome/browser/ash/input_method/input_method_manager_impl.cc b/chrome/browser/ash/input_method/input_method_manager_impl.cc
index d4fde8e..207afa0 100644
--- a/chrome/browser/ash/input_method/input_method_manager_impl.cc
+++ b/chrome/browser/ash/input_method/input_method_manager_impl.cc
@@ -434,6 +434,12 @@
         manager_->util_.MigrateInputMethod(input_method_id);
     if (manager_->util_.IsValidInputMethodId(migrated_id)) {
       allowed_keyboard_layout_input_method_ids_.push_back(migrated_id);
+      // Kiosk users are not able to go to the settings and manually enable
+      // allowed input methods, thus it has to be done automatically for
+      // non-empty list.
+      DCHECK(user_manager::UserManager::Get());
+      if (user_manager::UserManager::Get()->IsLoggedInAsAnyKioskApp())
+        EnableInputMethod(migrated_id);
     }
   }
 
diff --git a/chrome/browser/ash/input_method/input_method_manager_impl_unittest.cc b/chrome/browser/ash/input_method/input_method_manager_impl_unittest.cc
index 0ca123d..7155a4f7 100644
--- a/chrome/browser/ash/input_method/input_method_manager_impl_unittest.cc
+++ b/chrome/browser/ash/input_method/input_method_manager_impl_unittest.cc
@@ -21,6 +21,7 @@
 #include "base/test/task_environment.h"
 #include "chrome/browser/ash/input_method/mock_candidate_window_controller.h"
 #include "chrome/browser/ash/input_method/mock_input_method_engine.h"
+#include "chrome/browser/ash/login/users/fake_chrome_user_manager.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/ash/ime_controller_client_impl.h"
 #include "chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client_test_helper.h"
@@ -28,6 +29,7 @@
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
+#include "components/account_id/account_id.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/icu/source/common/unicode/uloc.h"
@@ -1514,6 +1516,47 @@
                                    ImeIdFromEngineId(kNaclMozcJpId)));
 }
 
+TEST_F(InputMethodManagerImplTest, EnableAllowedInputMethodsInKiosk) {
+  // Login as a kiosk app user.
+  const std::string user_id = "kiosk@account.user";
+  const std::string user_email = user_id;
+  const AccountId account_id =
+      AccountId::FromUserEmailGaiaId(user_email, user_id);
+
+  ash::FakeChromeUserManager* fake_user_manager =
+      static_cast<ash::FakeChromeUserManager*>(
+          user_manager::UserManager::Get());
+  fake_user_manager->AddKioskAppUser(account_id);
+  fake_user_manager->LoginUser(account_id);
+
+  // First, setup xkb:fr::fra input method
+  std::string original_input_method(ImeIdFromEngineId("xkb:fr::fra"));
+  ASSERT_TRUE(
+      manager_->GetActiveIMEState()->EnableInputMethod(original_input_method));
+  manager_->GetActiveIMEState()->ChangeInputMethod(original_input_method,
+                                                   false);
+  EXPECT_THAT(manager_->GetActiveIMEState()->GetCurrentInputMethod().id(),
+              original_input_method);
+
+  // Also allow xkb:us::eng and xkb:de::ger.
+  std::vector<std::string> allowed = {"xkb:us::eng", "xkb:de::ger"};
+  EXPECT_TRUE(manager_->GetActiveIMEState()->SetAllowedInputMethods(allowed));
+
+  // Fix enabled languages according to allowed languages filter.
+  manager_->GetActiveIMEState()->ReplaceEnabledInputMethods(
+      manager_->GetActiveIMEState()->GetEnabledInputMethodIds());
+
+  // Check that all allowed languages are enabled languages.
+  EXPECT_THAT(manager_->GetActiveIMEState()->GetEnabledInputMethodIds(),
+              testing::ElementsAre(ImeIdFromEngineId("xkb:us::eng"),
+                                   ImeIdFromEngineId("xkb:de::ger")));
+  EXPECT_THAT(manager_->GetActiveIMEState()->GetAllowedInputMethodIds(),
+              testing::ElementsAre(ImeIdFromEngineId("xkb:us::eng"),
+                                   ImeIdFromEngineId("xkb:de::ger")));
+  // Logout kiosk app user.
+  fake_user_manager->RemoveUserFromList(account_id);
+}
+
 TEST_F(InputMethodManagerImplTest, SetLoginDefaultWithAllowedInputMethods) {
   std::vector<std::string> allowed = {"xkb:us::eng", "xkb:de::ger",
                                       "xkb:fr::fra"};
diff --git a/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.cc b/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.cc
index 065670d..25c0f9ec 100644
--- a/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.cc
+++ b/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.cc
@@ -11,7 +11,6 @@
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 
@@ -36,9 +35,8 @@
 }
 
 KerberosCredentialsManagerFactory::KerberosCredentialsManagerFactory()
-    : BrowserContextKeyedServiceFactory(
-          /*name=*/"KerberosCredentialsManager",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory(
+          /*name=*/"KerberosCredentialsManager") {}
 
 KerberosCredentialsManagerFactory::~KerberosCredentialsManagerFactory() =
     default;
diff --git a/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h b/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h
index 72b63f9..f4b024b 100644
--- a/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h
+++ b/chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_ASH_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_FACTORY_H_
 #define CHROME_BROWSER_ASH_KERBEROS_KERBEROS_CREDENTIALS_MANAGER_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace base {
@@ -22,8 +22,7 @@
 // KerberosCredentialsManager holds a non-owned pointer to its respective
 // primary profile, so its life-time depends on the life-time of that profile.
 // Multiple primary profiles only happen in tests.
-class KerberosCredentialsManagerFactory
-    : public BrowserContextKeyedServiceFactory {
+class KerberosCredentialsManagerFactory : public ProfileKeyedServiceFactory {
  public:
   // Gets the existing service instance associated with the given profile.
   // Returns nullptr for non-primary profiles.
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_tpm_key_manager_factory.cc b/chrome/browser/ash/login/easy_unlock/easy_unlock_tpm_key_manager_factory.cc
index d15a9f4..30a56c6 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_tpm_key_manager_factory.cc
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_tpm_key_manager_factory.cc
@@ -8,10 +8,8 @@
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_tpm_key_manager.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/account_id/account_id.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/user_manager/known_user.h"
 #include "components/user_manager/user.h"
 #include "components/user_manager/user_manager.h"
@@ -53,9 +51,9 @@
 }
 
 EasyUnlockTpmKeyManagerFactory::EasyUnlockTpmKeyManagerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "EasyUnlockTpmKeyManager",
-          BrowserContextDependencyManager::GetInstance()) {}
+          ProfileSelections::BuildServicesRedirectedToOriginal()) {}
 
 EasyUnlockTpmKeyManagerFactory::~EasyUnlockTpmKeyManagerFactory() {}
 
@@ -73,9 +71,4 @@
       user ? user->username_hash() : std::string(), GetLocalState());
 }
 
-content::BrowserContext* EasyUnlockTpmKeyManagerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 }  // namespace ash
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_tpm_key_manager_factory.h b/chrome/browser/ash/login/easy_unlock/easy_unlock_tpm_key_manager_factory.h
index 10bd2905..f2f2ee3b 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_tpm_key_manager_factory.h
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_tpm_key_manager_factory.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -22,8 +22,7 @@
 class EasyUnlockTpmKeyManager;
 
 // Singleton factory that builds and owns all EasyUnlockTpmKeyManager services.
-class EasyUnlockTpmKeyManagerFactory
-    : public BrowserContextKeyedServiceFactory {
+class EasyUnlockTpmKeyManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static EasyUnlockTpmKeyManagerFactory* GetInstance();
 
@@ -44,8 +43,6 @@
   // BrowserContextKeyedServiceFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/login/quick_unlock/quick_unlock_factory.cc b/chrome/browser/ash/login/quick_unlock/quick_unlock_factory.cc
index 3f83b1c..143ff0eed 100644
--- a/chrome/browser/ash/login/quick_unlock/quick_unlock_factory.cc
+++ b/chrome/browser/ash/login/quick_unlock/quick_unlock_factory.cc
@@ -7,7 +7,6 @@
 #include "chrome/browser/ash/login/quick_unlock/quick_unlock_storage.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/user_manager/user.h"
 #include "components/user_manager/user_manager.h"
 
@@ -47,9 +46,7 @@
 }
 
 QuickUnlockFactory::QuickUnlockFactory()
-    : BrowserContextKeyedServiceFactory(
-          "QuickUnlockFactory",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("QuickUnlockFactory") {}
 
 QuickUnlockFactory::~QuickUnlockFactory() {}
 
diff --git a/chrome/browser/ash/login/quick_unlock/quick_unlock_factory.h b/chrome/browser/ash/login/quick_unlock/quick_unlock_factory.h
index 70c963c..b4327e1 100644
--- a/chrome/browser/ash/login/quick_unlock/quick_unlock_factory.h
+++ b/chrome/browser/ash/login/quick_unlock/quick_unlock_factory.h
@@ -6,8 +6,8 @@
 #define CHROME_BROWSER_ASH_LOGIN_QUICK_UNLOCK_QUICK_UNLOCK_FACTORY_H_
 
 #include "base/memory/singleton.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "components/account_id/account_id.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 
 class Profile;
 
@@ -22,7 +22,7 @@
 // Singleton that owns all QuickUnlockStorage instances and associates them with
 // Profiles. Listens for the Profile's destruction notification and cleans up
 // the associated QuickUnlockStorage.
-class QuickUnlockFactory : public BrowserContextKeyedServiceFactory {
+class QuickUnlockFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns the QuickUnlockStorage instance for `profile`.
   static QuickUnlockStorage* GetForProfile(Profile* profile);
diff --git a/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.cc b/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.cc
index 884d8386..ec22119 100644
--- a/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.cc
+++ b/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/ash/login/saml/in_session_password_sync_manager.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/user_manager/user.h"
 #include "components/user_manager/user_manager.h"
@@ -33,9 +32,7 @@
 }
 
 InSessionPasswordSyncManagerFactory::InSessionPasswordSyncManagerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "InSessionPasswordSyncManager",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("InSessionPasswordSyncManager") {}
 
 InSessionPasswordSyncManagerFactory::~InSessionPasswordSyncManagerFactory() =
     default;
diff --git a/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.h b/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.h
index e49b3f00..42f13859 100644
--- a/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.h
+++ b/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_LOGIN_SAML_IN_SESSION_PASSWORD_SYNC_MANAGER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -15,8 +15,7 @@
 
 // Singleton that owns all InSessionPasswordSyncManagers and associates them
 // with Profiles.
-class InSessionPasswordSyncManagerFactory
-    : public BrowserContextKeyedServiceFactory {
+class InSessionPasswordSyncManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static InSessionPasswordSyncManagerFactory* GetInstance();
 
diff --git a/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.cc b/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.cc
index 8fae953..cf6a39b 100644
--- a/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.cc
+++ b/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/ash/login/saml/password_sync_token_verifier.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/user_manager/user.h"
 #include "components/user_manager/user_manager.h"
@@ -30,9 +29,7 @@
 }
 
 PasswordSyncTokenVerifierFactory::PasswordSyncTokenVerifierFactory()
-    : BrowserContextKeyedServiceFactory(
-          "PasswordSyncTokenVerifier",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("PasswordSyncTokenVerifier") {
   DependsOn(InSessionPasswordSyncManagerFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.h b/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.h
index 2ef228e..3c762c6 100644
--- a/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.h
+++ b/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_LOGIN_SAML_PASSWORD_SYNC_TOKEN_VERIFIER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -15,8 +15,7 @@
 
 // Singleton that owns all PasswordSyncTokenVerifiers and associates them
 // with Profiles.
-class PasswordSyncTokenVerifierFactory
-    : public BrowserContextKeyedServiceFactory {
+class PasswordSyncTokenVerifierFactory : public ProfileKeyedServiceFactory {
  public:
   static PasswordSyncTokenVerifierFactory* GetInstance();
 
diff --git a/chrome/browser/ash/login/screens/locale_switch_screen.cc b/chrome/browser/ash/login/screens/locale_switch_screen.cc
index 208acca..474e61c 100644
--- a/chrome/browser/ash/login/screens/locale_switch_screen.cc
+++ b/chrome/browser/ash/login/screens/locale_switch_screen.cc
@@ -51,19 +51,13 @@
   }
 }
 
-LocaleSwitchScreen::LocaleSwitchScreen(LocaleSwitchView* view,
+LocaleSwitchScreen::LocaleSwitchScreen(base::WeakPtr<LocaleSwitchView> view,
                                        const ScreenExitCallback& exit_callback)
     : BaseScreen(LocaleSwitchView::kScreenId, OobeScreenPriority::DEFAULT),
-      view_(view),
-      exit_callback_(exit_callback) {
-  if (view_)
-    view_->Bind(this);
-}
+      view_(std::move(view)),
+      exit_callback_(exit_callback) {}
 
-LocaleSwitchScreen::~LocaleSwitchScreen() {
-  if (view_)
-    view_->Unbind();
-}
+LocaleSwitchScreen::~LocaleSwitchScreen() = default;
 
 bool LocaleSwitchScreen::MaybeSkip(WizardContext* wizard_context) {
   if (wizard_context->skip_post_login_screens_for_tests) {
@@ -137,11 +131,6 @@
   ResetState();
 }
 
-void LocaleSwitchScreen::OnViewDestroyed(LocaleSwitchView* view) {
-  if (view == view_)
-    view_ = nullptr;
-}
-
 void LocaleSwitchScreen::OnErrorStateOfRefreshTokenUpdatedForAccount(
     const CoreAccountInfo& account_info,
     const GoogleServiceAuthError& error) {
diff --git a/chrome/browser/ash/login/screens/locale_switch_screen.h b/chrome/browser/ash/login/screens/locale_switch_screen.h
index 057e69a..8f6a5fb 100644
--- a/chrome/browser/ash/login/screens/locale_switch_screen.h
+++ b/chrome/browser/ash/login/screens/locale_switch_screen.h
@@ -37,12 +37,10 @@
   static std::string GetResultString(Result result);
 
   using ScreenExitCallback = base::RepeatingCallback<void(Result result)>;
-  explicit LocaleSwitchScreen(LocaleSwitchView* view,
+  explicit LocaleSwitchScreen(base::WeakPtr<LocaleSwitchView> view,
                               const ScreenExitCallback& exit_callback);
   ~LocaleSwitchScreen() override;
 
-  void OnViewDestroyed(LocaleSwitchView* view);
-
   // signin::IdentityManager::Observer:
   void OnErrorStateOfRefreshTokenUpdatedForAccount(
       const CoreAccountInfo& account_info,
@@ -63,7 +61,7 @@
   void ResetState();
   void OnTimeout();
 
-  LocaleSwitchView* view_ = nullptr;
+  base::WeakPtr<LocaleSwitchView> view_ = nullptr;
 
   std::string gaia_id_;
   ScreenExitCallback exit_callback_;
diff --git a/chrome/browser/ash/login/security_token_session_controller_factory.cc b/chrome/browser/ash/login/security_token_session_controller_factory.cc
index e798b39..362aa54 100644
--- a/chrome/browser/ash/login/security_token_session_controller_factory.cc
+++ b/chrome/browser/ash/login/security_token_session_controller_factory.cc
@@ -11,16 +11,15 @@
 #include "chrome/browser/certificate_provider/certificate_provider_service_factory.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/user_manager/user.h"
 
 namespace ash {
 namespace login {
 
 SecurityTokenSessionControllerFactory::SecurityTokenSessionControllerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "SecurityTokenSessionController",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildServicesRedirectedToOriginal()) {
   DependsOn(chromeos::CertificateProviderServiceFactory::GetInstance());
 }
 
@@ -64,12 +63,6 @@
                                             user, certificate_provider_service);
 }
 
-content::BrowserContext*
-SecurityTokenSessionControllerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 bool SecurityTokenSessionControllerFactory::ServiceIsCreatedWithBrowserContext()
     const {
   // The controller is only useful for users using authentication via security
diff --git a/chrome/browser/ash/login/security_token_session_controller_factory.h b/chrome/browser/ash/login/security_token_session_controller_factory.h
index f499ca22..8a073d9 100644
--- a/chrome/browser/ash/login/security_token_session_controller_factory.h
+++ b/chrome/browser/ash/login/security_token_session_controller_factory.h
@@ -8,14 +8,14 @@
 #include "base/memory/singleton.h"
 #include "chrome/browser/ash/login/security_token_session_controller.h"
 #include "chrome/browser/certificate_provider/certificate_provider_service_factory.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "content/public/browser/browser_context.h"
 
 namespace ash {
 namespace login {
 
 class SecurityTokenSessionControllerFactory
-    : public BrowserContextKeyedServiceFactory {
+    : public ProfileKeyedServiceFactory {
  public:
   static SecurityTokenSessionController* GetForBrowserContext(
       content::BrowserContext* browser_context);
@@ -36,8 +36,6 @@
   // BrowserContextKeyedServiceFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
 };
 
diff --git a/chrome/browser/ash/login/signin/auth_error_observer_factory.cc b/chrome/browser/ash/login/signin/auth_error_observer_factory.cc
index 8b13f27..0bc4cf2 100644
--- a/chrome/browser/ash/login/signin/auth_error_observer_factory.cc
+++ b/chrome/browser/ash/login/signin/auth_error_observer_factory.cc
@@ -8,14 +8,11 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/signin_error_controller_factory.h"
 #include "chrome/browser/sync/sync_service_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 
 AuthErrorObserverFactory::AuthErrorObserverFactory()
-    : BrowserContextKeyedServiceFactory(
-          "AuthErrorObserver",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("AuthErrorObserver") {
   DependsOn(SyncServiceFactory::GetInstance());
   DependsOn(SigninErrorControllerFactory::GetInstance());
 }
diff --git a/chrome/browser/ash/login/signin/auth_error_observer_factory.h b/chrome/browser/ash/login/signin/auth_error_observer_factory.h
index 3cf12436..9c81e999 100644
--- a/chrome/browser/ash/login/signin/auth_error_observer_factory.h
+++ b/chrome/browser/ash/login/signin/auth_error_observer_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_LOGIN_SIGNIN_AUTH_ERROR_OBSERVER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -16,7 +16,7 @@
 // Singleton that owns all AuthErrorObserver and associates them with
 // Profiles. Listens for the Profile's destruction notification and cleans up
 // the associated AuthErrorObserver.
-class AuthErrorObserverFactory : public BrowserContextKeyedServiceFactory {
+class AuthErrorObserverFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns the instance of AuthErrorObserver associated with this
   // `profile` (creates one if none exists).
diff --git a/chrome/browser/ash/login/signin/oauth2_login_manager_factory.cc b/chrome/browser/ash/login/signin/oauth2_login_manager_factory.cc
index 5a2f5f16..cd869fc 100644
--- a/chrome/browser/ash/login/signin/oauth2_login_manager_factory.cc
+++ b/chrome/browser/ash/login/signin/oauth2_login_manager_factory.cc
@@ -7,14 +7,11 @@
 #include "chrome/browser/ash/login/signin/oauth2_login_manager.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 
 OAuth2LoginManagerFactory::OAuth2LoginManagerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "OAuth2LoginManager",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("OAuth2LoginManager") {
   DependsOn(IdentityManagerFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/login/signin/oauth2_login_manager_factory.h b/chrome/browser/ash/login/signin/oauth2_login_manager_factory.h
index 6c1697b44..4fd0756 100644
--- a/chrome/browser/ash/login/signin/oauth2_login_manager_factory.h
+++ b/chrome/browser/ash/login/signin/oauth2_login_manager_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_LOGIN_SIGNIN_OAUTH2_LOGIN_MANAGER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -17,7 +17,7 @@
 // Singleton that owns all OAuth2LoginManager and associates them with
 // Profiles. Listens for the Profile's destruction notification and cleans up
 // the associated OAuth2LoginManager.
-class OAuth2LoginManagerFactory : public BrowserContextKeyedServiceFactory {
+class OAuth2LoginManagerFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns the instance of OAuth2LoginManager associated with this
   // `profile` (creates one if none exists).
diff --git a/chrome/browser/ash/login/signin/offline_signin_limiter_factory.cc b/chrome/browser/ash/login/signin/offline_signin_limiter_factory.cc
index c2fb6ff4..0baea4f 100644
--- a/chrome/browser/ash/login/signin/offline_signin_limiter_factory.cc
+++ b/chrome/browser/ash/login/signin/offline_signin_limiter_factory.cc
@@ -7,7 +7,6 @@
 #include "base/time/clock.h"
 #include "chrome/browser/ash/login/signin/offline_signin_limiter.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/browser_context.h"
 
@@ -33,9 +32,7 @@
 }
 
 OfflineSigninLimiterFactory::OfflineSigninLimiterFactory()
-    : BrowserContextKeyedServiceFactory(
-          "OfflineSigninLimiter",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("OfflineSigninLimiter") {}
 
 OfflineSigninLimiterFactory::~OfflineSigninLimiterFactory() {}
 
diff --git a/chrome/browser/ash/login/signin/offline_signin_limiter_factory.h b/chrome/browser/ash/login/signin/offline_signin_limiter_factory.h
index 430a97f5..daf0546 100644
--- a/chrome/browser/ash/login/signin/offline_signin_limiter_factory.h
+++ b/chrome/browser/ash/login/signin/offline_signin_limiter_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_LOGIN_SIGNIN_OFFLINE_SIGNIN_LIMITER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -20,7 +20,7 @@
 
 // Singleton that owns all OfflineSigninLimiters and associates them with
 // Profiles.
-class OfflineSigninLimiterFactory : public BrowserContextKeyedServiceFactory {
+class OfflineSigninLimiterFactory : public ProfileKeyedServiceFactory {
  public:
   static OfflineSigninLimiterFactory* GetInstance();
 
diff --git a/chrome/browser/ash/login/signin/signin_error_notifier_factory.cc b/chrome/browser/ash/login/signin/signin_error_notifier_factory.cc
index 6f2e9289..52b70f23 100644
--- a/chrome/browser/ash/login/signin/signin_error_notifier_factory.cc
+++ b/chrome/browser/ash/login/signin/signin_error_notifier_factory.cc
@@ -10,14 +10,11 @@
 #include "chrome/browser/notifications/notification_display_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/signin_error_controller_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 
 SigninErrorNotifierFactory::SigninErrorNotifierFactory()
-    : BrowserContextKeyedServiceFactory(
-          "SigninErrorNotifier",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("SigninErrorNotifier") {
   DependsOn(SigninErrorControllerFactory::GetInstance());
   DependsOn(NotificationDisplayServiceFactory::GetInstance());
 }
diff --git a/chrome/browser/ash/login/signin/signin_error_notifier_factory.h b/chrome/browser/ash/login/signin/signin_error_notifier_factory.h
index eb8f979..a5c53f99 100644
--- a/chrome/browser/ash/login/signin/signin_error_notifier_factory.h
+++ b/chrome/browser/ash/login/signin/signin_error_notifier_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -16,7 +16,7 @@
 // Singleton that owns all SigninErrorNotifiers and associates them with
 // Profiles. Listens for the Profile's destruction notification and cleans up
 // the associated SigninErrorNotifier.
-class SigninErrorNotifierFactory : public BrowserContextKeyedServiceFactory {
+class SigninErrorNotifierFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns the instance of SigninErrorNotifier associated with this
   // profile, creating one if none exists and the shell exists.
diff --git a/chrome/browser/ash/login/signin_partition_manager.cc b/chrome/browser/ash/login/signin_partition_manager.cc
index 8d885bc8..c87d69a 100644
--- a/chrome/browser/ash/login/signin_partition_manager.cc
+++ b/chrome/browser/ash/login/signin_partition_manager.cc
@@ -184,9 +184,9 @@
 }
 
 SigninPartitionManager::Factory::Factory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "SigninPartitionManager",
-          BrowserContextDependencyManager::GetInstance()) {}
+          ProfileSelections::BuildServicesForAllProfiles()) {}
 
 SigninPartitionManager::Factory::~Factory() = default;
 
@@ -209,11 +209,5 @@
   return new SigninPartitionManager(context);
 }
 
-content::BrowserContext*
-SigninPartitionManager::Factory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
-
 }  // namespace login
 }  // namespace ash
diff --git a/chrome/browser/ash/login/signin_partition_manager.h b/chrome/browser/ash/login/signin_partition_manager.h
index ccea2610..220c0a8 100644
--- a/chrome/browser/ash/login/signin_partition_manager.h
+++ b/chrome/browser/ash/login/signin_partition_manager.h
@@ -12,7 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/singleton.h"
 #include "base/memory/weak_ptr.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
@@ -100,7 +100,7 @@
   void SetOnCreateNewStoragePartitionForTesting(
       OnCreateNewStoragePartition on_create_new_storage_partition);
 
-  class Factory : public BrowserContextKeyedServiceFactory {
+  class Factory : public ProfileKeyedServiceFactory {
    public:
     static SigninPartitionManager* GetForBrowserContext(
         content::BrowserContext* browser_context);
@@ -119,8 +119,6 @@
     // BrowserContextKeyedServiceFactory:
     KeyedService* BuildServiceInstanceFor(
         content::BrowserContext* context) const override;
-    content::BrowserContext* GetBrowserContextToUse(
-        content::BrowserContext* context) const override;
   };
 
  private:
diff --git a/chrome/browser/ash/login/ui/login_display_host.h b/chrome/browser/ash/login/ui/login_display_host.h
index 2623337..cbbdb77 100644
--- a/chrome/browser/ash/login/ui/login_display_host.h
+++ b/chrome/browser/ash/login/ui/login_display_host.h
@@ -246,7 +246,8 @@
 
   // Gets the keyboard remapped pref value for `pref_name` key. Returns true if
   // successful, otherwise returns false.
-  // TODO (crbug.com/1168114): Double check if this method belongs here.
+  // It provides a remapping based on currently selected user pod (as different
+  // users might have different remappings).
   virtual bool GetKeyboardRemappedPrefValue(const std::string& pref_name,
                                             int* value) const = 0;
   // Allows tests to wait for WebUI to start.
diff --git a/chrome/browser/ash/login/ui/login_display_host_webui.cc b/chrome/browser/ash/login/ui/login_display_host_webui.cc
index 44af416..ab041cea 100644
--- a/chrome/browser/ash/login/ui/login_display_host_webui.cc
+++ b/chrome/browser/ash/login/ui/login_display_host_webui.cc
@@ -20,7 +20,6 @@
 #include "ash/public/cpp/login_accelerators.h"
 #include "ash/public/cpp/login_screen.h"
 #include "ash/public/cpp/login_screen_model.h"
-#include "ash/public/cpp/multi_user_window_manager.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/shell.h"
 #include "base/bind.h"
@@ -463,12 +462,6 @@
   if (login_view_ && login_window_)
     login_window_->RemoveRemovalsObserver(this);
 
-  auto* window_manager = MultiUserWindowManagerHelper::GetWindowManager();
-  // MultiUserWindowManagerHelper instance might be null if no user is logged
-  // in - or in a unit test.
-  if (window_manager)
-    window_manager->RemoveObserver(this);
-
   ResetKeyboardOverscrollBehavior();
 
   views::FocusManager::set_arrow_key_traversal_enabled(false);
@@ -782,10 +775,7 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// LoginDisplayHostWebUI, MultiUserWindowManagerObserver:
-void LoginDisplayHostWebUI::OnUserSwitchAnimationFinished() {
-  ShutdownDisplayHost();
-}
+// LoginDisplayHostWebUI, OobeUI::Observer
 
 void LoginDisplayHostWebUI::OnCurrentScreenChanged(OobeScreenId current_screen,
                                                    OobeScreenId new_screen) {
diff --git a/chrome/browser/ash/login/ui/login_display_host_webui.h b/chrome/browser/ash/login/ui/login_display_host_webui.h
index 30718e2..75d570aa 100644
--- a/chrome/browser/ash/login/ui/login_display_host_webui.h
+++ b/chrome/browser/ash/login/ui/login_display_host_webui.h
@@ -11,7 +11,6 @@
 #include <vector>
 
 #include "ash/components/audio/cras_audio_handler.h"
-#include "ash/public/cpp/multi_user_window_manager_observer.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/scoped_observation.h"
@@ -23,7 +22,6 @@
 #include "chrome/browser/ash/login/ui/login_display.h"
 #include "chrome/browser/ash/login/ui/login_display_host_common.h"
 #include "chrome/browser/ash/login/wizard_controller.h"
-#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_helper.h"
 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
 #include "chromeos/ash/components/dbus/session_manager/session_manager_client.h"
 #include "components/session_manager/core/session_manager.h"
@@ -58,7 +56,6 @@
                               public ui::InputDeviceEventObserver,
                               public views::WidgetRemovalsObserver,
                               public views::WidgetObserver,
-                              public MultiUserWindowManagerObserver,
                               public OobeUI::Observer {
  public:
   LoginDisplayHostWebUI();
@@ -154,11 +151,6 @@
   void OnWidgetBoundsChanged(views::Widget* widget,
                              const gfx::Rect& new_bounds) override;
 
-  // TODO (crbug.com/1168114): remove whole observer hierarchy, it is not needed
-  // anymore.
-  // MultiUserWindowManagerObserver:
-  void OnUserSwitchAnimationFinished() override;
-
   // OobeUI::Observer:
   void OnCurrentScreenChanged(OobeScreenId current_screen,
                               OobeScreenId new_screen) override;
diff --git a/chrome/browser/ash/login/wizard_controller.cc b/chrome/browser/ash/login/wizard_controller.cc
index 715680a6..4237a7d8 100644
--- a/chrome/browser/ash/login/wizard_controller.cc
+++ b/chrome/browser/ash/login/wizard_controller.cc
@@ -626,7 +626,7 @@
       base::BindRepeating(&WizardController::OnKioskAutolaunchScreenExit,
                           weak_factory_.GetWeakPtr())));
   append(std::make_unique<LocaleSwitchScreen>(
-      oobe_ui->GetView<LocaleSwitchScreenHandler>(),
+      oobe_ui->GetView<LocaleSwitchScreenHandler>()->AsWeakPtr(),
       base::BindRepeating(&WizardController::OnLocaleSwitchScreenExit,
                           weak_factory_.GetWeakPtr())));
   append(std::make_unique<TermsOfServiceScreen>(
diff --git a/chrome/browser/ash/multidevice_setup/auth_token_validator_factory.cc b/chrome/browser/ash/multidevice_setup/auth_token_validator_factory.cc
index 1ad09042..8caad0c 100644
--- a/chrome/browser/ash/multidevice_setup/auth_token_validator_factory.cc
+++ b/chrome/browser/ash/multidevice_setup/auth_token_validator_factory.cc
@@ -7,7 +7,6 @@
 #include "chrome/browser/ash/login/quick_unlock/quick_unlock_factory.h"
 #include "chrome/browser/ash/multidevice_setup/auth_token_validator_impl.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/browser_context.h"
 
@@ -26,9 +25,7 @@
 }
 
 AuthTokenValidatorFactory::AuthTokenValidatorFactory()
-    : BrowserContextKeyedServiceFactory(
-          "AuthTokenValidatorFactory",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("AuthTokenValidatorFactory") {}
 
 AuthTokenValidatorFactory::~AuthTokenValidatorFactory() {}
 
diff --git a/chrome/browser/ash/multidevice_setup/auth_token_validator_factory.h b/chrome/browser/ash/multidevice_setup/auth_token_validator_factory.h
index c53cb08..111a55c 100644
--- a/chrome/browser/ash/multidevice_setup/auth_token_validator_factory.h
+++ b/chrome/browser/ash/multidevice_setup/auth_token_validator_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_MULTIDEVICE_SETUP_AUTH_TOKEN_VALIDATOR_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class KeyedService;
 class Profile;
@@ -17,7 +17,7 @@
 class AuthTokenValidator;
 
 // Owns AuthTokenValidator instances and associates them with Profiles.
-class AuthTokenValidatorFactory : public BrowserContextKeyedServiceFactory {
+class AuthTokenValidatorFactory : public ProfileKeyedServiceFactory {
  public:
   static AuthTokenValidator* GetForProfile(Profile* profile);
 
diff --git a/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.cc b/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.cc
index 72e3dd5..d0248a5 100644
--- a/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.cc
+++ b/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.cc
@@ -15,7 +15,6 @@
 #include "chrome/browser/ash/device_sync/device_sync_client_factory.h"
 #include "chrome/browser/ash/multidevice_setup/multidevice_setup_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/prefs/pref_service.h"
 #include "content/public/browser/browser_context.h"
@@ -78,9 +77,7 @@
 }  // namespace
 
 MultiDeviceSetupClientFactory::MultiDeviceSetupClientFactory()
-    : BrowserContextKeyedServiceFactory(
-          "MultiDeviceSetupClient",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("MultiDeviceSetupClient") {
   DependsOn(device_sync::DeviceSyncClientFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.h b/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.h
index 86fdcbe..505ac742 100644
--- a/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.h
+++ b/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_CLIENT_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class ChromeOSMetricsProviderTest;
 class Profile;
@@ -18,7 +18,7 @@
 
 // Singleton that owns all MultiDeviceSetupClient instances and associates them
 // with Profiles.
-class MultiDeviceSetupClientFactory : public BrowserContextKeyedServiceFactory {
+class MultiDeviceSetupClientFactory : public ProfileKeyedServiceFactory {
  public:
   static MultiDeviceSetupClient* GetForProfile(Profile* profile);
 
diff --git a/chrome/browser/ash/multidevice_setup/multidevice_setup_service_factory.cc b/chrome/browser/ash/multidevice_setup/multidevice_setup_service_factory.cc
index fd6f5b4..557dada 100644
--- a/chrome/browser/ash/multidevice_setup/multidevice_setup_service_factory.cc
+++ b/chrome/browser/ash/multidevice_setup/multidevice_setup_service_factory.cc
@@ -23,7 +23,6 @@
 #include "chrome/browser/ash/multidevice_setup/oobe_completion_tracker_factory.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/user_manager/user_manager.h"
 
@@ -107,9 +106,7 @@
 }
 
 MultiDeviceSetupServiceFactory::MultiDeviceSetupServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "MultiDeviceSetupService",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("MultiDeviceSetupService") {
   DependsOn(device_sync::DeviceSyncClientFactory::GetInstance());
   DependsOn(AuthTokenValidatorFactory::GetInstance());
   DependsOn(OobeCompletionTrackerFactory::GetInstance());
diff --git a/chrome/browser/ash/multidevice_setup/multidevice_setup_service_factory.h b/chrome/browser/ash/multidevice_setup/multidevice_setup_service_factory.h
index 3241ba5..451306a 100644
--- a/chrome/browser/ash/multidevice_setup/multidevice_setup_service_factory.h
+++ b/chrome/browser/ash/multidevice_setup/multidevice_setup_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_SERVICE_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -15,8 +15,7 @@
 
 class MultiDeviceSetupService;
 
-class MultiDeviceSetupServiceFactory
-    : public BrowserContextKeyedServiceFactory {
+class MultiDeviceSetupServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static MultiDeviceSetupService* GetForProfile(Profile* profile);
 
diff --git a/chrome/browser/ash/multidevice_setup/oobe_completion_tracker_factory.cc b/chrome/browser/ash/multidevice_setup/oobe_completion_tracker_factory.cc
index 3fdbb805..159a35df 100644
--- a/chrome/browser/ash/multidevice_setup/oobe_completion_tracker_factory.cc
+++ b/chrome/browser/ash/multidevice_setup/oobe_completion_tracker_factory.cc
@@ -6,7 +6,6 @@
 
 #include "ash/services/multidevice_setup/public/cpp/oobe_completion_tracker.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/browser_context.h"
 
@@ -26,9 +25,7 @@
 }
 
 OobeCompletionTrackerFactory::OobeCompletionTrackerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "OobeCompletionTrackerFactory",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("OobeCompletionTrackerFactory") {}
 
 OobeCompletionTrackerFactory::~OobeCompletionTrackerFactory() = default;
 
diff --git a/chrome/browser/ash/multidevice_setup/oobe_completion_tracker_factory.h b/chrome/browser/ash/multidevice_setup/oobe_completion_tracker_factory.h
index e5f07a9..aead1376 100644
--- a/chrome/browser/ash/multidevice_setup/oobe_completion_tracker_factory.h
+++ b/chrome/browser/ash/multidevice_setup/oobe_completion_tracker_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_MULTIDEVICE_SETUP_OOBE_COMPLETION_TRACKER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class KeyedService;
 class Profile;
@@ -17,7 +17,7 @@
 class OobeCompletionTracker;
 
 // Owns OobeCompletionTracker instances and associates them with Profiles.
-class OobeCompletionTrackerFactory : public BrowserContextKeyedServiceFactory {
+class OobeCompletionTrackerFactory : public ProfileKeyedServiceFactory {
  public:
   static OobeCompletionTracker* GetForProfile(Profile* profile);
 
diff --git a/chrome/browser/ash/nearby/nearby_process_manager_factory.cc b/chrome/browser/ash/nearby/nearby_process_manager_factory.cc
index 0a4f3f7..5ce4164 100644
--- a/chrome/browser/ash/nearby/nearby_process_manager_factory.cc
+++ b/chrome/browser/ash/nearby/nearby_process_manager_factory.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/ash/nearby/nearby_process_manager_impl.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/user_manager/user_manager.h"
 
 namespace ash {
@@ -53,9 +52,7 @@
 }
 
 NearbyProcessManagerFactory::NearbyProcessManagerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "NearbyProcessManager",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("NearbyProcessManager") {
   DependsOn(NearbyDependenciesProviderFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/nearby/nearby_process_manager_factory.h b/chrome/browser/ash/nearby/nearby_process_manager_factory.h
index 26d8dfd3..01452b4 100644
--- a/chrome/browser/ash/nearby/nearby_process_manager_factory.h
+++ b/chrome/browser/ash/nearby/nearby_process_manager_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_NEARBY_NEARBY_PROCESS_MANAGER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -17,7 +17,7 @@
 
 // Creates a NearbyProcessManager for the primary user. No instance is created
 // any other profile.
-class NearbyProcessManagerFactory : public BrowserContextKeyedServiceFactory {
+class NearbyProcessManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static NearbyProcessManager* GetForProfile(Profile* profile);
 
diff --git a/chrome/browser/ash/ownership/owner_settings_service_ash_factory.cc b/chrome/browser/ash/ownership/owner_settings_service_ash_factory.cc
index 7f778666..a5103dc 100644
--- a/chrome/browser/ash/ownership/owner_settings_service_ash_factory.cc
+++ b/chrome/browser/ash/ownership/owner_settings_service_ash_factory.cc
@@ -13,7 +13,6 @@
 #include "chrome/browser/ash/settings/stub_cros_settings_provider.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chromeos/dbus/constants/dbus_paths.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/ownership/owner_key_util.h"
 #include "components/ownership/owner_key_util_impl.h"
 
@@ -35,9 +34,7 @@
 }  // namespace
 
 OwnerSettingsServiceAshFactory::OwnerSettingsServiceAshFactory()
-    : BrowserContextKeyedServiceFactory(
-          "OwnerSettingsService",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("OwnerSettingsService") {}
 
 OwnerSettingsServiceAshFactory::~OwnerSettingsServiceAshFactory() = default;
 
@@ -83,16 +80,6 @@
   owner_key_util_ = owner_key_util;
 }
 
-content::BrowserContext* OwnerSettingsServiceAshFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  Profile* profile = Profile::FromBrowserContext(context);
-  if (profile->IsOffTheRecord() || !ProfileHelper::IsRegularProfile(profile)) {
-    return nullptr;
-  }
-
-  return context;
-}
-
 bool OwnerSettingsServiceAshFactory::ServiceIsCreatedWithBrowserContext()
     const {
   return true;
@@ -100,10 +87,13 @@
 
 KeyedService* OwnerSettingsServiceAshFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
+  Profile* profile = Profile::FromBrowserContext(context);
+  if (!ProfileHelper::IsRegularProfile(profile))
+    return nullptr;
+
   // If g_stub_cros_settings_provider_for_testing_ is set, we treat the current
   // user as the owner, and write settings directly to the stubbed provider.
   // This is done using the FakeOwnerSettingsService.
-  Profile* profile = Profile::FromBrowserContext(context);
   if (g_stub_cros_settings_provider_for_testing_ != nullptr) {
     return new FakeOwnerSettingsService(
         g_stub_cros_settings_provider_for_testing_, profile,
diff --git a/chrome/browser/ash/ownership/owner_settings_service_ash_factory.h b/chrome/browser/ash/ownership/owner_settings_service_ash_factory.h
index b09eb2c9a..ee3d68d 100644
--- a/chrome/browser/ash/ownership/owner_settings_service_ash_factory.h
+++ b/chrome/browser/ash/ownership/owner_settings_service_ash_factory.h
@@ -7,7 +7,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class KeyedService;
 
@@ -25,8 +25,7 @@
 class OwnerSettingsServiceAsh;
 class StubCrosSettingsProvider;
 
-class OwnerSettingsServiceAshFactory
-    : public BrowserContextKeyedServiceFactory {
+class OwnerSettingsServiceAshFactory : public ProfileKeyedServiceFactory {
  public:
   static OwnerSettingsServiceAsh* GetForBrowserContext(
       content::BrowserContext* context);
@@ -56,8 +55,6 @@
   ~OwnerSettingsServiceAshFactory() override;
 
   // BrowserContextKeyedServiceFactory overrides:
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* browser_context) const override;
diff --git a/chrome/browser/ash/phonehub/phone_hub_manager_factory.cc b/chrome/browser/ash/phonehub/phone_hub_manager_factory.cc
index 65cf7e6..1e793b5 100644
--- a/chrome/browser/ash/phonehub/phone_hub_manager_factory.cc
+++ b/chrome/browser/ash/phonehub/phone_hub_manager_factory.cc
@@ -30,7 +30,6 @@
 #include "chrome/browser/sync/sync_service_factory.h"
 #include "chrome/browser/ui/ash/holding_space/holding_space_keyed_service_factory.h"
 #include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 
 namespace ash {
@@ -71,9 +70,7 @@
 }
 
 PhoneHubManagerFactory::PhoneHubManagerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "PhoneHubManager",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("PhoneHubManager") {
   DependsOn(device_sync::DeviceSyncClientFactory::GetInstance());
   if (features::IsPhoneHubCameraRollEnabled()) {
     DependsOn(HoldingSpaceKeyedServiceFactory::GetInstance());
diff --git a/chrome/browser/ash/phonehub/phone_hub_manager_factory.h b/chrome/browser/ash/phonehub/phone_hub_manager_factory.h
index f921a867..80a40578 100644
--- a/chrome/browser/ash/phonehub/phone_hub_manager_factory.h
+++ b/chrome/browser/ash/phonehub/phone_hub_manager_factory.h
@@ -8,14 +8,14 @@
 #include "base/memory/singleton.h"
 // TODO(https://crbug.com/1164001): move to forward declaration.
 #include "ash/components/phonehub/phone_hub_manager.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
 namespace ash {
 namespace phonehub {
 
-class PhoneHubManagerFactory : public BrowserContextKeyedServiceFactory {
+class PhoneHubManagerFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns the PhoneHubManager instance associated with |profile|. Null is
   // returned if |profile| is not the primary Profile, if the kPhoneHub flag
diff --git a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_service_factory.cc b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_service_factory.cc
index 83ae7000..135cd07 100644
--- a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_service_factory.cc
+++ b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_service_factory.cc
@@ -14,7 +14,6 @@
 #include "chrome/browser/policy/profile_policy_connector.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 
 namespace ash {
@@ -34,9 +33,7 @@
 }
 
 KeyPermissionsServiceFactory::KeyPermissionsServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "KeyPermissionsService",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("KeyPermissionsService") {
   DependsOn(PlatformKeysServiceFactory::GetInstance());
   DependsOn(UserPrivateTokenKeyPermissionsManagerServiceFactory::GetInstance());
 }
diff --git a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_service_factory.h b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_service_factory.h
index f95eee8..661d4da 100644
--- a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_service_factory.h
+++ b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_PLATFORM_KEYS_KEY_PERMISSIONS_KEY_PERMISSIONS_SERVICE_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
@@ -27,7 +27,7 @@
 //
 // Note: Service instances provided by this factory are only valid during the
 // lifetime of the given BrowserContext.
-class KeyPermissionsServiceFactory : public BrowserContextKeyedServiceFactory {
+class KeyPermissionsServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static KeyPermissionsService* GetForBrowserContext(
       content::BrowserContext* context);
diff --git a/chrome/browser/ash/platform_keys/key_permissions/user_private_token_kpm_service_factory.cc b/chrome/browser/ash/platform_keys/key_permissions/user_private_token_kpm_service_factory.cc
index 5a05fda..c240b9b 100644
--- a/chrome/browser/ash/platform_keys/key_permissions/user_private_token_kpm_service_factory.cc
+++ b/chrome/browser/ash/platform_keys/key_permissions/user_private_token_kpm_service_factory.cc
@@ -12,7 +12,6 @@
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 
 namespace ash {
@@ -64,9 +63,8 @@
 
 UserPrivateTokenKeyPermissionsManagerServiceFactory::
     UserPrivateTokenKeyPermissionsManagerServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "UserPrivateTokenKeyPermissionsManagerService",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory(
+          "UserPrivateTokenKeyPermissionsManagerService") {
   DependsOn(PlatformKeysServiceFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/platform_keys/key_permissions/user_private_token_kpm_service_factory.h b/chrome/browser/ash/platform_keys/key_permissions/user_private_token_kpm_service_factory.h
index d24644f..5afe9fa 100644
--- a/chrome/browser/ash/platform_keys/key_permissions/user_private_token_kpm_service_factory.h
+++ b/chrome/browser/ash/platform_keys/key_permissions/user_private_token_kpm_service_factory.h
@@ -9,7 +9,7 @@
 
 #include "base/memory/singleton.h"
 #include "chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 class Profile;
@@ -46,7 +46,7 @@
 };
 
 class UserPrivateTokenKeyPermissionsManagerServiceFactory
-    : public BrowserContextKeyedServiceFactory {
+    : public ProfileKeyedServiceFactory {
  public:
   static UserPrivateTokenKeyPermissionsManagerService* GetForBrowserContext(
       content::BrowserContext* context);
diff --git a/chrome/browser/ash/platform_keys/platform_keys_service_factory.cc b/chrome/browser/ash/platform_keys/platform_keys_service_factory.cc
index 59f3be904..f93f887 100644
--- a/chrome/browser/ash/platform_keys/platform_keys_service_factory.cc
+++ b/chrome/browser/ash/platform_keys/platform_keys_service_factory.cc
@@ -16,10 +16,8 @@
 #include "chrome/browser/certificate_provider/certificate_provider.h"
 #include "chrome/browser/net/nss_service.h"
 #include "chrome/browser/net/nss_service_factory.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chromeos/ash/components/network/system_token_cert_db_storage.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/user_manager/user.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
@@ -171,9 +169,9 @@
 }
 
 PlatformKeysServiceFactory::PlatformKeysServiceFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "PlatformKeysService",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildServicesRedirectedToOriginal()) {
   DependsOn(NssServiceFactory::GetInstance());
 }
 
@@ -209,10 +207,5 @@
   BrowserContextKeyedServiceFactory::BrowserContextShutdown(context);
 }
 
-content::BrowserContext* PlatformKeysServiceFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 }  // namespace platform_keys
 }  // namespace ash
diff --git a/chrome/browser/ash/platform_keys/platform_keys_service_factory.h b/chrome/browser/ash/platform_keys/platform_keys_service_factory.h
index 26bc57d9..513ee26 100644
--- a/chrome/browser/ash/platform_keys/platform_keys_service_factory.h
+++ b/chrome/browser/ash/platform_keys/platform_keys_service_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_ASH_PLATFORM_KEYS_PLATFORM_KEYS_SERVICE_FACTORY_H_
 #define CHROME_BROWSER_ASH_PLATFORM_KEYS_PLATFORM_KEYS_SERVICE_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace base {
 template <typename T>
@@ -18,7 +18,7 @@
 class PlatformKeysService;
 
 // Factory to create PlatformKeysService.
-class PlatformKeysServiceFactory : public BrowserContextKeyedServiceFactory {
+class PlatformKeysServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static PlatformKeysService* GetForBrowserContext(
       content::BrowserContext* context);
@@ -62,8 +62,6 @@
   ~PlatformKeysServiceFactory() override;
 
   // BrowserContextKeyedServiceFactory:
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
   void BrowserContextShutdown(content::BrowserContext* context) override;
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_engagement_metrics_service.cc b/chrome/browser/ash/plugin_vm/plugin_vm_engagement_metrics_service.cc
index 46383e0..2da816a 100644
--- a/chrome/browser/ash/plugin_vm/plugin_vm_engagement_metrics_service.cc
+++ b/chrome/browser/ash/plugin_vm/plugin_vm_engagement_metrics_service.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/ash/plugin_vm/plugin_vm_pref_names.h"
 #include "chrome/browser/ash/plugin_vm/plugin_vm_util.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace plugin_vm {
 
@@ -28,9 +27,7 @@
 }
 
 PluginVmEngagementMetricsService::Factory::Factory()
-    : BrowserContextKeyedServiceFactory(
-          "PluginVmEngagementMetricsService",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("PluginVmEngagementMetricsService") {}
 
 PluginVmEngagementMetricsService::Factory::~Factory() = default;
 
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_engagement_metrics_service.h b/chrome/browser/ash/plugin_vm/plugin_vm_engagement_metrics_service.h
index 2646f68..3bc8f9d 100644
--- a/chrome/browser/ash/plugin_vm/plugin_vm_engagement_metrics_service.h
+++ b/chrome/browser/ash/plugin_vm/plugin_vm_engagement_metrics_service.h
@@ -6,8 +6,8 @@
 #define CHROME_BROWSER_ASH_PLUGIN_VM_PLUGIN_VM_ENGAGEMENT_METRICS_SERVICE_H_
 
 #include "base/no_destructor.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "components/guest_os/guest_os_engagement_metrics.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 class Profile;
@@ -18,7 +18,7 @@
 // per GuestOsEngagementMetrics.
 class PluginVmEngagementMetricsService : public KeyedService {
  public:
-  class Factory : public BrowserContextKeyedServiceFactory {
+  class Factory : public ProfileKeyedServiceFactory {
    public:
     static PluginVmEngagementMetricsService* GetForProfile(Profile* profile);
     static Factory* GetInstance();
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_installer_factory.cc b/chrome/browser/ash/plugin_vm/plugin_vm_installer_factory.cc
index 04234ea1..ec4df1ec 100644
--- a/chrome/browser/ash/plugin_vm/plugin_vm_installer_factory.cc
+++ b/chrome/browser/ash/plugin_vm/plugin_vm_installer_factory.cc
@@ -6,9 +6,7 @@
 
 #include "chrome/browser/ash/plugin_vm/plugin_vm_installer.h"
 #include "chrome/browser/download/background_download_service_factory.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace plugin_vm {
 
@@ -24,9 +22,9 @@
 }
 
 PluginVmInstallerFactory::PluginVmInstallerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "PluginVmInstaller",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildServicesRedirectedToOriginal()) {
   DependsOn(BackgroundDownloadServiceFactory::GetInstance());
 }
 
@@ -37,9 +35,4 @@
   return new PluginVmInstaller(Profile::FromBrowserContext(context));
 }
 
-content::BrowserContext* PluginVmInstallerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 }  // namespace plugin_vm
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_installer_factory.h b/chrome/browser/ash/plugin_vm/plugin_vm_installer_factory.h
index 3ec21005..24b0f7c4 100644
--- a/chrome/browser/ash/plugin_vm/plugin_vm_installer_factory.h
+++ b/chrome/browser/ash/plugin_vm/plugin_vm_installer_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_PLUGIN_VM_PLUGIN_VM_INSTALLER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -18,7 +18,7 @@
 
 class PluginVmInstaller;
 
-class PluginVmInstallerFactory : public BrowserContextKeyedServiceFactory {
+class PluginVmInstallerFactory : public ProfileKeyedServiceFactory {
  public:
   static PluginVmInstaller* GetForProfile(Profile* profile);
   static PluginVmInstallerFactory* GetInstance();
@@ -35,8 +35,6 @@
   // BrowserContextKeyedServiceFactory implementation.
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace plugin_vm
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_manager_factory.cc b/chrome/browser/ash/plugin_vm/plugin_vm_manager_factory.cc
index 1485686..b248a7b3 100644
--- a/chrome/browser/ash/plugin_vm/plugin_vm_manager_factory.cc
+++ b/chrome/browser/ash/plugin_vm/plugin_vm_manager_factory.cc
@@ -7,7 +7,6 @@
 #include "base/no_destructor.h"
 #include "chrome/browser/ash/plugin_vm/plugin_vm_manager_impl.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace plugin_vm {
 
@@ -22,9 +21,7 @@
 }
 
 PluginVmManagerFactory::PluginVmManagerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "PluginVmManager",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("PluginVmManager") {}
 
 PluginVmManagerFactory::~PluginVmManagerFactory() = default;
 
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_manager_factory.h b/chrome/browser/ash/plugin_vm/plugin_vm_manager_factory.h
index 53daa087..04d3027 100644
--- a/chrome/browser/ash/plugin_vm/plugin_vm_manager_factory.h
+++ b/chrome/browser/ash/plugin_vm/plugin_vm_manager_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_PLUGIN_VM_PLUGIN_VM_MANAGER_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -14,7 +14,7 @@
 
 class PluginVmManager;
 
-class PluginVmManagerFactory : public BrowserContextKeyedServiceFactory {
+class PluginVmManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static PluginVmManager* GetForProfile(Profile* profile);
 
diff --git a/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_factory.cc b/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_factory.cc
index fa148cc4..abdaca78 100644
--- a/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_factory.cc
+++ b/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_factory.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
 
 namespace policy {
@@ -20,9 +19,7 @@
 }
 
 UserCloudPolicyTokenForwarderFactory::UserCloudPolicyTokenForwarderFactory()
-    : BrowserContextKeyedServiceFactory(
-          "UserCloudPolicyTokenForwarder",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("UserCloudPolicyTokenForwarder") {
   DependsOn(IdentityManagerFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_factory.h b/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_factory.h
index 8865c094..85dd432 100644
--- a/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_factory.h
+++ b/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_POLICY_CORE_USER_CLOUD_POLICY_TOKEN_FORWARDER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -16,8 +16,7 @@
 
 // Creates instances of UserCloudPolicyTokenForwarder for Profiles that may need
 // to fetch the policy token.
-class UserCloudPolicyTokenForwarderFactory
-    : public BrowserContextKeyedServiceFactory {
+class UserCloudPolicyTokenForwarderFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns an instance of the UserCloudPolicyTokenForwarderFactory singleton.
   static UserCloudPolicyTokenForwarderFactory* GetInstance();
diff --git a/chrome/browser/ash/policy/dlp/dlp_content_manager_ash_browsertest.cc b/chrome/browser/ash/policy/dlp/dlp_content_manager_ash_browsertest.cc
index a4092fd..4d88119f 100644
--- a/chrome/browser/ash/policy/dlp/dlp_content_manager_ash_browsertest.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_content_manager_ash_browsertest.cc
@@ -1477,7 +1477,7 @@
                         /*total_count=*/2,
                         /*blocked_suffix=*/dlp::kScreenShareBlockedUMA,
                         /*warned_suffix=*/dlp::kScreenShareWarnedUMA);
-  DismissDialog(/*expect_allowed=*/true);
+  DismissDialog(/*allow=*/true);
 
   EXPECT_CALL(state_change_cb_,
               Run(testing::_, blink::mojom::MediaStreamStateChange::PAUSE))
@@ -1776,9 +1776,8 @@
   ASSERT_TRUE(events_.empty());
 }
 
-// TODO(crbug.com/1319941): Enable after fixing.
 IN_PROC_BROWSER_TEST_F(DlpContentManagerAshScreenShareBrowserTest,
-                       DISABLED_NavigateWebContents) {
+                       NavigateWebContents) {
   SetupReporting();
   const GURL restricted_url(kGoogleUrl);
   const GURL reported_url(kExampleUrl);
@@ -1789,6 +1788,7 @@
       browser()->tab_strip_model()->GetActiveWebContents();
 
   // Start sharing unrestricted content.
+  helper_->UpdateConfidentiality(web_contents, kEmptyRestrictionSet);
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), unrestricted_url));
   // Although the share should be paused and resumed, DLP will only call
   // state_change_cb_ once to pause it. When it's supposed to be resumed, it
@@ -1799,22 +1799,27 @@
               Run(testing::_, blink::mojom::MediaStreamStateChange::PAUSE))
       .Times(1);
   EXPECT_CALL(source_cb_, Run).Times(1);
-  // Navigate to reported content. Should emit a report event.
+
+  //   Navigate to reported content. Should emit a report event.
+  helper_->UpdateConfidentiality(web_contents, kScreenShareReported);
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), reported_url));
-  helper_->ChangeConfidentiality(web_contents, kScreenShareReported);
+  helper_->CheckRunningScreenShares();
+
   CheckEvents(DlpRulesManager::Restriction::kScreenShare,
               DlpRulesManager::Level::kReport, 1u);
 
-  // Navigate to unrestricted content.
+  // Navigate to unrestricted content. Should not emit any events.
+  helper_->UpdateConfidentiality(web_contents, kEmptyRestrictionSet);
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), unrestricted_url));
-  helper_->ChangeConfidentiality(web_contents, kEmptyRestrictionSet);
+  helper_->CheckRunningScreenShares();
   CheckEvents(DlpRulesManager::Restriction::kScreenShare,
               DlpRulesManager::Level::kReport, 1u);
 
   // Navigate to the previous reported content. Should not emit any report
   // event.
+  helper_->UpdateConfidentiality(web_contents, kScreenShareReported);
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), reported_url));
-  helper_->ChangeConfidentiality(web_contents, kScreenShareReported);
+  helper_->CheckRunningScreenShares();
   CheckEvents(DlpRulesManager::Restriction::kScreenShare,
               DlpRulesManager::Level::kReport, 1u);
 
@@ -1827,8 +1832,9 @@
             0);
 
   // Navigate to restricted content. Should emit a block event.
+  helper_->UpdateConfidentiality(web_contents, kScreenShareRestricted);
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), restricted_url));
-  helper_->ChangeConfidentiality(web_contents, kScreenShareRestricted);
+  helper_->CheckRunningScreenShares();
   ASSERT_EQ(events_.size(), 2u);
   EXPECT_THAT(events_[1],
               IsDlpPolicyEvent(CreateDlpPolicyEvent(
@@ -1841,8 +1847,9 @@
 
   // Navigate to the previous reported content. Should not emit any report
   // event.
+  helper_->UpdateConfidentiality(web_contents, kScreenShareReported);
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), reported_url));
-  helper_->ChangeConfidentiality(web_contents, kScreenShareReported);
+  helper_->CheckRunningScreenShares();
   EXPECT_EQ(events_.size(), 2u);
 
   // Expect resume notification. Screen share should be paused, not blocked,
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller.cc b/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
index ffc03bc1..4a33d92 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
@@ -211,6 +211,18 @@
   return restricted_files_sources;
 }
 
+std::map<std::string, std::set<std::string>>
+DlpFilesController::GetDlpRestrictionDetails(const std::string& sourceUrl) {
+  policy::DlpRulesManager* dlp_rules_manager =
+      policy::DlpRulesManagerFactory::GetForPrimaryProfile();
+  if (!dlp_rules_manager) {
+    return {};
+  }
+  // TODO(crbug.com/1346254): Call DlpRulesManager to get the restricted
+  // destinations and components; aggregate and convert to string format.
+  return {};
+}
+
 void DlpFilesController::ReturnDisallowedTransfers(
     base::flat_map<std::string, storage::FileSystemURL> files_map,
     GetDisallowedTransfersCallback result_callback,
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller.h b/chrome/browser/ash/policy/dlp/dlp_files_controller.h
index b5ecd0f..d14c3a9 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_controller.h
+++ b/chrome/browser/ash/policy/dlp/dlp_files_controller.h
@@ -86,6 +86,10 @@
       std::vector<GURL> files_sources,
       std::string destination);
 
+  // TODO(crbug.com/1346254): Add comments when implementation is complete.
+  std::map<std::string, std::set<std::string>> GetDlpRestrictionDetails(
+      const std::string& sourceUrl);
+
  private:
   void ReturnDisallowedTransfers(
       base::flat_map<std::string, storage::FileSystemURL> files_map,
diff --git a/chrome/browser/ash/policy/uploading/system_log_uploader.h b/chrome/browser/ash/policy/uploading/system_log_uploader.h
index d7f95fe..7554f163 100644
--- a/chrome/browser/ash/policy/uploading/system_log_uploader.h
+++ b/chrome/browser/ash/policy/uploading/system_log_uploader.h
@@ -96,7 +96,7 @@
 
   // Enum used for UMA. Do NOT reorder or remove entry.
   // Don't forget to update enums.xml when adding new entries.
-  enum SystemLogUploadResult {
+  enum SystemLogUploadResult : uint8_t {
     NON_ZIPPED_LOGS_UPLOAD_SUCCESS = 0,
     ZIPPED_LOGS_UPLOAD_SUCCESS = 1,
     NON_ZIPPED_LOGS_UPLOAD_FAILURE = 2,
diff --git a/chrome/browser/ash/printing/cups_print_job_manager_factory.cc b/chrome/browser/ash/printing/cups_print_job_manager_factory.cc
index 4a4ed7d..a694398 100644
--- a/chrome/browser/ash/printing/cups_print_job_manager_factory.cc
+++ b/chrome/browser/ash/printing/cups_print_job_manager_factory.cc
@@ -7,9 +7,7 @@
 #include "chrome/browser/ash/printing/cups_print_job_manager.h"
 #include "chrome/browser/ash/printing/cups_printers_manager_factory.h"
 #include "chrome/browser/ash/printing/synced_printers_manager_factory.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 namespace {
@@ -31,15 +29,10 @@
       GetInstance()->GetServiceForBrowserContext(context, true));
 }
 
-content::BrowserContext* CupsPrintJobManagerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 CupsPrintJobManagerFactory::CupsPrintJobManagerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "CupsPrintJobManagerFactory",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildServicesRedirectedToOriginal()) {
   DependsOn(SyncedPrintersManagerFactory::GetInstance());
   DependsOn(CupsPrintersManagerFactory::GetInstance());
 }
diff --git a/chrome/browser/ash/printing/cups_print_job_manager_factory.h b/chrome/browser/ash/printing/cups_print_job_manager_factory.h
index 5d8c08d..d9fd5ea 100644
--- a/chrome/browser/ash/printing/cups_print_job_manager_factory.h
+++ b/chrome/browser/ash/printing/cups_print_job_manager_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_PRINTING_CUPS_PRINT_JOB_MANAGER_FACTORY_H_
 
 #include "base/lazy_instance.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -16,7 +16,7 @@
 
 class CupsPrintJobManager;
 
-class CupsPrintJobManagerFactory : public BrowserContextKeyedServiceFactory {
+class CupsPrintJobManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static CupsPrintJobManagerFactory* GetInstance();
   static CupsPrintJobManager* GetForBrowserContext(
@@ -26,10 +26,6 @@
   CupsPrintJobManagerFactory& operator=(const CupsPrintJobManagerFactory&) =
       delete;
 
- protected:
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
-
  private:
   friend struct base::LazyInstanceTraitsBase<CupsPrintJobManagerFactory>;
 
diff --git a/chrome/browser/ash/printing/cups_printers_manager_factory.cc b/chrome/browser/ash/printing/cups_printers_manager_factory.cc
index 18b5ebf..9999903 100644
--- a/chrome/browser/ash/printing/cups_printers_manager_factory.cc
+++ b/chrome/browser/ash/printing/cups_printers_manager_factory.cc
@@ -9,9 +9,7 @@
 #include "chrome/browser/ash/printing/cups_printers_manager_proxy.h"
 #include "chrome/browser/ash/printing/synced_printers_manager_factory.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 
@@ -28,9 +26,13 @@
 }
 
 CupsPrintersManagerFactory::CupsPrintersManagerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "CupsPrintersManagerFactory",
-          BrowserContextDependencyManager::GetInstance()),
+          // In Guest Mode, only use the OffTheRecord profile.
+          ProfileSelections::Builder()
+              .WithRegular(ProfileSelection::kOwnInstance)
+              .WithGuest(ProfileSelection::kOffTheRecordOnly)
+              .Build()),
       proxy_(CupsPrintersManagerProxy::Create()) {
   DependsOn(SyncedPrintersManagerFactory::GetInstance());
 }
@@ -49,6 +51,12 @@
     return nullptr;
   }
 
+  // This condition still needs to be explicitly stated here despite having
+  // ProfileKeyedService logic implemented because `IsGuestSession()` and
+  // `IsRegularProfile()` are not yet mutually exclusive in ASH and Lacros.
+  // TODO(crbug.com/1348572): remove this condition when `IsGuestSession() is
+  // fixed.
+  //
   // In Guest Mode, only use the OffTheRecord profile.
   if (profile->IsGuestSession() && !profile->IsOffTheRecord()) {
     return nullptr;
@@ -72,11 +80,6 @@
   BrowserContextKeyedServiceFactory::BrowserContextShutdown(context);
 }
 
-content::BrowserContext* CupsPrintersManagerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
-
 bool CupsPrintersManagerFactory::ServiceIsCreatedWithBrowserContext() const {
   return true;
 }
diff --git a/chrome/browser/ash/printing/cups_printers_manager_factory.h b/chrome/browser/ash/printing/cups_printers_manager_factory.h
index d1f9d01..2a88461 100644
--- a/chrome/browser/ash/printing/cups_printers_manager_factory.h
+++ b/chrome/browser/ash/printing/cups_printers_manager_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_PRINTING_CUPS_PRINTERS_MANAGER_FACTORY_H_
 
 #include <memory>
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -22,7 +22,7 @@
 class CupsPrintersManager;
 class CupsPrintersManagerProxy;
 
-class CupsPrintersManagerFactory : public BrowserContextKeyedServiceFactory {
+class CupsPrintersManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static CupsPrintersManagerFactory* GetInstance();
   static CupsPrintersManager* GetForBrowserContext(
@@ -46,8 +46,6 @@
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
   void BrowserContextShutdown(content::BrowserContext* context) override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
   bool ServiceIsNULLWhileTesting() const override;
 
diff --git a/chrome/browser/ash/printing/history/print_job_history_service_factory.cc b/chrome/browser/ash/printing/history/print_job_history_service_factory.cc
index 8a3c852..ea417a3 100644
--- a/chrome/browser/ash/printing/history/print_job_history_service_factory.cc
+++ b/chrome/browser/ash/printing/history/print_job_history_service_factory.cc
@@ -15,7 +15,6 @@
 #include "chrome/browser/ash/printing/history/print_job_reporting_service_factory.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "content/public/browser/storage_partition.h"
 
@@ -34,9 +33,7 @@
 }
 
 PrintJobHistoryServiceFactory::PrintJobHistoryServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "PrintJobHistoryService",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("PrintJobHistoryService") {
   DependsOn(CupsPrintJobManagerFactory::GetInstance());
   DependsOn(PrintJobReportingServiceFactory::GetInstance());
 }
diff --git a/chrome/browser/ash/printing/history/print_job_history_service_factory.h b/chrome/browser/ash/printing/history/print_job_history_service_factory.h
index 9507706d..95633b7 100644
--- a/chrome/browser/ash/printing/history/print_job_history_service_factory.h
+++ b/chrome/browser/ash/printing/history/print_job_history_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_PRINTING_HISTORY_PRINT_JOB_HISTORY_SERVICE_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -22,7 +22,7 @@
 
 // Singleton that owns all PrintJobHistoryServices and associates them with
 // Profiles.
-class PrintJobHistoryServiceFactory : public BrowserContextKeyedServiceFactory {
+class PrintJobHistoryServiceFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns the PrintJobHistoryService for |context|, creating it if it is not
   // yet created.
diff --git a/chrome/browser/ash/printing/history/print_job_reporting_service_factory.cc b/chrome/browser/ash/printing/history/print_job_reporting_service_factory.cc
index d9a3f3f..0b333870 100644
--- a/chrome/browser/ash/printing/history/print_job_reporting_service_factory.cc
+++ b/chrome/browser/ash/printing/history/print_job_reporting_service_factory.cc
@@ -6,7 +6,6 @@
 
 #include "base/memory/singleton.h"
 #include "chrome/browser/ash/printing/history/print_job_reporting_service.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 
@@ -24,9 +23,7 @@
 }
 
 PrintJobReportingServiceFactory::PrintJobReportingServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "PrintJobReportingServiceFactory",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("PrintJobReportingServiceFactory") {}
 
 PrintJobReportingServiceFactory::~PrintJobReportingServiceFactory() = default;
 
diff --git a/chrome/browser/ash/printing/history/print_job_reporting_service_factory.h b/chrome/browser/ash/printing/history/print_job_reporting_service_factory.h
index e1a7752ca..ae30e46 100644
--- a/chrome/browser/ash/printing/history/print_job_reporting_service_factory.h
+++ b/chrome/browser/ash/printing/history/print_job_reporting_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_PRINTING_HISTORY_PRINT_JOB_REPORTING_SERVICE_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -17,8 +17,7 @@
 
 // Singleton that owns all PrintJobReportingServices and associates them with
 // Profiles.
-class PrintJobReportingServiceFactory
-    : public BrowserContextKeyedServiceFactory {
+class PrintJobReportingServiceFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns the PrintJobReportingService for |context|, creating it if it is
   // not yet created.
diff --git a/chrome/browser/ash/printing/oauth2/authorization_zone.h b/chrome/browser/ash/printing/oauth2/authorization_zone.h
index 514a889..73d3fc9 100644
--- a/chrome/browser/ash/printing/oauth2/authorization_zone.h
+++ b/chrome/browser/ash/printing/oauth2/authorization_zone.h
@@ -88,6 +88,10 @@
   virtual void MarkEndpointAccessTokenAsExpired(
       const chromeos::Uri& ipp_endpoint,
       const std::string& endpoint_access_token) = 0;
+  // This method must be called when the Authorization Zone becomes untrusted.
+  // The method cancels all existing sessions and calls all pending callbacks
+  // in the object with status StatusCode::kUnknownAuthorizationServer.
+  virtual void MarkAuthorizationZoneAsUntrusted() = 0;
 
  protected:
   AuthorizationZone() = default;
diff --git a/chrome/browser/ash/printing/oauth2/authorization_zone_impl.cc b/chrome/browser/ash/printing/oauth2/authorization_zone_impl.cc
index 4ceade97..95acd85 100644
--- a/chrome/browser/ash/printing/oauth2/authorization_zone_impl.cc
+++ b/chrome/browser/ash/printing/oauth2/authorization_zone_impl.cc
@@ -347,6 +347,34 @@
   waiting_authorizations_.clear();
 }
 
+void AuthorizationZoneImpl::MarkAuthorizationZoneAsUntrusted() {
+  const std::string msg = "Authorization Server marked as untrusted";
+
+  pending_authorizations_.clear();
+
+  // This method will call all callbacks from `waiting_authorizations_` and
+  // empty it.
+  OnInitializeCallback(StatusCode::kUnknownAuthorizationServer, msg);
+
+  // Clear `sessions_`.
+  for (std::unique_ptr<AuthorizationServerSession>& session : sessions_) {
+    std::vector<StatusCallback> callbacks = session->TakeWaitingList();
+    for (StatusCallback& callback : callbacks) {
+      std::move(callback).Run(StatusCode::kUnknownAuthorizationServer, msg);
+    }
+  }
+  sessions_.clear();
+
+  // Clear `ipp_endpoints_`.
+  for (auto& [_, ipp_endpoint] : ipp_endpoints_) {
+    std::vector<StatusCallback> callbacks = ipp_endpoint->TakeWaitingList();
+    for (StatusCallback& callback : callbacks) {
+      std::move(callback).Run(StatusCode::kUnknownAuthorizationServer, msg);
+    }
+  }
+  ipp_endpoints_.clear();
+}
+
 void AuthorizationZoneImpl::OnInitializeCallback(StatusCode status,
                                                  const std::string& data) {
   if (status == StatusCode::kOK) {
diff --git a/chrome/browser/ash/printing/oauth2/authorization_zone_impl.h b/chrome/browser/ash/printing/oauth2/authorization_zone_impl.h
index 981d108d..2da8d1e 100644
--- a/chrome/browser/ash/printing/oauth2/authorization_zone_impl.h
+++ b/chrome/browser/ash/printing/oauth2/authorization_zone_impl.h
@@ -49,17 +49,15 @@
   // AuthorizationZone interface.
   void InitAuthorization(const std::string& scope,
                          StatusCallback callback) override;
-  // AuthorizationZone interface.
   void FinishAuthorization(const GURL& redirect_url,
                            StatusCallback callback) override;
-  // AuthorizationZone interface.
   void GetEndpointAccessToken(const chromeos::Uri& ipp_endpoint,
                               const std::string& scope,
                               StatusCallback callback) override;
-  // AuthorizationZone interface.
   void MarkEndpointAccessTokenAsExpired(
       const chromeos::Uri& ipp_endpoint,
       const std::string& endpoint_access_token) override;
+  void MarkAuthorizationZoneAsUntrusted() override;
 
  private:
   // This method processes (and removes) all elements from
diff --git a/chrome/browser/ash/printing/oauth2/authorization_zone_unittest.cc b/chrome/browser/ash/printing/oauth2/authorization_zone_unittest.cc
index a0b26d0e..2bbfbc7 100644
--- a/chrome/browser/ash/printing/oauth2/authorization_zone_unittest.cc
+++ b/chrome/browser/ash/printing/oauth2/authorization_zone_unittest.cc
@@ -462,6 +462,54 @@
   EXPECT_EQ(crs[0].status, printing::oauth2::StatusCode::kAuthorizationNeeded);
 }
 
+TEST_F(PrintingOAuth2AuthorizationZoneTest, CancellationDuringInitialization) {
+  CreateAuthorizationZone("clientID");
+  CallbackResult cr_0;
+  CallbackResult cr_1;
+
+  // Try to start two sessions and cancel before the first response from the
+  // server returns.
+  authorization_zone_->InitAuthorization("scope0", BindResult(cr_0));
+  authorization_zone_->InitAuthorization("scope1", BindResult(cr_1));
+  authorization_zone_->MarkAuthorizationZoneAsUntrusted();
+  EXPECT_EQ(cr_0.status, StatusCode::kUnknownAuthorizationServer);
+  EXPECT_EQ(cr_1.status, StatusCode::kUnknownAuthorizationServer);
+
+  // Response from the server should not trigger anything.
+  ProcessMetadataRequest();
+  EXPECT_EQ(cr_0.status, StatusCode::kUnknownAuthorizationServer);
+  EXPECT_EQ(cr_1.status, StatusCode::kUnknownAuthorizationServer);
+}
+
+TEST_F(PrintingOAuth2AuthorizationZoneTest, CancelExistingSessions) {
+  CreateAuthorizationZone("clientID");
+  CallbackResult cr_0;
+  CallbackResult cr_1;
+
+  // Start two sessions and send request for the first access token.
+  authorization_zone_->InitAuthorization("scope0", BindResult(cr_0));
+  authorization_zone_->InitAuthorization("scope1", BindResult(cr_1));
+  ProcessMetadataRequest();
+  ASSERT_EQ(cr_0.status, printing::oauth2::StatusCode::kOK);
+  ASSERT_EQ(cr_1.status, printing::oauth2::StatusCode::kOK);
+  auto auth_url_0 = SimulateAuthorization(cr_0.data, "auth_code_0", "scope0");
+  auto auth_url_1 = SimulateAuthorization(cr_1.data, "auth_code_1", "scope1");
+  authorization_zone_->FinishAuthorization(GURL(auth_url_0), BindResult(cr_0));
+  authorization_zone_->FinishAuthorization(GURL(auth_url_1), BindResult(cr_1));
+
+  // Get the access token for the first session and ask for an endpoint access
+  // token.
+  ProcessFirstTokenRequest("auth_code_0", "acc_token_0", "ref_token_0");
+  ASSERT_EQ(cr_0.status, printing::oauth2::StatusCode::kOK);
+  authorization_zone_->GetEndpointAccessToken(chromeos::Uri("ipp://printer0"),
+                                              "scope0", BindResult(cr_0));
+
+  // Cancel the zone. All pending callbacks should return.
+  authorization_zone_->MarkAuthorizationZoneAsUntrusted();
+  EXPECT_EQ(cr_0.status, StatusCode::kUnknownAuthorizationServer);
+  EXPECT_EQ(cr_1.status, StatusCode::kUnknownAuthorizationServer);
+}
+
 TEST_F(PrintingOAuth2AuthorizationZoneTest, PrefixInErrorMessage) {
   CallbackResult cr;
   CreateAuthorizationZone("");
diff --git a/chrome/browser/ash/printing/oauth2/authorization_zones_manager.cc b/chrome/browser/ash/printing/oauth2/authorization_zones_manager.cc
index 28f1d3c..033edd4 100644
--- a/chrome/browser/ash/printing/oauth2/authorization_zones_manager.cc
+++ b/chrome/browser/ash/printing/oauth2/authorization_zones_manager.cc
@@ -119,7 +119,7 @@
   }
 
   // Returns a pointer to the corresponding element in `servers_` or nullptr if
-  // `auth_server` is unknown.
+  // `auth_server` is untrusted.
   AuthorizationZone* GetAuthorizationZone(const GURL& auth_server) {
     auto it_server = servers_.find(auth_server);
     if (it_server == servers_.end()) {
diff --git a/chrome/browser/ash/printing/oauth2/authorization_zones_manager_factory.cc b/chrome/browser/ash/printing/oauth2/authorization_zones_manager_factory.cc
index 0ec05648c..7b9a84f6 100644
--- a/chrome/browser/ash/printing/oauth2/authorization_zones_manager_factory.cc
+++ b/chrome/browser/ash/printing/oauth2/authorization_zones_manager_factory.cc
@@ -6,9 +6,7 @@
 
 #include "base/no_destructor.h"
 #include "chrome/browser/ash/printing/oauth2/authorization_zones_manager.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 namespace printing {
@@ -30,9 +28,9 @@
 }
 
 AuthorizationZonesManagerFactory::AuthorizationZonesManagerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "AuthorizationZonesManagerFactory",
-          BrowserContextDependencyManager::GetInstance()) {}
+          ProfileSelections::BuildServicesRedirectedToOriginal()) {}
 
 AuthorizationZonesManagerFactory::~AuthorizationZonesManagerFactory() = default;
 
@@ -42,12 +40,6 @@
       .release();
 }
 
-content::BrowserContext*
-AuthorizationZonesManagerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 }  // namespace oauth2
 }  // namespace printing
 }  // namespace ash
diff --git a/chrome/browser/ash/printing/oauth2/authorization_zones_manager_factory.h b/chrome/browser/ash/printing/oauth2/authorization_zones_manager_factory.h
index b618f7f5..d50e105 100644
--- a/chrome/browser/ash/printing/oauth2/authorization_zones_manager_factory.h
+++ b/chrome/browser/ash/printing/oauth2/authorization_zones_manager_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_PRINTING_OAUTH2_AUTHORIZATION_ZONES_MANAGER_FACTORY_H_
 
 #include "base/no_destructor.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -18,8 +18,7 @@
 
 class AuthorizationZonesManager;
 
-class AuthorizationZonesManagerFactory
-    : public BrowserContextKeyedServiceFactory {
+class AuthorizationZonesManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static AuthorizationZonesManagerFactory* GetInstance();
   static AuthorizationZonesManager* GetForBrowserContext(
@@ -39,8 +38,6 @@
   // BrowserContextKeyedServiceFactory overrides:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace oauth2
diff --git a/chrome/browser/ash/printing/oauth2/authorization_zones_manager_unittest.cc b/chrome/browser/ash/printing/oauth2/authorization_zones_manager_unittest.cc
index dd994e7..a42b60f4 100644
--- a/chrome/browser/ash/printing/oauth2/authorization_zones_manager_unittest.cc
+++ b/chrome/browser/ash/printing/oauth2/authorization_zones_manager_unittest.cc
@@ -43,6 +43,7 @@
               (const chromeos::Uri& ipp_endpoint,
                const std::string& endpoint_access_token),
               (override));
+  MOCK_METHOD(void, MarkAuthorizationZoneAsUntrusted, (), (override));
 };
 
 class PrintingOAuth2AuthorizationZonesManagerTest : public testing::Test {
@@ -166,7 +167,7 @@
       AuthorizationZonesManager::Create(&profile_);
 };
 
-TEST_F(PrintingOAuth2AuthorizationZonesManagerTest, UnknownAuthServer) {
+TEST_F(PrintingOAuth2AuthorizationZonesManagerTest, UntrustedAuthServer) {
   GURL url("https://ala.ma.kota/albo/psa");
   GURL redirect_url("https://abc:123/def?ghi=jkl");
   chromeos::Uri ipp_endpoint("https://printer");
diff --git a/chrome/browser/ash/printing/oauth2/status_code.h b/chrome/browser/ash/printing/oauth2/status_code.h
index c804108..9779b1cf 100644
--- a/chrome/browser/ash/printing/oauth2/status_code.h
+++ b/chrome/browser/ash/printing/oauth2/status_code.h
@@ -25,7 +25,8 @@
   // The client is not registered to the server and the server does not support
   // dynamic registration (as described in rfc7591).
   kClientNotRegistered,
-  // The server is unknown (not trusted).
+  // The server is untrusted.
+  // TODO(b:240799350) - replace Unknown with Untrusted.
   kUnknownAuthorizationServer,
   // The server denied the request.
   kAccessDenied,
diff --git a/chrome/browser/ash/printing/print_management/printing_manager_factory.cc b/chrome/browser/ash/printing/print_management/printing_manager_factory.cc
index 630787c..59d3d1e 100644
--- a/chrome/browser/ash/printing/print_management/printing_manager_factory.cc
+++ b/chrome/browser/ash/printing/print_management/printing_manager_factory.cc
@@ -9,10 +9,8 @@
 #include "chrome/browser/ash/printing/print_management/printing_manager.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/history/history_service_factory.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 
 namespace ash {
@@ -32,9 +30,9 @@
 }
 
 PrintingManagerFactory::PrintingManagerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "PrintingManager",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildServicesRedirectedToOriginal()) {
   DependsOn(PrintJobHistoryServiceFactory::GetInstance());
   DependsOn(HistoryServiceFactory::GetInstance());
   DependsOn(CupsPrintJobManagerFactory::GetInstance());
@@ -66,11 +64,6 @@
   return BuildInstanceFor(static_cast<Profile*>(context));
 }
 
-content::BrowserContext* PrintingManagerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 void PrintingManagerFactory::RegisterProfilePrefs(
     user_prefs::PrefRegistrySyncable* user_prefs) {
   user_prefs->RegisterBooleanPref(prefs::kDeletePrintJobHistoryAllowed, true);
diff --git a/chrome/browser/ash/printing/print_management/printing_manager_factory.h b/chrome/browser/ash/printing/print_management/printing_manager_factory.h
index 186589aab..e2336a4 100644
--- a/chrome/browser/ash/printing/print_management/printing_manager_factory.h
+++ b/chrome/browser/ash/printing/print_management/printing_manager_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_PRINTING_PRINT_MANAGEMENT_PRINTING_MANAGER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace user_prefs {
 class PrefRegistrySyncable;
@@ -21,7 +21,7 @@
 class PrintingManager;
 
 // Factory for PrintingManager.
-class PrintingManagerFactory : public BrowserContextKeyedServiceFactory {
+class PrintingManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static PrintingManager* GetForProfile(Profile* profile);
   static PrintingManagerFactory* GetInstance();
@@ -39,8 +39,6 @@
   // BrowserContextKeyedServiceFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   void RegisterProfilePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
   bool ServiceIsCreatedWithBrowserContext() const override;
diff --git a/chrome/browser/ash/printing/printer_event_tracker_factory.cc b/chrome/browser/ash/printing/printer_event_tracker_factory.cc
index 16a48b1e..38f612f4 100644
--- a/chrome/browser/ash/printing/printer_event_tracker_factory.cc
+++ b/chrome/browser/ash/printing/printer_event_tracker_factory.cc
@@ -7,10 +7,8 @@
 #include "base/lazy_instance.h"
 #include "chrome/browser/ash/printing/printer_event_tracker.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 namespace {
@@ -31,9 +29,9 @@
 }
 
 PrinterEventTrackerFactory::PrinterEventTrackerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "PrinterEventTracker",
-          BrowserContextDependencyManager::GetInstance()) {}
+          ProfileSelections::BuildServicesForAllProfiles()) {}
 PrinterEventTrackerFactory::~PrinterEventTrackerFactory() = default;
 
 void PrinterEventTrackerFactory::SetLogging(bool enabled) {
@@ -57,9 +55,4 @@
   return tracker;
 }
 
-content::BrowserContext* PrinterEventTrackerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
-}
-
 }  // namespace ash
diff --git a/chrome/browser/ash/printing/printer_event_tracker_factory.h b/chrome/browser/ash/printing/printer_event_tracker_factory.h
index 93d7558..ad2b72a9 100644
--- a/chrome/browser/ash/printing/printer_event_tracker_factory.h
+++ b/chrome/browser/ash/printing/printer_event_tracker_factory.h
@@ -5,13 +5,13 @@
 #ifndef CHROME_BROWSER_ASH_PRINTING_PRINTER_EVENT_TRACKER_FACTORY_H_
 #define CHROME_BROWSER_ASH_PRINTING_PRINTER_EVENT_TRACKER_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace ash {
 
 class PrinterEventTracker;
 
-class PrinterEventTrackerFactory : public BrowserContextKeyedServiceFactory {
+class PrinterEventTrackerFactory : public ProfileKeyedServiceFactory {
  public:
   static PrinterEventTrackerFactory* GetInstance();
   static PrinterEventTracker* GetForBrowserContext(
@@ -36,8 +36,6 @@
   // BrowserContextKeyedServiceFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/printing/synced_printers_manager_factory.cc b/chrome/browser/ash/printing/synced_printers_manager_factory.cc
index e749aa9..110c31e 100644
--- a/chrome/browser/ash/printing/synced_printers_manager_factory.cc
+++ b/chrome/browser/ash/printing/synced_printers_manager_factory.cc
@@ -10,11 +10,9 @@
 #include "base/bind.h"
 #include "chrome/browser/ash/printing/printers_sync_bridge.h"
 #include "chrome/browser/ash/printing/synced_printers_manager.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/model_type_store_service_factory.h"
 #include "chrome/common/channel_info.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/sync/base/report_unrecoverable_error.h"
 #include "components/sync/model/model_type_store_service.h"
 #include "content/public/browser/browser_context.h"
@@ -41,15 +39,10 @@
   return g_printers_manager.Pointer();
 }
 
-content::BrowserContext* SyncedPrintersManagerFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 SyncedPrintersManagerFactory::SyncedPrintersManagerFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "SyncedPrintersManager",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildServicesRedirectedToOriginal()) {
   DependsOn(ModelTypeStoreServiceFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/printing/synced_printers_manager_factory.h b/chrome/browser/ash/printing/synced_printers_manager_factory.h
index 0782b29..0fff3a3 100644
--- a/chrome/browser/ash/printing/synced_printers_manager_factory.h
+++ b/chrome/browser/ash/printing/synced_printers_manager_factory.h
@@ -7,7 +7,7 @@
 
 #include "base/lazy_instance.h"
 #include "chrome/browser/ash/printing/synced_printers_manager.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -17,7 +17,7 @@
 
 class SyncedPrintersManager;
 
-class SyncedPrintersManagerFactory : public BrowserContextKeyedServiceFactory {
+class SyncedPrintersManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static SyncedPrintersManager* GetForBrowserContext(
       content::BrowserContext* context);
@@ -28,10 +28,6 @@
   SyncedPrintersManagerFactory& operator=(const SyncedPrintersManagerFactory&) =
       delete;
 
- protected:
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
-
  private:
   friend struct base::LazyInstanceTraitsBase<SyncedPrintersManagerFactory>;
 
diff --git a/chrome/browser/ash/scanning/lorgnette_scanner_manager_factory.cc b/chrome/browser/ash/scanning/lorgnette_scanner_manager_factory.cc
index 4168694a..3a4ce01 100644
--- a/chrome/browser/ash/scanning/lorgnette_scanner_manager_factory.cc
+++ b/chrome/browser/ash/scanning/lorgnette_scanner_manager_factory.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/ash/scanning/lorgnette_scanner_manager.h"
 #include "chrome/browser/ash/scanning/zeroconf_scanner_detector.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
 
 namespace ash {
@@ -28,9 +27,7 @@
 }
 
 LorgnetteScannerManagerFactory::LorgnetteScannerManagerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "LorgnetteScannerManager",
-          BrowserContextDependencyManager::GetInstance()) {}
+    : ProfileKeyedServiceFactory("LorgnetteScannerManager") {}
 
 LorgnetteScannerManagerFactory::~LorgnetteScannerManagerFactory() = default;
 
diff --git a/chrome/browser/ash/scanning/lorgnette_scanner_manager_factory.h b/chrome/browser/ash/scanning/lorgnette_scanner_manager_factory.h
index 260c41ff..a6c5f5c4 100644
--- a/chrome/browser/ash/scanning/lorgnette_scanner_manager_factory.h
+++ b/chrome/browser/ash/scanning/lorgnette_scanner_manager_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_ASH_SCANNING_LORGNETTE_SCANNER_MANAGER_FACTORY_H_
 #define CHROME_BROWSER_ASH_SCANNING_LORGNETTE_SCANNER_MANAGER_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace base {
 template <typename T>
@@ -21,8 +21,7 @@
 class LorgnetteScannerManager;
 
 // Factory for LorgnetteScannerManager.
-class LorgnetteScannerManagerFactory
-    : public BrowserContextKeyedServiceFactory {
+class LorgnetteScannerManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static LorgnetteScannerManager* GetForBrowserContext(
       content::BrowserContext* context);
diff --git a/chrome/browser/ash/scanning/scan_service_factory.cc b/chrome/browser/ash/scanning/scan_service_factory.cc
index 88391ea..1dc3069 100644
--- a/chrome/browser/ash/scanning/scan_service_factory.cc
+++ b/chrome/browser/ash/scanning/scan_service_factory.cc
@@ -10,10 +10,8 @@
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/ash/scanning/lorgnette_scanner_manager_factory.h"
 #include "chrome/browser/ash/scanning/scan_service.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/ash/holding_space/holding_space_keyed_service_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
 
 namespace ash {
@@ -54,9 +52,9 @@
 }
 
 ScanServiceFactory::ScanServiceFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           "ScanService",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildServicesRedirectedToOriginal()) {
   DependsOn(LorgnetteScannerManagerFactory::GetInstance());
   DependsOn(HoldingSpaceKeyedServiceFactory::GetInstance());
 }
@@ -68,11 +66,6 @@
   return BuildInstanceFor(context);
 }
 
-content::BrowserContext* ScanServiceFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 bool ScanServiceFactory::ServiceIsCreatedWithBrowserContext() const {
   return true;
 }
diff --git a/chrome/browser/ash/scanning/scan_service_factory.h b/chrome/browser/ash/scanning/scan_service_factory.h
index 0169a4c..437bed3 100644
--- a/chrome/browser/ash/scanning/scan_service_factory.h
+++ b/chrome/browser/ash/scanning/scan_service_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_ASH_SCANNING_SCAN_SERVICE_FACTORY_H_
 #define CHROME_BROWSER_ASH_SCANNING_SCAN_SERVICE_FACTORY_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace base {
 template <typename T>
@@ -21,7 +21,7 @@
 class ScanService;
 
 // Factory for ScanService.
-class ScanServiceFactory : public BrowserContextKeyedServiceFactory {
+class ScanServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static ScanService* GetForBrowserContext(content::BrowserContext* context);
   static ScanServiceFactory* GetInstance();
@@ -39,8 +39,6 @@
   // BrowserContextKeyedServiceFactory:
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
   bool ServiceIsNULLWhileTesting() const override;
 };
diff --git a/chrome/browser/ash/secure_channel/nearby_connector_factory.cc b/chrome/browser/ash/secure_channel/nearby_connector_factory.cc
index f2d8dfc..fcb0c52 100644
--- a/chrome/browser/ash/secure_channel/nearby_connector_factory.cc
+++ b/chrome/browser/ash/secure_channel/nearby_connector_factory.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/ash/secure_channel/nearby_connector_impl.h"
 #include "chrome/browser/ash/secure_channel/secure_channel_client_provider.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 namespace secure_channel {
@@ -27,9 +26,7 @@
 }
 
 NearbyConnectorFactory::NearbyConnectorFactory()
-    : BrowserContextKeyedServiceFactory(
-          "NearbyConnector",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("NearbyConnector") {
   DependsOn(nearby::NearbyProcessManagerFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/secure_channel/nearby_connector_factory.h b/chrome/browser/ash/secure_channel/nearby_connector_factory.h
index 0d52f1d..97c5b6c9 100644
--- a/chrome/browser/ash/secure_channel/nearby_connector_factory.h
+++ b/chrome/browser/ash/secure_channel/nearby_connector_factory.h
@@ -8,14 +8,14 @@
 // TODO(https://crbug.com/1164001): move to forward declaration.
 #include "ash/services/secure_channel/public/cpp/client/nearby_connector.h"
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
 namespace ash {
 namespace secure_channel {
 
-class NearbyConnectorFactory : public BrowserContextKeyedServiceFactory {
+class NearbyConnectorFactory : public ProfileKeyedServiceFactory {
  public:
   static NearbyConnector* GetForProfile(Profile* profile);
 
diff --git a/chrome/browser/ash/smb_client/smb_service_factory.cc b/chrome/browser/ash/smb_client/smb_service_factory.cc
index a21ebc27a..3a6571dc 100644
--- a/chrome/browser/ash/smb_client/smb_service_factory.cc
+++ b/chrome/browser/ash/smb_client/smb_service_factory.cc
@@ -13,9 +13,7 @@
 #include "chrome/browser/ash/kerberos/kerberos_credentials_manager_factory.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/ash/smb_client/smb_service.h"
-#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/common/pref_names.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/prefs/pref_service.h"
 
 namespace ash {
@@ -48,9 +46,9 @@
 }
 
 SmbServiceFactory::SmbServiceFactory()
-    : BrowserContextKeyedServiceFactory(
+    : ProfileKeyedServiceFactory(
           /*name=*/"SmbService",
-          BrowserContextDependencyManager::GetInstance()) {
+          ProfileSelections::BuildServicesRedirectedToOriginal()) {
   DependsOn(file_system_provider::ServiceFactory::GetInstance());
   DependsOn(AuthPolicyCredentialsManagerFactory::GetInstance());
   DependsOn(KerberosCredentialsManagerFactory::GetInstance());
@@ -76,11 +74,6 @@
   return new SmbService(profile, std::make_unique<base::DefaultTickClock>());
 }
 
-content::BrowserContext* SmbServiceFactory::GetBrowserContextToUse(
-    content::BrowserContext* context) const {
-  return chrome::GetBrowserContextRedirectedInIncognito(context);
-}
-
 void SmbServiceFactory::RegisterProfilePrefs(
     user_prefs::PrefRegistrySyncable* registry) {
   SmbService::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/ash/smb_client/smb_service_factory.h b/chrome/browser/ash/smb_client/smb_service_factory.h
index 581abc89..01bdaf8 100644
--- a/chrome/browser/ash/smb_client/smb_service_factory.h
+++ b/chrome/browser/ash/smb_client/smb_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_SMB_CLIENT_SMB_SERVICE_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 #include "content/public/browser/browser_context.h"
 // TODO(https://crbug.com/1164001): remove and use forward declaration.
 #include "chrome/browser/ash/smb_client/smb_service.h"
@@ -14,7 +14,7 @@
 namespace ash {
 namespace smb_client {
 
-class SmbServiceFactory : public BrowserContextKeyedServiceFactory {
+class SmbServiceFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns a service instance singleton, after creating it (if necessary).
   static SmbService* Get(content::BrowserContext* context);
@@ -40,8 +40,6 @@
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
-  content::BrowserContext* GetBrowserContextToUse(
-      content::BrowserContext* context) const override;
   void RegisterProfilePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
 };
diff --git a/chrome/browser/ash/sync/sync_error_notifier_factory.cc b/chrome/browser/ash/sync/sync_error_notifier_factory.cc
index b49465c..aea9a2a 100644
--- a/chrome/browser/ash/sync/sync_error_notifier_factory.cc
+++ b/chrome/browser/ash/sync/sync_error_notifier_factory.cc
@@ -8,14 +8,11 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/sync_service_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 
 SyncErrorNotifierFactory::SyncErrorNotifierFactory()
-    : BrowserContextKeyedServiceFactory(
-          "SyncErrorNotifier",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("SyncErrorNotifier") {
   DependsOn(SyncServiceFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/sync/sync_error_notifier_factory.h b/chrome/browser/ash/sync/sync_error_notifier_factory.h
index 9f6c42c..b1f01b5e 100644
--- a/chrome/browser/ash/sync/sync_error_notifier_factory.h
+++ b/chrome/browser/ash/sync/sync_error_notifier_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_SYNC_SYNC_ERROR_NOTIFIER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -17,7 +17,7 @@
 // Singleton that owns all SyncErrorNotifiers and associates them with
 // Profiles. Listens for the Profile's destruction notification and cleans up
 // the associated SyncErrorNotifier.
-class SyncErrorNotifierFactory : public BrowserContextKeyedServiceFactory {
+class SyncErrorNotifierFactory : public ProfileKeyedServiceFactory {
  public:
   // Returns the instance of SyncErrorNotifier associated with this profile,
   // creating one if none exists and the shell exists.
diff --git a/chrome/browser/ash/sync/sync_service_factory_ash.cc b/chrome/browser/ash/sync/sync_service_factory_ash.cc
index 9d226f0..8e3774c6 100644
--- a/chrome/browser/ash/sync/sync_service_factory_ash.cc
+++ b/chrome/browser/ash/sync/sync_service_factory_ash.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/ash/sync/sync_service_ash.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/sync_service_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 namespace ash {
 
@@ -24,9 +23,7 @@
 }
 
 SyncServiceFactoryAsh::SyncServiceFactoryAsh()
-    : BrowserContextKeyedServiceFactory(
-          "SyncServiceAsh",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("SyncServiceAsh") {
   DependsOn(SyncServiceFactory::GetInstance());
 }
 
diff --git a/chrome/browser/ash/sync/sync_service_factory_ash.h b/chrome/browser/ash/sync/sync_service_factory_ash.h
index 231c80b..d47ef71 100644
--- a/chrome/browser/ash/sync/sync_service_factory_ash.h
+++ b/chrome/browser/ash/sync/sync_service_factory_ash.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_ASH_SYNC_SYNC_SERVICE_FACTORY_ASH_H_
 #define CHROME_BROWSER_ASH_SYNC_SYNC_SERVICE_FACTORY_ASH_H_
 
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 class Profile;
 
@@ -18,7 +18,7 @@
 
 class SyncServiceAsh;
 
-class SyncServiceFactoryAsh : public BrowserContextKeyedServiceFactory {
+class SyncServiceFactoryAsh : public ProfileKeyedServiceFactory {
  public:
   static SyncServiceAsh* GetForProfile(Profile* profile);
   static SyncServiceFactoryAsh* GetInstance();
diff --git a/chrome/browser/ash/tether/tether_service_factory.cc b/chrome/browser/ash/tether/tether_service_factory.cc
index f83f929..1178fdec 100644
--- a/chrome/browser/ash/tether/tether_service_factory.cc
+++ b/chrome/browser/ash/tether/tether_service_factory.cc
@@ -19,7 +19,6 @@
 #include "chromeos/ash/components/network/network_handler.h"
 #include "chromeos/ash/components/network/network_state_handler.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/session_manager/core/session_manager.h"
 
@@ -50,9 +49,7 @@
 }
 
 TetherServiceFactory::TetherServiceFactory()
-    : BrowserContextKeyedServiceFactory(
-          "TetherService",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("TetherService") {
   DependsOn(device_sync::DeviceSyncClientFactory::GetInstance());
   DependsOn(multidevice_setup::MultiDeviceSetupClientFactory::GetInstance());
 }
diff --git a/chrome/browser/ash/tether/tether_service_factory.h b/chrome/browser/ash/tether/tether_service_factory.h
index 0b851a5..e54d7929 100644
--- a/chrome/browser/ash/tether/tether_service_factory.h
+++ b/chrome/browser/ash/tether/tether_service_factory.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ASH_TETHER_TETHER_SERVICE_FACTORY_H_
 
 #include "chrome/browser/ash/tether/tether_service.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace content {
 class BrowserContext;
@@ -21,7 +21,7 @@
 namespace tether {
 
 // Singleton factory that builds and owns all TetherServices.
-class TetherServiceFactory : public BrowserContextKeyedServiceFactory {
+class TetherServiceFactory : public ProfileKeyedServiceFactory {
  public:
   static TetherServiceFactory* GetInstance();
 
diff --git a/chrome/browser/ash/web_applications/help_app/help_app_integration_browsertest.cc b/chrome/browser/ash/web_applications/help_app/help_app_integration_browsertest.cc
index f0f74cd..df979c3 100644
--- a/chrome/browser/ash/web_applications/help_app/help_app_integration_browsertest.cc
+++ b/chrome/browser/ash/web_applications/help_app/help_app_integration_browsertest.cc
@@ -48,6 +48,7 @@
 #include "chromeos/constants/chromeos_features.h"
 #include "components/language/core/browser/pref_names.h"
 #include "components/services/app_service/public/cpp/app_launch_util.h"
+#include "components/services/app_service/public/cpp/features.h"
 #include "components/user_manager/user_names.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
@@ -407,12 +408,14 @@
                                  kShowHelpAppDiscoverTabNotificationId,
                                  absl::nullopt, absl::nullopt);
 
-#if BUILDFLAG(ENABLE_CROS_HELP_APP)
-  EXPECT_NO_FATAL_FAILURE(WaitForAppToOpen(GURL("chrome://help-app/discover")));
-#else
-  // We just have the original browser. No new app opens.
-  EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
-#endif
+  if (base::FeatureList::IsEnabled(apps::kAppServiceLaunchWithoutMojom)) {
+    EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
+    EXPECT_EQ(GURL("chrome://help-app/discover"),
+              GetActiveWebContents()->GetVisibleURL());
+  } else {
+    EXPECT_NO_FATAL_FAILURE(
+        WaitForAppToOpen(GURL("chrome://help-app/discover")));
+  }
 }
 
 // Test that the background page can trigger the release notes notification.
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_manager_factory.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_manager_factory.cc
index 3f45da9..61672d6 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_manager_factory.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_manager_factory.cc
@@ -6,7 +6,6 @@
 
 #include "chrome/browser/ash/web_applications/personalization_app/personalization_app_manager.h"
 #include "chromeos/ash/components/local_search_service/public/cpp/local_search_service_proxy_factory.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "content/public/browser/browser_context.h"
 
 namespace ash {
@@ -29,9 +28,7 @@
 }
 
 PersonalizationAppManagerFactory::PersonalizationAppManagerFactory()
-    : BrowserContextKeyedServiceFactory(
-          "PersonalizationAppManager",
-          BrowserContextDependencyManager::GetInstance()) {
+    : ProfileKeyedServiceFactory("PersonalizationAppManager") {
   DependsOn(::chromeos::local_search_service::LocalSearchServiceProxyFactory::
                 GetInstance());
 }
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_manager_factory.h b/chrome/browser/ash/web_applications/personalization_app/personalization_app_manager_factory.h
index 0e6d9504..1a17cf77 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_manager_factory.h
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_manager_factory.h
@@ -6,15 +6,14 @@
 #define CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_MANAGER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
 
 namespace ash {
 namespace personalization_app {
 
 class PersonalizationAppManager;
 
-class PersonalizationAppManagerFactory
-    : public BrowserContextKeyedServiceFactory {
+class PersonalizationAppManagerFactory : public ProfileKeyedServiceFactory {
  public:
   static PersonalizationAppManager* GetForBrowserContext(
       content::BrowserContext* context);
diff --git a/chrome/browser/autofill/autofill_server_browsertest.cc b/chrome/browser/autofill/autofill_server_browsertest.cc
index cecbbe6b..49dd2bd9 100644
--- a/chrome/browser/autofill/autofill_server_browsertest.cc
+++ b/chrome/browser/autofill/autofill_server_browsertest.cc
@@ -272,17 +272,17 @@
   // Combinations of honorific_prefix without structured_names are omitted
   // because honorific_prefix can only be enabled ontop of structured_names.
   if (structured_names && !structured_address && !honorific_prefix) {
-    upload->set_data_present("1f7e000378000008000400000004");
+    upload->set_data_present("1f7e0003780000080004000000040018");
   } else if (structured_names && honorific_prefix && !structured_address) {
-    upload->set_data_present("1f7e00037800000800040000000404");
+    upload->set_data_present("1f7e0003780000080004000000040418");
   } else if (structured_names && !honorific_prefix && structured_address) {
-    upload->set_data_present("1f7e0003780000080004000001c4");
+    upload->set_data_present("1f7e0003780000080004000001c40018");
   } else if (structured_names && honorific_prefix && structured_address) {
-    upload->set_data_present("1f7e0003780000080004000001c404");
+    upload->set_data_present("1f7e0003780000080004000001c40418");
   } else if (!structured_names && !honorific_prefix && structured_address) {
-    upload->set_data_present("1f7e0003780000080004000001c0");
+    upload->set_data_present("1f7e0003780000080004000001c00018");
   } else {
-    upload->set_data_present("1f7e0003780000080004");
+    upload->set_data_present("1f7e0003780000080004000000000018");
   }
 
   upload->set_passwords_revealed(false);
diff --git a/chrome/browser/autofill_assistant/password_change/apc_client.h b/chrome/browser/autofill_assistant/password_change/apc_client.h
index df4d711..0ac252e 100644
--- a/chrome/browser/autofill_assistant/password_change/apc_client.h
+++ b/chrome/browser/autofill_assistant/password_change/apc_client.h
@@ -21,6 +21,7 @@
 // Abstract interface to encapsulate an automated password change (APC) flow.
 class ApcClient {
  public:
+  using OnboardingResultCallback = base::OnceCallback<void(bool)>;
   using ResultCallback = base::OnceCallback<void(bool)>;
 
   // Additional script parameters for scripts started in a debug mode. These
@@ -74,7 +75,10 @@
   // Prompts the user to give consent to use Autofill Assistant. Does nothing
   // if consent has either been given already or there is an ongoing APC run in
   // this `WebContents`.
-  virtual void PromptForConsent() = 0;
+  // `callback` is called with a parameter that indicates whether consent has
+  // been given.
+  virtual void PromptForConsent(
+      OnboardingResultCallback callback = base::DoNothing()) = 0;
 
   // Revokes consent to use Autofill Assistant, where `description_grd_ids` are
   // the resource ids of the text on the description labels.
diff --git a/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc b/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc
index 4c7a19f..e057d52 100644
--- a/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc
+++ b/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc
@@ -96,14 +96,18 @@
   return is_running_;
 }
 
-void ApcClientImpl::PromptForConsent() {
-  if (is_running_)
+void ApcClientImpl::PromptForConsent(OnboardingResultCallback callback) {
+  if (is_running_) {
+    // If a run is ongoing and beyond the onboarding stage, consent must have
+    // been given.
+    std::move(callback).Run(onboarding_coordinator_ == nullptr);
     return;
+  }
   is_running_ = true;
 
   onboarding_coordinator_ = CreateOnboardingCoordinator();
-  onboarding_coordinator_->PerformOnboarding(
-      base::BindOnce(&ApcClientImpl::Stop, base::Unretained(this)));
+  onboarding_coordinator_->PerformOnboarding(std::move(callback).Then(
+      base::BindOnce(&ApcClientImpl::Stop, base::Unretained(this), false)));
 }
 
 void ApcClientImpl::RevokeConsent(const std::vector<int>& description_grd_ids) {
@@ -118,6 +122,7 @@
 // `success` indicates whether onboarding was successful, i.e. whether consent
 // has been given.
 void ApcClientImpl::OnOnboardingComplete(bool success) {
+  onboarding_coordinator_.reset();
   if (!success) {
     Stop(/*success=*/false);
     return;
diff --git a/chrome/browser/autofill_assistant/password_change/apc_client_impl.h b/chrome/browser/autofill_assistant/password_change/apc_client_impl.h
index efd6c4a..cc473b3 100644
--- a/chrome/browser/autofill_assistant/password_change/apc_client_impl.h
+++ b/chrome/browser/autofill_assistant/password_change/apc_client_impl.h
@@ -52,7 +52,7 @@
       absl::optional<DebugRunInformation> debug_run_information) override;
   void Stop(bool success) override;
   bool IsRunning() const override;
-  void PromptForConsent() override;
+  void PromptForConsent(OnboardingResultCallback callback) override;
   void RevokeConsent(const std::vector<int>& description_grd_ids) override;
 
  protected:
diff --git a/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc b/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc
index e2c83ce..f508d8cd 100644
--- a/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc
+++ b/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc
@@ -466,8 +466,11 @@
       .Times(1)
       .WillOnce(MoveArg<0>(&coordinator_callback));
 
-  apc_client()->PromptForConsent();
+  base::MockCallback<ApcClient::OnboardingResultCallback> result_callback;
+  apc_client()->PromptForConsent(result_callback.Get());
   EXPECT_TRUE(apc_client()->IsRunning());
+
+  EXPECT_CALL(result_callback, Run(true));
   std::move(coordinator_callback).Run(true);
   EXPECT_FALSE(apc_client()->IsRunning());
 }
diff --git a/chrome/browser/browsing_data/cookies_tree_model_unittest.cc b/chrome/browser/browsing_data/cookies_tree_model_unittest.cc
index 6f5340d..d87c47d 100644
--- a/chrome/browser/browsing_data/cookies_tree_model_unittest.cc
+++ b/chrome/browser/browsing_data/cookies_tree_model_unittest.cc
@@ -45,6 +45,7 @@
 
 using ::testing::_;
 using content::BrowserThread;
+using QueryReason = content_settings::CookieSettings::QueryReason;
 
 namespace {
 
@@ -237,11 +238,13 @@
         EXPECT_FALSE(host->CanCreateContentException());
       } else {
         cookie_settings->ResetCookieSetting(expected_url);
-        EXPECT_FALSE(cookie_settings->IsCookieSessionOnly(expected_url));
+        EXPECT_FALSE(cookie_settings->IsCookieSessionOnly(
+            expected_url, QueryReason::kSetting));
 
         host->CreateContentException(cookie_settings,
                                      CONTENT_SETTING_SESSION_ONLY);
-        EXPECT_TRUE(cookie_settings->IsCookieSessionOnly(expected_url));
+        EXPECT_TRUE(cookie_settings->IsCookieSessionOnly(
+            expected_url, QueryReason::kSetting));
       }
     }
   }
@@ -1432,8 +1435,10 @@
       .Times(2);
   origin->CreateContentException(
       cookie_settings, CONTENT_SETTING_SESSION_ONLY);
-  EXPECT_TRUE(cookie_settings->IsFullCookieAccessAllowed(host, host));
-  EXPECT_TRUE(cookie_settings->IsCookieSessionOnly(host));
+  EXPECT_TRUE(cookie_settings->IsFullCookieAccessAllowed(
+      host, host, QueryReason::kSetting));
+  EXPECT_TRUE(
+      cookie_settings->IsCookieSessionOnly(host, QueryReason::kSetting));
 }
 
 TEST_F(CookiesTreeModelTest, FileSystemFilter) {
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 8936275..0877cc6 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -443,6 +443,7 @@
 #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
 #include "chrome/browser/devtools/devtools_window.h"
 #include "chrome/browser/media/unified_autoplay_config.h"
+#include "chrome/browser/page_info/about_this_site_side_panel_throttle.h"
 #include "chrome/browser/search/instant_service.h"
 #include "chrome/browser/search/instant_service_factory.h"
 #include "chrome/browser/serial/chrome_serial_delegate.h"
@@ -4615,6 +4616,9 @@
 
   MaybeAddThrottle(MaybeCreateNavigationAblationThrottle(handle), &throttles);
 
+#if !BUILDFLAG(IS_ANDROID)
+  MaybeAddThrottle(MaybeCreateAboutThisSiteThrottleFor(handle), &throttles);
+#endif
   return throttles;
 }
 
@@ -6250,7 +6254,9 @@
   // Persistent MediaDevice IDs are allowed if cookies are allowed.
   return CookieSettingsFactory::GetForProfile(
              Profile::FromBrowserContext(browser_context))
-      ->IsFullCookieAccessAllowed(url, site_for_cookies, top_frame_origin);
+      ->IsFullCookieAccessAllowed(
+          url, site_for_cookies, top_frame_origin,
+          content_settings::CookieSettings::QueryReason::kSiteStorage);
 }
 
 #if !BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc b/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc
index 9a68131..746c07b 100644
--- a/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc
@@ -777,7 +777,11 @@
       base::BindRepeating(&FileManagerPrivateApiDlpTest::SetDlpRulesManager,
                           base::Unretained(this)));
   ASSERT_TRUE(policy::DlpRulesManagerFactory::GetForPrimaryProfile());
-  EXPECT_CALL(*mock_rules_manager_, IsFilesPolicyEnabled).Times(3);
+  EXPECT_CALL(*mock_rules_manager_, IsFilesPolicyEnabled).Times(2);
+  // TODO(crbug.com/1346254): When implementation is completed, add following
+  // checks: EXPECT_CALL(*mock_rules_manager_,
+  // GetAggregatedComponents).Times(1); EXPECT_CALL(*mock_rules_manager_,
+  // GetAggregatedDestinations).Times(1);
 
   AddLocalFileSystem(browser()->profile(), temp_dir_.GetPath());
 
@@ -819,7 +823,8 @@
       .WillOnce(testing::Return(policy::DlpRulesManager::Level::kAllow))
       .RetiresOnSaturation();
 
-  EXPECT_TRUE(RunExtensionTest("file_browser/dlp_metadata", {},
+  EXPECT_TRUE(RunExtensionTest("file_browser/dlp_metadata",
+                               {.custom_arg = "default"},
                                {.load_as_component = true}));
 }
 
@@ -829,9 +834,45 @@
       base::BindRepeating(&FileManagerPrivateApiDlpTest::SetDlpRulesManager,
                           base::Unretained(this)));
   ASSERT_TRUE(policy::DlpRulesManagerFactory::GetForPrimaryProfile());
-  EXPECT_CALL(*mock_rules_manager_, IsFilesPolicyEnabled)
-      .WillOnce(testing::Return(false))
-      .RetiresOnSaturation();
+  ON_CALL(*mock_rules_manager_, IsFilesPolicyEnabled)
+      .WillByDefault(testing::Return(false));
+  EXPECT_CALL(*mock_rules_manager_, IsFilesPolicyEnabled).Times(2);
+  // We should not get to the point of checking DLP.
+  EXPECT_CALL(*mock_rules_manager_, IsRestrictedByAnyRule).Times(0);
+  EXPECT_CALL(*mock_rules_manager_, GetAggregatedComponents).Times(0);
+  EXPECT_CALL(*mock_rules_manager_, GetAggregatedDestinations).Times(0);
+
+  AddLocalFileSystem(browser()->profile(), temp_dir_.GetPath());
+
+  const base::FilePath blocked_file_path =
+      temp_dir_.GetPath().Append("blocked_file.txt");
+
+  {
+    base::ScopedAllowBlockingForTesting allow_io;
+    base::File blocked_test_file(
+        blocked_file_path, base::File::FLAG_CREATE | base::File::FLAG_WRITE);
+    ASSERT_TRUE(blocked_test_file.IsValid());
+  }
+
+  base::MockCallback<chromeos::DlpClient::AddFileCallback> add_file_cb;
+  EXPECT_CALL(add_file_cb, Run).Times(1);
+  dlp::AddFileRequest request;
+  request.set_file_path(blocked_file_path.value());
+  request.set_source_url("https://example1.com");
+  chromeos::DlpClient::Get()->AddFile(request, add_file_cb.Get());
+
+  EXPECT_TRUE(RunExtensionTest("file_browser/dlp_metadata",
+                               {.custom_arg = "disabled"},
+                               {.load_as_component = true}));
+}
+
+IN_PROC_BROWSER_TEST_F(FileManagerPrivateApiDlpTest, DlpMetadata_Error) {
+  policy::DlpRulesManagerFactory::GetInstance()->SetTestingFactory(
+      browser()->profile(),
+      base::BindRepeating(&FileManagerPrivateApiDlpTest::SetDlpRulesManager,
+                          base::Unretained(this)));
+  ASSERT_TRUE(policy::DlpRulesManagerFactory::GetForPrimaryProfile());
+  EXPECT_CALL(*mock_rules_manager_, IsFilesPolicyEnabled).Times(2);
   // We should not get to the point of checking DLP.
   EXPECT_CALL(*mock_rules_manager_, IsRestrictedByAnyRule).Times(0);
 
@@ -854,6 +895,7 @@
   request.set_source_url("https://example1.com");
   chromeos::DlpClient::Get()->AddFile(request, add_file_cb.Get());
 
-  EXPECT_TRUE(RunExtensionTest("file_browser/dlp_metadata_disabled", {},
+  EXPECT_TRUE(RunExtensionTest("file_browser/dlp_metadata",
+                               {.custom_arg = "error"},
                                {.load_as_component = true}));
 }
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.cc
index 2591219..df9b1e4 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.cc
@@ -1117,6 +1117,35 @@
           converted_list)));
 }
 
+FileManagerPrivateShowDlpRestrictionDetailsFunction::
+    FileManagerPrivateShowDlpRestrictionDetailsFunction() = default;
+
+FileManagerPrivateShowDlpRestrictionDetailsFunction::
+    ~FileManagerPrivateShowDlpRestrictionDetailsFunction() = default;
+
+ExtensionFunction::ResponseAction
+FileManagerPrivateShowDlpRestrictionDetailsFunction::Run() {
+  if (!base::FeatureList::IsEnabled(
+          features::kDataLeakPreventionFilesRestriction)) {
+    return RespondNow(NoArguments());
+  }
+
+  policy::DlpRulesManager* rules_manager =
+      policy::DlpRulesManagerFactory::GetForPrimaryProfile();
+  if (!rules_manager || !rules_manager->IsFilesPolicyEnabled()) {
+    return RespondNow(NoArguments());
+  }
+
+  using extensions::api::file_manager_private::ShowDlpRestrictionDetails::
+      Params;
+  const std::unique_ptr<Params> params(Params::Create(args()));
+  EXTENSION_FUNCTION_VALIDATE(params);
+
+  // TODO(crbug.com/1346254): Show the modal.
+
+  return RespondNow(NoArguments());
+}
+
 FileManagerPrivateInternalStartCopyFunction::
     FileManagerPrivateInternalStartCopyFunction() = default;
 
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.h b/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.h
index 2631f9b3..243e9bb 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.h
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.h
@@ -22,6 +22,7 @@
 #include "chrome/browser/chromeos/extensions/file_manager/logged_extension_function.h"
 #include "components/drive/file_errors.h"
 #include "extensions/browser/extension_function.h"
+#include "extensions/browser/extension_function_histogram_value.h"
 #include "services/device/public/mojom/mtp_storage_info.mojom-forward.h"
 #include "storage/browser/file_system/file_system_url.h"
 
@@ -339,6 +340,22 @@
   std::vector<storage::FileSystemURL> source_urls_;
 };
 
+// Implements the chrome.fileManagerPrivate.showDlpRestrictionDetails method.
+class FileManagerPrivateShowDlpRestrictionDetailsFunction
+    : public LoggedExtensionFunction {
+ public:
+  FileManagerPrivateShowDlpRestrictionDetailsFunction();
+
+  DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.showDlpRestrictionDetails",
+                             FILEMANAGERPRIVATE_SHOWDLPRESTRICTIONDETAILS)
+
+ protected:
+  ~FileManagerPrivateShowDlpRestrictionDetailsFunction() override;
+
+  // ExtensionFunction overrides.
+  ResponseAction Run() override;
+};
+
 // Implements the chrome.fileManagerPrivate.startCopy method.
 class FileManagerPrivateInternalStartCopyFunction
     : public LoggedExtensionFunction {
diff --git a/chrome/browser/chromeos/policy/dlp/clipboard_bubble.cc b/chrome/browser/chromeos/policy/dlp/clipboard_bubble.cc
index 256d198..964eb072 100644
--- a/chrome/browser/chromeos/policy/dlp/clipboard_bubble.cc
+++ b/chrome/browser/chromeos/policy/dlp/clipboard_bubble.cc
@@ -323,7 +323,10 @@
   UpdateBorderSize(GetBubbleSize());
 }
 
-ClipboardWarnBubble::~ClipboardWarnBubble() = default;
+ClipboardWarnBubble::~ClipboardWarnBubble() {
+  if (paste_cb_)
+    std::move(paste_cb_).Run(false);
+}
 
 gfx::Size ClipboardWarnBubble::GetBubbleSize() const {
   DCHECK(label_);
diff --git a/chrome/browser/chromeos/policy/dlp/clipboard_bubble.h b/chrome/browser/chromeos/policy/dlp/clipboard_bubble.h
index ce8e23d3..1d35eca 100644
--- a/chrome/browser/chromeos/policy/dlp/clipboard_bubble.h
+++ b/chrome/browser/chromeos/policy/dlp/clipboard_bubble.h
@@ -72,9 +72,17 @@
 
   void SetProceedCallback(base::RepeatingCallback<void()> cb);
 
+  void set_paste_cb(base::OnceCallback<void(bool)> paste_cb) {
+    paste_cb_ = std::move(paste_cb);
+  }
+
+  base::OnceCallback<void(bool)> get_paste_cb() { return std::move(paste_cb_); }
+
  private:
   raw_ptr<views::LabelButton> cancel_button_ = nullptr;
   raw_ptr<views::LabelButton> paste_button_ = nullptr;
+  // Paste callback.
+  base::OnceCallback<void(bool)> paste_cb_;
 };
 
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_browsertest.cc b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_browsertest.cc
index 1586e36..c785121 100644
--- a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_browsertest.cc
+++ b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_browsertest.cc
@@ -84,8 +84,9 @@
   }
 
   ~FakeDlpController() override {
-    if (widget_ && widget_->HasObserver(this)) {
-      widget_->RemoveObserver(this);
+    auto* widget = helper_->GetWidget();
+    if (widget) {
+      widget->RemoveObserver(this);
     }
   }
 
@@ -122,15 +123,14 @@
   }
 
   bool ObserveWidget() {
-    widget_ = helper_->GetWidget();
-    if (widget_ && !widget_->HasObserver(this)) {
-      widget_->AddObserver(this);
+    auto* widget = helper_->GetWidget();
+    if (widget && !widget->HasObserver(this)) {
+      widget->AddObserver(this);
       return true;
     }
     return false;
   }
 
-  raw_ptr<views::Widget> widget_ = nullptr;
   raw_ptr<FakeClipboardNotifier> helper_ = nullptr;
   absl::optional<ui::DataTransferEndpoint> blink_data_dst_;
   base::RepeatingClosure blink_quit_cb_ = base::DoNothing();
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier.cc b/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier.cc
index 4869852..d7d3054a 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier.cc
@@ -214,9 +214,6 @@
   const std::u16string host_name =
       base::UTF8ToUTF16(data_src->GetURL()->host());
 
-  blink_paste_cb_ = std::move(paste_cb);
-  Observe(web_contents);
-
   auto proceed_cb =
       base::BindRepeating(&DlpClipboardNotifier::BlinkProceedPressed,
                           base::Unretained(this), CloneEndpoint(data_dst));
@@ -227,6 +224,8 @@
   ShowWarningBubble(l10n_util::GetStringFUTF16(
                         IDS_POLICY_DLP_CLIPBOARD_WARN_ON_PASTE, host_name),
                     std::move(proceed_cb), std::move(cancel_cb));
+  SetPasteCallback(std::move(paste_cb));
+  Observe(web_contents);
 }
 
 bool DlpClipboardNotifier::DidUserApproveDst(
@@ -239,11 +238,6 @@
   return HasEndpoint(cancelled_dsts_, data_dst);
 }
 
-void DlpClipboardNotifier::SetBlinkPasteCallbackForTesting(
-    base::OnceCallback<void(bool)> paste_cb) {
-  blink_paste_cb_ = std::move(paste_cb);
-}
-
 void DlpClipboardNotifier::ProceedPressed(
     const ui::DataTransferEndpoint& data_dst,
     views::Widget* widget) {
@@ -255,10 +249,8 @@
 void DlpClipboardNotifier::BlinkProceedPressed(
     const ui::DataTransferEndpoint& data_dst,
     views::Widget* widget) {
-  DCHECK(!blink_paste_cb_.is_null());
-
   approved_dsts_.push_back(data_dst);
-  std::move(blink_paste_cb_).Run(true);
+  RunPasteCallback();
   CloseWidget(widget, views::Widget::ClosedReason::kAcceptButtonClicked);
 }
 
@@ -295,10 +287,7 @@
 }
 
 void DlpClipboardNotifier::OnWidgetDestroying(views::Widget* widget) {
-  if (!blink_paste_cb_.is_null()) {
-    std::move(blink_paste_cb_).Run(false);
-    Observe(nullptr);
-  }
+  Observe(nullptr);
   DlpDataTransferNotifier::OnWidgetDestroying(widget);
 }
 
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier.h b/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier.h
index cdd5db5..20cc65a 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier.h
@@ -5,7 +5,6 @@
 #ifndef CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_CLIPBOARD_NOTIFIER_H_
 #define CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_CLIPBOARD_NOTIFIER_H_
 
-#include "base/callback.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.h"
 #include "content/public/browser/web_contents_observer.h"
@@ -58,8 +57,6 @@
   // `data_dst` before.
   bool DidUserCancelDst(const ui::DataTransferEndpoint* const data_dst);
 
-  void SetBlinkPasteCallbackForTesting(base::OnceCallback<void(bool)> paste_cb);
-
  protected:
   // Exposed for tests to override.
   void ProceedPressed(const ui::DataTransferEndpoint& data_dst,
@@ -94,9 +91,6 @@
   // Vector of destinations rejected by the user on warning for copy/paste. It
   // gets reset when the clipboard data changes.
   std::vector<ui::DataTransferEndpoint> cancelled_dsts_;
-
-  // Blink paste callback.
-  base::OnceCallback<void(bool)> blink_paste_cb_;
 };
 
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier_unittest.cc b/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier_unittest.cc
index 9d49b26..3402f77b 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier_unittest.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier_unittest.cc
@@ -83,10 +83,22 @@
   MOCK_METHOD2(CloseWidget,
                void(views::Widget* widget, views::Widget::ClosedReason reason));
 
+  void SetPasteCallback(base::OnceCallback<void(bool)> paste_cb) override {
+    paste_cb_ = std::move(paste_cb);
+  }
+
+  void RunPasteCallback() override {
+    DCHECK(paste_cb_);
+    std::move(paste_cb_).Run(true);
+  }
+
   using DlpClipboardNotifier::BlinkProceedPressed;
   using DlpClipboardNotifier::CancelWarningPressed;
   using DlpClipboardNotifier::ProceedPressed;
   using DlpClipboardNotifier::ResetUserWarnSelection;
+
+ private:
+  base::OnceCallback<void(bool)> paste_cb_;
 };
 
 }  // namespace
@@ -236,15 +248,15 @@
                           views::Widget::ClosedReason::kAcceptButtonClicked))
       .Times(3);
 
-  notifier.SetBlinkPasteCallbackForTesting(callback.Get());
+  notifier.SetPasteCallback(callback.Get());
   EXPECT_CALL(callback, Run(true));
   notifier.BlinkProceedPressed(url_dst1, nullptr);
 
-  notifier.SetBlinkPasteCallbackForTesting(callback.Get());
+  notifier.SetPasteCallback(callback.Get());
   EXPECT_CALL(callback, Run(true));
   notifier.BlinkProceedPressed(url_dst2, nullptr);
 
-  notifier.SetBlinkPasteCallbackForTesting(callback.Get());
+  notifier.SetPasteCallback(callback.Get());
   EXPECT_CALL(callback, Run(true));
   notifier.BlinkProceedPressed(url_dst3, nullptr);
 
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager.cc
index d374d88a..b79e87f 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager.cc
@@ -511,11 +511,7 @@
   if (confidential_web_contents_.contains(web_contents)) {
     old_restriction_set = confidential_web_contents_[web_contents];
   }
-  if (restriction_set.IsEmpty()) {
-    RemoveFromConfidential(web_contents);
-  } else {
-    confidential_web_contents_[web_contents] = restriction_set;
-  }
+  UpdateConfidentiality(web_contents, restriction_set);
   NotifyOnConfidentialityChanged(old_restriction_set, restriction_set,
                                  web_contents);
 }
@@ -680,7 +676,6 @@
   for (auto& screen_share : running_screen_shares_) {
     ConfidentialContentsInfo info = GetScreenShareConfidentialContentsInfo(
         screen_share->media_id(), screen_share->web_contents().get());
-
     if (IsReported(info.restriction_info) && reporting_manager_ &&
         last_reported_screen_share_.ShouldReportAndUpdate(
             screen_share->label(), info.confidential_contents)) {
@@ -860,6 +855,16 @@
       });
 }
 
+void DlpContentManager::UpdateConfidentiality(
+    content::WebContents* web_contents,
+    const DlpContentRestrictionSet& restriction_set) {
+  if (restriction_set.IsEmpty()) {
+    RemoveFromConfidential(web_contents);
+  } else {
+    confidential_web_contents_[web_contents] = restriction_set;
+  }
+}
+
 void DlpContentManager::NotifyOnConfidentialityChanged(
     const DlpContentRestrictionSet& old_restriction_set,
     const DlpContentRestrictionSet& new_restriction_set,
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager.h b/chrome/browser/chromeos/policy/dlp/dlp_content_manager.h
index 7df8177..10f2d2a 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager.h
@@ -381,6 +381,10 @@
   void RemoveAllowedContents(DlpConfidentialContents& contents,
                              DlpRulesManager::Restriction restriction);
 
+  // Updates confidentiality for |web_contents| with the |restriction_set|.
+  void UpdateConfidentiality(content::WebContents* web_contents,
+                             const DlpContentRestrictionSet& restriction_set);
+
   // Notifies observers if the restrictions they are listening to changed.
   void NotifyOnConfidentialityChanged(
       const DlpContentRestrictionSet& old_restriction_set,
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_test_helper.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_test_helper.cc
index 06902a4..43031a1e 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_test_helper.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_test_helper.cc
@@ -48,6 +48,13 @@
   manager_->OnConfidentialityChanged(web_contents, restrictions);
 }
 
+void DlpContentManagerTestHelper::UpdateConfidentiality(
+    content::WebContents* web_contents,
+    const DlpContentRestrictionSet& restrictions) {
+  DCHECK(manager_);
+  manager_->UpdateConfidentiality(web_contents, restrictions);
+}
+
 void DlpContentManagerTestHelper::ChangeVisibility(
     content::WebContents* web_contents) {
   DCHECK(manager_);
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_test_helper.h b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_test_helper.h
index 3009975..5ed9d46 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_test_helper.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_test_helper.h
@@ -36,6 +36,11 @@
   void ChangeConfidentiality(content::WebContents* web_contents,
                              const DlpContentRestrictionSet& restrictions);
 
+  // To be called when confidentiality for |web_contents| needs to be changed
+  // but without reacting to the change.
+  void UpdateConfidentiality(content::WebContents* web_contents,
+                             const DlpContentRestrictionSet& restrictions);
+
   void ChangeVisibility(content::WebContents* web_contents);
 
   void DestroyWebContents(content::WebContents* web_contents);
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.cc b/chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.cc
index 46ea8e4..e4980d9 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.h"
 
 #include "base/bind.h"
+#include "base/callback.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/chromeos/policy/dlp/clipboard_bubble.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_clipboard_bubble_constants.h"
@@ -102,7 +103,7 @@
       views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
   params.z_order = ui::ZOrderLevel::kNormal;
   params.activatable = views::Widget::InitParams::Activatable::kYes;
-  params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+  params.ownership = views::Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET;
   params.name = kBubbleName;
   params.layer_type = ui::LAYER_NOT_DRAWN;
   params.parent = nullptr;
@@ -121,7 +122,7 @@
 DlpDataTransferNotifier::~DlpDataTransferNotifier() {
   if (widget_) {
     widget_->RemoveObserver(this);
-    CloseWidget(widget_.get(), views::Widget::ClosedReason::kUnspecified);
+    widget_->Close();
   }
 }
 
@@ -151,11 +152,30 @@
 
 void DlpDataTransferNotifier::CloseWidget(views::Widget* widget,
                                           views::Widget::ClosedReason reason) {
-  if (widget_) {
-    DCHECK_EQ(widget, widget_.get());
-    widget_closing_timer_.Stop();
-    widget_->CloseWithReason(reason);
-  }
+  if (!widget || widget != widget_.get())
+    return;
+
+  widget_->CloseWithReason(reason);
+}
+
+void DlpDataTransferNotifier::SetPasteCallback(
+    base::OnceCallback<void(bool)> paste_cb) {
+  DCHECK(widget_);
+
+  ClipboardWarnBubble* clp_warn_bubble =
+      static_cast<ClipboardWarnBubble*>(widget_->GetContentsView());
+  clp_warn_bubble->set_paste_cb(std::move(paste_cb));
+}
+
+void DlpDataTransferNotifier::RunPasteCallback() {
+  DCHECK(widget_);
+
+  ClipboardWarnBubble* clp_warn_bubble =
+      static_cast<ClipboardWarnBubble*>(widget_->GetContentsView());
+
+  auto paste_cb = clp_warn_bubble->get_paste_cb();
+  DCHECK(paste_cb);
+  std::move(paste_cb).Run(true);
 }
 
 void DlpDataTransferNotifier::OnWidgetDestroying(views::Widget* widget) {
@@ -172,8 +192,6 @@
 }
 
 void DlpDataTransferNotifier::InitWidget() {
-  if (widget_)
-    widget_->RemoveObserver(this);
   widget_ = std::make_unique<views::Widget>();
   widget_->Init(GetWidgetInitParams());
   widget_->AddObserver(this);
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.h b/chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.h
index e9c0c326..3288fd9 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_DATA_TRANSFER_NOTIFIER_H_
 #define CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_DATA_TRANSFER_NOTIFIER_H_
 
+#include "base/callback_forward.h"
 #include "base/timer/timer.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/views/widget/unique_widget_ptr.h"
@@ -39,6 +40,8 @@
       base::RepeatingCallback<void(views::Widget*)> cancel_cb);
   virtual void CloseWidget(views::Widget* widget,
                            views::Widget::ClosedReason reason);
+  virtual void SetPasteCallback(base::OnceCallback<void(bool)> paste_cb);
+  virtual void RunPasteCallback();
 
   // views::WidgetObserver
   void OnWidgetDestroying(views::Widget* widget) override;
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier.cc b/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier.cc
index 2996c52..b125e31 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier.cc
@@ -44,7 +44,6 @@
   const std::u16string host_name =
       base::UTF8ToUTF16(data_src->GetURL()->host());
 
-  drop_cb_ = std::move(drop_cb);
   auto proceed_cb = base::BindRepeating(&DlpDragDropNotifier::ProceedPressed,
                                         base::Unretained(this));
   auto cancel_cb = base::BindRepeating(&DlpDragDropNotifier::CancelPressed,
@@ -53,11 +52,17 @@
   ShowWarningBubble(l10n_util::GetStringFUTF16(
                         IDS_POLICY_DLP_CLIPBOARD_WARN_ON_PASTE, host_name),
                     std::move(proceed_cb), std::move(cancel_cb));
+
+  SetPasteCallback(base::BindOnce(
+      [](base::OnceClosure paste_cb, bool drop) {
+        if (drop)
+          std::move(paste_cb).Run();
+      },
+      std::move(drop_cb)));
 }
 
 void DlpDragDropNotifier::ProceedPressed(views::Widget* widget) {
-  if (drop_cb_)
-    std::move(drop_cb_).Run();
+  RunPasteCallback();
   CloseWidget(widget, views::Widget::ClosedReason::kAcceptButtonClicked);
 }
 
@@ -66,8 +71,6 @@
 }
 
 void DlpDragDropNotifier::OnWidgetDestroying(views::Widget* widget) {
-  drop_cb_.Reset();
-
   DlpDataTransferNotifier::OnWidgetDestroying(widget);
 }
 
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier.h b/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier.h
index b1414b7d..831db76b 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier.h
@@ -5,7 +5,6 @@
 #ifndef CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_DRAG_DROP_NOTIFIER_H_
 #define CHROME_BROWSER_CHROMEOS_POLICY_DLP_DLP_DRAG_DROP_NOTIFIER_H_
 
-#include "base/callback.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_data_transfer_notifier.h"
 
 namespace policy {
@@ -36,10 +35,6 @@
 
   // views::WidgetObserver
   void OnWidgetDestroying(views::Widget* widget) override;
-
- private:
-  // Drop callback.
-  base::OnceClosure drop_cb_;
 };
 
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier_unittest.cc b/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier_unittest.cc
index ba289bf..61bb07d1 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier_unittest.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier_unittest.cc
@@ -41,8 +41,20 @@
   MOCK_METHOD2(CloseWidget,
                void(views::Widget* widget, views::Widget::ClosedReason reason));
 
+  void SetPasteCallback(base::OnceCallback<void(bool)> paste_cb) override {
+    paste_cb_ = std::move(paste_cb);
+  }
+
+  void RunPasteCallback() override {
+    DCHECK(paste_cb_);
+    std::move(paste_cb_).Run(true);
+  }
+
   using DlpDragDropNotifier::CancelPressed;
   using DlpDragDropNotifier::ProceedPressed;
+
+ private:
+  base::OnceCallback<void(bool)> paste_cb_;
 };
 
 }  // namespace
diff --git a/chrome/browser/component_updater/sw_reporter_installer_win.h b/chrome/browser/component_updater/sw_reporter_installer_win.h
index 7bb7d5df..6a47e3b 100644
--- a/chrome/browser/component_updater/sw_reporter_installer_win.h
+++ b/chrome/browser/component_updater/sw_reporter_installer_win.h
@@ -39,7 +39,7 @@
 // numeric values should never be reused. Please keep in sync with
 // "SoftwareReporterConfigurationError" in
 // src/tools/metrics/histograms/enums.xml.
-enum SoftwareReporterConfigurationError {
+enum SoftwareReporterConfigurationError : uint8_t {
   kBadTag = 0,
   kBadParams = 1,
   kMissingParams = 2,
diff --git a/chrome/browser/content_settings/cookie_settings_factory_unittest.cc b/chrome/browser/content_settings/cookie_settings_factory_unittest.cc
index 1d79cad..b5e60d0 100644
--- a/chrome/browser/content_settings/cookie_settings_factory_unittest.cc
+++ b/chrome/browser/content_settings/cookie_settings_factory_unittest.cc
@@ -15,6 +15,8 @@
 
 namespace {
 
+using QueryReason = content_settings::CookieSettings::QueryReason;
+
 class CookieSettingsFactoryTest : public testing::Test {
  public:
   CookieSettingsFactoryTest()
@@ -44,18 +46,18 @@
   cookie_settings_->SetCookieSetting(kBlockedSite, CONTENT_SETTING_BLOCK);
 
   // The modification should apply to the regular profile and incognito profile.
-  EXPECT_FALSE(
-      cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite, kBlockedSite));
-  EXPECT_FALSE(incognito_settings->IsFullCookieAccessAllowed(kBlockedSite,
-                                                             kBlockedSite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kBlockedSite, QueryReason::kSetting));
+  EXPECT_FALSE(incognito_settings->IsFullCookieAccessAllowed(
+      kBlockedSite, kBlockedSite, QueryReason::kSetting));
 
   // Modify an incognito cookie setting and check that this does not propagate
   // into regular mode.
   incognito_settings->SetCookieSetting(kHttpsSite, CONTENT_SETTING_BLOCK);
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kHttpsSite));
-  EXPECT_FALSE(
-      incognito_settings->IsFullCookieAccessAllowed(kHttpsSite, kHttpsSite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kHttpsSite, QueryReason::kSetting));
+  EXPECT_FALSE(incognito_settings->IsFullCookieAccessAllowed(
+      kHttpsSite, kHttpsSite, QueryReason::kSetting));
 }
 
 TEST_F(CookieSettingsFactoryTest, IncognitoBehaviorOfBlockingEverything) {
@@ -67,26 +69,26 @@
   cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
 
   // It should be effective for regular and incognito session.
-  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(kFirstPartySite,
-                                                           kFirstPartySite));
-  EXPECT_FALSE(incognito_settings->IsFullCookieAccessAllowed(kFirstPartySite,
-                                                             kFirstPartySite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kFirstPartySite, kFirstPartySite, QueryReason::kSetting));
+  EXPECT_FALSE(incognito_settings->IsFullCookieAccessAllowed(
+      kFirstPartySite, kFirstPartySite, QueryReason::kSetting));
 
   // A whitelisted item set in incognito mode should only apply to incognito
   // mode.
   incognito_settings->SetCookieSetting(kAllowedSite, CONTENT_SETTING_ALLOW);
-  EXPECT_TRUE(incognito_settings->IsFullCookieAccessAllowed(kAllowedSite,
-                                                            kAllowedSite));
-  EXPECT_FALSE(
-      cookie_settings_->IsFullCookieAccessAllowed(kAllowedSite, kAllowedSite));
+  EXPECT_TRUE(incognito_settings->IsFullCookieAccessAllowed(
+      kAllowedSite, kAllowedSite, QueryReason::kSetting));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kAllowedSite, kAllowedSite, QueryReason::kSetting));
 
   // A whitelisted item set in regular mode should apply to regular and
   // incognito mode.
   cookie_settings_->SetCookieSetting(kHttpsSite, CONTENT_SETTING_ALLOW);
-  EXPECT_TRUE(
-      incognito_settings->IsFullCookieAccessAllowed(kHttpsSite, kHttpsSite));
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kHttpsSite));
+  EXPECT_TRUE(incognito_settings->IsFullCookieAccessAllowed(
+      kHttpsSite, kHttpsSite, QueryReason::kSetting));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kHttpsSite, QueryReason::kSetting));
 }
 
 // Android does not have guest profiles.
diff --git a/chrome/browser/content_settings/host_content_settings_map_unittest.cc b/chrome/browser/content_settings/host_content_settings_map_unittest.cc
index a307ab0..4f49cd8 100644
--- a/chrome/browser/content_settings/host_content_settings_map_unittest.cc
+++ b/chrome/browser/content_settings/host_content_settings_map_unittest.cc
@@ -45,6 +45,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
+using QueryReason = content_settings::CookieSettings::QueryReason;
 using ::testing::_;
 using ::testing::MockFunction;
 using ::testing::Return;
@@ -530,18 +531,18 @@
 
   GURL host_ending_with_dot("http://example.com./");
 
-  EXPECT_TRUE(cookie_settings->IsFullCookieAccessAllowed(host_ending_with_dot,
-                                                         host_ending_with_dot));
+  EXPECT_TRUE(cookie_settings->IsFullCookieAccessAllowed(
+      host_ending_with_dot, host_ending_with_dot, QueryReason::kSetting));
   host_content_settings_map->SetContentSettingDefaultScope(
       host_ending_with_dot, GURL(), ContentSettingsType::COOKIES,
       CONTENT_SETTING_DEFAULT);
-  EXPECT_TRUE(cookie_settings->IsFullCookieAccessAllowed(host_ending_with_dot,
-                                                         host_ending_with_dot));
+  EXPECT_TRUE(cookie_settings->IsFullCookieAccessAllowed(
+      host_ending_with_dot, host_ending_with_dot, QueryReason::kSetting));
   host_content_settings_map->SetContentSettingDefaultScope(
       host_ending_with_dot, GURL(), ContentSettingsType::COOKIES,
       CONTENT_SETTING_BLOCK);
   EXPECT_FALSE(cookie_settings->IsFullCookieAccessAllowed(
-      host_ending_with_dot, host_ending_with_dot));
+      host_ending_with_dot, host_ending_with_dot, QueryReason::kSetting));
 
   EXPECT_EQ(CONTENT_SETTING_ALLOW,
             host_content_settings_map->GetContentSetting(
diff --git a/chrome/browser/devtools/devtools_browsertest.cc b/chrome/browser/devtools/devtools_browsertest.cc
index fe66c6e..4f7b2e09 100644
--- a/chrome/browser/devtools/devtools_browsertest.cc
+++ b/chrome/browser/devtools/devtools_browsertest.cc
@@ -989,24 +989,6 @@
   RunTest("testShowScriptsTab", kDebuggerTestPage);
 }
 
-// Tests that scripts tab is populated with inspected scripts even if it
-// hadn't been shown by the moment inspected paged refreshed.
-// @see http://crbug.com/26312
-// This test is flaky on windows and linux asan. See https://crbug.com/1013003
-#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
-    BUILDFLAG(IS_CHROMEOS)
-#define MAYBE_TestScriptsTabIsPopulatedOnInspectedPageRefresh \
-  DISABLED_TestScriptsTabIsPopulatedOnInspectedPageRefresh
-#else
-#define MAYBE_TestScriptsTabIsPopulatedOnInspectedPageRefresh \
-  TestScriptsTabIsPopulatedOnInspectedPageRefresh
-#endif
-IN_PROC_BROWSER_TEST_F(DevToolsTest,
-                       MAYBE_TestScriptsTabIsPopulatedOnInspectedPageRefresh) {
-  RunTest("testScriptsTabIsPopulatedOnInspectedPageRefresh",
-          kDebuggerTestPage);
-}
-
 // Tests that chrome.devtools extension is correctly exposed.
 IN_PROC_BROWSER_TEST_F(DevToolsExtensionTest,
                        TestDevToolsExtensionAPI) {
diff --git a/chrome/browser/extensions/api/content_settings/content_settings_api.cc b/chrome/browser/extensions/api/content_settings/content_settings_api.cc
index 8653825..9a649523 100644
--- a/chrome/browser/extensions/api/content_settings/content_settings_api.cc
+++ b/chrome/browser/extensions/api/content_settings/content_settings_api.cc
@@ -166,8 +166,9 @@
 
   ContentSetting setting =
       content_type == ContentSettingsType::COOKIES
-          ? cookie_settings->GetCookieSetting(primary_url, secondary_url,
-                                              nullptr)
+          ? cookie_settings->GetCookieSetting(
+                primary_url, secondary_url, nullptr,
+                content_settings::CookieSettings::QueryReason::kSetting)
           : map->GetContentSetting(primary_url, secondary_url, content_type);
 
   base::Value result(base::Value::Type::DICTIONARY);
diff --git a/chrome/browser/extensions/api/content_settings/content_settings_apitest.cc b/chrome/browser/extensions/api/content_settings/content_settings_apitest.cc
index f90c84a..5b419f0 100644
--- a/chrome/browser/extensions/api/content_settings/content_settings_apitest.cc
+++ b/chrome/browser/extensions/api/content_settings/content_settings_apitest.cc
@@ -50,6 +50,7 @@
 namespace extensions {
 
 using ContextType = ExtensionApiTest::ContextType;
+using QueryReason = content_settings::CookieSettings::QueryReason;
 
 class ExtensionContentSettingsApiTest : public ExtensionApiTest {
  public:
@@ -99,9 +100,10 @@
 
     // Check default content settings by using an unknown URL.
     GURL example_url("http://www.example.com");
-    EXPECT_TRUE(
-        cookie_settings->IsFullCookieAccessAllowed(example_url, example_url));
-    EXPECT_TRUE(cookie_settings->IsCookieSessionOnly(example_url));
+    EXPECT_TRUE(cookie_settings->IsFullCookieAccessAllowed(
+        example_url, example_url, QueryReason::kSetting));
+    EXPECT_TRUE(cookie_settings->IsCookieSessionOnly(example_url,
+                                                     QueryReason::kSetting));
     EXPECT_EQ(CONTENT_SETTING_ALLOW,
               map->GetContentSetting(example_url, example_url,
                                      ContentSettingsType::IMAGES));
@@ -132,7 +134,8 @@
 
     // Check content settings for www.google.com
     GURL url("http://www.google.com");
-    EXPECT_FALSE(cookie_settings->IsFullCookieAccessAllowed(url, url));
+    EXPECT_FALSE(cookie_settings->IsFullCookieAccessAllowed(
+        url, url, QueryReason::kSetting));
     EXPECT_EQ(CONTENT_SETTING_ALLOW,
               map->GetContentSetting(url, url, ContentSettingsType::IMAGES));
     EXPECT_EQ(
@@ -167,8 +170,10 @@
 
     // Check content settings for www.google.com
     GURL url("http://www.google.com");
-    EXPECT_TRUE(cookie_settings->IsFullCookieAccessAllowed(url, url));
-    EXPECT_FALSE(cookie_settings->IsCookieSessionOnly(url));
+    EXPECT_TRUE(cookie_settings->IsFullCookieAccessAllowed(
+        url, url, QueryReason::kSetting));
+    EXPECT_FALSE(
+        cookie_settings->IsCookieSessionOnly(url, QueryReason::kSetting));
     EXPECT_EQ(CONTENT_SETTING_ALLOW,
               map->GetContentSetting(url, url, ContentSettingsType::IMAGES));
     EXPECT_EQ(
@@ -204,9 +209,10 @@
     content_settings::CookieSettings* cookie_settings =
         CookieSettingsFactory::GetForProfile(profile_).get();
 
+    content_settings.push_back(cookie_settings->IsFullCookieAccessAllowed(
+        url, url, QueryReason::kSetting));
     content_settings.push_back(
-        cookie_settings->IsFullCookieAccessAllowed(url, url));
-    content_settings.push_back(cookie_settings->IsCookieSessionOnly(url));
+        cookie_settings->IsCookieSessionOnly(url, QueryReason::kSetting));
     content_settings.push_back(
         map->GetContentSetting(url, url, ContentSettingsType::IMAGES));
     content_settings.push_back(
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc b/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc
index a46b661..25798a6 100644
--- a/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc
+++ b/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.h"
 
+#include "build/build_config.h"
+
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
 
 #include <memory>
@@ -118,10 +120,8 @@
       const auto& executable_metadata =
           file_system_item.executable_metadata.value();
 
-      if (executable_metadata.is_running) {
-        response.is_running =
-            std::make_unique<bool>(executable_metadata.is_running);
-      }
+      response.is_running =
+          std::make_unique<bool>(executable_metadata.is_running);
 
       if (executable_metadata.public_key_sha256) {
         response.public_key_sha256 = std::make_unique<std::string>(
diff --git a/chrome/browser/extensions/extension_special_storage_policy.cc b/chrome/browser/extensions/extension_special_storage_policy.cc
index 2596ad3..d4993cd 100644
--- a/chrome/browser/extensions/extension_special_storage_policy.cc
+++ b/chrome/browser/extensions/extension_special_storage_policy.cc
@@ -144,7 +144,8 @@
 bool ExtensionSpecialStoragePolicy::IsStorageSessionOnly(const GURL& origin) {
   if (!cookie_settings_)
     return false;
-  return cookie_settings_->IsCookieSessionOnly(origin);
+  return cookie_settings_->IsCookieSessionOnly(
+      origin, content_settings::CookieSettings::QueryReason::kSiteStorage);
 }
 
 bool ExtensionSpecialStoragePolicy::HasSessionOnlyOrigins() {
diff --git a/chrome/browser/optimization_guide/android/android_push_notification_manager.cc b/chrome/browser/optimization_guide/android/android_push_notification_manager.cc
index f7b2033..08ab91f 100644
--- a/chrome/browser/optimization_guide/android/android_push_notification_manager.cc
+++ b/chrome/browser/optimization_guide/android/android_push_notification_manager.cc
@@ -12,7 +12,7 @@
 #include "base/containers/flat_set.h"
 #include "base/metrics/histogram_functions.h"
 #include "chrome/browser/optimization_guide/android/optimization_guide_bridge.h"
-#include "components/optimization_guide/core/optimization_guide_features.h"
+#include "components/optimization_guide/core/push_notification_manager.h"
 #include "url/gurl.h"
 
 namespace optimization_guide {
@@ -130,15 +130,8 @@
   DCHECK(pref_service_);
 }
 
-void AndroidPushNotificationManager::SetDelegate(
-    PushNotificationManager::Delegate* delegate) {
-  delegate_ = delegate;
-}
-
 void AndroidPushNotificationManager::OnDelegateReady() {
-  DCHECK(delegate_);
-  DCHECK(features::IsPushNotificationsEnabled());
-
+  PushNotificationManager::OnDelegateReady();
   // Quickly check that nothing overflowed. That way we don't risk some
   // notifications being processed just before a purge sweeps everything out.
   base::flat_set<proto::OptimizationType> overflowed_types =
@@ -230,7 +223,7 @@
   if (!notification.has_key_representation())
     return;
 
-  DispatchPayload(notification);
+  PushNotificationManager::OnNewPushNotification(notification);
   InvalidateHints(notification);
 }
 
@@ -259,39 +252,10 @@
   }
 }
 
-void AndroidPushNotificationManager::DispatchPayload(
-    const proto::HintNotificationPayload& notification) {
-  // No custom payload or optimization type.
-  if (!notification.has_payload() || !notification.has_optimization_type()) {
-    return;
-  }
-
-  base::UmaHistogramEnumeration(
-      "OptimizationGuide.PushNotifications.ReceivedNotificationType",
-      notification.optimization_type(),
-      static_cast<optimization_guide::proto::OptimizationType>(
-          optimization_guide::proto::OptimizationType_ARRAYSIZE));
-
-  for (Observer& observer : observers_) {
-    observer.OnNotificationPayload(notification.optimization_type(),
-                                   notification.payload());
-  }
-}
-
 void AndroidPushNotificationManager::OnNewPushNotificationNotHandled(
     const proto::HintNotificationPayload& notification) {
   OptimizationGuideBridge::OnNotificationNotHandledByNative(notification);
 }
 
-void AndroidPushNotificationManager::AddObserver(
-    PushNotificationManager::Observer* observer) {
-  observers_.AddObserver(observer);
-}
-
-void AndroidPushNotificationManager::RemoveObserver(
-    PushNotificationManager::Observer* observer) {
-  observers_.RemoveObserver(observer);
-}
-
 }  // namespace android
 }  // namespace optimization_guide
diff --git a/chrome/browser/optimization_guide/android/android_push_notification_manager.h b/chrome/browser/optimization_guide/android/android_push_notification_manager.h
index 2b82333..500ae943 100644
--- a/chrome/browser/optimization_guide/android/android_push_notification_manager.h
+++ b/chrome/browser/optimization_guide/android/android_push_notification_manager.h
@@ -7,7 +7,6 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
 #include "components/optimization_guide/core/push_notification_manager.h"
 #include "components/optimization_guide/proto/hints.pb.h"
 #include "components/optimization_guide/proto/push_notification.pb.h"
@@ -45,12 +44,9 @@
   ~AndroidPushNotificationManager() override;
 
   // PushNotificationManager implementation:
-  void SetDelegate(PushNotificationManager::Delegate* delegate) override;
   void OnDelegateReady() override;
   void OnNewPushNotification(
       const proto::HintNotificationPayload& notification) override;
-  void AddObserver(PushNotificationManager::Observer* observer) override;
-  void RemoveObserver(PushNotificationManager::Observer* observer) override;
 
  private:
   // Called when the store needs to be purged because there was a cache
@@ -61,23 +57,14 @@
   // Invalidates hints data based on hints keys in |notification| proto.
   void InvalidateHints(const proto::HintNotificationPayload& notification);
 
-  // Dispatches HintNotificationPayload.payload to observers.
-  void DispatchPayload(const proto::HintNotificationPayload& notification);
-
   // Called when a non-cached notification can't be processed right now so it
   // should be cached in Android.
   void OnNewPushNotificationNotHandled(
       const proto::HintNotificationPayload& notification);
 
-  // Owns |this|. Expected to be set before |OnDelegateReady| is called.
-  raw_ptr<PushNotificationManager::Delegate> delegate_ = nullptr;
-
   // Not owned, but expected to outlive |this|.
   raw_ptr<PrefService> pref_service_ = nullptr;
 
-  // Observers to handle the custom payload.
-  base::ObserverList<PushNotificationManager::Observer> observers_;
-
   base::WeakPtrFactory<AndroidPushNotificationManager> weak_ptr_factory_{this};
 };
 
diff --git a/chrome/browser/optimization_guide/chrome_hints_manager.cc b/chrome/browser/optimization_guide/chrome_hints_manager.cc
index eb0ff39..a94a864 100644
--- a/chrome/browser/optimization_guide/chrome_hints_manager.cc
+++ b/chrome/browser/optimization_guide/chrome_hints_manager.cc
@@ -15,6 +15,7 @@
 #include "components/google/core/common/google_util.h"
 #include "components/optimization_guide/core/hint_cache.h"
 #include "components/optimization_guide/core/optimization_guide_features.h"
+#include "components/optimization_guide/core/push_notification_manager.h"
 #include "content/public/browser/browser_thread.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
diff --git a/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc b/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc
index dd9e04de..c7de6711 100644
--- a/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc
+++ b/chrome/browser/optimization_guide/chrome_hints_manager_unittest.cc
@@ -350,12 +350,8 @@
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
-TEST_F(ChromeHintsManagerPushEnabledTest, PushManagerSetOnAndroid) {
-#if BUILDFLAG(IS_ANDROID)
+TEST_F(ChromeHintsManagerPushEnabledTest, PushManagerSet) {
   EXPECT_TRUE(hints_manager()->push_notification_manager());
-#else
-  EXPECT_FALSE(hints_manager()->push_notification_manager());
-#endif
 }
 
 class ChromeHintsManagerPushDisabledTest
@@ -370,7 +366,7 @@
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
-TEST_F(ChromeHintsManagerPushDisabledTest, PushManagerSetOnAndroid) {
+TEST_F(ChromeHintsManagerPushDisabledTest, PushManagerSet) {
   EXPECT_FALSE(hints_manager()->push_notification_manager());
 }
 
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
index e3f0c86..a545b6c8 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
@@ -143,16 +143,21 @@
 std::unique_ptr<optimization_guide::PushNotificationManager>
 OptimizationGuideKeyedService::MaybeCreatePushNotificationManager(
     Profile* profile) {
-#if BUILDFLAG(IS_ANDROID)
   if (optimization_guide::features::IsPushNotificationsEnabled()) {
+// TODO(crbug.com/1347657) use PushNotificationManager for Android.
+// OptimizationGuideBridge specific pieces of AndroidPushNotificationManager
+// were for Chime which went unused.
+#if BUILDFLAG(IS_ANDROID)
     auto push_notification_manager = std::make_unique<
         optimization_guide::android::AndroidPushNotificationManager>(
         profile->GetPrefs());
     push_notification_manager->AddObserver(
         PriceTrackingNotificationBridge::GetForBrowserContext(profile));
     return push_notification_manager;
-  }
+#else
+    return std::make_unique<optimization_guide::PushNotificationManager>();
 #endif
+  }
   return nullptr;
 }
 
diff --git a/chrome/browser/page_info/about_this_site_side_panel_throttle.cc b/chrome/browser/page_info/about_this_site_side_panel_throttle.cc
new file mode 100644
index 0000000..1bca4ecd
--- /dev/null
+++ b/chrome/browser/page_info/about_this_site_side_panel_throttle.cc
@@ -0,0 +1,51 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/page_info/about_this_site_side_panel_throttle.h"
+
+#include "components/navigation_interception/intercept_navigation_throttle.h"
+#include "content/public/browser/navigation_handle.h"
+#include "content/public/browser/navigation_throttle.h"
+#include "content/public/browser/page_navigator.h"
+#include "content/public/browser/web_contents.h"
+#include "ui/base/window_open_disposition.h"
+
+const char kAboutThisSiteWebContentsUserDataKey[] =
+    "about_this_site_web_contents_user_data";
+
+AboutThisSiteWebContentsUserData::AboutThisSiteWebContentsUserData(
+    base::RepeatingCallback<void(const content::OpenURLParams&)> handler)
+    : open_in_new_tab_handler(handler) {}
+
+AboutThisSiteWebContentsUserData::~AboutThisSiteWebContentsUserData() = default;
+
+std::unique_ptr<content::NavigationThrottle>
+MaybeCreateAboutThisSiteThrottleFor(content::NavigationHandle* handle) {
+  // Only install throttle for WebContents that are in the SidePanel.
+  if (!handle || !handle->IsInPrimaryMainFrame() || !handle->GetWebContents() ||
+      !handle->GetWebContents()->GetUserData(
+          kAboutThisSiteWebContentsUserDataKey)) {
+    return nullptr;
+  }
+  return std::make_unique<navigation_interception::InterceptNavigationThrottle>(
+      handle, base::BindRepeating([](content::NavigationHandle* handle) {
+        if (url::IsSameOriginWith(handle->GetURL(),
+                                  handle->GetWebContents()->GetURL()))
+          return false;
+        // Cross-origin navigations should be moved to a regular tab and can't
+        // be handled in the side-panel.
+        content::OpenURLParams params(
+            handle->GetURL(), content::Referrer(handle->GetReferrer()),
+            WindowOpenDisposition::NEW_FOREGROUND_TAB,
+            handle->GetPageTransition(), handle->IsRendererInitiated());
+        params.initiator_origin = handle->GetInitiatorOrigin();
+
+        auto* data = static_cast<AboutThisSiteWebContentsUserData*>(
+            handle->GetWebContents()->GetUserData(
+                kAboutThisSiteWebContentsUserDataKey));
+        data->open_in_new_tab_handler.Run(params);
+        return true;
+      }),
+      navigation_interception::SynchronyMode::kSync);
+}
diff --git a/chrome/browser/page_info/about_this_site_side_panel_throttle.h b/chrome/browser/page_info/about_this_site_side_panel_throttle.h
new file mode 100644
index 0000000..c93c9d3
--- /dev/null
+++ b/chrome/browser/page_info/about_this_site_side_panel_throttle.h
@@ -0,0 +1,38 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_PAGE_INFO_ABOUT_THIS_SITE_SIDE_PANEL_THROTTLE_H_
+#define CHROME_BROWSER_PAGE_INFO_ABOUT_THIS_SITE_SIDE_PANEL_THROTTLE_H_
+
+#include "base/callback.h"
+#include "base/supports_user_data.h"
+
+namespace content {
+struct OpenURLParams;
+class NavigationHandle;
+class NavigationThrottle;
+}  // namespace content
+
+extern const char kAboutThisSiteWebContentsUserDataKey[];
+
+// Holds a handler to open a URL in a new tab in the browser that the sidepanel
+// of this webcontents is associated with. The NavigationThrottle from
+// |MaybeCreateAboutThisSiteThrottleFor| will check if this UserData is present
+// and if it is present intercept cross-origin navigations and open them using
+// the handler.
+struct AboutThisSiteWebContentsUserData : public base::SupportsUserData::Data {
+  explicit AboutThisSiteWebContentsUserData(
+      base::RepeatingCallback<void(const content::OpenURLParams&)> handler);
+  ~AboutThisSiteWebContentsUserData() override;
+
+  base::RepeatingCallback<void(const content::OpenURLParams&)>
+      open_in_new_tab_handler;
+};
+
+// Installs a NavigationThrottle if an AboutThisSiteWebContentsUserData is
+// associated with the WebContents of this navigation.
+std::unique_ptr<content::NavigationThrottle>
+MaybeCreateAboutThisSiteThrottleFor(content::NavigationHandle* handle);
+
+#endif  // CHROME_BROWSER_PAGE_INFO_ABOUT_THIS_SITE_SIDE_PANEL_THROTTLE_H_
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
index 5ee14db..a8ddafd3 100644
--- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
@@ -1317,8 +1317,9 @@
   if (!cookie_settings->ShouldBlockThirdPartyCookies())
     return absl::nullopt;
 
-  return !cookie_settings->IsThirdPartyAccessAllowed(GetDelegate().GetUrl(),
-                                                     nullptr /* source */);
+  return !cookie_settings->IsThirdPartyAccessAllowed(
+      GetDelegate().GetUrl(), nullptr /* source */,
+      content_settings::CookieSettings::QueryReason::kSetting);
 }
 
 void UkmPageLoadMetricsObserver::RecordResponsivenessMetrics() {
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc
index 6795cf6..bfff557 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -113,14 +113,14 @@
 #include "services/metrics/public/cpp/ukm_recorder.h"
 #include "services/network/public/cpp/is_potentially_trustworthy.h"
 #include "third_party/re2/src/re2/re2.h"
+#include "ui/base/clipboard/clipboard.h"
+#include "ui/base/data_transfer_policy/data_transfer_endpoint.h"
 #include "url/url_constants.h"
 
 #if BUILDFLAG(SAFE_BROWSING_AVAILABLE)
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "third_party/blink/public/mojom/clipboard/clipboard.mojom.h"
-#include "ui/base/clipboard/clipboard.h"
-#include "ui/base/data_transfer_policy/data_transfer_endpoint.h"
 #endif
 
 #if BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/picture_in_picture/document_picture_in_picture_window_controller_browsertest.cc b/chrome/browser/picture_in_picture/document_picture_in_picture_window_controller_browsertest.cc
index 036f06c6..e3e4f71 100644
--- a/chrome/browser/picture_in_picture/document_picture_in_picture_window_controller_browsertest.cc
+++ b/chrome/browser/picture_in_picture/document_picture_in_picture_window_controller_browsertest.cc
@@ -95,12 +95,13 @@
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures,
-                                    "PictureInPictureV2");
+                                    "DocumentPictureInPictureAPI");
     InProcessBrowserTest::SetUpCommandLine(command_line);
   }
 
   void SetUp() override {
-    scoped_feature_list_.InitAndEnableFeature(features::kPictureInPictureV2);
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kDocumentPictureInPictureAPI);
     InProcessBrowserTest::SetUp();
   }
 
diff --git a/chrome/browser/policy/policy_test_utils.cc b/chrome/browser/policy/policy_test_utils.cc
index 44de208..046a8c6 100644
--- a/chrome/browser/policy/policy_test_utils.cc
+++ b/chrome/browser/policy/policy_test_utils.cc
@@ -62,8 +62,6 @@
 #endif
   provider_.UpdateChromePolicy(policy_with_defaults);
   DCHECK(base::CurrentThread::Get());
-  base::RunLoop loop;
-  loop.RunUntilIdle();
 }
 
 // static
diff --git a/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc
index 59b394c7..1aeffbd 100644
--- a/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc
@@ -42,6 +42,14 @@
   return google_apis::GetAPIKey();
 }
 
+GURL ChromePrefetchServiceDelegate::GetDefaultDNSCanaryCheckURL() {
+  return GURL("http://dns-tunnel-check.googlezip.net/connect");
+}
+
+GURL ChromePrefetchServiceDelegate::GetDefaultTLSCanaryCheckURL() {
+  return GURL("http://tls-tunnel-check.googlezip.net/connect");
+}
+
 void ChromePrefetchServiceDelegate::ReportOriginRetryAfter(
     const GURL& url,
     base::TimeDelta retry_after) {
diff --git a/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h
index ef4c349..119250d 100644
--- a/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.h
@@ -33,6 +33,8 @@
   std::string GetAcceptLanguageHeader() override;
   GURL GetDefaultPrefetchProxyHost() override;
   std::string GetAPIKey() override;
+  GURL GetDefaultDNSCanaryCheckURL() override;
+  GURL GetDefaultTLSCanaryCheckURL() override;
   void ReportOriginRetryAfter(const GURL& url,
                               base::TimeDelta retry_after) override;
   bool IsOriginOutsideRetryAfterWindow(const GURL& url) override;
diff --git a/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc b/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc
index f33ecb7..5615f27 100644
--- a/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc
+++ b/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc
@@ -1047,8 +1047,9 @@
 }
 
 // Tests that prerender is cancelled if a different prerendering starts.
+// TODO(crbug.com/1348636): Test is flaky.
 IN_PROC_BROWSER_TEST_F(PrerenderOmniboxSearchSuggestionUIBrowserTest,
-                       DifferentSuggestion) {
+                       DISABLED_DifferentSuggestion) {
   base::HistogramTester histogram_tester;
 
   const GURL kInitialUrl = embedded_test_server()->GetURL("/empty.html");
diff --git a/chrome/browser/profiles/profile.h b/chrome/browser/profiles/profile.h
index ca2561e..d6126b9f 100644
--- a/chrome/browser/profiles/profile.h
+++ b/chrome/browser/profiles/profile.h
@@ -393,6 +393,8 @@
 
   // IsRegularProfile(), IsSystemProfile(), IsIncognitoProfile(), and
   // IsGuestSession() are mutually exclusive.
+  // Note: IsGuestSession() is not mutually exclusive with the rest of the
+  // methods mentioned above on Ash and Lacros. TODO(crbug.com/1348572).
   //
   // IsSystemProfile() returns true for both regular and off-the-record profile
   //   of the system profile.
diff --git a/chrome/browser/profiles/profile_selections.h b/chrome/browser/profiles/profile_selections.h
index 523e7d6..fa3beeb 100644
--- a/chrome/browser/profiles/profile_selections.h
+++ b/chrome/browser/profiles/profile_selections.h
@@ -70,6 +70,15 @@
 
     // Builder setters
     Builder& WithRegular(ProfileSelection selection);
+    // Note: When Guest and Regular are not mutually exclusive on Ash and
+    // Lacros, a Profile can potentially return true for both
+    // `IsRegularProfile()` and `IsGuestSession()`. This is currently not
+    // supported by the API, meaning that extra code might need to be added to
+    // make sure all the cases are properly covered. Using the API, if both
+    // `IsRegularProfile()` and `IsGuestSession()` are true, Regular
+    // ProfileSelection logic will be used.
+    // TODO(crbug.com/1348572): remove this comment once `IsGuestSession()` is
+    // fixed.
     Builder& WithGuest(ProfileSelection selection);
     Builder& WithSystem(ProfileSelection selection);
 
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/accessibility_common_manifest.json.jinja2
index c9557a977..ad183a1 100644
--- a/chrome/browser/resources/chromeos/accessibility/accessibility_common_manifest.json.jinja2
+++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common_manifest.json.jinja2
@@ -33,7 +33,8 @@
     {
       "name": "Dictation",
       "id": "dictation",
-      "language": ["none"]
+      "language": ["none"],
+      "input_view": ""
     }
   ]
 }
diff --git a/chrome/browser/resources/new_tab_page/OWNERS b/chrome/browser/resources/new_tab_page/OWNERS
index f195b4e..33d721a 100644
--- a/chrome/browser/resources/new_tab_page/OWNERS
+++ b/chrome/browser/resources/new_tab_page/OWNERS
@@ -1,4 +1,5 @@
 mahmadi@chromium.org
+pauladedeji@google.com
+romanarora@chromium.org
 tiborg@chromium.org
 tluk@chromium.org
-romanarora@chromium.org
diff --git a/chrome/browser/resources/settings/autofill_page/autofill_page.html b/chrome/browser/resources/settings/autofill_page/autofill_page.html
index 9d334a48..cfdeadc 100644
--- a/chrome/browser/resources/settings/autofill_page/autofill_page.html
+++ b/chrome/browser/resources/settings/autofill_page/autofill_page.html
@@ -57,6 +57,18 @@
           <settings-password-check prefs="{{prefs}}"></settings-password-check>
         </settings-subpage>
       </template>
+      <if expr="is_win">
+        <template is="dom-if" route-path="/passkeys">
+          <settings-subpage
+              associated-control="[[$$('#passwordManagerButton')]]"
+              page-title="$i18n{managePasskeysTitle}"
+              search-label="$i18n{managePasskeysSearch}"
+              search-term="{{passkeyFilter_}}">
+            <settings-passkeys-subpage filter="[[passkeyFilter_]]">
+            </settings-passkeys-subpage>
+          </settings-subpage>
+        </template>
+      </if>
       <template is="dom-if" if="[[enablePasswordViewPage_]]">
         <template is="dom-if" route-path="/passwords/view">
           <settings-subpage page-title="[[credential.urls.shown]]"
diff --git a/chrome/browser/resources/settings/autofill_page/autofill_page.ts b/chrome/browser/resources/settings/autofill_page/autofill_page.ts
index 2b86eb96..cd2397b 100644
--- a/chrome/browser/resources/settings/autofill_page/autofill_page.ts
+++ b/chrome/browser/resources/settings/autofill_page/autofill_page.ts
@@ -42,6 +42,7 @@
   static get properties() {
     return {
       passwordFilter_: String,
+      passkeyFilter_: String,
 
       focusConfig_: {
         type: Object,
@@ -83,6 +84,7 @@
   }
 
   private passwordFilter_: string;
+  private passkeyFilter_: string;
   private focusConfig_: Map<string, string>;
   private passwordManagerSubLabel_: string;
   private enablePasswordViewPage_: string;
diff --git a/chrome/browser/resources/settings/autofill_page/passkeys_browser_proxy.ts b/chrome/browser/resources/settings/autofill_page/passkeys_browser_proxy.ts
new file mode 100644
index 0000000..c101dc47
--- /dev/null
+++ b/chrome/browser/resources/settings/autofill_page/passkeys_browser_proxy.ts
@@ -0,0 +1,60 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {sendWithPromise} from 'chrome://resources/js/cr.m.js';
+
+export interface Passkey {
+  // credentialId is hex-encoded.
+  credentialId: string;
+  relyingPartyId: string;
+  userName: string;
+  userDisplayName: string;
+}
+
+export interface PasskeysBrowserProxy {
+  /**
+   * Determines whether any passkeys exist on the local device. Should be
+   * significantly more efficient than calling `enumerate` and checking for a
+   * non-empty list, but may report false positives if the last passkey was
+   * recently deleted.
+   */
+  hasPasskeys(): Promise<boolean>;
+
+  /**
+   * Enumerates passkeys from the local device. Result is null if management
+   * is not supported on this platform.
+   */
+  enumerate(): Promise<Passkey[]|null>;
+
+  /**
+   * Deletes a passkey as specified by credentialId then performs an `enumerate`
+   * operation.
+   */
+  delete(credentialId: string): Promise<Passkey[]|null>;
+}
+
+export class PasskeysBrowserProxyImpl implements PasskeysBrowserProxy {
+  hasPasskeys() {
+    return sendWithPromise('passkeysHasPasskeys');
+  }
+
+  enumerate() {
+    return sendWithPromise('passkeysEnumerate');
+  }
+
+  delete(credentialId: string) {
+    return sendWithPromise('passkeysDelete', credentialId);
+  }
+
+  static getInstance(): PasskeysBrowserProxy {
+    return passkeysProxyInstance ||
+        (passkeysProxyInstance = new PasskeysBrowserProxyImpl());
+  }
+
+  static setInstance(obj: PasskeysBrowserProxy) {
+    passkeysProxyInstance = obj;
+  }
+}
+
+let passkeysProxyInstance: PasskeysBrowserProxy|null = null;
diff --git a/chrome/browser/resources/settings/autofill_page/passkeys_subpage.html b/chrome/browser/resources/settings/autofill_page/passkeys_subpage.html
new file mode 100644
index 0000000..72a0122e
--- /dev/null
+++ b/chrome/browser/resources/settings/autofill_page/passkeys_subpage.html
@@ -0,0 +1,80 @@
+<style include="cr-shared-style settings-shared passwords-shared">
+  #passkeys-list-header {
+    /* This adds enough padding so that the labels are aligned with the
+     * columns. It is necessary due to the absence of the "more actions"
+     * button in the heading.
+     */
+    padding-inline-end: calc(
+      var(--cr-icon-ripple-size) + var(--cr-icon-button-margin-start));
+  }
+
+  #iconContainer {
+    height: 24px;
+    line-height: 100%;
+    margin-inline-end: 20px;
+    padding: 4px;
+    width: 24px;
+  }
+</style>
+
+<template is="dom-if" if="[[noManagement_]]">
+  <div id="error" class="cr-row first">
+    <div id="iconContainer">
+      <iron-icon icon="cr:info"></iron-icon>
+    </div>
+    <p>$i18n{managePasskeysNoSupport}</p>
+  </div>
+</template>
+
+<div class="cr-row first cr-secondary-text">
+  $i18n{managePasskeysSubTitle}
+</div>
+
+<div class="list-frame">
+  <div id="passkeys-list-header"
+       class="list-item column-header right-pad"
+       aria-hidden="true">
+    <div class="website-column">$i18n{editPasswordWebsiteLabel}</div>
+    <div class="username-column">$i18n{editPasswordUsernameLabel}</div>
+  </div>
+  <div class="cr-separators list-with-header">
+    <template is="dom-repeat" items="[[passkeys_]]"
+        filter="[[filterFunction_(filter)]]">
+      <div class="list-item" focus-row-container>
+        <div class="website-column no-min-width">
+          <site-favicon url="[[getIconURL_(item)]]"></site-favicon>
+          <span class="text-elide elide-left">[[item.relyingPartyId]]</span>
+        </div>
+
+        <div id="username" class="username-column no-min-width text-elide">
+          [[item.userName]]
+        </div>
+
+         <cr-icon-button id="moreActionsButton" class="icon-more-vert"
+            data-credential-id$="[[item.credentialId]]"
+            on-click="onDotsClick_" title="$i18n{moreActions}"
+            focus-row-control focus-type="moreActionsButton"></cr-icon-button>
+      </div>
+    </template>
+  </div>
+</div>
+
+<cr-action-menu id="menu" role-description="$i18n{menu}">
+  <button class="dropdown-item" on-click="onDeleteClick_" id="delete">
+    $i18n{delete}
+  </button>
+</cr-action-menu>
+
+<cr-lazy-render id="deleteErrorDialog">
+  <template>
+    <cr-dialog close-text="$i18n{close}">
+      <div slot="title">$i18n{managePasskeysCannotDeleteTitle}</div>
+      <div slot="body">$i18n{managePasskeysCannotDeleteBody}</div>
+      <div slot="button-container">
+        <cr-button class="action-button" on-click="onCloseDialog_">
+          $i18n{ok}
+        </cr-button>
+      </div>
+    </cr-dialog>
+  </template>
+</cr-lazy-render>
diff --git a/chrome/browser/resources/settings/autofill_page/passkeys_subpage.ts b/chrome/browser/resources/settings/autofill_page/passkeys_subpage.ts
new file mode 100644
index 0000000..3838cac
--- /dev/null
+++ b/chrome/browser/resources/settings/autofill_page/passkeys_subpage.ts
@@ -0,0 +1,157 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview A settings subpage that allows the user to see and manage the
+    passkeys on their computer.
+ */
+import '../settings_shared.css.js';
+import 'chrome://resources/cr_elements/icons.m.js';
+import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js';
+import 'chrome://resources/cr_elements/cr_button/cr_button.m.js';
+import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
+import 'chrome://resources/cr_elements/cr_lazy_render/cr_lazy_render.js';
+import '../site_favicon.js';
+
+import {AnchorAlignment} from 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js';
+import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js';
+import {CrLazyRenderElement} from 'chrome://resources/cr_elements/cr_lazy_render/cr_lazy_render.js';
+import {assert} from 'chrome://resources/js/assert_ts.js';
+import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {Passkey, PasskeysBrowserProxy, PasskeysBrowserProxyImpl} from './passkeys_browser_proxy.js';
+import {getTemplate} from './passkeys_subpage.html.js';
+
+export interface SettingsPasskeysSubpageElement {
+  $: {
+    deleteErrorDialog: CrLazyRenderElement<CrDialogElement>,
+  };
+}
+
+export class SettingsPasskeysSubpageElement extends PolymerElement {
+  static get is() {
+    return 'settings-passkeys-subpage';
+  }
+
+  static get template() {
+    return getTemplate();
+  }
+
+  static get properties() {
+    return {
+      /** Substring to filter the passkeys by. */
+      filter: {
+        type: String,
+        value: '',
+      },
+    };
+  }
+
+  private filter: string;
+  private passkeys_: Passkey[];
+  // Set if the current platform doesn't support passkey management.
+  // (E.g. Windows prior to 2022H2.)
+  private noManagement_: boolean;
+  // Contains the credentialId of the passkey that the action menu was opened
+  // for.
+  private credentialIdForActionMenu_: string|null;
+
+  private browserProxy_: PasskeysBrowserProxy =
+      PasskeysBrowserProxyImpl.getInstance();
+
+  override ready() {
+    super.ready();
+    this.browserProxy_.enumerate().then(this.onEnumerateComplete_.bind(this));
+  }
+
+  /**
+   * Used to filter the displayed passkeys when search text is entered.
+   */
+  private filterFunction_(): ((passkey: Passkey) => boolean) {
+    return passkey => [passkey.relyingPartyId, passkey.userName].some(
+               str => str.toLowerCase().includes(
+                   this.filter.trim().toLowerCase()));
+  }
+
+  /**
+   * Called when the browser has a new list of passkeys.
+   */
+  private onEnumerateComplete_(passkeys: Passkey[]|null) {
+    if (passkeys === null) {
+      this.noManagement_ = true;
+      this.passkeys_ = [];
+      return;
+    }
+
+    // `passkeys` will have been sorted already because it's easier to do a
+    // Public Suffix List-based sort in C++.
+    this.passkeys_ = passkeys;
+  }
+
+  private getIconURL_(passkey: Passkey): string {
+    // `passkey.relyingPartyId` comes from the OS and hopefully can be trusted,
+    // but don't let bad data form an unexpected URL. Thus drop any passkeys
+    // with characters in the RP ID that are meaningful in a host per
+    // https://datatracker.ietf.org/doc/html/rfc1738#section-3.1
+    if (['@', ':', '/'].every(c => passkey.relyingPartyId.indexOf(c) === -1)) {
+      return 'https://' + passkey.relyingPartyId + '/';
+    }
+
+    return '';
+  }
+
+  /**
+   * Called when the user clicks on the three-dots icon for a passkey.
+   */
+  private onDotsClick_(e: Event) {
+    this.credentialIdForActionMenu_ =
+        (e.target as HTMLElement).dataset['credentialId']!;
+    this.shadowRoot!.querySelector('cr-action-menu')!.showAt(
+        e.target as HTMLElement, {
+          anchorAlignmentY: AnchorAlignment.AFTER_END,
+        });
+  }
+
+  /**
+   * Called when the user clicks to delete a passkey.
+   */
+  private onDeleteClick_() {
+    this.shadowRoot!.querySelector('cr-action-menu')!.close();
+
+    assert(this.credentialIdForActionMenu_);
+    this.browserProxy_.delete(this.credentialIdForActionMenu_)
+        .then(
+            this.onDeleteComplete_.bind(this, this.credentialIdForActionMenu_));
+  }
+
+  /**
+   * Called when a delete operation has completed.
+   */
+  private onDeleteComplete_(
+      deletedCredentialId: string, newPasskeys: Passkey[]|null) {
+    if (newPasskeys !== null &&
+        newPasskeys.findIndex(
+            (cred) => cred.credentialId === deletedCredentialId) !== -1) {
+      // The passkey is still present thus the deletion failed.
+      this.$.deleteErrorDialog.get().showModal();
+    }
+    this.onEnumerateComplete_(newPasskeys);
+  }
+
+  /**
+   * Called when the user clicks the "ok" button on the error dialog.
+   */
+  private onCloseDialog_(_: Event) {
+    this.$.deleteErrorDialog.get().close();
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'settings-passkeys-subpage': SettingsPasskeysSubpageElement;
+  }
+}
+
+customElements.define(
+    SettingsPasskeysSubpageElement.is, SettingsPasskeysSubpageElement);
diff --git a/chrome/browser/resources/settings/autofill_page/password_list_item.html b/chrome/browser/resources/settings/autofill_page/password_list_item.html
index 3c7cbf57..6b041c0 100644
--- a/chrome/browser/resources/settings/autofill_page/password_list_item.html
+++ b/chrome/browser/resources/settings/autofill_page/password_list_item.html
@@ -1,21 +1,4 @@
     <style include="settings-shared passwords-shared">
-      .elide-left {
-        /* The following non-flex directives allow eliding long originUrls from
-         * the left. Forcing rtl should not cause an issue for right-to-left
-         * languages in this case, since valid URL characters are restricted to
-         * ASCII.
-         */
-         direction: rtl;
-      }
-
-      .elide-left > span {
-        direction: ltr;
-        /* This styling is necessary to fix the display of domains starting with
-         * numbers.
-         */
-        unicode-bidi: bidi-override;
-      }
-
       #username,
       #password {
         color: inherit;
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_section.html b/chrome/browser/resources/settings/autofill_page/passwords_section.html
index db53aaf..1c99a356 100644
--- a/chrome/browser/resources/settings/autofill_page/passwords_section.html
+++ b/chrome/browser/resources/settings/autofill_page/passwords_section.html
@@ -162,6 +162,18 @@
         hidden$="[[shouldHideTrustedVaultBanner_(trustedVaultBannerState_)]]"
         on-click="onTrustedVaultBannerClick_" external>
     </cr-link-row>
+<if expr="is_win">
+    <div class="cr-row" id="managePasskeysRow"
+        on-click="onManagePasskeysClick_" actionable
+        hidden$="[[!hasPasskeys_]]">
+      <div class="flex cr-padded-text">
+        <div>$i18n{managePasskeysLabel}</div>
+      </div>
+      <cr-icon-button id="managePasskeysIcon" class="subpage-arrow"
+          aria-label="$i18n{managePasskeysLabel}">
+      </cr-icon-button>
+    </div>
+</if>
     <div id="manageLink" class="cr-row two-line"
         hidden$="[[hidePasswordsLink_]]">
       <!-- This div lays out the link correctly, relative to the text. -->
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_section.ts b/chrome/browser/resources/settings/autofill_page/passwords_section.ts
index 0cffd10..933be72 100644
--- a/chrome/browser/resources/settings/autofill_page/passwords_section.ts
+++ b/chrome/browser/resources/settings/autofill_page/passwords_section.ts
@@ -55,6 +55,9 @@
 import {BlockingRequestManager} from './blocking_request_manager.js';
 // </if>
 import {MergePasswordsStoreCopiesMixin, MergePasswordsStoreCopiesMixinInterface} from './merge_passwords_store_copies_mixin.js';
+// <if expr="is_win">
+import {PasskeysBrowserProxy, PasskeysBrowserProxyImpl} from './passkeys_browser_proxy.js';
+// </if>
 import {PasswordCheckMixin, PasswordCheckMixinInterface} from './password_check_mixin.js';
 import {AddCredentialFromSettingsUserInteractions, PasswordEditDialogElement} from './password_edit_dialog.js';
 import {PasswordCheckReferrer, PasswordExceptionListChangedListener, PasswordManagerImpl, PasswordManagerProxy} from './password_manager_proxy.js';
@@ -241,6 +244,12 @@
         computed: 'computeHasLeakedCredentials_(leakedPasswords)',
       },
 
+      /** Whether the user has passkeys (i.e. WebAuthn credentials). */
+      hasPasskeys_: {
+        type: Boolean,
+        value: false,
+      },
+
       hidePasswordsLink_: {
         type: Boolean,
         computed: 'computeHidePasswordsLink_(syncPrefs_, syncStatus_, ' +
@@ -340,6 +349,7 @@
   private shouldShowDevicePasswordsLink_: boolean;
   private trustedVaultBannerState_: TrustedVaultBannerState;
   private hasLeakedCredentials_: boolean;
+  private hasPasskeys_: boolean;
   private hidePasswordsLink_: boolean;
   private showImportPasswords_: boolean;
   private profileEmail_: string;
@@ -360,6 +370,10 @@
   private activeDialogAnchorStack_: HTMLElement[];
   private passwordManager_: PasswordManagerProxy =
       PasswordManagerImpl.getInstance();
+  // <if expr="is_win">
+  private passkeysBrowserProxy_: PasskeysBrowserProxy =
+      PasskeysBrowserProxyImpl.getInstance();
+  // </if>
   private setIsOptedInForAccountStorageListener_:
       ((isOptedIn: boolean) => void)|null = null;
   private setPasswordExceptionsListener_: PasswordExceptionListChangedListener|
@@ -393,6 +407,12 @@
       }
       // </if>
     });
+
+    // <if expr="is_win">
+    this.passkeysBrowserProxy_.hasPasskeys().then(hasPasskeys => {
+      this.hasPasskeys_ = hasPasskeys;
+    });
+    // </if>
   }
 
   override connectedCallback() {
@@ -597,6 +617,10 @@
     Router.getInstance().navigateTo(routes.DEVICE_PASSWORDS);
   }
 
+  private onManagePasskeysClick_() {
+    Router.getInstance().navigateTo(routes.PASSKEYS);
+  }
+
   getPasswordManagerForTest(): PasswordManagerProxy {
     return this.passwordManager_;
   }
@@ -772,6 +796,14 @@
       assert(toFocus);
       focusWithoutInk(toFocus);
     });
+    // <if expr="is_win">
+    this.focusConfig.set(routes.PASSKEYS.path, () => {
+      const toFocus =
+          this.shadowRoot!.querySelector<HTMLElement>('#managePasskeysIcon');
+      assert(toFocus);
+      focusWithoutInk(toFocus);
+    });
+    // </if>
   }
 
   private announceSearchResults_() {
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_shared.css b/chrome/browser/resources/settings/autofill_page/passwords_shared.css
index 0f57d0aa7..2348af9 100644
--- a/chrome/browser/resources/settings/autofill_page/passwords_shared.css
+++ b/chrome/browser/resources/settings/autofill_page/passwords_shared.css
@@ -61,6 +61,23 @@
   white-space: nowrap;
 }
 
+.elide-left {
+  /* The following non-flex directives allow eliding long originUrls from
+   * the left. Forcing rtl should not cause an issue for right-to-left
+   * languages in this case, since valid URL characters are restricted to
+   * ASCII.
+  */
+  direction: rtl;
+}
+
+.elide-left > span {
+    direction: ltr;
+    /* This styling is necessary to fix the display of domains starting with
+     * numbers.
+     */
+    unicode-bidi: bidi-override;
+  }
+
 site-favicon {
   margin-inline-end: 16px;
   min-width: 16px;
diff --git a/chrome/browser/resources/settings/lazy_load.ts b/chrome/browser/resources/settings/lazy_load.ts
index 317c828..9a63f47 100644
--- a/chrome/browser/resources/settings/lazy_load.ts
+++ b/chrome/browser/resources/settings/lazy_load.ts
@@ -5,6 +5,9 @@
 // Subpages
 import './appearance_page/appearance_fonts_page.js';
 import './autofill_page/autofill_section.js';
+// <if expr="is_win">
+import './autofill_page/passkeys_subpage.js';
+// </if>
 import './autofill_page/password_check.js';
 import './autofill_page/password_view.js';
 import './autofill_page/passwords_device_section.js';
@@ -82,6 +85,10 @@
 export {BlockingRequestManager} from './autofill_page/blocking_request_manager.js';
 // </if>
 export {SettingsCreditCardEditDialogElement} from './autofill_page/credit_card_edit_dialog.js';
+// <if expr="is_win">
+export {Passkey, PasskeysBrowserProxy, PasskeysBrowserProxyImpl} from './autofill_page/passkeys_browser_proxy.js';
+export {SettingsPasskeysSubpageElement} from './autofill_page/passkeys_subpage.js';
+// </if>
 export {SettingsPasswordCheckElement} from './autofill_page/password_check.js';
 export {SettingsPasswordCheckEditDialogElement} from './autofill_page/password_check_edit_dialog.js';
 export {SettingsPasswordEditDisclaimerDialogElement} from './autofill_page/password_check_edit_disclaimer_dialog.js';
diff --git a/chrome/browser/resources/settings/privacy_page/OWNERS b/chrome/browser/resources/settings/privacy_page/OWNERS
index cc11485..5eec6eb 100644
--- a/chrome/browser/resources/settings/privacy_page/OWNERS
+++ b/chrome/browser/resources/settings/privacy_page/OWNERS
@@ -1 +1,3 @@
 sauski@google.com
+
+per-file privacy_guide_promo*=rainhard@chromium.org
diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resources/settings/route.ts
index a2e54078e..7b7196d 100644
--- a/chrome/browser/resources/settings/route.ts
+++ b/chrome/browser/resources/settings/route.ts
@@ -151,6 +151,10 @@
 
     r.PAYMENTS = r.AUTOFILL.createChild('/payments');
     r.ADDRESSES = r.AUTOFILL.createChild('/addresses');
+
+    // <if expr="is_win">
+    r.PASSKEYS = r.AUTOFILL.createChild('/passkeys');
+    // </if>
   }
 
   if (visibility.privacy !== false) {
diff --git a/chrome/browser/resources/settings/settings.gni b/chrome/browser/resources/settings/settings.gni
index 02d0b77..783e646 100644
--- a/chrome/browser/resources/settings/settings.gni
+++ b/chrome/browser/resources/settings/settings.gni
@@ -184,6 +184,7 @@
 
 if (is_win) {
   web_component_files += [
+    "autofill_page/passkeys_subpage.ts",
     "safety_check_page/safety_check_chrome_cleaner_child.ts",
     "chrome_cleanup_page/chrome_cleanup_page.ts",
     "chrome_cleanup_page/items_to_remove_list.ts",
@@ -308,6 +309,7 @@
 
 if (is_win) {
   non_web_component_files += [
+    "autofill_page/passkeys_browser_proxy.ts",
     "chrome_cleanup_page/chrome_cleanup_proxy.ts",
     "incompatible_applications_page/incompatible_applications_browser_proxy.ts",
   ]
diff --git a/chrome/browser/resources/settings/settings_routes.ts b/chrome/browser/resources/settings/settings_routes.ts
index cfa58be..54062970 100644
--- a/chrome/browser/resources/settings/settings_routes.ts
+++ b/chrome/browser/resources/settings/settings_routes.ts
@@ -30,6 +30,7 @@
   LANGUAGES: Route;
   MANAGE_PROFILE: Route;
   ON_STARTUP: Route;
+  PASSKEYS: Route;
   PASSWORDS: Route;
   PASSWORD_VIEW: Route;
   DEVICE_PASSWORDS: Route;
diff --git a/chrome/browser/sharing/sharing_device_registration.cc b/chrome/browser/sharing/sharing_device_registration.cc
index a28578d2..419e8a00 100644
--- a/chrome/browser/sharing/sharing_device_registration.cc
+++ b/chrome/browser/sharing/sharing_device_registration.cc
@@ -335,12 +335,8 @@
 
 bool SharingDeviceRegistration::IsOptimizationGuidePushNotificationSupported()
     const {
-#if BUILDFLAG(IS_ANDROID)
   return optimization_guide::features::IsOptimizationHintsEnabled() &&
          optimization_guide::features::IsPushNotificationsEnabled();
-#else
-  return false;
-#endif
 }
 
 void SharingDeviceRegistration::SetEnabledFeaturesForTesting(
diff --git a/chrome/browser/sharing/sharing_handler_registry_impl.cc b/chrome/browser/sharing/sharing_handler_registry_impl.cc
index 265c57e..f9cabd8 100644
--- a/chrome/browser/sharing/sharing_handler_registry_impl.cc
+++ b/chrome/browser/sharing/sharing_handler_registry_impl.cc
@@ -8,17 +8,17 @@
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/sharing/ack_message_handler.h"
+#include "chrome/browser/sharing/optimization_guide/optimization_guide_message_handler.h"
 #include "chrome/browser/sharing/ping_message_handler.h"
 #include "chrome/browser/sharing/sharing_device_registration.h"
 #include "chrome/browser/sharing/sharing_message_handler.h"
 #include "chrome/browser/sharing/sharing_message_sender.h"
+#include "components/optimization_guide/core/optimization_guide_features.h"
 
 #if BUILDFLAG(IS_ANDROID)
 #include "chrome/browser/sharing/click_to_call/click_to_call_message_handler_android.h"
-#include "chrome/browser/sharing/optimization_guide/optimization_guide_message_handler.h"
 #include "chrome/browser/sharing/shared_clipboard/shared_clipboard_message_handler_android.h"
 #include "chrome/browser/sharing/sms/sms_fetch_request_handler.h"
-#include "components/optimization_guide/core/optimization_guide_features.h"
 #else
 #include "chrome/browser/sharing/shared_clipboard/shared_clipboard_message_handler_desktop.h"
 #endif  // BUILDFLAG(IS_ANDROID)
@@ -53,13 +53,14 @@
         {chrome_browser_sharing::SharingMessage::kSmsFetchRequest});
   }
 
+#endif  // BUILDFLAG(IS_ANDROID)
+
   if (optimization_guide::features::IsPushNotificationsEnabled() &&
       optimization_guide::features::IsOptimizationHintsEnabled()) {
     AddSharingHandler(OptimizationGuideMessageHandler::Create(profile),
                       {chrome_browser_sharing::SharingMessage::
                            kOptimizationGuidePushNotification});
   }
-#endif  // BUILDFLAG(IS_ANDROID)
 
   if (sharing_device_registration->IsSharedClipboardSupported()) {
     std::unique_ptr<SharingMessageHandler> shared_clipboard_message_handler;
diff --git a/chrome/browser/storage/durable_storage_permission_context.cc b/chrome/browser/storage/durable_storage_permission_context.cc
index 80c8f76..f732f6c 100644
--- a/chrome/browser/storage/durable_storage_permission_context.cc
+++ b/chrome/browser/storage/durable_storage_permission_context.cc
@@ -65,9 +65,12 @@
 
   // Don't grant durable for session-only storage, since it won't be persisted
   // anyway. Don't grant durable if we can't write cookies.
-  if (cookie_settings->IsCookieSessionOnly(requesting_origin) ||
-      !cookie_settings->IsFullCookieAccessAllowed(requesting_origin,
-                                                  requesting_origin)) {
+  if (cookie_settings->IsCookieSessionOnly(
+          requesting_origin,
+          content_settings::CookieSettings::QueryReason::kSiteStorage) ||
+      !cookie_settings->IsFullCookieAccessAllowed(
+          requesting_origin, requesting_origin,
+          content_settings::CookieSettings::QueryReason::kSiteStorage)) {
     NotifyPermissionSet(id, requesting_origin, embedding_origin,
                         std::move(callback), /*persist=*/false,
                         CONTENT_SETTING_DEFAULT, /*is_one_time=*/false);
diff --git a/chrome/browser/supervised_user/kids_management_url_checker_client.cc b/chrome/browser/supervised_user/kids_management_url_checker_client.cc
index f2a375bb..45cc3b34 100644
--- a/chrome/browser/supervised_user/kids_management_url_checker_client.cc
+++ b/chrome/browser/supervised_user/kids_management_url_checker_client.cc
@@ -10,6 +10,7 @@
 #include "base/logging.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/supervised_user/kids_chrome_management/kids_chrome_management_client_factory.h"
+#include "third_party/protobuf/src/google/protobuf/message_lite.h"
 #include "url/gurl.h"
 
 namespace {
diff --git a/chrome/browser/supervised_user/kids_management_url_checker_client.h b/chrome/browser/supervised_user/kids_management_url_checker_client.h
index 44aa8d3..13a121c 100644
--- a/chrome/browser/supervised_user/kids_management_url_checker_client.h
+++ b/chrome/browser/supervised_user/kids_management_url_checker_client.h
@@ -11,6 +11,7 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/supervised_user/kids_chrome_management/kids_chrome_management_client.h"
 #include "components/safe_search_api/url_checker_client.h"
+#include "third_party/protobuf/src/google/protobuf/message_lite.h"
 
 class GURL;
 
diff --git a/chrome/browser/tab_contents/navigation_metrics_recorder.cc b/chrome/browser/tab_contents/navigation_metrics_recorder.cc
index e86429e..6a37fd23 100644
--- a/chrome/browser/tab_contents/navigation_metrics_recorder.cc
+++ b/chrome/browser/tab_contents/navigation_metrics_recorder.cc
@@ -9,6 +9,7 @@
 #include "chrome/browser/content_settings/cookie_settings_factory.h"
 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
 #include "chrome/browser/profiles/profile.h"
+#include "components/content_settings/core/browser/cookie_settings.h"
 #include "components/navigation_metrics/navigation_metrics.h"
 #include "components/profile_metrics/browser_profile_type.h"
 #include "components/site_engagement/content/site_engagement_service.h"
@@ -53,9 +54,10 @@
 NavigationMetricsRecorder::GetThirdPartyCookieBlockState(const GURL& url) {
   if (!cookie_settings_->ShouldBlockThirdPartyCookies())
     return ThirdPartyCookieBlockState::kCookiesAllowed;
-  bool blocking_enabled_for_site =
-      !cookie_settings_->IsThirdPartyAccessAllowed(url,
-                                                   /*source=*/nullptr);
+  bool blocking_enabled_for_site = !cookie_settings_->IsThirdPartyAccessAllowed(
+      url,
+      /*source=*/nullptr,
+      content_settings::CookieSettings::QueryReason::kSetting);
   return blocking_enabled_for_site
              ? ThirdPartyCookieBlockState::kThirdPartyCookiesBlocked
              : ThirdPartyCookieBlockState::
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeader.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeader.java
index a362a98..57f9ee87 100644
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeader.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeader.java
@@ -271,7 +271,6 @@
 
             if (!hasGeolocationPermission()) {
                 if (recordUma) recordHistogram(UMA_LOCATION_DISABLED_FOR_CHROME_APP);
-                Log.i(TAG, "[crbug/1338183] App permission is missing");
                 return HeaderState.LOCATION_PERMISSION_BLOCKED;
             }
 
@@ -353,7 +352,6 @@
             long locationAge = Long.MAX_VALUE;
             @HeaderState
             int headerState = geoHeaderStateForUrl(profile, url, true);
-            Log.i(TAG, "[crbug/1338183] headerState: " + headerState);
             if (headerState == HeaderState.HEADER_ENABLED) {
                 locationToAttach = GeolocationTracker.getLastKnownLocation(
                         ContextUtils.getApplicationContext());
@@ -463,11 +461,25 @@
      * geolocation infobar).
      */
     static boolean isLocationDisabledForUrl(Profile profile, Uri uri) {
-        boolean enabled =
-                // TODO(raymes): The call to isDSEOrigin is only needed if this could be called for
-                // an origin that isn't the default search engine. Otherwise remove this line.
-                WebsitePreferenceBridge.isDSEOrigin(profile, uri.toString())
-                && locationContentSettingForUrl(profile, uri) == ContentSettingValues.ALLOW;
+        Log.i(TAG, "[crbug/1338183] uri: " + uri);
+        Log.i(TAG, "[crbug/1338183] profile.OTR: " + profile.isOffTheRecord());
+        Log.i(TAG,
+                "[crbug/1338183] getBrowserProfileTypeFromProfile: "
+                        + Profile.getBrowserProfileTypeFromProfile(profile));
+        Log.i(TAG,
+                "[crbug/1338183] profile.getNativeBrowserContextPointer: "
+                        + profile.getNativeBrowserContextPointer());
+
+        // TODO(raymes): The call to isDSEOrigin is only needed if this could be called for
+        // an origin that isn't the default search engine. Otherwise remove this line.
+        boolean isDSEOrigin = WebsitePreferenceBridge.isDSEOrigin(profile, uri.toString());
+        Log.i(TAG, "[crbug/1338183] isDSEOrigin: " + isDSEOrigin);
+        @ContentSettingValues
+        @Nullable
+        Integer settingValue = locationContentSettingForUrl(profile, uri);
+        Log.i(TAG, "[crbug/1338183] settingValue: " + settingValue);
+
+        boolean enabled = isDSEOrigin && settingValue == ContentSettingValues.ALLOW;
         return !enabled;
     }
 
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 4d294d6..aa9ed27 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">Blaaigeskiedenis</translation>
 <translation id="2497852260688568942">Jou administrateur het sinkronisering gedeaktiveer</translation>
 <translation id="250020030759455918">Jy sal jou <ph name="SITE_NAME" />-aanmeldingstatus, -blaaierdata en -werfdata in Chrome sien</translation>
+<translation id="2507178219579379057">Chrome verken tans maniere om strooipos, bedrog, en deling tussen werwe te beperk. Chrome <ph name="BEGIN_LINK" />skat ook jou belangstellings<ph name="END_LINK" /> wat werwe kan gebruik om vir jou advertensies te wys. Jy kan jou belangstellings in Instellings bestuur.</translation>
 <translation id="2513403576141822879">Sien <ph name="BEGIN_LINK" />Sinkornisering en Google-dienste<ph name="END_LINK" /> vir meer instellings wat verband hou met privaatheid, sekuriteit en data-insameling</translation>
 <translation id="2517472476991765520">Skandeer</translation>
 <translation id="2523184218357549926">Stuur URL'e van bladsye wat jy besoek na Google toe</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 b20fef5..cd042e22 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">سابقه مرور</translation>
 <translation id="2497852260688568942">سرپرستتان همگام‌سازی را غیرفعال کرده است</translation>
 <translation id="250020030759455918">‏وضعیت ورود به سیستم <ph name="SITE_NAME" />، داده‌های محصول مرور، و داده‌های سایت را در Chrome خواهید دید</translation>
+<translation id="2507178219579379057">‏Chrome به‌دنبال راه‌هایی برای محدود کردن هرزآگهی، کلاهبرداری، و هم‌رسانی بین سایت‌ها است. Chrome همچنین <ph name="BEGIN_LINK" />علایقتان را تخمین می‌زند<ph name="END_LINK" /> و سایت‌ها می‌توانند براساس آن‌ها به شما آگهی نشان دهند. می‌توانید علایقتان را در تنظیمات مدیریت کنید.</translation>
 <translation id="2513403576141822879">‏برای تنظیمات بیشتر مرتبط با حریم خصوصی، امنیت و جمع‌آوری داده‌ها، <ph name="BEGIN_LINK" />همگام‌سازی و سرویس‌های Google<ph name="END_LINK" /> را ببینید</translation>
 <translation id="2517472476991765520">اسکن</translation>
 <translation id="2523184218357549926">‏نشانی وب صفحه‌هایی را که بازدید می‌کنید برای Google ارسال می‌کند</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 18cf3d21..13d3034 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">Historique de navigation</translation>
 <translation id="2497852260688568942">La synchronisation est désactivée par votre administrateur</translation>
 <translation id="250020030759455918">Vous verrez votre état de connexion à <ph name="SITE_NAME" />, vos données de navigation et vos données de site dans Chrome</translation>
+<translation id="2507178219579379057">Chrome explore des moyens de limiter les annonces indésirables, la fraude et le partage entre les sites. En outre, Chrome <ph name="BEGIN_LINK" />devine vos centres d'intérêt<ph name="END_LINK" /> que d'autres sites peuvent utiliser pour vous montrer des annonces. Vous pouvez gérer vos centres d'intérêt dans les paramètres.</translation>
 <translation id="2513403576141822879">Pour plus de paramètres relatifs à la confidentialité, à la sécurité et à la collecte de données, voir <ph name="BEGIN_LINK" />Synchronisation et services Google<ph name="END_LINK" /></translation>
 <translation id="2517472476991765520">Rechercher</translation>
 <translation id="2523184218357549926">Envoie les URL des pages que vous consultez à Google</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 56e0567..8064d85d 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">બ્રાઉઝિંગ ઇતિહાસ</translation>
 <translation id="2497852260688568942">સમન્વયન, તમારા વ્યવસ્થાપક દ્વારા અક્ષમ કરવામાં આવ્યું છે</translation>
 <translation id="250020030759455918">તમને Chromeમાં તમારું <ph name="SITE_NAME" />નું સાઇન ઇન સ્ટેટસ, બ્રાઉઝિંગ ડેટા અને સાઇટ ડેટા દેખાશે</translation>
+<translation id="2507178219579379057">Chrome સ્પામ જાહેરાત, કપટ અને સાઇટ વચ્ચે શેરિંગને મર્યાદિત કરવાની રીતો શોધી રહ્યું છે. Chrome તમને જાહેરાતો બતાવવા માટે સાઇટ જેનો ઉપયોગ કરી શકે, એવી <ph name="BEGIN_LINK" />તમારી રુચિઓનું અનુમાન પણ લગાવે છે<ph name="END_LINK" />. સેટિંગમાં જઈને તમે તમારી રુચિઓ મેનેજ કરી શકો છો.</translation>
 <translation id="2513403576141822879">ગોપનીયતા, સુરક્ષા, અને ડેટા સંગ્રહથી સંબંધિત વધુ સેટિંગ માટે, <ph name="BEGIN_LINK" />સિંક અને Google સેવાઓ<ph name="END_LINK" /> જુઓ</translation>
 <translation id="2517472476991765520">સ્કૅન કરો</translation>
 <translation id="2523184218357549926">તમે મુલાકાત લો તે પેજના URLs Googleને મોકલે છે</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 f1095d7f..cd260ef3 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">ब्राउज़िंग इतिहास</translation>
 <translation id="2497852260688568942">सिंक को आपके व्यवस्थापक ने अक्षम कर दिया है</translation>
 <translation id="250020030759455918">आपको Chrome में अपनी <ph name="SITE_NAME" /> की साइन इन स्थिति, ब्राउज़िंग डेटा, और साइट डेटा दिखेगा</translation>
+<translation id="2507178219579379057">Chrome ऐसे तरीके खोज रहा है जिनसे स्पैम वाले विज्ञापन, धोखाधड़ी, और साइटों के बीच शेयर किए जाने वाले डेटा को सीमित किया जा सके. Chrome आपकी <ph name="BEGIN_LINK" />पसंद के विषयों का अनुमान<ph name="END_LINK" /> भी लगाता है. इस जानकारी का इस्तेमाल, साइटें आपको विज्ञापन दिखाने के लिए कर सकती हैं. सेटिंग में जाकर, अपनी पसंद के विषयों को मैनेज किया जा सकता है.</translation>
 <translation id="2513403576141822879">निजता, सुरक्षा और डेटा इकट्ठा करने से जुड़ी ज़्यादा सेटिंग के लिए, <ph name="BEGIN_LINK" />सिंक और Google सेवाएं<ph name="END_LINK" /> देखें</translation>
 <translation id="2517472476991765520">स्कैन करें</translation>
 <translation id="2523184218357549926">आप जिन पेजों पर जाते हैं उनके यूआरएल Google को भेजती है</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 ca2a2da7..d6cb36c 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">Шолу журналы</translation>
 <translation id="2497852260688568942">Синхрондау мүмкіндігін әкімші өшіріп қойған</translation>
 <translation id="250020030759455918"><ph name="SITE_NAME" /> сайтына кіру күйін, браузерді пайдалану деректерін және Chrome-дағы сайт деректерін көресіз.</translation>
+<translation id="2507178219579379057">Chrome жарнама спамдарын, алаяқтықты және сайттар арасында бөлісуді шектеу жолдарын зерттеп жатыр. Сондай-ақ Chrome <ph name="BEGIN_LINK" />қызығушылықтарыңызды бағалайды<ph name="END_LINK" />, оларды сайттар сізге жарнамалар көрсету үшін пайдалана алады. Қызығушылықтарыңызды параметрлерден басқара аласыз.</translation>
 <translation id="2513403576141822879">Құпиялылық, қауіпсіздік және дерек жинағына қатысты басқа да параметрлерді <ph name="BEGIN_LINK" />Синхрондау және Google қызметтері<ph name="END_LINK" /> бөлімінен қараңыз</translation>
 <translation id="2517472476991765520">Іздеу</translation>
 <translation id="2523184218357549926">Кірген беттердің URL мекенжайларын Google-ға жібереді</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 fbda730..6556071 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">ប្រវត្តិរុករក</translation>
 <translation id="2497852260688568942">សមកាលកម្មបានបិទដោយអ្នកគ្រប់គ្រងរបស់អ្នក</translation>
 <translation id="250020030759455918">អ្នក​នឹងមើលឃើញ​ស្ថានភាព​ចូល <ph name="SITE_NAME" />, ទិន្នន័យ​រុករក និង​ទិន្នន័យគេហទំព័រ​របស់អ្នក​នៅក្នុង Chrome</translation>
+<translation id="2507178219579379057">Chrome កំពុង​រុករក​វិធី​ដាក់កំហិត​លើ​សារ​ឥតបានការ​នៅ​ក្នុង​ការផ្សាយ​ពាណិជ្ជកម្ម ការគៃបន្លំ និង​ការចែករំលែក​រវាង​គេហទំព័រ​នានា។ Chrome ក៏​<ph name="BEGIN_LINK" />ប៉ាន់ស្មាន​ចំណាប់អារម្មណ៍​របស់អ្នក<ph name="END_LINK" />ដែល​គេហទំព័រ​អាច​ប្រើប្រាស់​ ដើម្បី​បង្ហាញ​ការផ្សាយពាណិជ្ជកម្ម​ដល់​អ្នក​ផងដែរ។ អ្នក​អាច​គ្រប់គ្រង​ចំណាប់អារម្មណ៍​របស់អ្នក​នៅក្នុង​ការកំណត់។</translation>
 <translation id="2513403576141822879">សម្រាប់​ការកំណត់​ច្រើនទៀតពាក់ព័ន្ធនឹង​ឯកជន​ភាព សុវត្ថិភាព និង​ការ​ប្រមូល​ទិន្នន័យ សូមមើល<ph name="BEGIN_LINK" />សមកាលកម្ម​ និង​សេវាកម្ម Google<ph name="END_LINK" /></translation>
 <translation id="2517472476991765520">ស្កេន</translation>
 <translation id="2523184218357549926">ផ្ញើ​ URL នៃ​ទំព័រ​ដែលអ្នក​ចូល​មើលទៅ Google</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 0631c0c..b75adc6 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸ</translation>
 <translation id="2497852260688568942">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸಿಂಕ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ</translation>
 <translation id="250020030759455918">ನಿಮ್ಮ <ph name="SITE_NAME" /> ಸೈನ್-ಇನ್ ಸ್ಥಿತಿ, ಬ್ರೌಸಿಂಗ್ ಡೇಟಾ ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು Chrome ನಲ್ಲಿ ನೋಡುವಿರಿ</translation>
+<translation id="2507178219579379057">ಜಾಹೀರಾತು ಸ್ಪ್ಯಾಮ್, ವಂಚನೆ ಹಾಗೂ ಸೈಟ್‌ಗಳ ನಡುವೆ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಮಿತಿಗೊಳಿಸುವ ಮಾರ್ಗಗಳನ್ನು Chrome ಎಕ್ಸ್‌ಪ್ಲೋರ್ ಮಾಡುತ್ತಿದೆ. ನಿಮಗೆ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸಲು Chrome ಸೈಟ್‌ಗಳು ಬಳಸಬಹುದಾದ ನಿಮ್ಮ <ph name="BEGIN_LINK" />ಆಸಕ್ತಿಗಳನ್ನು ಅಂದಾಜು ಮಾಡುತ್ತದೆ<ph name="END_LINK" />. ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಆಸಕ್ತಿಗಳನ್ನು ನೀವು ನಿರ್ವಹಿಸಬಹುದು.</translation>
 <translation id="2513403576141822879">ಗೌಪ್ಯತೆ, ಸುರಕ್ಷತೆ ಮತ್ತು ಡೇಟಾ ಸಂಗ್ರಹಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಹೆಚ್ಚಿನ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗಾಗಿ <ph name="BEGIN_LINK" />ಸಿಂಕ್ ಮತ್ತು Google ಸೇವೆಗಳನ್ನು<ph name="END_LINK" /> ನೋಡಿ</translation>
 <translation id="2517472476991765520">ಸ್ಕ್ಯಾನ್</translation>
 <translation id="2523184218357549926">ನೀವು ಭೇಟಿ ನೀಡುವ ಪುಟಗಳ URLಗಳನ್ನು Google ಗೆ ಕಳುಹಿಸುತ್ತದೆ</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 c1b2573..4347921a 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">Серептөө таржымалы</translation>
 <translation id="2497852260688568942">Шайкештирүү функциясын администраторуңуз өчүрүп койгон</translation>
 <translation id="250020030759455918">Chrome'до <ph name="SITE_NAME" /> сайтына кирүү статусуңузду, серептөө дайындарын жана сайттын маалыматын көрөсүз</translation>
+<translation id="2507178219579379057">Chrome жарнама cпамдарын, шылуундук жана сайттардын арасында маалымат бөлүшүү аракеттерин чектөө жолдорун изилдейт. Ошондой эле, Chrome сайттар жарнамаларды көрсөтүү үчүн колдоно турган <ph name="BEGIN_LINK" />кызыккан нерселериңизди божомолдойт<ph name="END_LINK" />. Кызыккан нерселериңизди параметрлерден тескей аласыз.</translation>
 <translation id="2513403576141822879">Купуялыкка, коопсуздукка жана дайындарды чогултууга байланыштуу дагы башка жөндөөлөрдү көрүү үчүн <ph name="BEGIN_LINK" />Шайкештирүү жана Google кызматтары<ph name="END_LINK" /> бөлүмүнө өтүңүз</translation>
 <translation id="2517472476991765520">Скандоо</translation>
 <translation id="2523184218357549926">Баш баккан барактарыңыздын URL'дерин Google'га жөнөтөт</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 5942978..c2a3318b 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">Naršymo istorija</translation>
 <translation id="2497852260688568942">Sinchronizavimą išjungė jūsų administratorius</translation>
 <translation id="250020030759455918">Matysite <ph name="SITE_NAME" /> prisijungimo būseną, naršymo duomenis ir svetainės duomenis sistemoje „Chrome“</translation>
+<translation id="2507178219579379057">„Chrome“ ieško būdų, kaip apriboti skelbimų šlamštą, apgaules ir bendrinimą tarp svetainių. Be to, „Chrome“ <ph name="BEGIN_LINK" />atsižvelgia į jūsų pomėgius<ph name="END_LINK" />, kuriuos svetainės gali naudoti skelbimams rodyti. Galite tvarkyti savo pomėgius nustatymuose.</translation>
 <translation id="2513403576141822879">Daugiau nustatymų, susijusių su privatumu, sauga ir duomenų rinkimu, žr. skiltyje <ph name="BEGIN_LINK" />„Sinchronizavimas ir „Google“ paslaugos“<ph name="END_LINK" /></translation>
 <translation id="2517472476991765520">Nuskaityti</translation>
 <translation id="2523184218357549926">Siunčiami „Google“ puslapių, kuriuose lankotės, URL</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 c8d23b3..5e35d5e 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">ബ്രൌസിംഗ് ചരിത്രം</translation>
 <translation id="2497852260688568942">നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർ സമന്വയിപ്പിക്കൽ പ്രവർത്തനരഹിതമാക്കി</translation>
 <translation id="250020030759455918">നിങ്ങളുടെ <ph name="SITE_NAME" /> സൈൻ ഇൻ നില, ബ്രൗസിംഗ് ഡാറ്റ, സൈറ്റ് ഡാറ്റ എന്നിവ Chrome-ൽ കാണാം</translation>
+<translation id="2507178219579379057">പരസ്യ സ്പാം, വഞ്ചന, സൈറ്റുകൾക്കിടയിലുള്ള പങ്കിടൽ എന്നിവ പരിമിതപ്പെടുത്താനുള്ള വഴികൾ കണ്ടെത്താൻ Chrome ശ്രമിക്കുന്നു. Chrome <ph name="BEGIN_LINK" />നിങ്ങളുടെ താൽപ്പര്യങ്ങൾ കണക്കാക്കുകയും<ph name="END_LINK" /> ചെയ്യുന്നു, നിങ്ങളെ പരസ്യങ്ങൾ കാണിക്കാൻ സൈറ്റുകൾക്ക് ഇത് ഉപയോഗിക്കാം. ക്രമീകരണത്തിൽ നിങ്ങളുടെ താൽപ്പര്യങ്ങൾ മാനേജ് ചെയ്യാം.</translation>
 <translation id="2513403576141822879">സ്വകാര്യത, സുരക്ഷ, ഡാറ്റാ ശേഖരണം എന്നിവയുമായി ബന്ധപ്പെട്ട കൂടുതൽ ക്രമീകരണത്തിന്, <ph name="BEGIN_LINK" />സമന്വയവും Google സേവനങ്ങളും<ph name="END_LINK" /> കാണുക</translation>
 <translation id="2517472476991765520">സ്‌കാൻ ചെയ്യുക</translation>
 <translation id="2523184218357549926">Google-ൽ നിങ്ങൾ സന്ദർശിക്കുന്ന പേജുകളുടെ URL-കൾ അയയ്ക്കുന്നു</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 1f5e719..eaeba3b 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">အသုံးပြုခြင်း မှတ်တမ်း</translation>
 <translation id="2497852260688568942">စင့်ခ်ပြုလုပ်ခြင်းကို သင့်စီမံခန့်ခွဲသူက ပိတ်ဆို့ထားပါသည်</translation>
 <translation id="250020030759455918">သင်၏ <ph name="SITE_NAME" /> လက်မှတ်ထိုးဝင်မှု အခြေအနေ၊ ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာနှင့် ဝဘ်ဆိုက်ဒေတာများကို Chrome တွင် မြင်ရပါမည်</translation>
+<translation id="2507178219579379057">Chrome သည် စပမ်း၊ လိမ်လည်မှုနှင့် ဝဘ်ဆိုက်များအကြား မျှဝေခြင်းတို့ကို ကန့်သတ်ရန်နည်းလမ်းများ ရှာဖွေနေသည်။ Chrome ကလည်း သင့်အားကြော်ငြာပြရန် ဝဘ်ဆိုက်များက အသုံးပြုနိုင်သော <ph name="BEGIN_LINK" />သင့်စိတ်ဝင်စားမှုများကို ခန့်မှန်းသည်<ph name="END_LINK" />။ သင့်စိတ်ဝင်စားမှုများကို ဆက်တင်များတွင် စီမံနိုင်သည်။</translation>
 <translation id="2513403576141822879">ပုဂ္ဂိုလ်ရေးရာ၊ လုံခြုံမှုနှင့် ဒေတာစုဆောင်းမှုတို့နှင့် ဆက်စပ်နေသည့် နောက်ထပ် ဆက်တင်များအတွက် <ph name="BEGIN_LINK" />စင့်ခ်လုပ်ခြင်းနှင့် Google ဝန်ဆောင်မှုများ<ph name="END_LINK" /> ကို ကြည့်ပါ</translation>
 <translation id="2517472476991765520">ရှာဖွေရန်</translation>
 <translation id="2523184218357549926">သင်ကြည့်ရှုသည့် စာမျက်နှာများ၏ URL များကို Google သို့ ပို့သည်</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 5bc4b6b..5f253c94 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">ब्राउजिङ इतिहास</translation>
 <translation id="2497852260688568942">तपाईंको प्रशासकले सिंंक असक्षम पार्नुभएको छ।</translation>
 <translation id="250020030759455918">तपाईं Chrome मा आफ्नो <ph name="SITE_NAME" /> को साइन इनसम्बन्धी अवस्था, ब्राउजिङ डेटा र साइट डेटा देख्नु हुने छ</translation>
+<translation id="2507178219579379057">Chrome ले स्प्याम तथा ठगी रोकथाम गर्ने र साइटहरूका बिचमा सेयर गर्ने सुविधा सीमित पार्ने विभिन्न उपायहरूको परीक्षण गरिरहेको छ। साथै, Chrome ले <ph name="BEGIN_LINK" />तपाईंका रुचिहरूको अनुमान लगाउँछ<ph name="END_LINK" /> र साइटहरूले तपाईंलाई विज्ञापन देखाउनका निम्ति रुचिसम्बन्धी ती जानकारी प्रयोग गर्न सक्छन्। तपाईं सेटिङमा गई आफ्ना रुचिहरू व्यवस्थापन गर्न सक्नुहुन्छ।</translation>
 <translation id="2513403576141822879">गोपनीयता, सुरक्षा र डेटाको सङ्कलनसँग सम्बन्धित थप सेटिङहरूका लागि <ph name="BEGIN_LINK" />सिंक तथा वैयक्तीकरण<ph name="END_LINK" /> नामक खण्ड हेर्नुहोस्</translation>
 <translation id="2517472476991765520">स्क्यान गर्नुहोस्</translation>
 <translation id="2523184218357549926">तपाईं जाने पृष्ठका URL हरू Google मा पठाउँछ</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 006e9ecb..32a0643 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">Histórico de navegação</translation>
 <translation id="2497852260688568942">A sincronização foi desativada pelo administrador</translation>
 <translation id="250020030759455918">Seu status de login, dados de navegação e dados do site para <ph name="SITE_NAME" /> serão exibidos no Chrome</translation>
+<translation id="2507178219579379057">O Chrome busca maneiras de limitar ocorrências de spam publicitário, fraude e compartilhamento entre sites. Além disso, ele faz uma <ph name="BEGIN_LINK" />estimativa dos seus interesses<ph name="END_LINK" />, que os sites podem usar para mostrar anúncios. Você pode gerenciar seus interesses nas configurações.</translation>
 <translation id="2513403576141822879">Para ver mais configurações relacionadas à privacidade, segurança e coleta de dados, acesse <ph name="BEGIN_LINK" />Serviços do Google e de sincronização<ph name="END_LINK" /></translation>
 <translation id="2517472476991765520">Verificar</translation>
 <translation id="2523184218357549926">Envia URLs das páginas que você visita para o Google</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 e788397..4266bdf3 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
@@ -78,6 +78,7 @@
 <translation id="1344653310988386453">ஹைலைட் செய்யப்பட்ட உரைக்கான இணைப்பைச் சேருங்கள்</translation>
 <translation id="1347468774581902829">செயல்பாட்டை நிர்வகிக்கும்</translation>
 <translation id="1360432990279830238">வெளியேறி, ஒத்திசைவை முடக்கவா?</translation>
+<translation id="1366525380420346469">இந்த அம்சம் செயலில் இருக்கும்போது</translation>
 <translation id="1373696734384179344">தேர்ந்தெடுத்ததைப் பதிவிறக்க, போதுமான நினைவகம் இல்லை.</translation>
 <translation id="1376578503827013741">கணக்கிடுகிறது…</translation>
 <translation id="1382912999714108023">சமீபத்திய தகவல்கள் காட்டப்படவில்லையா? பேங்கைத் தொடர்புகொண்டு அவற்றைச் சேர்க்குமாறு கேட்கவும்.</translation>
@@ -270,6 +271,7 @@
 <translation id="2496180316473517155">உலாவல் வரலாறு</translation>
 <translation id="2497852260688568942">உங்கள் நிர்வாகி ஒத்திசைவை முடக்கியுள்ளார்</translation>
 <translation id="250020030759455918"><ph name="SITE_NAME" /> என்ற தளம் தொடர்பான உங்களின் உள்நுழைவு நிலை, உலாவிய தரவு, தளத்தின் தரவு ஆகியவை Chromeமில் காட்டப்படும்</translation>
+<translation id="2507178219579379057">விளம்பர ஸ்பேம், மோசடி, தளங்களுக்கு இடையே பகிர்தல் போன்றவற்றைக் குறைப்பதற்கான வழிகளை Chrome ஆராய்கிறது. Chrome <ph name="BEGIN_LINK" />உங்கள் ஆர்வங்களையும் கணிக்கும்<ph name="END_LINK" />. அவற்றின் அடிப்படையில் தளங்கள் உங்களுக்கு விளம்பரங்களைக் காட்டலாம். அமைப்புகளுக்குச் சென்று உங்கள் ஆர்வங்களை நிர்வகிக்கலாம்.</translation>
 <translation id="2513403576141822879">தனியுரிமை, பாதுகாப்பு, தரவுச் சேகரிப்பு ஆகியவற்றுடன் தொடர்புடைய மேலும் பல அமைப்புகளுக்கு, <ph name="BEGIN_LINK" />ஒத்திசைவும் Google சேவைகளும்<ph name="END_LINK" /> என்பதைப் பார்க்கவும்</translation>
 <translation id="2517472476991765520">ஸ்கேன் செய்</translation>
 <translation id="2523184218357549926">நீங்கள் பார்வையிடும் பக்கங்களின் URLகளை Googleளுக்கு அனுப்பும்</translation>
@@ -513,6 +515,7 @@
 <translation id="3810973564298564668">நிர்வகி</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> பதிவிறக்கங்கள் உள்ளன</translation>
 <translation id="3819183753496523827">ஆஃப்லைனில் உள்ளீர்கள். இணைய இணைப்பைச் சரிபார்த்து மீண்டும் முயலவும்.</translation>
+<translation id="3830886834687455630">கடவுச்சொற்களைச் சரிபார்க்க Google Play சேவைகளைப் புதுப்பிக்கவும்</translation>
 <translation id="3845098929839618392">மறைநிலைத் தாவலில் திற</translation>
 <translation id="3856096718352044181">இது சரியான வழங்குநர்தான் என்பதைச் சரிபார்க்கவும் அல்லது பிறகு முயலவும்</translation>
 <translation id="3858860766373142691">பெயர்</translation>
@@ -733,6 +736,7 @@
 <translation id="5016205925109358554">Serif</translation>
 <translation id="5032430150487044192">QR குறியீட்டை உருவாக்க முடியவில்லை</translation>
 <translation id="5039804452771397117">அனுமதி</translation>
+<translation id="504456571576643789">கருத்தில்கொள்ள வேண்டியவை</translation>
 <translation id="5054455334322721892">நீங்கள் உள்நுழைந்திருக்கும்போது <ph name="BEGIN_LINK1" />பிற வகையான செயல்பாடுகள்<ph name="END_LINK1" /> உங்கள் Google கணக்கில் சேமிக்கப்பட்டிருக்கலாம். அவற்றை எப்போது வேண்டுமானாலும் நீக்கலாம்.</translation>
 <translation id="5061533557687621530">வானிலையை அறிந்துகொள்ள, மைக்கைத் தட்டி “இன்றைய வானிலை என்ன?” எனக் கூறுங்கள்</translation>
 <translation id="506254248375231072">பக்கங்கள் எதுவுமில்லை</translation>
@@ -1215,6 +1219,7 @@
 <translation id="7641339528570811325">உலாவிய தரவை அழி…</translation>
 <translation id="7646772052135772216">கடவுச்சொல் ஒத்திசைவு இயங்கவில்லை</translation>
 <translation id="7655900163790317559">புளூடூத் இயக்கப்படுகிறது…</translation>
+<translation id="7656862631699126784">மறைநிலை லாக்கை இயக்கு</translation>
 <translation id="7658239707568436148">ரத்து செய்</translation>
 <translation id="7663313374500954251">இந்த உலாவியை நிர்வகிப்பவர்: <ph name="PARENT_NAME" />.</translation>
 <translation id="7665369617277396874">கணக்கைச் சேர்</translation>
@@ -1517,6 +1522,7 @@
 <translation id="9159716826369098114"><ph name="TAB_COUNT" /> பக்கங்களின் பக்கக் குழுவை புதிய பின்னணிப் பக்கக் குழுவாக மீட்டெடுக்கும்.</translation>
 <translation id="9169507124922466868">வழிசெலுத்தல் வரலாறு பாதியளவு திறந்துள்ளது</translation>
 <translation id="9187955620966010988">உணர்வு வெளிப்பாட்டில் மாற்றம் செய்யப்பட்டது</translation>
+<translation id="9190276265094487094">ஒத்திசைக்கப்பட்டுள்ள சாதனங்கள் அனைத்திலும் உங்கள் தேடல் விவரங்கள் சேமிக்கப்படுவதால் விட்ட இடத்திலிருந்து செயல்பாட்டைத் தொடரலாம்</translation>
 <translation id="9199368092038462496">{NUM_MINS,plural, =1{சரிபார்த்தது: 1 நிமிடத்திற்கு முன்பு}other{சரிபார்த்தது: # நிமிடங்களுக்கு முன்பு}}</translation>
 <translation id="9204836675896933765">1 ஃபைல் மீதமுள்ளது</translation>
 <translation id="9205933215779845960">அந்தப் பக்கத்தைக் கண்டறிய முடியவில்லை. தேடல் வினவலில் உள்ள எழுத்துகளைச் சரிபார்க்கவும் அல்லது <ph name="SEARCH_ENGINE" /> இல் தேடிப் பார்க்கவும்.</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 26d79b0..c5c20758 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">Tarama geçmişi</translation>
 <translation id="2497852260688568942">Yöneticiniz senkronizasyonu devre dışı bıraktı</translation>
 <translation id="250020030759455918"><ph name="SITE_NAME" /> sitenizin oturum açma durumunu, tarama verilerini ve site verilerini Chrome'da görürsünüz</translation>
+<translation id="2507178219579379057">Chrome; reklam spam'i, sahtekarlık ve siteler arası paylaşımı kısıtlamanın yollarını arar. Chrome ayrıca sitelerin size reklam göstermek için kullanabileceği <ph name="BEGIN_LINK" />ilgi alanlarınızı tahmin eder<ph name="END_LINK" />. İlgi alanlarınızı ayarlardan yönetebilirsiniz.</translation>
 <translation id="2513403576141822879">Gizlilik, güvenlik ve veri toplamayla ilgili daha fazla ayar için <ph name="BEGIN_LINK" />Senkronizasyon ve Google hizmetleri<ph name="END_LINK" /> konusuna bakın</translation>
 <translation id="2517472476991765520">Tara</translation>
 <translation id="2523184218357549926">Ziyaret ettiğiniz sayfaların URL'lerini Google'a gönderir</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 c3f847e..6bace98 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">Lịch sử duyệt web</translation>
 <translation id="2497852260688568942">Quản trị viên của bạn đã tắt tính năng đồng bộ hóa</translation>
 <translation id="250020030759455918">Trong Chrome, bạn sẽ thấy trạng thái đăng nhập, dữ liệu duyệt web và dữ liệu trang web trên <ph name="SITE_NAME" /></translation>
+<translation id="2507178219579379057">Chrome đang nghiên cứu các phương pháp hạn chế quảng cáo không liên quan, hành vi gian lận và hoạt động chia sẻ giữa các trang web. Chrome cũng <ph name="BEGIN_LINK" />ước đoán mối quan tâm của bạn<ph name="END_LINK" /> và các trang web có thể sử dụng thông tin ước đoán này để hiển thị quảng cáo cho bạn. Bạn có thể quản lý những gì bạn quan tâm trong phần cài đặt.</translation>
 <translation id="2513403576141822879">Bạn có thể xem thêm tùy chọn cài đặt liên quan đến quyền riêng tư, bảo mật và hoạt động thu thập dữ liệu trong phần <ph name="BEGIN_LINK" />Đồng bộ hóa và dịch vụ của Google<ph name="END_LINK" /></translation>
 <translation id="2517472476991765520">Quét</translation>
 <translation id="2523184218357549926">Gửi cho Google URL của các trang bạn truy cập</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 71dd4a7..74c40ab 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
@@ -271,6 +271,7 @@
 <translation id="2496180316473517155">Umlando wokuphequlula</translation>
 <translation id="2497852260688568942">Ukuvumelanisa kukhutshazwe umlawuli wakho.</translation>
 <translation id="250020030759455918">Uzobona isimo sakho sokungena ngemvume se-<ph name="SITE_NAME" />, idatha yokuphequlula, nedatha yesayithi ku-Chrome</translation>
+<translation id="2507178219579379057">I-Chrome ihlola izindlela zokukhawulela ogaxekile besikhangiso, ukukhwabanisa, nokwabelana phakathi kwamasayithi. I-Chrome ibuye ilinganise <ph name="BEGIN_LINK" />ongaba nentshisekelo kukho<ph name="END_LINK" /> amasayithi angakusebenzisa ukukubonisa izikhangiso. Ungaphatha ongaba nentshisekelo kukho kumasethingi.</translation>
 <translation id="2513403576141822879">Ukuze uthole ezinye izilungiselelo ezihambisana nobumfihlo, ukuvikelwa nokuqoqwa kwedatha, bona <ph name="BEGIN_LINK" />amasevisi okuvumelanisa nawe-Google<ph name="END_LINK" /></translation>
 <translation id="2517472476991765520">Skena</translation>
 <translation id="2523184218357549926">Ithumela ama-URL amakhasi owavakashelayo ku-Google</translation>
diff --git a/chrome/browser/ui/app_list/app_list_client_impl.cc b/chrome/browser/ui/app_list/app_list_client_impl.cc
index 4569d72..eb8fa9f 100644
--- a/chrome/browser/ui/app_list/app_list_client_impl.cc
+++ b/chrome/browser/ui/app_list/app_list_client_impl.cc
@@ -238,12 +238,22 @@
   launch_data.suggestion_index = suggestion_index;
   launch_data.score = result->relevance();
 
+  const size_t last_query_length = search_controller_->get_query().size();
   if (launch_type == ash::AppListLaunchType::kAppSearchResult &&
       launched_from == ash::AppListLaunchedFrom::kLaunchedFromSearchBox &&
       launch_data.ranking_item_type == app_list::RankingItemType::kApp &&
-      search_controller_->GetLastQueryLength() != 0) {
-    ash::RecordSuccessfulAppLaunchUsingSearch(
-        launched_from, search_controller_->GetLastQueryLength());
+      last_query_length != 0) {
+    ash::RecordSuccessfulAppLaunchUsingSearch(launched_from, last_query_length);
+  }
+
+  if (launched_from == ash::AppListLaunchedFrom::kLaunchedFromSearchBox) {
+    if (IsTabletMode()) {
+      base::UmaHistogramCounts100("Apps.AppListSearchQueryLengthV2.TabletMode",
+                                  last_query_length);
+    } else {
+      base::UmaHistogramCounts100(
+          "Apps.AppListSearchQueryLengthV2.ClamshellMode", last_query_length);
+    }
   }
 
   // Send training signal to search controller.
@@ -259,7 +269,7 @@
   if (launch_as_default)
     RecordDefaultSearchResultOpenTypeHistogram(result->metrics_type());
 
-  if (!search_controller_->GetLastQueryLength() &&
+  if (!last_query_length &&
       launched_from == ash::AppListLaunchedFrom::kLaunchedFromSearchBox)
     RecordZeroStateSuggestionOpenTypeHistogram(result->metrics_type());
 
@@ -538,10 +548,6 @@
 
   SetUpSearchUI();
   OnTemplateURLServiceChanged();
-
-  // Clear search query.
-  current_model_updater_->UpdateSearchBox(std::u16string(),
-                                          false /* initiated_by_user */);
 }
 
 void AppListClientImpl::SetUpSearchUI() {
diff --git a/chrome/browser/ui/app_list/app_list_model_updater.h b/chrome/browser/ui/app_list/app_list_model_updater.h
index abf12dd..c0dfcbb 100644
--- a/chrome/browser/ui/app_list/app_list_model_updater.h
+++ b/chrome/browser/ui/app_list/app_list_model_updater.h
@@ -61,8 +61,6 @@
   virtual void SetStatus(ash::AppListModelStatus status) {}
   // For SearchModel:
   virtual void SetSearchEngineIsGoogle(bool is_google) {}
-  virtual void UpdateSearchBox(const std::u16string& text,
-                               bool initiated_by_user) {}
   virtual void PublishSearchResults(
       const std::vector<ChromeSearchResult*>& results,
       const std::vector<ash::AppListSearchResultCategory>& categories) {}
diff --git a/chrome/browser/ui/app_list/chrome_app_list_model_updater.cc b/chrome/browser/ui/app_list/chrome_app_list_model_updater.cc
index d8c2b26..532f14c3 100644
--- a/chrome/browser/ui/app_list/chrome_app_list_model_updater.cc
+++ b/chrome/browser/ui/app_list/chrome_app_list_model_updater.cc
@@ -302,11 +302,6 @@
   search_model_.SetSearchEngineIsGoogle(is_google);
 }
 
-void ChromeAppListModelUpdater::UpdateSearchBox(const std::u16string& text,
-                                                bool initiated_by_user) {
-  search_model_.search_box()->Update(text, initiated_by_user);
-}
-
 void ChromeAppListModelUpdater::PublishSearchResults(
     const std::vector<ChromeSearchResult*>& results,
     const std::vector<ash::AppListSearchResultCategory>& categories) {
diff --git a/chrome/browser/ui/app_list/chrome_app_list_model_updater.h b/chrome/browser/ui/app_list/chrome_app_list_model_updater.h
index 7284100..96b7309a 100644
--- a/chrome/browser/ui/app_list/chrome_app_list_model_updater.h
+++ b/chrome/browser/ui/app_list/chrome_app_list_model_updater.h
@@ -51,8 +51,6 @@
   void RemoveItem(const std::string& id, bool is_uninstall) override;
   void SetStatus(ash::AppListModelStatus status) override;
   void SetSearchEngineIsGoogle(bool is_google) override;
-  void UpdateSearchBox(const std::u16string& text,
-                       bool initiated_by_user) override;
   void PublishSearchResults(
       const std::vector<ChromeSearchResult*>& results,
       const std::vector<ash::AppListSearchResultCategory>& categories) override;
diff --git a/chrome/browser/ui/app_list/search/chrome_search_result.cc b/chrome/browser/ui/app_list/search/chrome_search_result.cc
index cb9a073..87c489e 100644
--- a/chrome/browser/ui/app_list/search/chrome_search_result.cc
+++ b/chrome/browser/ui/app_list/search/chrome_search_result.cc
@@ -169,6 +169,11 @@
   SetSearchResultMetadata();
 }
 
+void ChromeSearchResult::SetSkipUpdateAnimation(bool skip_update_animation) {
+  metadata_->skip_update_animation = skip_update_animation;
+  SetSearchResultMetadata();
+}
+
 void ChromeSearchResult::SetIcon(const IconInfo& icon) {
   icon.icon.EnsureRepsForSupportedScales();
   metadata_->icon = icon;
diff --git a/chrome/browser/ui/app_list/search/chrome_search_result.h b/chrome/browser/ui/app_list/search/chrome_search_result.h
index fc51268..c3c6ce7f 100644
--- a/chrome/browser/ui/app_list/search/chrome_search_result.h
+++ b/chrome/browser/ui/app_list/search/chrome_search_result.h
@@ -100,6 +100,9 @@
   const Actions& actions() const { return metadata_->actions; }
   double display_score() const { return metadata_->display_score; }
   bool is_recommendation() const { return metadata_->is_recommendation; }
+  bool skip_update_animation() const {
+    return metadata_->skip_update_animation;
+  }
   const IconInfo& icon() const { return metadata_->icon; }
   const gfx::ImageSkia& chip_icon() const { return metadata_->chip_icon; }
   const ui::ImageModel& badge_icon() const { return metadata_->badge_icon; }
@@ -132,6 +135,7 @@
   void SetActions(const Actions& actions);
   void SetIsOmniboxSearch(bool is_omnibox_search);
   void SetIsRecommendation(bool is_recommendation);
+  void SetSkipUpdateAnimation(bool skip_update_animation);
   void SetIcon(const IconInfo& icon);
   void SetIconDimension(const int dimension);
   void SetChipIcon(const gfx::ImageSkia& icon);
diff --git a/chrome/browser/ui/app_list/search/omnibox_result.cc b/chrome/browser/ui/app_list/search/omnibox_result.cc
index b8b5502..4d38f66 100644
--- a/chrome/browser/ui/app_list/search/omnibox_result.cc
+++ b/chrome/browser/ui/app_list/search/omnibox_result.cc
@@ -114,6 +114,8 @@
 
   SetIsOmniboxSearch(
       crosapi::OptionalBoolIsTrue(search_result_->is_omnibox_search));
+  SetSkipUpdateAnimation(search_result_->metrics_type ==
+                         CrosApiSearchResult::MetricsType::kSearchWhatYouTyped);
 
   UpdateIcon();
   UpdateTitleAndDetails();
diff --git a/chrome/browser/ui/app_list/search/omnibox_result_unittest.cc b/chrome/browser/ui/app_list/search/omnibox_result_unittest.cc
index 112753d..d845a4fe 100644
--- a/chrome/browser/ui/app_list/search/omnibox_result_unittest.cc
+++ b/chrome/browser/ui/app_list/search/omnibox_result_unittest.cc
@@ -324,6 +324,20 @@
   EXPECT_EQ(0u, non_search_result->actions().size());
 }
 
+// Test that search-what-you-typed results are specially handled.
+TEST_F(OmniboxResultTest, SearchWhatYouTypedResult) {
+  // Search-what-you-typed results should be marked for not needing update
+  // animations.
+  const auto search_what_you_typed_result = CreateOmniboxResult(
+      "https://example.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED);
+  EXPECT_TRUE(
+      search_what_you_typed_result->CloneMetadata()->skip_update_animation);
+
+  const auto other_result = CreateOmniboxResult(
+      "https://example.com", AutocompleteMatchType::HISTORY_URL);
+  EXPECT_FALSE(other_result->CloneMetadata()->skip_update_animation);
+}
+
 // Test that category is correctly set.
 TEST_F(OmniboxResultTest, Category) {
   // Search suggestions belong to the "search and assistant" category.
diff --git a/chrome/browser/ui/app_list/search/search_controller.h b/chrome/browser/ui/app_list/search/search_controller.h
index 9aff8cd..aa665de 100644
--- a/chrome/browser/ui/app_list/search/search_controller.h
+++ b/chrome/browser/ui/app_list/search/search_controller.h
@@ -107,11 +107,6 @@
   // Sends training signal to each |providers_|
   virtual void Train(LaunchData&& launch_data) = 0;
 
-  // Gets the length of the most recent query.
-  // TODO(crbug.com/1199206): This should be replaced with calls to
-  // get_query().size().
-  virtual int GetLastQueryLength() const = 0;
-
   virtual void AddObserver(Observer* observer) = 0;
   virtual void RemoveObserver(Observer* observer) = 0;
 
diff --git a/chrome/browser/ui/app_list/search/search_controller_impl.cc b/chrome/browser/ui/app_list/search/search_controller_impl.cc
index 8fb8b12..bd37e65b 100644
--- a/chrome/browser/ui/app_list/search/search_controller_impl.cc
+++ b/chrome/browser/ui/app_list/search/search_controller_impl.cc
@@ -213,10 +213,6 @@
   return nullptr;
 }
 
-int SearchControllerImpl::GetLastQueryLength() const {
-  return last_query_.size();
-}
-
 void SearchControllerImpl::Train(LaunchData&& launch_data) {
   launch_data.query = base::UTF16ToUTF8(last_query_);
 
diff --git a/chrome/browser/ui/app_list/search/search_controller_impl.h b/chrome/browser/ui/app_list/search/search_controller_impl.h
index 8c0e40c..de4f3e0 100644
--- a/chrome/browser/ui/app_list/search/search_controller_impl.h
+++ b/chrome/browser/ui/app_list/search/search_controller_impl.h
@@ -71,7 +71,6 @@
   ChromeSearchResult* GetResultByTitleForTest(
       const std::string& title) override;
   void Train(LaunchData&& launch_data) override;
-  int GetLastQueryLength() const override;
   void AddObserver(SearchController::Observer* observer) override;
   void RemoveObserver(SearchController::Observer* observer) override;
   std::u16string get_query() override;
diff --git a/chrome/browser/ui/app_list/search/search_controller_impl_new.cc b/chrome/browser/ui/app_list/search/search_controller_impl_new.cc
index c08e814..5964396 100644
--- a/chrome/browser/ui/app_list/search/search_controller_impl_new.cc
+++ b/chrome/browser/ui/app_list/search/search_controller_impl_new.cc
@@ -377,10 +377,6 @@
   return nullptr;
 }
 
-int SearchControllerImplNew::GetLastQueryLength() const {
-  return last_query_.size();
-}
-
 void SearchControllerImplNew::Train(LaunchData&& launch_data) {
   launch_data.query = base::UTF16ToUTF8(last_query_);
 
diff --git a/chrome/browser/ui/app_list/search/search_controller_impl_new.h b/chrome/browser/ui/app_list/search/search_controller_impl_new.h
index ae83427..6c28522 100644
--- a/chrome/browser/ui/app_list/search/search_controller_impl_new.h
+++ b/chrome/browser/ui/app_list/search/search_controller_impl_new.h
@@ -74,7 +74,6 @@
       const std::string& title) override;
   void Train(LaunchData&& launch_data) override;
   void ViewClosing() override;
-  int GetLastQueryLength() const override;
   void AddObserver(Observer* observer) override;
   void RemoveObserver(Observer* observer) override;
   void set_results_changed_callback_for_test(
diff --git a/chrome/browser/ui/app_list/search/test/test_search_controller.cc b/chrome/browser/ui/app_list/search/test/test_search_controller.cc
index 0d5ae8a..33de84f 100644
--- a/chrome/browser/ui/app_list/search/test/test_search_controller.cc
+++ b/chrome/browser/ui/app_list/search/test/test_search_controller.cc
@@ -74,10 +74,6 @@
 
 void TestSearchController::Train(LaunchData&& launch_data) {}
 
-int TestSearchController::GetLastQueryLength() const {
-  return 0;
-}
-
 void TestSearchController::AddObserver(Observer* observer) {}
 
 void TestSearchController::RemoveObserver(Observer* observer) {}
diff --git a/chrome/browser/ui/app_list/search/test/test_search_controller.h b/chrome/browser/ui/app_list/search/test/test_search_controller.h
index f8c902a5..211a920 100644
--- a/chrome/browser/ui/app_list/search/test/test_search_controller.h
+++ b/chrome/browser/ui/app_list/search/test/test_search_controller.h
@@ -41,7 +41,6 @@
   ChromeSearchResult* GetResultByTitleForTest(
       const std::string& title) override;
   void Train(LaunchData&& launch_data) override;
-  int GetLastQueryLength() const override;
   void AddObserver(Observer* observer) override;
   void RemoveObserver(Observer* observer) override;
   std::u16string get_query() override;
diff --git a/chrome/browser/ui/ash/chrome_new_window_client.cc b/chrome/browser/ui/ash/chrome_new_window_client.cc
index 99c7c8b8..882f583 100644
--- a/chrome/browser/ui/ash/chrome_new_window_client.cc
+++ b/chrome/browser/ui/ash/chrome_new_window_client.cc
@@ -436,14 +436,23 @@
       return;
     }
 
-    apps::mojom::FilePathsPtr launch_files = apps::mojom::FilePaths::New();
-    launch_files->file_paths.push_back(downloads_path);
-
-    proxy->LaunchAppWithFiles(
-        update.AppId(),
-        apps::GetEventFlags(WindowOpenDisposition::NEW_FOREGROUND_TAB,
-                            /*prefer_container=*/true),
-        apps::mojom::LaunchSource::kFromKeyboard, std::move(launch_files));
+    if (base::FeatureList::IsEnabled(apps::kAppServiceLaunchWithoutMojom)) {
+      std::vector<base::FilePath> launch_files;
+      launch_files.push_back(downloads_path);
+      proxy->LaunchAppWithFiles(
+          update.AppId(),
+          apps::GetEventFlags(WindowOpenDisposition::NEW_FOREGROUND_TAB,
+                              /*prefer_container=*/true),
+          apps::LaunchSource::kFromKeyboard, std::move(launch_files));
+    } else {
+      apps::mojom::FilePathsPtr launch_files = apps::mojom::FilePaths::New();
+      launch_files->file_paths.push_back(downloads_path);
+      proxy->LaunchAppWithFiles(
+          update.AppId(),
+          apps::GetEventFlags(WindowOpenDisposition::NEW_FOREGROUND_TAB,
+                              /*prefer_container=*/true),
+          apps::mojom::LaunchSource::kFromKeyboard, std::move(launch_files));
+    }
   };
 
   bool result = proxy->AppRegistryCache().ForOneApp(
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
index 15225ae..9bee65c 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_downloads_delegate.cc
@@ -892,6 +892,15 @@
   if (!item)
     return;
 
+  // Commands.
+  std::set<HoldingSpaceCommandId> in_progress_commands;
+  if (!in_progress_download->GetProgress().IsComplete()) {
+    in_progress_commands.insert(HoldingSpaceCommandId::kCancelItem);
+    in_progress_commands.insert(in_progress_download->IsPaused()
+                                    ? HoldingSpaceCommandId::kResumeItem
+                                    : HoldingSpaceCommandId::kPauseItem);
+  }
+
   // Update.
   service()
       ->UpdateItem(item->id())
@@ -899,11 +908,11 @@
       .SetBackingFile(in_progress_download->GetFilePath(),
                       holding_space_util::ResolveFileSystemUrl(
                           profile(), in_progress_download->GetFilePath()))
+      .SetInProgressCommands(std::move(in_progress_commands))
       .SetInvalidateImage(invalidate_image)
       .SetText(in_progress_download->GetText())
       .SetSecondaryText(in_progress_download->GetSecondaryText())
       .SetSecondaryTextColor(in_progress_download->GetSecondaryTextColor())
-      .SetPaused(in_progress_download->IsPaused())
       .SetProgress(in_progress_download->GetProgress());
 }
 
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc b/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc
index fe2b358..4a6d812 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc
@@ -2757,8 +2757,9 @@
       .WillOnce([&](const HoldingSpaceItem* item, uint32_t updated_fields) {
         EXPECT_EQ(item->id(),
                   test_api().GetHoldingSpaceItemId(in_progress_download_chip));
-        EXPECT_TRUE(updated_fields &
-                    HoldingSpaceModelObserver::UpdatedField::kPaused);
+        EXPECT_TRUE(
+            updated_fields &
+            HoldingSpaceModelObserver::UpdatedField::kInProgressCommands);
         run_loop.Quit();
       });
   PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
@@ -2841,8 +2842,9 @@
       .WillOnce([&](const HoldingSpaceItem* item, uint32_t updated_fields) {
         EXPECT_EQ(item->id(),
                   test_api().GetHoldingSpaceItemId(in_progress_download_chip));
-        EXPECT_TRUE(updated_fields &
-                    HoldingSpaceModelObserver::UpdatedField::kPaused);
+        EXPECT_TRUE(
+            updated_fields &
+            HoldingSpaceModelObserver::UpdatedField::kInProgressCommands);
         run_loop.Quit();
       });
   Click(secondary_action_container);
diff --git a/chrome/browser/ui/ash/multi_user/multi_profile_support.cc b/chrome/browser/ui/ash/multi_user/multi_profile_support.cc
index 8a42492..77785506 100644
--- a/chrome/browser/ui/ash/multi_user/multi_profile_support.cc
+++ b/chrome/browser/ui/ash/multi_user/multi_profile_support.cc
@@ -8,7 +8,6 @@
 #include <vector>
 
 #include "ash/public/cpp/multi_user_window_manager.h"
-#include "ash/public/cpp/multi_user_window_manager_observer.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_util.h"
 #include "chrome/browser/ash/app_restore/full_restore_service.h"
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_stub.cc b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_stub.cc
index a99960b..2cb9d71 100644
--- a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_stub.cc
+++ b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_stub.cc
@@ -41,16 +41,6 @@
   return EmptyAccountId();
 }
 
-void MultiUserWindowManagerStub::AddObserver(
-    ash::MultiUserWindowManagerObserver* observer) {
-  NOTIMPLEMENTED();
-}
-
-void MultiUserWindowManagerStub::RemoveObserver(
-    ash::MultiUserWindowManagerObserver* observer) {
-  NOTIMPLEMENTED();
-}
-
 const AccountId& MultiUserWindowManagerStub::CurrentAccountId() const {
   return EmptyAccountId();
 }
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_stub.h b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_stub.h
index 8c2f5ef25..06744d0 100644
--- a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_stub.h
+++ b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_stub.h
@@ -29,8 +29,6 @@
   std::set<AccountId> GetOwnersOfVisibleWindows() const override;
   const AccountId& GetUserPresentingWindow(
       const aura::Window* window) const override;
-  void AddObserver(ash::MultiUserWindowManagerObserver* observer) override;
-  void RemoveObserver(ash::MultiUserWindowManagerObserver* observer) override;
   const AccountId& CurrentAccountId() const override;
 };
 
diff --git a/chrome/browser/ui/ash/multi_user/test_multi_user_window_manager.cc b/chrome/browser/ui/ash/multi_user/test_multi_user_window_manager.cc
index ff9cd22..d2d0dfd 100644
--- a/chrome/browser/ui/ash/multi_user/test_multi_user_window_manager.cc
+++ b/chrome/browser/ui/ash/multi_user/test_multi_user_window_manager.cc
@@ -89,12 +89,6 @@
   return current_account_id_;
 }
 
-void TestMultiUserWindowManager::AddObserver(
-    ash::MultiUserWindowManagerObserver* observer) {}
-
-void TestMultiUserWindowManager::RemoveObserver(
-    ash::MultiUserWindowManagerObserver* observer) {}
-
 TestMultiUserWindowManager::TestMultiUserWindowManager(
     Browser* visiting_browser,
     const AccountId& desktop_owner)
diff --git a/chrome/browser/ui/ash/multi_user/test_multi_user_window_manager.h b/chrome/browser/ui/ash/multi_user/test_multi_user_window_manager.h
index 7e7fc888..9e933d2 100644
--- a/chrome/browser/ui/ash/multi_user/test_multi_user_window_manager.h
+++ b/chrome/browser/ui/ash/multi_user/test_multi_user_window_manager.h
@@ -42,8 +42,6 @@
   const AccountId& GetUserPresentingWindow(
       const aura::Window* window) const override;
   const AccountId& CurrentAccountId() const override;
-  void AddObserver(ash::MultiUserWindowManagerObserver* observer) override;
-  void RemoveObserver(ash::MultiUserWindowManagerObserver* observer) override;
 
  private:
   TestMultiUserWindowManager(Browser* visiting_browser,
diff --git a/chrome/browser/ui/ash/system_tray_client_impl.cc b/chrome/browser/ui/ash/system_tray_client_impl.cc
index bf1fe556..653b09c4 100644
--- a/chrome/browser/ui/ash/system_tray_client_impl.cc
+++ b/chrome/browser/ui/ash/system_tray_client_impl.cc
@@ -59,6 +59,7 @@
 #include "chrome/browser/upgrade_detector/upgrade_detector.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #include "chrome/common/channel_info.h"
+#include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "chromeos/ash/components/dbus/session_manager/session_manager_client.h"
 #include "chromeos/ash/components/network/network_handler.h"
@@ -67,6 +68,7 @@
 #include "chromeos/ash/components/network/network_util.h"
 #include "chromeos/ash/components/network/onc/network_onc_utils.h"
 #include "chromeos/ash/components/network/tether_constants.h"
+#include "components/prefs/pref_service.h"
 #include "components/services/app_service/public/cpp/app_launch_util.h"
 #include "components/services/app_service/public/cpp/features.h"
 #include "components/session_manager/core/session_manager.h"
@@ -75,7 +77,6 @@
 #include "third_party/cros_system_api/dbus/shill/dbus-constants.h"
 #include "ui/events/event_constants.h"
 #include "url/gurl.h"
-
 using session_manager::SessionManager;
 using session_manager::SessionState;
 
@@ -780,6 +781,13 @@
   ash::NewWindowDelegate::GetInstance()->OpenFeedbackPage();
 }
 
+bool SystemTrayClientImpl::IsUserFeedbackEnabled() {
+  PrefService* signin_prefs =
+      ProfileManager::GetActiveUserProfile()->GetPrefs();
+  DCHECK(signin_prefs);
+  return signin_prefs->GetBoolean(prefs::kUserFeedbackAllowed);
+}
+
 SystemTrayClientImpl::SystemTrayClientImpl(SystemTrayClientImpl* mock_instance)
     : system_tray_(nullptr) {
   DCHECK(!g_system_tray_client_instance);
diff --git a/chrome/browser/ui/ash/system_tray_client_impl.h b/chrome/browser/ui/ash/system_tray_client_impl.h
index 022f0b3..b6badf5 100644
--- a/chrome/browser/ui/ash/system_tray_client_impl.h
+++ b/chrome/browser/ui/ash/system_tray_client_impl.h
@@ -107,6 +107,7 @@
                          GURL& finalized_event_url) override;
   void ShowChannelInfoAdditionalDetails() override;
   void ShowChannelInfoGiveFeedback() override;
+  bool IsUserFeedbackEnabled() override;
 
  protected:
   // Used by mocks in tests.
diff --git a/chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.cc b/chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.cc
index f69a6fd..bc8aa5c1 100644
--- a/chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.cc
+++ b/chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.cc
@@ -162,10 +162,15 @@
   if (!params.launch_paths.empty()) {
     DCHECK(!params.url.has_value())
         << "Launch URL can't be used with launch_paths.";
-    app_service->LaunchAppWithFiles(
-        *app_id, event_flags,
-        apps::ConvertLaunchSourceToMojomLaunchSource(params.launch_source),
-        apps::mojom::FilePaths::New(params.launch_paths));
+    if (base::FeatureList::IsEnabled(apps::kAppServiceLaunchWithoutMojom)) {
+      app_service->LaunchAppWithFiles(
+          *app_id, event_flags, params.launch_source, params.launch_paths);
+    } else {
+      app_service->LaunchAppWithFiles(
+          *app_id, event_flags,
+          apps::ConvertLaunchSourceToMojomLaunchSource(params.launch_source),
+          apps::mojom::FilePaths::New(params.launch_paths));
+    }
     return;
   }
 
diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc
index 176e1f3..61d1840 100644
--- a/chrome/browser/ui/browser_navigator.cc
+++ b/chrome/browser/ui/browser_navigator.cc
@@ -289,12 +289,10 @@
       return {GetOrCreateBrowser(profile, params.user_gesture), -1};
     case WindowOpenDisposition::NEW_PICTURE_IN_PICTURE:
 #if !BUILDFLAG(IS_CHROMEOS_LACROS)
-      // Out of paranoia, check that the PictureInPictureV2 feature is actually
-      // enabled as a browser feature before allowing the browser to create an
-      // always-on-top window.  This helps protect against a compromised
-      // renderer. TODO(https://crbug.com/1285144): Remove this check once
-      // the feature is no longer experimental.
-      if (!base::FeatureList::IsEnabled(features::kPictureInPictureV2))
+      // We may receive a PiP request with the feature disabled if the user has
+      // explicitly turned on the Blink feature without turning on the
+      // browser-side feature.
+      if (!base::FeatureList::IsEnabled(features::kDocumentPictureInPictureAPI))
         return {nullptr, -1};
 
       // Picture in picture windows may not be opened by other picture in
diff --git a/chrome/browser/ui/browser_navigator_browsertest.cc b/chrome/browser/ui/browser_navigator_browsertest.cc
index 34397ee..10b3507 100644
--- a/chrome/browser/ui/browser_navigator_browsertest.cc
+++ b/chrome/browser/ui/browser_navigator_browsertest.cc
@@ -1867,7 +1867,7 @@
 // See crbug.com/1320453 for why this is off for lacros.
 class BrowserNavigatorWithPictureInPictureTest : public BrowserNavigatorTest {
   base::test::ScopedFeatureList scoped_feature_list_{
-      features::kPictureInPictureV2};
+      features::kDocumentPictureInPictureAPI};
 };
 
 IN_PROC_BROWSER_TEST_F(BrowserNavigatorWithPictureInPictureTest,
@@ -1910,7 +1910,8 @@
 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest,
                        Disposition_PictureInPicture_FeatureMustBeEnabled) {
   // Creating a picture in picture window should not work if the feature is off.
-  ASSERT_FALSE(base::FeatureList::IsEnabled(features::kPictureInPictureV2));
+  ASSERT_FALSE(
+      base::FeatureList::IsEnabled(features::kDocumentPictureInPictureAPI));
   NavigateParams params(MakeNavigateParams(browser()));
   params.disposition = WindowOpenDisposition::NEW_PICTURE_IN_PICTURE;
   Navigate(&params);
diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
index 9399530..28493de7 100644
--- a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
+++ b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
@@ -129,7 +129,8 @@
   ContentSetting setting;
   if (type == ContentSettingsType::COOKIES) {
     setting = CookieSettingsFactory::GetForProfile(profile)->GetCookieSetting(
-        url, url, &source);
+        url, url, &source,
+        content_settings::CookieSettings::QueryReason::kSetting);
   } else {
     SettingInfo info;
     const base::Value value = map->GetWebsiteSetting(url, url, type, &info);
diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc
index 359620d..fa3ec49 100644
--- a/chrome/browser/ui/ui_features.cc
+++ b/chrome/browser/ui/ui_features.cc
@@ -156,8 +156,15 @@
 
 // Enables preview images in tab-hover cards.
 // https://crbug.com/928954
-const base::Feature kTabHoverCardImages{"TabHoverCardImages",
-                                        base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kTabHoverCardImages {
+  "TabHoverCardImages",
+#if BUILDFLAG(IS_MAC)
+      base::FEATURE_DISABLED_BY_DEFAULT
+#else
+      base::FEATURE_ENABLED_BY_DEFAULT
+#endif
+};
+
 const char kTabHoverCardImagesNotReadyDelayParameterName[] =
     "page_not_ready_delay";
 const char kTabHoverCardImagesLoadingDelayParameterName[] =
diff --git a/chrome/browser/ui/views/lens/lens_region_search_controller_unittest.cc b/chrome/browser/ui/views/lens/lens_region_search_controller_unittest.cc
index d7af22d..30f70284 100644
--- a/chrome/browser/ui/views/lens/lens_region_search_controller_unittest.cc
+++ b/chrome/browser/ui/views/lens/lens_region_search_controller_unittest.cc
@@ -21,7 +21,7 @@
   void SetUp() override {
     base::test::ScopedFeatureList features;
     features.InitWithFeatures({features::kLensStandalone},
-                              {features::kUnifiedSidePanel});
+                              {::features::kUnifiedSidePanel});
     TestWithBrowserView::SetUp();
 
     // Create an active web contents.
diff --git a/chrome/browser/ui/views/lens/lens_side_panel_controller_unittest.cc b/chrome/browser/ui/views/lens/lens_side_panel_controller_unittest.cc
index f365842..ecaade63 100644
--- a/chrome/browser/ui/views/lens/lens_side_panel_controller_unittest.cc
+++ b/chrome/browser/ui/views/lens/lens_side_panel_controller_unittest.cc
@@ -89,7 +89,7 @@
   EXPECT_EQ(1, user_action_tester.GetActionCount(kHideChromeSidePanelAction));
 }
 
-TEST_F(LensSidePanelControllerTest, CloseAfterOpenHidesLensSidePanel) {
+TEST_F(LensSidePanelControllerTest, DISABLED_CloseAfterOpenHidesLensSidePanel) {
   base::UserActionTester user_action_tester;
   controller_->OpenWithURL(
       content::OpenURLParams(GURL("http://foo.com"), content::Referrer(),
diff --git a/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view_browsertest.cc b/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view_browsertest.cc
index 6bf4f95..4d7782e2 100644
--- a/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view_browsertest.cc
@@ -26,6 +26,8 @@
 #include "ui/views/view.h"
 #include "url/gurl.h"
 
+using QueryReason = content_settings::CookieSettings::QueryReason;
+
 class CookieControlsBubbleViewTest : public DialogBrowserTest {
  public:
   CookieControlsBubbleViewTest() = default;
@@ -116,14 +118,16 @@
   // Block 3p cookies.
   SetThirdPartyCookieBlocking(true);
   GURL origin = embedded_test_server()->GetURL("a.com", "/");
-  EXPECT_FALSE(cookie_settings()->IsThirdPartyAccessAllowed(origin, nullptr));
+  EXPECT_FALSE(cookie_settings()->IsThirdPartyAccessAllowed(
+      origin, nullptr, QueryReason::kCookies));
 
   // Open bubble.
   ShowUi("NotWorkingClicked");
 
   // Allow cookies for this site by accepting bubble.
   AcceptBubble();
-  EXPECT_TRUE(cookie_settings()->IsThirdPartyAccessAllowed(origin, nullptr));
+  EXPECT_TRUE(cookie_settings()->IsThirdPartyAccessAllowed(
+      origin, nullptr, QueryReason::kCookies));
 }
 
 // Test opening cookie controls bubble while 3p cookies are allowed for this
@@ -134,14 +138,16 @@
   GURL origin = embedded_test_server()->GetURL("a.com", "/");
   cookie_settings()->SetThirdPartyCookieSetting(
       origin, ContentSetting::CONTENT_SETTING_ALLOW);
-  EXPECT_TRUE(cookie_settings()->IsThirdPartyAccessAllowed(origin, nullptr));
+  EXPECT_TRUE(cookie_settings()->IsThirdPartyAccessAllowed(
+      origin, nullptr, QueryReason::kCookies));
 
   // Show bubble.
   ShowUi("");
 
   // Block cookies again by accepting the bubble.
   AcceptBubble();
-  EXPECT_FALSE(cookie_settings()->IsThirdPartyAccessAllowed(origin, nullptr));
+  EXPECT_FALSE(cookie_settings()->IsThirdPartyAccessAllowed(
+      origin, nullptr, QueryReason::kCookies));
 }
 
 // ==================== Pixel tests ====================
diff --git a/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator.cc b/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator.cc
index a0750f6..287f9ee 100644
--- a/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator.cc
+++ b/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator.cc
@@ -7,6 +7,7 @@
 #include "base/callback.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/page_info/about_this_site_side_panel.h"
+#include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/page_info/about_this_site_side_panel_view.h"
 #include "chrome/browser/ui/views/side_panel/side_panel_coordinator.h"
@@ -51,12 +52,13 @@
     // The user issued a follow-up AboutThisPage query.
     about_this_site_side_panel_view_->OpenUrl(params);
   } else {
+    const int icon_size = ChromeLayoutProvider::Get()->GetDistanceMetric(
+        ChromeDistanceMetric::DISTANCE_SIDE_PANEL_HEADER_VECTOR_ICON_SIZE);
     auto entry = std::make_unique<SidePanelEntry>(
         SidePanelEntry::Id::kAboutThisSite,
         l10n_util::GetStringUTF16(IDS_PAGE_INFO_ABOUT_THIS_PAGE_TITLE),
-        // TODO(crbug.com/1318000): Use the correct icon.
-        ui::ImageModel::FromVectorIcon(vector_icons::kSearchIcon,
-                                       ui::kColorIcon),
+        ui::ImageModel::FromVectorIcon(vector_icons::kGoogleColorIcon,
+                                       ui::kColorIcon, icon_size),
         base::BindRepeating(
             &AboutThisSideSidePanelCoordinator::CreateAboutThisSiteWebView,
             base::Unretained(this), params));
diff --git a/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc b/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc
index 1890cdc..29b4be5 100644
--- a/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc
+++ b/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc
@@ -4,13 +4,16 @@
 
 #include "chrome/browser/ui/views/page_info/about_this_site_side_panel_view.h"
 
+#include "chrome/browser/page_info/about_this_site_side_panel_throttle.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/color/chrome_color_id.h"
+#include "chrome/browser/ui/page_info/about_this_site_side_panel.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/page_navigator.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/common/referrer.h"
 #include "ui/base/window_open_disposition.h"
 #include "ui/views/layout/flex_layout_types.h"
 #include "ui/views/layout/flex_layout_view.h"
@@ -59,8 +62,10 @@
   SetContentVisible(false);
   auto* web_contents = web_view_->GetWebContents();
   web_contents->SetDelegate(this);
-  // TODO(crbug.com/1318000): Intercept all cross-origin navigations and open
-  // them in a new tab.
+  web_contents->SetUserData(
+      kAboutThisSiteWebContentsUserDataKey,
+      std::make_unique<AboutThisSiteWebContentsUserData>(base::BindRepeating(
+          &AboutThisSiteSidePanelView::OpenUrlInBrowser, AsWeakPtr())));
   Observe(web_contents);
 }
 
@@ -68,34 +73,47 @@
   SetContentVisible(progress == 1.0);
 }
 
-bool AboutThisSiteSidePanelView::HandleContextMenu(
-    content::RenderFrameHost& render_frame_host,
-    const content::ContextMenuParams& params) {
-  // Disable context menu.
-  return true;
-}
-
 void AboutThisSiteSidePanelView::OpenUrl(const content::OpenURLParams& params) {
   web_view_->GetWebContents()->GetController().LoadURLWithParams(
       content::NavigationController::LoadURLParams(params));
 }
 
-void AboutThisSiteSidePanelView::DidOpenRequestedURL(
-    content::WebContents* new_contents,
-    content::RenderFrameHost* source_render_frame_host,
-    const GURL& url,
-    const content::Referrer& referrer,
-    WindowOpenDisposition disposition,
-    ui::PageTransition transition,
-    bool started_from_context_menu,
-    bool renderer_initiated) {
-  content::OpenURLParams params(url, referrer, disposition, transition,
-                                renderer_initiated);
-  // If the navigation is initiated by the renderer process, we must set an
-  // initiator origin.
-  if (renderer_initiated)
-    params.initiator_origin = url::Origin::Create(url);
+content::WebContents* AboutThisSiteSidePanelView::OpenURLFromTab(
+    content::WebContents* source,
+    const content::OpenURLParams& params) {
+  // Redirect requests to open a new tab to the main browser. These come e.g.
+  // from the context menu.
+  return outer_delegate()->OpenURLFromTab(source, params);
+}
 
+void AboutThisSiteSidePanelView::AddNewContents(
+    content::WebContents* source,
+    std::unique_ptr<content::WebContents> new_contents,
+    const GURL& target_url,
+    WindowOpenDisposition disposition,
+    const gfx::Rect& initial_rect,
+    bool user_gesture,
+    bool* was_blocked) {
+  // Redirect requests to add a webcontents to the main browser. These come e.g.
+  // from middle clicks on links.
+  outer_delegate()->AddNewContents(source, std::move(new_contents), target_url,
+                                   disposition, initial_rect, user_gesture,
+                                   was_blocked);
+}
+
+bool AboutThisSiteSidePanelView::HandleKeyboardEvent(
+    content::WebContents* source,
+    const content::NativeWebKeyboardEvent& event) {
+  // Redirect keyboard events to the main browser.
+  return outer_delegate()->HandleKeyboardEvent(source, event);
+}
+
+content::WebContentsDelegate* AboutThisSiteSidePanelView::outer_delegate() {
+  return browser_view_->browser();
+}
+
+void AboutThisSiteSidePanelView::OpenUrlInBrowser(
+    const content::OpenURLParams& params) {
   browser_view_->browser()->OpenURL(params);
 }
 
diff --git a/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.h b/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.h
index bb70d94e..2a33b81 100644
--- a/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.h
+++ b/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.h
@@ -7,9 +7,12 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/ui/views/frame/browser_view.h"
+#include "content/public/browser/web_contents_delegate.h"
+#include "content/public/browser/web_contents_observer.h"
 #include "ui/views/layout/flex_layout_view.h"
 
+class BrowserView;
+
 namespace content {
 class WebContents;
 }  // namespace content
@@ -35,6 +38,9 @@
   void OpenUrl(const content::OpenURLParams& params);
 
  private:
+  // Opens a URL in a regular tab.
+  void OpenUrlInBrowser(const content::OpenURLParams& params);
+
   // Shows / hides the page and the loading view to avoid showing
   // loading artifacts.
   void SetContentVisible(bool visible);
@@ -43,18 +49,21 @@
   void LoadProgressChanged(double progress) override;
 
   // content::WebContentsDelegate:
-  bool HandleContextMenu(content::RenderFrameHost& render_frame_host,
-                         const content::ContextMenuParams& params) override;
+  void AddNewContents(content::WebContents* source,
+                      std::unique_ptr<content::WebContents> new_contents,
+                      const GURL& target_url,
+                      WindowOpenDisposition disposition,
+                      const gfx::Rect& initial_rect,
+                      bool user_gesture,
+                      bool* was_blocked) override;
+  content::WebContents* OpenURLFromTab(
+      content::WebContents* source,
+      const content::OpenURLParams& params) override;
+  bool HandleKeyboardEvent(
+      content::WebContents* source,
+      const content::NativeWebKeyboardEvent& event) override;
 
-  // content::WebContentsObserver:
-  void DidOpenRequestedURL(content::WebContents* new_contents,
-                           content::RenderFrameHost* source_render_frame_host,
-                           const GURL& url,
-                           const content::Referrer& referrer,
-                           WindowOpenDisposition disposition,
-                           ui::PageTransition transition,
-                           bool started_from_context_menu,
-                           bool renderer_initiated) override;
+  content::WebContentsDelegate* outer_delegate();
 
   raw_ptr<BrowserView> browser_view_;
   raw_ptr<views::WebView> loading_indicator_web_view_;
diff --git a/chrome/browser/ui/views/side_panel/lens/lens_unified_side_panel_view.cc b/chrome/browser/ui/views/side_panel/lens/lens_unified_side_panel_view.cc
index ea30087..5f320394 100644
--- a/chrome/browser/ui/views/side_panel/lens/lens_unified_side_panel_view.cc
+++ b/chrome/browser/ui/views/side_panel/lens/lens_unified_side_panel_view.cc
@@ -127,8 +127,8 @@
 }
 
 void LensUnifiedSidePanelView::OpenUrl(const content::OpenURLParams& params) {
-  GetWebContents()->GetController().LoadURLWithParams(
-      content::NavigationController::LoadURLParams(params));
+  side_panel_url_params_ = std::make_unique<content::OpenURLParams>(params);
+  MaybeLoadURLWithParams();
 }
 
 void LensUnifiedSidePanelView::DidOpenRequestedURL(
@@ -204,6 +204,33 @@
   AddChildView(std::move(footer));
 }
 
+void LensUnifiedSidePanelView::MaybeLoadURLWithParams() {
+  // Ensure the side panel view has a width before loading URL. If side panel is
+  // still closed (width == 0), defer loading the URL to
+  // LensUnifiedSidePanelView::OnViewBoundsChanged. The nullptr check ensures we
+  // don't rerender the same page on a unrelated resize event.
+  if (width() == 0 || !side_panel_url_params_)
+    return;
+
+  // Manually set web contents to the size of side panel view on initial load.
+  // This prevents a bug in Lens Web that renders the page as if it was 0px
+  // wide.
+  GetWebContents()->Resize(bounds());
+  GetWebContents()->GetController().LoadURLWithParams(
+      content::NavigationController::LoadURLParams(*side_panel_url_params_));
+  side_panel_url_params_.reset();
+}
+
+void LensUnifiedSidePanelView::OnBoundsChanged(
+    const gfx::Rect& previous_bounds) {
+  // If side panel is closed when we first try to render the URL, we must wait
+  // until side panel is opened. This method is called once side panel view goes
+  // from 0px wide to ~320px wide. Rendering the page after side panel view
+  // fully opens prevents a race condition which causes the page to load before
+  // side panel is open causing the page to render as if it were 0px wide.
+  MaybeLoadURLWithParams();
+}
+
 void LensUnifiedSidePanelView::SetContentVisible(bool visible) {
   web_view_->SetVisible(visible);
   loading_indicator_web_view_->SetVisible(!visible);
diff --git a/chrome/browser/ui/views/side_panel/lens/lens_unified_side_panel_view.h b/chrome/browser/ui/views/side_panel/lens/lens_unified_side_panel_view.h
index 456ffb3..5594904 100644
--- a/chrome/browser/ui/views/side_panel/lens/lens_unified_side_panel_view.h
+++ b/chrome/browser/ui/views/side_panel/lens/lens_unified_side_panel_view.h
@@ -34,10 +34,16 @@
   LensUnifiedSidePanelView& operator=(const LensUnifiedSidePanelView&) = delete;
   ~LensUnifiedSidePanelView() override;
 
+  // views::View
+  void OnBoundsChanged(const gfx::Rect& previous_bounds) override;
+
   content::WebContents* GetWebContents();
 
   void OpenUrl(const content::OpenURLParams& params);
 
+  // Loads the Lens website if the side panel view is ready with a width.
+  void MaybeLoadURLWithParams();
+
   // Opens current view URL in a new chrome tab and closes the side panel
   void LoadResultsInNewTab();
 
@@ -77,6 +83,10 @@
   raw_ptr<views::WebView> loading_indicator_web_view_;
   raw_ptr<views::WebView> web_view_;
   raw_ptr<views::MdTextButton> launch_button_;
+
+  // Copy of the most recent URL params to open.
+  std::unique_ptr<content::OpenURLParams> side_panel_url_params_;
+
   base::WeakPtrFactory<LensUnifiedSidePanelView> weak_factory_{this};
 };
 
diff --git a/chrome/browser/ui/views/user_education/browser_user_education_service.cc b/chrome/browser/ui/views/user_education/browser_user_education_service.cc
index 263d37c..f0836c0 100644
--- a/chrome/browser/ui/views/user_education/browser_user_education_service.cc
+++ b/chrome/browser/ui/views/user_education/browser_user_education_service.cc
@@ -113,6 +113,8 @@
 }  // namespace
 
 const char kTabGroupTutorialId[] = "Tab Group Tutorial";
+const char kTabGroupWithExistingGroupTutorialId[] =
+    "Tab Group With Existing Group Tutorial";
 
 user_education::HelpBubbleDelegate* GetHelpBubbleDelegate() {
   static base::NoDestructor<BrowserHelpBubbleDelegate> delegate;
@@ -268,15 +270,30 @@
   if (tutorial_registry.IsTutorialRegistered(kTabGroupTutorialId))
     return;
 
-  {  // Tab Group Tutorial
-    TutorialDescription description;
+  {  // Tab Group Tutorials
 
-    // The initial step.
+    // The Description for kTabGroupTutorialId.
+    TutorialDescription without_group_description;
+
+    // The Description for kTabGroupWithExistingGroupTutorialId.
+    TutorialDescription with_group_description;
+
+    // The initial step. This is the only step that differs between
+    // kTabGroupTutorialId and kTabGroupWithExistingGroupTutorialId.
     TutorialDescription::Step create_tabgroup_step(
         0, IDS_TUTORIAL_TAB_GROUP_ADD_TAB_TO_GROUP,
         ui::InteractionSequence::StepType::kShown, kTabStripRegionElementId,
         std::string(), HelpBubbleArrow::kNone);
-    description.steps.emplace_back(create_tabgroup_step);
+    without_group_description.steps.emplace_back(create_tabgroup_step);
+
+    TutorialDescription::Step create_tabgroup_with_existing_group_step(
+        0, IDS_TUTORIAL_ADD_TAB_TO_GROUP_WITH_EXISTING_GROUP_IN_TAB_STRIP,
+        ui::InteractionSequence::StepType::kShown, kTabStripRegionElementId,
+        std::string(), HelpBubbleArrow::kNone);
+    without_group_description.steps.emplace_back(
+        create_tabgroup_with_existing_group_step);
+    with_group_description.steps.emplace_back(
+        create_tabgroup_with_existing_group_step);
 
     // Getting the new tab group (hidden step).
     TutorialDescription::Step new_tab_group_step(
@@ -290,7 +307,8 @@
                   element, base::StringPiece(kTabGroupHeaderElementName));
               return true;
             }));
-    description.steps.emplace_back(std::move(new_tab_group_step));
+    without_group_description.steps.emplace_back(new_tab_group_step);
+    with_group_description.steps.emplace_back(new_tab_group_step);
 
     // The menu step.
     TutorialDescription::Step bubble_menu_edit_step(
@@ -299,40 +317,47 @@
         std::string(), HelpBubbleArrow::kLeftCenter,
         ui::CustomElementEventType(),
         /*must_remain_visible =*/false);
-    description.steps.emplace_back(std::move(bubble_menu_edit_step));
+    without_group_description.steps.emplace_back(bubble_menu_edit_step);
+    with_group_description.steps.emplace_back(bubble_menu_edit_step);
 
     TutorialDescription::Step bubble_menu_edit_ended_step(
         0, 0, ui::InteractionSequence::StepType::kHidden,
         kTabGroupEditorBubbleId, std::string(), HelpBubbleArrow::kNone,
         ui::CustomElementEventType(),
         /*must_remain_visible =*/false);
-    description.steps.emplace_back(std::move(bubble_menu_edit_ended_step));
+    without_group_description.steps.emplace_back(bubble_menu_edit_ended_step);
+    with_group_description.steps.emplace_back(bubble_menu_edit_ended_step);
 
     // Drag tab into the group.
     TutorialDescription::Step drag_tab_into_group_step(
         0, IDS_TUTORIAL_TAB_GROUP_DRAG_TAB,
         ui::InteractionSequence::StepType::kShown, kTabStripRegionElementId,
         std::string(), HelpBubbleArrow::kNone);
-    description.steps.emplace_back(std::move(drag_tab_into_group_step));
+    without_group_description.steps.emplace_back(drag_tab_into_group_step);
+    with_group_description.steps.emplace_back(drag_tab_into_group_step);
 
     TutorialDescription::Step successfully_drag_tab_into_group_step(
         0, 0, ui::InteractionSequence::StepType::kCustomEvent,
         ui::ElementIdentifier(), std::string(), HelpBubbleArrow::kTopCenter,
         kTabGroupedCustomEventId, /*must_remain_visible =*/true);
-    description.steps.emplace_back(
-        std::move(successfully_drag_tab_into_group_step));
+    without_group_description.steps.emplace_back(
+        successfully_drag_tab_into_group_step);
+    with_group_description.steps.emplace_back(
+        successfully_drag_tab_into_group_step);
 
     // Click to collapse the tab group.
     TutorialDescription::Step collapse_step(
         0, IDS_TUTORIAL_TAB_GROUP_COLLAPSE,
         ui::InteractionSequence::StepType::kShown, ui::ElementIdentifier(),
         kTabGroupHeaderElementName, HelpBubbleArrow::kTopCenter);
-    description.steps.emplace_back(std::move(collapse_step));
+    without_group_description.steps.emplace_back(collapse_step);
+    with_group_description.steps.emplace_back(collapse_step);
 
     TutorialDescription::Step detect_collapse_step(
         0, 0, ui::InteractionSequence::StepType::kActivated,
         kTabGroupHeaderElementId, std::string(), HelpBubbleArrow::kNone);
-    description.steps.emplace_back(std::move(detect_collapse_step));
+    without_group_description.steps.emplace_back(detect_collapse_step);
+    with_group_description.steps.emplace_back(detect_collapse_step);
 
     // Completion of the tutorial.
     TutorialDescription::Step success_step(
@@ -340,11 +365,19 @@
         IDS_TUTORIAL_TAB_GROUP_SUCCESS_DESCRIPTION,
         ui::InteractionSequence::StepType::kShown, kTabStripRegionElementId,
         std::string(), HelpBubbleArrow::kNone);
-    description.steps.emplace_back(std::move(success_step));
+    without_group_description.steps.emplace_back(success_step);
+    with_group_description.steps.emplace_back(success_step);
 
-    description.histograms =
+    without_group_description.histograms =
         user_education::MakeTutorialHistograms<kTabGroupTutorialMetricPrefix>(
-            description.steps.size());
-    tutorial_registry.AddTutorial(kTabGroupTutorialId, std::move(description));
+            without_group_description.steps.size());
+    tutorial_registry.AddTutorial(kTabGroupTutorialId,
+                                  std::move(without_group_description));
+
+    with_group_description.histograms =
+        user_education::MakeTutorialHistograms<kTabGroupTutorialMetricPrefix>(
+            with_group_description.steps.size());
+    tutorial_registry.AddTutorial(kTabGroupWithExistingGroupTutorialId,
+                                  std::move(with_group_description));
   }
 }
diff --git a/chrome/browser/ui/views/user_education/browser_user_education_service.h b/chrome/browser/ui/views/user_education/browser_user_education_service.h
index 815751b5..1132380 100644
--- a/chrome/browser/ui/views/user_education/browser_user_education_service.h
+++ b/chrome/browser/ui/views/user_education/browser_user_education_service.h
@@ -15,6 +15,7 @@
 }  // namespace user_education
 
 extern const char kTabGroupTutorialId[];
+extern const char kTabGroupWithExistingGroupTutorialId[];
 
 extern user_education::HelpBubbleDelegate* GetHelpBubbleDelegate();
 extern void RegisterChromeHelpBubbleFactories(
diff --git a/chrome/browser/ui/webui/browser_command/browser_command_handler.cc b/chrome/browser/ui/webui/browser_command/browser_command_handler.cc
index 7f11b52..4cfff3b 100644
--- a/chrome/browser/ui/webui/browser_command/browser_command_handler.cc
+++ b/chrome/browser/ui/webui/browser_command/browser_command_handler.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
+#include "chrome/browser/ui/tabs/tab_group_model.h"
 #include "chrome/browser/ui/user_education/user_education_service.h"
 #include "chrome/browser/ui/user_education/user_education_service_factory.h"
 #include "chrome/browser/ui/views/user_education/browser_user_education_service.h"
@@ -23,6 +24,7 @@
 #include "components/safe_browsing/content/browser/web_ui/safe_browsing_ui.h"
 #include "components/safe_browsing/core/common/safe_browsing_policy_handler.h"
 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
+#include "components/user_education/common/tutorial_identifier.h"
 #include "components/user_education/common/tutorial_service.h"
 #include "ui/base/interaction/element_identifier.h"
 #include "ui/base/page_transition_types.h"
@@ -83,7 +85,7 @@
                     !profile_->IsChild();
       break;
     case Command::kStartTabGroupTutorial:
-      can_execute = !!GetTutorialService();
+      can_execute = !!GetTutorialService() && BrowserSupportsTabGroups();
       break;
     case Command::kOpenPasswordManager:
       can_execute = true;
@@ -166,22 +168,38 @@
       ->GetElementContext();
 }
 
+bool BrowserCommandHandler::BrowserSupportsTabGroups() {
+  Browser* browser = chrome::FindBrowserWithProfile(profile_);
+  return browser->tab_strip_model()->SupportsTabGroups();
+}
+
+bool BrowserCommandHandler::BrowserHasTabGroups() {
+  Browser* browser = chrome::FindBrowserWithProfile(profile_);
+  return !browser->tab_strip_model()->group_model()->ListTabGroups().empty();
+}
+
 void BrowserCommandHandler::StartTabGroupTutorial() {
   user_education::TutorialService* tutorial_service = GetTutorialService();
-  if (!tutorial_service) {
-    // Should never happen since we return false in CanExecuteCommand(), but
-    // avoid a browser crash anyway.
+
+  // Should never happen since we return false in CanExecuteCommand(), but
+  // avoid a browser crash anyway.
+  if (!tutorial_service)
     return;
-  }
 
   const ui::ElementContext context = GetUiElementContext();
   if (!context)
     return;
 
-  bool started_tutorial =
-      tutorial_service->StartTutorial(kTabGroupTutorialId, context);
-  tutorial_service->LogStartedFromWhatsNewPage(kTabGroupTutorialId,
-                                               started_tutorial);
+  if (!BrowserSupportsTabGroups()) {
+    return;
+  }
+
+  user_education::TutorialIdentifier tutorial_id =
+      BrowserHasTabGroups() ? kTabGroupWithExistingGroupTutorialId
+                            : kTabGroupTutorialId;
+
+  bool started_tutorial = tutorial_service->StartTutorial(tutorial_id, context);
+  tutorial_service->LogStartedFromWhatsNewPage(tutorial_id, started_tutorial);
 }
 
 void BrowserCommandHandler::OpenFeedbackForm() {
diff --git a/chrome/browser/ui/webui/browser_command/browser_command_handler.h b/chrome/browser/ui/webui/browser_command/browser_command_handler.h
index 21f7011a..d202842 100644
--- a/chrome/browser/ui/webui/browser_command/browser_command_handler.h
+++ b/chrome/browser/ui/webui/browser_command/browser_command_handler.h
@@ -71,6 +71,10 @@
 
   virtual CommandUpdater* GetCommandUpdater();
 
+  virtual bool BrowserSupportsTabGroups();
+
+  virtual bool BrowserHasTabGroups();
+
  private:
   virtual void NavigateToURL(const GURL& url,
                              WindowOpenDisposition disposition);
diff --git a/chrome/browser/ui/webui/browser_command/browser_command_handler_unittest.cc b/chrome/browser/ui/webui/browser_command/browser_command_handler_unittest.cc
index 155c471..6e025974 100644
--- a/chrome/browser/ui/webui/browser_command/browser_command_handler_unittest.cc
+++ b/chrome/browser/ui/webui/browser_command/browser_command_handler_unittest.cc
@@ -90,8 +90,27 @@
     tutorial_service_ = service;
   }
 
+  void SetBrowserSupportsTabGroups(bool is_supported) {
+    tab_groups_feature_supported_ = is_supported;
+  }
+
+  void SetBrowserHasTabGroups(bool has_tab_groups) {
+    has_tab_groups_ = has_tab_groups;
+  }
+
+ protected:
+  bool BrowserSupportsTabGroups() override {
+    return tab_groups_feature_supported_;
+  }
+
+  bool BrowserHasTabGroups() override { return has_tab_groups_; }
+
+ private:
   user_education::TutorialService* tutorial_service_;
   std::unique_ptr<CommandUpdater> command_updater_;
+
+  bool tab_groups_feature_supported_ = true;
+  bool has_tab_groups_ = false;
 };
 
 class TestTutorialService : public user_education::TutorialService {
@@ -424,15 +443,39 @@
   user_education::TutorialRegistry registry;
   MockTutorialService service(&registry, bubble_factory_registry.get());
   command_handler_->SetTutorialService(&service);
+
+  // If the browsers Tab Strip does not support tutorials, dont run the command.
+  command_handler_->SetBrowserSupportsTabGroups(false);
+  EXPECT_FALSE(CanExecuteCommand(Command::kStartTabGroupTutorial));
+
+  // If the browser supports tab groups and has a tutorial service it should
+  // allow running commands.
+  command_handler_->SetBrowserSupportsTabGroups(true);
   EXPECT_TRUE(CanExecuteCommand(Command::kStartTabGroupTutorial));
 
-  // The StartTabGroupTutorial command should start the tab group tutorial.
+  // The StartTabGroupTutorial command should start the tab group tutorial. if
+  // there are no tab groups in the tabstrip
+  command_handler_->SetBrowserHasTabGroups(false);
   ClickInfoPtr info = ClickInfo::New();
   EXPECT_CALL(service, StartTutorial(kTabGroupTutorialId, kTestContext1,
                                      testing::_, testing::_))
       .WillOnce(testing::Return(true));
   EXPECT_CALL(service, LogStartedFromWhatsNewPage(kTabGroupTutorialId, true));
   EXPECT_TRUE(ExecuteCommand(Command::kStartTabGroupTutorial, std::move(info)));
+
+  // The StartTabGroupTutorial command should start the "existing tab groups"
+  // tab group tutorial. if there are tab groups in the tabstrip
+  {
+    command_handler_->SetBrowserHasTabGroups(true);
+    ClickInfoPtr info = ClickInfo::New();
+    EXPECT_CALL(service, StartTutorial(kTabGroupWithExistingGroupTutorialId,
+                                       kTestContext1, testing::_, testing::_))
+        .WillOnce(testing::Return(true));
+    EXPECT_CALL(service, LogStartedFromWhatsNewPage(
+                             kTabGroupWithExistingGroupTutorialId, true));
+    EXPECT_TRUE(
+        ExecuteCommand(Command::kStartTabGroupTutorial, std::move(info)));
+  }
 }
 
 TEST_F(BrowserCommandHandlerTest, OpenPasswordManagerCommand) {
diff --git a/chrome/browser/ui/webui/chromeos/login/locale_switch_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/locale_switch_screen_handler.cc
index 7c41542..1201d85 100644
--- a/chrome/browser/ui/webui/chromeos/login/locale_switch_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/locale_switch_screen_handler.cc
@@ -13,26 +13,11 @@
 
 namespace chromeos {
 
-constexpr StaticOobeScreenId LocaleSwitchView::kScreenId;
-
 LocaleSwitchScreenHandler::LocaleSwitchScreenHandler(
     CoreOobeView* core_oobe_view)
     : BaseScreenHandler(kScreenId), core_oobe_view_(core_oobe_view) {}
 
-LocaleSwitchScreenHandler::~LocaleSwitchScreenHandler() {
-  if (screen_)
-    screen_->OnViewDestroyed(this);
-}
-
-void LocaleSwitchScreenHandler::Bind(LocaleSwitchScreen* screen) {
-  BaseScreenHandler::SetBaseScreenDeprecated(screen);
-  screen_ = screen;
-}
-
-void LocaleSwitchScreenHandler::Unbind() {
-  BaseScreenHandler::SetBaseScreenDeprecated(nullptr);
-  screen_ = nullptr;
-}
+LocaleSwitchScreenHandler::~LocaleSwitchScreenHandler() = default;
 
 void LocaleSwitchScreenHandler::UpdateStrings() {
   base::Value::Dict localized_strings = GetOobeUI()->GetLocalizedStrings();
@@ -42,6 +27,4 @@
 void LocaleSwitchScreenHandler::DeclareLocalizedValues(
     ::login::LocalizedValuesBuilder* builder) {}
 
-void LocaleSwitchScreenHandler::InitializeDeprecated() {}
-
 }  // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/locale_switch_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/locale_switch_screen_handler.h
index 67bc6349d..cba7b6c 100644
--- a/chrome/browser/ui/webui/chromeos/login/locale_switch_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/locale_switch_screen_handler.h
@@ -5,18 +5,16 @@
 #ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_LOCALE_SWITCH_SCREEN_HANDLER_H_
 #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_LOCALE_SWITCH_SCREEN_HANDLER_H_
 
+#include "base/memory/weak_ptr.h"
 #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
 #include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h"
 
-namespace ash {
-class LocaleSwitchScreen;
-}
-
 namespace chromeos {
 
-class LocaleSwitchView {
+class LocaleSwitchView : public base::SupportsWeakPtr<LocaleSwitchView> {
  public:
-  constexpr static StaticOobeScreenId kScreenId{"locale-switch"};
+  inline constexpr static StaticOobeScreenId kScreenId{"locale-switch",
+                                                       "LocaleSwitchScreen"};
 
   LocaleSwitchView() = default;
   virtual ~LocaleSwitchView() = default;
@@ -24,8 +22,6 @@
   LocaleSwitchView(const LocaleSwitchView&) = delete;
   LocaleSwitchView& operator=(const LocaleSwitchView&) = delete;
 
-  virtual void Bind(ash::LocaleSwitchScreen* screen) = 0;
-  virtual void Unbind() = 0;
   virtual void UpdateStrings() = 0;
 };
 
@@ -39,18 +35,14 @@
   ~LocaleSwitchScreenHandler() override;
 
   // LocaleSwitchView:
-  void Bind(ash::LocaleSwitchScreen* screen) override;
-  void Unbind() override;
   void UpdateStrings() override;
 
   // BaseScreenHandler:
   void DeclareLocalizedValues(
       ::login::LocalizedValuesBuilder* builder) override;
-  void InitializeDeprecated() override;
 
  private:
-  ash::LocaleSwitchScreen* screen_ = nullptr;
-  CoreOobeView* core_oobe_view_ = nullptr;
+  base::raw_ptr<CoreOobeView> core_oobe_view_;
 };
 
 }  // namespace chromeos
diff --git a/chrome/browser/ui/webui/new_tab_page/OWNERS b/chrome/browser/ui/webui/new_tab_page/OWNERS
index cb3e1277..9154f32 100644
--- a/chrome/browser/ui/webui/new_tab_page/OWNERS
+++ b/chrome/browser/ui/webui/new_tab_page/OWNERS
@@ -1,7 +1,8 @@
 mahmadi@chromium.org
+pauladedeji@google.com
+romanarora@chromium.org
 tiborg@chromium.org
 tluk@chromium.org
-romanarora@chromium.org
 
 per-file *.mojom=set noparent
 per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index e842fa4..ca0ff361 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1132,7 +1132,19 @@
       {"unenrollVirtualCardDialogTitle",
        IDS_AUTOFILL_VIRTUAL_CARD_UNENROLL_DIALOG_TITLE},
       {"unenrollVirtualCardDialogConfirm",
-       IDS_AUTOFILL_VIRTUAL_CARD_UNENROLL_DIALOG_CONFIRM_BUTTON_LABEL}};
+       IDS_AUTOFILL_VIRTUAL_CARD_UNENROLL_DIALOG_CONFIRM_BUTTON_LABEL},
+#if BUILDFLAG(IS_WIN)
+      {"managePasskeysLabel", IDS_AUTOFILL_MANAGE_PASSKEYS_LABEL},
+      {"managePasskeysTitle", IDS_AUTOFILL_MANAGE_PASSKEYS_TITLE},
+      {"managePasskeysSubTitle", IDS_AUTOFILL_MANAGE_PASSKEYS_SUB_TITLE},
+      {"managePasskeysSearch", IDS_AUTOFILL_MANAGE_PASSKEYS_SEARCH},
+      {"managePasskeysNoSupport", IDS_AUTOFILL_MANAGE_PASSKEYS_NO_SUPPORT},
+      {"managePasskeysCannotDeleteTitle",
+       IDS_AUTOFILL_MANAGE_PASSKEYS_CANNOT_DELETE_TITLE},
+      {"managePasskeysCannotDeleteBody",
+       IDS_AUTOFILL_MANAGE_PASSKEYS_CANNOT_DELETE_BODY},
+#endif
+  };
 
   bool unifiedPasswordManagerEnabled = base::FeatureList::IsEnabled(
       password_manager::features::kUnifiedPasswordManagerDesktop);
diff --git a/chrome/browser/ui/webui/settings/settings_security_key_handler.cc b/chrome/browser/ui/webui/settings/settings_security_key_handler.cc
index d1dac22..72c9e1b 100644
--- a/chrome/browser/ui/webui/settings/settings_security_key_handler.cc
+++ b/chrome/browser/ui/webui/settings/settings_security_key_handler.cc
@@ -14,10 +14,12 @@
 #include "base/callback.h"
 #include "base/containers/contains.h"
 #include "base/strings/string_number_conversions.h"
+#include "build/build_config.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
 #include "chrome/browser/ui/webui/settings/settings_security_key_handler.h"
 #include "chrome/browser/webauthn/cablev2_devices.h"
+#include "chrome/browser/webauthn/local_credential_management.h"
 #include "chrome/grit/generated_resources.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/web_contents.h"
@@ -34,6 +36,10 @@
 #include "third_party/icu/source/common/unicode/locid.h"
 #include "ui/base/l10n/l10n_util.h"
 
+#if BUILDFLAG(IS_WIN)
+#include "device/fido/win/webauthn_api.h"
+#endif
+
 using content::BrowserThread;
 
 namespace {
@@ -1115,4 +1121,136 @@
   ResolveJavascriptCallback(callback_id, base::Value(std::move(result)));
 }
 
+#if BUILDFLAG(IS_WIN)
+
+PasskeysHandler::PasskeysHandler() = default;
+PasskeysHandler::~PasskeysHandler() = default;
+
+void PasskeysHandler::OnJavascriptAllowed() {}
+void PasskeysHandler::OnJavascriptDisallowed() {}
+
+void PasskeysHandler::RegisterMessages() {
+  web_ui()->RegisterMessageCallback(
+      "passkeysHasPasskeys",
+      base::BindRepeating(&PasskeysHandler::HandleHasPasskeys,
+                          base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
+      "passkeysEnumerate",
+      base::BindRepeating(&PasskeysHandler::HandleEnumerate,
+                          base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
+      "passkeysDelete", base::BindRepeating(&PasskeysHandler::HandleDelete,
+                                            base::Unretained(this)));
+}
+
+void PasskeysHandler::HandleHasPasskeys(const base::Value::List& args) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK_EQ(1u, args.size());
+
+  AllowJavascript();
+  auto local_cred_man = std::make_unique<LocalCredentialManagement>(
+      device::WinWebAuthnApi::GetDefault());
+  local_cred_man->HasCredentials(
+      Profile::FromBrowserContext(
+          web_ui()->GetWebContents()->GetBrowserContext()),
+      base::BindOnce(&PasskeysHandler::OnHasPasskeysComplete,
+                     weak_factory_.GetWeakPtr(), args[0].GetString(),
+                     std::move(local_cred_man)));
+}
+
+void PasskeysHandler::OnHasPasskeysComplete(
+    std::string callback_id,
+    std::unique_ptr<LocalCredentialManagement> local_cred_man,
+    bool has_passkeys) {
+  ResolveJavascriptCallback(base::Value(std::move(callback_id)),
+                            base::Value(has_passkeys));
+}
+
+void PasskeysHandler::HandleEnumerate(const base::Value::List& args) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK_EQ(1u, args.size());
+
+  AllowJavascript();
+  DoEnumerate(args[0].GetString());
+}
+
+void PasskeysHandler::DoEnumerate(std::string callback_id) {
+  auto local_cred_man = std::make_unique<LocalCredentialManagement>(
+      device::WinWebAuthnApi::GetDefault());
+  local_cred_man->Enumerate(
+      Profile::FromBrowserContext(
+          web_ui()->GetWebContents()->GetBrowserContext()),
+      base::BindOnce(&PasskeysHandler::OnEnumerateComplete,
+                     weak_factory_.GetWeakPtr(), std::move(callback_id),
+                     std::move(local_cred_man)));
+}
+
+void PasskeysHandler::OnEnumerateComplete(
+    std::string callback_id,
+    std::unique_ptr<LocalCredentialManagement> local_cred_man,
+    absl::optional<std::vector<device::DiscoverableCredentialMetadata>>
+        credentials) {
+  base::Value result;
+
+  if (credentials.has_value()) {
+    base::Value::List passkeys;
+    for (const auto& cred : *credentials) {
+      // RP IDs with colons in them are assumed to be URLs and thus for
+      // protocols like SSH. In order to avoid confusing the UI, these are
+      // filtered out.
+      if (cred.rp_id.find(':') != std::string::npos) {
+        continue;
+      }
+
+      base::Value::Dict passkey;
+      passkey.Set("relyingPartyId", cred.rp_id);
+      passkey.Set("userName", cred.user.name.value_or(""));
+      passkey.Set("userDisplayName", cred.user.display_name.value_or(""));
+      passkey.Set("credentialId", base::HexEncode(cred.cred_id));
+      passkeys.Append(std::move(passkey));
+    }
+
+    result = base::Value(std::move(passkeys));
+  }
+
+  ResolveJavascriptCallback(base::Value(std::move(callback_id)),
+                            std::move(result));
+}
+
+void PasskeysHandler::HandleDelete(const base::Value::List& args) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK_EQ(2u, args.size());
+
+  std::vector<uint8_t> credential_id;
+  const bool ok = base::HexStringToBytes(args[1].GetString(), &credential_id);
+  DCHECK(ok);
+
+  auto local_cred_man = std::make_unique<LocalCredentialManagement>(
+      device::WinWebAuthnApi::GetDefault());
+  local_cred_man->Delete(
+      Profile::FromBrowserContext(
+          web_ui()->GetWebContents()->GetBrowserContext()),
+      credential_id,
+      base::BindOnce(&PasskeysHandler::OnDeleteComplete,
+                     weak_factory_.GetWeakPtr(), args[0].GetString(),
+                     std::move(local_cred_man)));
+}
+
+void PasskeysHandler::OnDeleteComplete(
+    std::string callback_id,
+    std::unique_ptr<LocalCredentialManagement> local_cred_man,
+    bool ok) {
+  if (!ok) {
+    // Windows failed to delete the passkey. This can happen if API support is
+    // missing but no passkeys will be shown at all in that case so that should
+    // be impossible. It can also happen if the user attempts to delete a
+    // system-created credential. In this case the Javascript will notice that
+    // the credential didn't disappear and will show an error message.
+  }
+
+  DoEnumerate(std::move(callback_id));
+}
+
+#endif
+
 }  // namespace settings
diff --git a/chrome/browser/ui/webui/settings/settings_security_key_handler.h b/chrome/browser/ui/webui/settings/settings_security_key_handler.h
index ce33e5c..276f493 100644
--- a/chrome/browser/ui/webui/settings/settings_security_key_handler.h
+++ b/chrome/browser/ui/webui/settings/settings_security_key_handler.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/weak_ptr.h"
 #include "base/values.h"
+#include "build/build_config.h"
 #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
 #include "device/fido/bio/enrollment.h"
 #include "device/fido/bio/enrollment_handler.h"
@@ -25,6 +26,8 @@
 class ResetRequestHandler;
 }  // namespace device
 
+class LocalCredentialManagement;
+
 namespace settings {
 
 // Base class for message handlers on the "Security Keys" settings subpage.
@@ -267,6 +270,44 @@
   void DoEnumerate(const base::Value& callback_id);
 };
 
+#if BUILDFLAG(IS_WIN)
+
+class PasskeysHandler : public SettingsPageUIHandler {
+ public:
+  PasskeysHandler();
+  ~PasskeysHandler() override;
+
+ protected:
+  void RegisterMessages() override;
+  void OnJavascriptAllowed() override;
+  void OnJavascriptDisallowed() override;
+
+ private:
+  void HandleHasPasskeys(const base::Value::List& args);
+  void OnHasPasskeysComplete(
+      std::string callback_id,
+      std::unique_ptr<LocalCredentialManagement> local_cred_man,
+      bool has_passkeys);
+
+  void HandleEnumerate(const base::Value::List& args);
+  void DoEnumerate(std::string callback_id);
+  void OnEnumerateComplete(
+      std::string callback_id,
+      std::unique_ptr<LocalCredentialManagement> local_cred_man,
+      absl::optional<std::vector<device::DiscoverableCredentialMetadata>>
+          credentials);
+
+  void HandleDelete(const base::Value::List& args);
+  void OnDeleteComplete(
+      std::string callback_id,
+      std::unique_ptr<LocalCredentialManagement> local_cred_man,
+      bool delete_ok);
+
+  base::WeakPtrFactory<PasskeysHandler> weak_factory_{this};
+};
+
+#endif
+
 }  // namespace settings
 
 #endif  // CHROME_BROWSER_UI_WEBUI_SETTINGS_SETTINGS_SECURITY_KEY_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc
index 575c54d..692727a 100644
--- a/chrome/browser/ui/webui/settings/settings_ui.cc
+++ b/chrome/browser/ui/webui/settings/settings_ui.cc
@@ -227,6 +227,10 @@
       std::make_unique<SecurityKeysBioEnrollmentHandler>());
   AddSettingsPageUIHandler(std::make_unique<SecurityKeysPhonesHandler>());
 
+#if BUILDFLAG(IS_WIN)
+  AddSettingsPageUIHandler(std::make_unique<PasskeysHandler>());
+#endif
+
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   InitBrowserSettingsWebUIHandlers();
 #else
diff --git a/chrome/browser/ui/webui/webui_allowlist_provider_unittest.cc b/chrome/browser/ui/webui/webui_allowlist_provider_unittest.cc
index 7ce26dc..23aebb4 100644
--- a/chrome/browser/ui/webui/webui_allowlist_provider_unittest.cc
+++ b/chrome/browser/ui/webui/webui_allowlist_provider_unittest.cc
@@ -20,6 +20,8 @@
 #include "components/content_settings/core/common/content_settings.h"
 #include "components/content_settings/core/common/pref_names.h"
 
+using QueryReason = content_settings::CookieSettings::QueryReason;
+
 class WebUIAllowlistProviderTest : public ChromeRenderViewHostTestHarness {
  public:
   HostContentSettingsMap* GetHostContentSettingsMap(Profile* profile) {
@@ -267,29 +269,30 @@
   // cookies.
   EXPECT_TRUE(cookies_settings->IsFullCookieAccessAllowed(
       third_party_url, net::SiteForCookies::FromUrl(top_level_url),
-      url::Origin::Create(top_level_url)));
+      url::Origin::Create(top_level_url), QueryReason::kCookies));
 
   // Allowlisted origin on its own can't use cookies.
   EXPECT_FALSE(cookies_settings->IsFullCookieAccessAllowed(
       third_party_url, net::SiteForCookies::FromUrl(third_party_url),
-      url::Origin::Create(third_party_url)));
+      url::Origin::Create(third_party_url), QueryReason::kCookies));
 
   // Allowlisted origin embedded in Web top-level origin can't use cookies.
   EXPECT_FALSE(cookies_settings->IsFullCookieAccessAllowed(
       GURL("https://example2.com"),
       net::SiteForCookies::FromUrl(third_party_url),
-      url::Origin::Create(third_party_url)));
+      url::Origin::Create(third_party_url), QueryReason::kCookies));
 
   // Allowlisted origin making subresource request (e.g. image) can't use
   // cookies.
   EXPECT_FALSE(cookies_settings->IsFullCookieAccessAllowed(
-      third_party_url, net::SiteForCookies(), absl::nullopt));
+      third_party_url, net::SiteForCookies(), absl::nullopt,
+      QueryReason::kCookies));
 
   // Allowlisted origin embedded in the wrong WebUI origin can't use cookies.
   const GURL url_no_permission_webui = GURL("chrome-untrusted://no-perm");
   EXPECT_FALSE(cookies_settings->IsFullCookieAccessAllowed(
       third_party_url, net::SiteForCookies::FromUrl(url_no_permission_webui),
-      url::Origin::Create(url_no_permission_webui)));
+      url::Origin::Create(url_no_permission_webui), QueryReason::kCookies));
 
   // Other permissions aren't affected.
   EXPECT_EQ(CONTENT_SETTING_BLOCK,
@@ -317,29 +320,30 @@
 
   EXPECT_TRUE(cookies_settings->IsFullCookieAccessAllowed(
       third_party_url, net::SiteForCookies::FromUrl(top_level_url),
-      url::Origin::Create(top_level_url)));
+      url::Origin::Create(top_level_url), QueryReason::kCookies));
   // Allowlisted origin on its own can use cookies, because only third-party
   // cookies are blocked.
   EXPECT_TRUE(cookies_settings->IsFullCookieAccessAllowed(
       third_party_url, net::SiteForCookies::FromUrl(third_party_url),
-      url::Origin::Create(third_party_url)));
+      url::Origin::Create(third_party_url), QueryReason::kCookies));
 
   // Allowlisted origin embedded in Web top-level origin can't use cookies.
   EXPECT_FALSE(cookies_settings->IsFullCookieAccessAllowed(
       GURL("https://example2.com"),
       net::SiteForCookies::FromUrl(third_party_url),
-      url::Origin::Create(third_party_url)));
+      url::Origin::Create(third_party_url), QueryReason::kCookies));
 
   // Allowlisted origin embedded in the wrong WebUI origin can't use cookies.
   const GURL url_no_permission_webui = GURL("chrome-untrusted://no-perm");
   EXPECT_FALSE(cookies_settings->IsFullCookieAccessAllowed(
       third_party_url, net::SiteForCookies::FromUrl(url_no_permission_webui),
-      url::Origin::Create(url_no_permission_webui)));
+      url::Origin::Create(url_no_permission_webui), QueryReason::kCookies));
 
   // Allowlisted origin making subresource request (e.g. image) can't use
   // cookies.
   EXPECT_FALSE(cookies_settings->IsFullCookieAccessAllowed(
-      third_party_url, net::SiteForCookies(), absl::nullopt));
+      third_party_url, net::SiteForCookies(), absl::nullopt,
+      QueryReason::kCookies));
 
   // Other permissions aren't affected.
   EXPECT_EQ(CONTENT_SETTING_BLOCK,
diff --git a/chrome/browser/user_agent/user_agent_browsertest.cc b/chrome/browser/user_agent/user_agent_browsertest.cc
index 9b784fc..357357c 100644
--- a/chrome/browser/user_agent/user_agent_browsertest.cc
+++ b/chrome/browser/user_agent/user_agent_browsertest.cc
@@ -139,4 +139,39 @@
                          UserAgentBrowserTest,
                          ::testing::Bool());
 
+class ReduceUserAgentPlatformBrowserTest : public InProcessBrowserTest {
+ public:
+  ReduceUserAgentPlatformBrowserTest() = default;
+
+  void SetUp() override {
+    std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
+    feature_list->InitializeFromCommandLine(
+        "ReduceUserAgentMinorVersion,ReduceUserAgentPlatformOsCpu", "");
+    scoped_feature_list_.InitWithFeatureList(std::move(feature_list));
+    InProcessBrowserTest::SetUp();
+  }
+
+  content::WebContents* web_contents() const {
+    return browser()->tab_strip_model()->GetActiveWebContents();
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(ReduceUserAgentPlatformBrowserTest, NavigatorPlatform) {
+  // We should not reduce android navigator.platform in phase 5.
+#if BUILDFLAG(IS_ANDROID)
+  EXPECT_NE("Linux x86_64",
+            content::EvalJs(web_contents(), "navigator.platform"));
+#elif BUILDFLAG(IS_MAC)
+  EXPECT_EQ("MacIntel", content::EvalJs(web_contents(), "navigator.platform"));
+#elif BUILDFLAG(IS_WIN)
+  EXPECT_EQ("Win32", content::EvalJs(web_contents(), "navigator.platform"));
+#else
+  EXPECT_EQ("Linux x86_64",
+            content::EvalJs(web_contents(), "navigator.platform"));
+#endif
+}
+
 }  // namespace policy
diff --git a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc b/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc
index e70f11f8..20f4380b 100644
--- a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc
+++ b/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc
@@ -36,6 +36,7 @@
 #include "chrome/browser/ui/page_action/page_action_icon_type.h"
 #include "chrome/browser/webauthn/authenticator_request_dialog_model.h"
 #include "chrome/browser/webauthn/cablev2_devices.h"
+#include "chrome/browser/webauthn/local_credential_management.h"
 #include "chrome/browser/webauthn/webauthn_pref_names.h"
 #include "chrome/browser/webauthn/webauthn_switches.h"
 #include "chrome/common/chrome_switches.h"
@@ -488,6 +489,7 @@
     user_prefs::PrefRegistrySyncable* registry) {
 #if BUILDFLAG(IS_WIN)
   registry->RegisterBooleanPref(kWebAuthnLastOperationWasNativeAPI, false);
+  LocalCredentialManagement::RegisterProfilePrefs(registry);
 #endif
 #if BUILDFLAG(IS_MAC)
   registry->RegisterStringPref(kWebAuthnTouchIdMetadataSecretPrefName,
diff --git a/chrome/browser/webauthn/local_credential_management_unittest.cc b/chrome/browser/webauthn/local_credential_management_unittest.cc
index 6e7a975..5543c9f 100644
--- a/chrome/browser/webauthn/local_credential_management_unittest.cc
+++ b/chrome/browser/webauthn/local_credential_management_unittest.cc
@@ -10,10 +10,12 @@
 #if BUILDFLAG(IS_WIN)
 
 #include "base/run_loop.h"
+#include "base/test/scoped_feature_list.h"
 #include "chrome/browser/webauthn/local_credential_management.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/prefs/pref_service.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
+#include "content/public/common/content_features.h"
 #include "content/public/test/browser_task_environment.h"
 #include "device/fido/test_callback_receiver.h"
 #include "device/fido/win/fake_webauthn_api.h"
@@ -28,11 +30,10 @@
 
 class LocalCredentialManagementTest : public testing::Test {
  protected:
-  void SetUp() override {
-    LocalCredentialManagement::RegisterProfilePrefs(
-        profile_.GetTestingPrefService()->registry());
-    api_.set_supports_silent_discovery(true);
-  }
+  LocalCredentialManagementTest()
+      : scoped_feature_list_(features::kWebAuthConditionalUI) {}
+
+  void SetUp() override { api_.set_supports_silent_discovery(true); }
 
   bool HasCredentials() {
     device::test::TestCallbackReceiver<bool> callback;
@@ -63,6 +64,7 @@
   TestingProfile profile_;
   device::FakeWinWebAuthnApi api_;
   LocalCredentialManagement local_cred_man_ = {&api_};
+  const base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 TEST_F(LocalCredentialManagementTest, NoSupport) {
diff --git a/chrome/browser/webauthn/local_credential_management_win.cc b/chrome/browser/webauthn/local_credential_management_win.cc
index 57c3865..9851f3d9 100644
--- a/chrome/browser/webauthn/local_credential_management_win.cc
+++ b/chrome/browser/webauthn/local_credential_management_win.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 
 #include "base/bind.h"
+#include "base/feature_list.h"
 #include "base/i18n/string_compare.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
@@ -18,6 +19,7 @@
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
 #include "components/user_prefs/user_prefs.h"
+#include "content/public/common/content_features.h"
 #include "device/fido/win/authenticator.h"
 #include "device/fido/win/webauthn_api.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
@@ -172,7 +174,8 @@
     base::OnceCallback<void(bool)> callback) {
   absl::optional<bool> result;
 
-  if (!api_->IsAvailable() || !api_->SupportsSilentDiscovery()) {
+  if (!api_->IsAvailable() || !api_->SupportsSilentDiscovery() ||
+      !base::FeatureList::IsEnabled(features::kWebAuthConditionalUI)) {
     result = false;
   } else if (profile->GetPrefs()->GetBoolean(kHasPlatformCredentialsPref)) {
     result = true;
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 481e60d..53e51099 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1659138473-38b692a07c6ce1a9e17725128ff5ea0b6878b671.profdata
+chrome-linux-main-1659322102-50c3900492b93fd0972f5fa98cb5e6e9db8c0453.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index a06cb03..abc6358 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1659138473-cc16a80f4ba8de55cf98b5d0f85d79799bf59297.profdata
+chrome-mac-arm-main-1659322102-4c477cf63904c1ecf770887fddea39e7d1971e63.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 8041ece..2bdf9de 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1659153757-7ebdf5bcf7cc89e6723a56a54d19838510cac59a.profdata
+chrome-mac-main-1659310518-4638827bcd92c9310fb5759ab030d0f3dc4fe6d2.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index b852cd8..319ba65e 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1659128176-7637cbce5b324d6da821e88d23e87130667082a8.profdata
+chrome-win32-main-1659365926-2002a751bbf30a269cfe2a2abec0b7e6948fb6b5.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 8c90204b..2036335 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1659138473-dbaa68631543e89de158ce4b4fa4f91274b41ced.profdata
+chrome-win64-main-1659365926-8f524bc257feeb34404a90254169f0409906c0ed.profdata
diff --git a/chrome/common/extensions/api/file_manager_private.idl b/chrome/common/extensions/api/file_manager_private.idl
index d618f0e..2f8292e 100644
--- a/chrome/common/extensions/api/file_manager_private.idl
+++ b/chrome/common/extensions/api/file_manager_private.idl
@@ -1401,6 +1401,11 @@
       [instanceOf=Entry] object[] entries,
       GetDlpMetadataCallback callback);
 
+  // Shows a modal containing Data Leak Prevention (DLP) Restriction Details.
+  // |sourceUrl| Source URL of the Entry for which the details should be shown.
+  static void showDlpRestrictionDetails(
+      DOMString sourceUrl);
+
   // Starts to copy an entry. If the source is a directory, the copy is done
   // recursively.
   // |entry| Entry of the source entry to be copied.
diff --git a/chrome/test/data/android/upload_download_utils_test.py b/chrome/test/data/android/upload_download_utils_test.py
index 2841d5b6..d8971bd 100755
--- a/chrome/test/data/android/upload_download_utils_test.py
+++ b/chrome/test/data/android/upload_download_utils_test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env vpython
+#!/usr/bin/env vpython3
 # Copyright 2020 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
@@ -174,4 +174,3 @@
 
 if __name__ == '__main__':
   unittest.main(verbosity=2)
-
diff --git a/chrome/test/data/extensions/api_test/file_browser/dlp_metadata/test.js b/chrome/test/data/extensions/api_test/file_browser/dlp_metadata/test.js
index 0f8cab46..7f6e784 100644
--- a/chrome/test/data/extensions/api_test/file_browser/dlp_metadata/test.js
+++ b/chrome/test/data/extensions/api_test/file_browser/dlp_metadata/test.js
@@ -66,40 +66,88 @@
   return Promise.all(paths.map(path => getFileEntry(volumeType, path)));
 }
 
-chrome.test.runTests([
-  async function getDlpMetadata() {
-    const testEntries = await getFileEntries(
-        'testing',
-        ['blocked_file.txt', 'unrestricted_file.txt', 'untracked_file.txt']);
-    chrome.test.assertEq(3, testEntries.length);
-    chrome.fileManagerPrivate.getDlpMetadata(
-        testEntries, chrome.test.callbackPass(dlpMetadata => {
-          chrome.test.assertEq(
-              [
-                {isDlpRestricted: true, sourceUrl: 'https://example1.com'},
-                {isDlpRestricted: false, sourceUrl: 'https://example2.com'},
-                {isDlpRestricted: false, sourceUrl: ''}
-              ],
-              dlpMetadata);
-        }))
-  },
-  async function getDlpMetadata_Error() {
-    // Get the file.
-    const [file] = await getFileEntries('testing', ['blocked_file.txt']);
-    // Delete the file. Even though 'blocked_file.txt' is restricted by DLP,
-    // once it doesn't exist anymore an empty DlpMetadata object should be
-    // returned.
-    await new Promise((resolve, reject) => file.remove(resolve, reject));
-    chrome.fileManagerPrivate.getDlpMetadata(
-        [file], chrome.test.callbackPass(dlpMetadata => {
-          chrome.test.assertEq(
-              [{isDlpRestricted: false, sourceUrl: ''}], dlpMetadata);
-        }))
-  },
-  async function getDlpMetadata_Empty() {
-    chrome.fileManagerPrivate.getDlpMetadata(
-        [], chrome.test.callbackPass(dlpMetadata => {
-          chrome.test.assertEq(0, dlpMetadata.length);
-        }))
+chrome.test.getConfig(config => {
+  const mode = config.customArg;
+  if (!mode) {
+    chrome.test.fail('No mode provided.');
+    return;
   }
-]);
+
+  switch (mode) {
+    case 'disabled':
+      chrome.test.runTests([
+        async function getDlpMetadata_Disabled() {
+          const [file] = await getFileEntries('testing', ['blocked_file.txt']);
+          // Since the DLP feature is disabled, an empty list should be
+          // returned.
+          await new Promise((resolve, reject) => file.remove(resolve, reject));
+          chrome.fileManagerPrivate.getDlpMetadata(
+              [file], chrome.test.callbackPass(dlpMetadata => {
+                chrome.test.assertEq([], dlpMetadata);
+              }))
+        },
+        async function showDlpRestrictionDetails() {
+          chrome.fileManagerPrivate.showDlpRestrictionDetails(
+              'https://example1.com');
+          chrome.test.succeed();
+        }
+      ]);
+      break;
+    case 'error':
+      chrome.test.runTests([
+        async function getDlpMetadata_FileDeleted() {
+          // Get the file.
+          const [file] = await getFileEntries('testing', ['blocked_file.txt']);
+          // Delete the file. Even though 'blocked_file.txt' is restricted by
+          // DLP, once it doesn't exist anymore an empty DlpMetadata object
+          // should be returned.
+          await new Promise((resolve, reject) => file.remove(resolve, reject));
+          chrome.fileManagerPrivate.getDlpMetadata(
+              [file], chrome.test.callbackPass(dlpMetadata => {
+                chrome.test.assertEq(
+                    [{isDlpRestricted: false, sourceUrl: ''}], dlpMetadata);
+              }))
+        },
+        async function getDlpMetadata_EmptyList() {
+          chrome.fileManagerPrivate.getDlpMetadata(
+              [], chrome.test.callbackPass(dlpMetadata => {
+                chrome.test.assertEq(0, dlpMetadata.length);
+              }))
+        }
+      ]);
+      break;
+    case 'default':
+      chrome.test.runTests([
+        async function getDlpMetadata() {
+          const testEntries = await getFileEntries('testing', [
+            'blocked_file.txt', 'unrestricted_file.txt', 'untracked_file.txt'
+          ]);
+          chrome.test.assertEq(3, testEntries.length);
+          chrome.fileManagerPrivate.getDlpMetadata(
+              testEntries, chrome.test.callbackPass(dlpMetadata => {
+                chrome.test.assertEq(
+                    [
+                      {
+                        isDlpRestricted: true,
+                        sourceUrl: 'https://example1.com'
+                      },
+                      {
+                        isDlpRestricted: false,
+                        sourceUrl: 'https://example2.com'
+                      },
+                      {isDlpRestricted: false, sourceUrl: ''}
+                    ],
+                    dlpMetadata);
+              }))
+        },
+        async function showDlpRestrictionDetails() {
+          chrome.fileManagerPrivate.showDlpRestrictionDetails(
+              'https://example1.com');
+          chrome.test.succeed();
+        }
+      ]);
+      break;
+    default:
+      chrome.test.notifyFail(`Unrecognized mode ${mode} found.`);
+  }
+});
diff --git a/chrome/test/data/extensions/api_test/file_browser/dlp_metadata_disabled/manifest.json b/chrome/test/data/extensions/api_test/file_browser/dlp_metadata_disabled/manifest.json
deleted file mode 100644
index cefe40d..0000000
--- a/chrome/test/data/extensions/api_test/file_browser/dlp_metadata_disabled/manifest.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-    "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtDfX9dHNh948bt00YhZBm3P6E5QLaOt+v8kXVtibQfiPtOD2FTScB/f0wX/EQWVO7BkaSOsRkTPcPIgocyMPYr2FLgqGLFlYT9nQpKJZUFNF5oJ5rG6Nv7ppf4zEB3j6da1IBRTz2yOZ+6O1TMZxol/V62/QcqrJeggsHTEPGLdr9Ua4b1Ka0xKJnJngZljsbw93FI1o+P9dAh5BS6wTPiZI/vmJVjvMTkSTnaZ3n9Go2t7A0XLcSxLcVyuLAd2mAvSN0mIviOukdM66wr7llif71nKuUt+4qvlr/r9HfwzN6pA4jkwhtS1UD+3CmB+wsHwsnohNcuu4FIQ6rgq/7QIDAQAB",
-    "name": "chrome.fileManagerPrivate tests",
-    "version": "0.1",
-    "manifest_version": 2,
-    "description": "Tests of chrome.fileManagerPrivate getDlpMetadata when DLP is disabled",
-    "app": {
-      "background": {
-        "scripts": [
-          "test.js"
-        ]
-      }
-    },
-    "permissions": [
-      "fileManagerPrivate",
-      {
-        "fileSystem": ["requestFileSystem", "write"]
-      },
-      "unlimitedStorage"
-    ]
-  }
diff --git a/chrome/test/data/extensions/api_test/file_browser/dlp_metadata_disabled/test.js b/chrome/test/data/extensions/api_test/file_browser/dlp_metadata_disabled/test.js
deleted file mode 100644
index 293cf71..0000000
--- a/chrome/test/data/extensions/api_test/file_browser/dlp_metadata_disabled/test.js
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * Gets the metadata of a volume having a specified type.
- * @param {string} volumeType volume type for entry.
- * @return {!Promise<chrome.fileManagerPrivate.VolumeMetadata>} Volume metadata.
- */
-async function getVolumeMetadataByType(volumeType) {
-  return new Promise(
-      (resolve,
-       reject) => {chrome.fileManagerPrivate.getVolumeMetadataList(list => {
-        if (chrome.runtime.lastError) {
-          reject(chrome.runtime.lastError.message);
-          return;
-        }
-        resolve(list.find(v => v.volumeType === volumeType));
-      })});
-}
-
-/**
- * Gets the file system of specific volume type.
- * @param {string} volumeType volume type.
- * @return {!Promise<chrome.fileManagerPrivate.FileSystem>} Volume metadata.
- */
-async function getFileSystem(volumeType) {
-  const volume = await getVolumeMetadataByType(volumeType);
-  return new Promise((resolve, reject) => {
-    chrome.fileSystem.requestFileSystem(
-        {volumeId: volume.volumeId, writable: true}, fs => {
-          if (chrome.runtime.lastError) {
-            reject(chrome.runtime.lastError.message);
-            return;
-          }
-          resolve(fs);
-        });
-  });
-}
-
-/**
- * Gets an external file entry from a specified path.
- * @param {string} volumeType volume type for entry.
- * @param {string} path path of entry.
- * @return {!Promise<Entry>} specified entry.
- */
-async function getFileEntry(volumeType, path) {
-  const fs = await getFileSystem(volumeType);
-  return new Promise(resolve => {
-    fs.root.getFile(path, {}, entry => {
-      chrome.fileManagerPrivate.resolveIsolatedEntries(
-          [entry], externalEntries => {
-            resolve(externalEntries[0]);
-          });
-    });
-  });
-}
-
-/**
- * Wrapper around getFileEntry() that resolves multiple paths.
- * @param {string}  volumeType
- * @param {Array<string>} paths
- * @return {!Promise<Array<Entry>>}
- */
-async function getFileEntries(volumeType, paths) {
-  return Promise.all(paths.map(path => getFileEntry(volumeType, path)));
-}
-
-chrome.test.runTests([
-  async function getDlpMetadata_Disabled() {
-    const [file] = await getFileEntries('testing', ['blocked_file.txt']);
-    // Since the DLP feature is disabled, an empty list should be returned.
-    await new Promise((resolve, reject) => file.remove(resolve, reject));
-    chrome.fileManagerPrivate.getDlpMetadata(
-        [file], chrome.test.callbackPass(dlpMetadata => {
-          chrome.test.assertEq([], dlpMetadata);
-        }))
-  },
-]);
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn
index 6ca4cbf..9f533df 100644
--- a/chrome/test/data/webui/settings/BUILD.gn
+++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -164,13 +164,17 @@
   ]
 }
 
-if (is_win && is_chrome_branded) {
-  non_preprocessed_files += [
-    "chrome_cleanup_page_test.ts",
-    "incompatible_applications_page_test.ts",
-    "safety_check_chrome_cleaner_test.ts",
-    "test_chrome_cleanup_proxy.ts",
-  ]
+if (is_win) {
+  non_preprocessed_files += [ "passkeys_subpage_test.ts" ]
+
+  if (is_chrome_branded) {
+    non_preprocessed_files += [
+      "chrome_cleanup_page_test.ts",
+      "incompatible_applications_page_test.ts",
+      "safety_check_chrome_cleaner_test.ts",
+      "test_chrome_cleanup_proxy.ts",
+    ]
+  }
 }
 
 preprocessed_folder = "$target_gen_dir/preprocessed"
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js
index 8160e9b..3fc8c84 100644
--- a/chrome/test/data/webui/settings/cr_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -825,6 +825,11 @@
 ].forEach(test => registerTest(...test));
 GEN('#endif');
 
+GEN('#if BUILDFLAG(IS_WIN)');
+[['PasskeysSubpage', 'passkeys_subpage_test.js'],
+].forEach(test => registerTest(...test));
+GEN('#endif');
+
 GEN('#if BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)');
 [['ChromeCleanupPage', 'chrome_cleanup_page_test.js'],
  ['IncompatibleApplicationsPage', 'incompatible_applications_page_test.js'],
diff --git a/chrome/test/data/webui/settings/passkeys_subpage_test.ts b/chrome/test/data/webui/settings/passkeys_subpage_test.ts
new file mode 100644
index 0000000..a7660d7
--- /dev/null
+++ b/chrome/test/data/webui/settings/passkeys_subpage_test.ts
@@ -0,0 +1,172 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview Tests for the passkeys subpage.
+ */
+
+import {Passkey, PasskeysBrowserProxy, PasskeysBrowserProxyImpl, SettingsPasskeysSubpageElement} from 'chrome://settings/lazy_load.js';
+import {assertDeepEquals, assertEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
+import {TestBrowserProxy} from 'chrome://webui-test/test_browser_proxy.js';
+import {flushTasks} from 'chrome://webui-test/test_util.js';
+
+class TestPasskeysBrowserProxy extends TestBrowserProxy implements
+    PasskeysBrowserProxy {
+  constructor() {
+    super([
+      'enumerate',
+      'delete',
+    ]);
+  }
+
+  // nextPasskeys_ is the next result to return from a call to `enumerate`
+  // or `delete`.
+  private nextPasskeys_: Passkey[]|null = null;
+
+  setNextPasskeys(passkeys: Passkey[]|null) {
+    this.nextPasskeys_ = passkeys;
+    this.resetResolver('enumerate');
+    this.resetResolver('delete');
+  }
+
+  hasPasskeys(): Promise<boolean> {
+    return Promise.resolve(true);
+  }
+
+  enumerate(): Promise<Passkey[]|null> {
+    this.methodCalled('enumerate');
+    return this.consumeNext_();
+  }
+
+  delete(credentialId: string): Promise<Passkey[]|null> {
+    this.methodCalled('delete', credentialId);
+    return this.consumeNext_();
+  }
+
+  private consumeNext_(): Promise<Passkey[]|null> {
+    const result = this.nextPasskeys_;
+    this.nextPasskeys_ = null;
+    return Promise.resolve(result);
+  }
+}
+
+/**
+ * Get the usernames of the passkeys currently displayed.
+ */
+function getUsernamesFromList(list: HTMLElement): string[] {
+  const inputs = Array.from(list.shadowRoot!.querySelectorAll<HTMLElement>(
+      '.list-item .username-column'));
+  return inputs.slice(1).map(input => input.textContent!.trim());
+}
+
+/**
+ * Click the `num`th drop-down icon in the list of passkeys.
+ */
+function clickDots(page: HTMLElement, num: number) {
+  const icon = page.shadowRoot!.querySelectorAll<HTMLElement>(
+      '.list-item .icon-more-vert')[num];
+  assertTrue(icon !== undefined);
+  icon.click();
+}
+
+/**
+ * Click the button named `name` in the drop-down.
+ */
+function clickButton(page: HTMLElement, name: string) {
+  const menu = page.shadowRoot!.querySelector<HTMLElement>('#menu')!;
+  const button = menu.querySelector<HTMLElement>('#' + name);
+
+  assertTrue(button !== null, name + ' button missing');
+  if (button === null) {
+    return;
+  }
+
+  button.click();
+}
+
+suite('PasskeysSubpage', function() {
+  let browserProxy: TestPasskeysBrowserProxy;
+  let page: SettingsPasskeysSubpageElement;
+
+  setup(async function() {
+    browserProxy = new TestPasskeysBrowserProxy();
+    PasskeysBrowserProxyImpl.setInstance(browserProxy);
+    document.body.innerHTML = '';
+    page = document.createElement('settings-passkeys-subpage');
+  });
+
+  test('NoSupport', async function() {
+    browserProxy.setNextPasskeys(null);
+    document.body.appendChild(page);
+    await flushTasks();
+    assertEquals(browserProxy.getCallCount('enumerate'), 1);
+
+    const shown = getUsernamesFromList(page);
+    assertEquals(shown.length, 0, 'No passkeys shown');
+
+    assertTrue(
+        page.shadowRoot!.querySelector<HTMLElement>('#error') !== null,
+        'Error message shown');
+  });
+
+  test('Credentials', async function() {
+    const passkeys = [
+      {
+        credentialId: '1',
+        relyingPartyId: 'rpid1',
+        userName: 'user1',
+        userDisplayName: 'displayName1',
+      },
+      {
+        credentialId: '2',
+        relyingPartyId: 'rpid2',
+        userName: 'user2',
+        userDisplayName: 'displayName2',
+      },
+    ];
+    browserProxy.setNextPasskeys(passkeys);
+    document.body.appendChild(page);
+    await flushTasks();
+    assertEquals(browserProxy.getCallCount('enumerate'), 1);
+
+    assertTrue(
+        page.shadowRoot!.querySelector<HTMLElement>('#error') === null,
+        'Error message not shown');
+
+    assertDeepEquals(
+        getUsernamesFromList(page), passkeys.map(cred => cred.userName));
+  });
+
+  test('Delete', async function() {
+    const passkeys: [Passkey] = [
+      {
+        credentialId: '1',
+        relyingPartyId: 'rpid_x',
+        userName: 'user',
+        userDisplayName: 'displayName',
+      },
+    ];
+    browserProxy.setNextPasskeys(passkeys);
+    document.body.appendChild(page);
+    await flushTasks();
+    assertEquals(browserProxy.getCallCount('enumerate'), 1);
+
+    assertTrue(
+        page.shadowRoot!.querySelector<HTMLElement>('#error') === null,
+        'Error message not shown');
+    assertDeepEquals(getUsernamesFromList(page), [passkeys[0].userName]);
+
+    clickDots(page, 0);
+
+    browserProxy.whenCalled('delete').then((name: string) => {
+      assertEquals(name, passkeys[0].credentialId);
+    });
+    browserProxy.setNextPasskeys([]);
+    clickButton(page, 'delete');
+    await flushTasks();
+    assertEquals(browserProxy.getCallCount('delete'), 1);
+
+    assertDeepEquals(getUsernamesFromList(page), []);
+  });
+});
diff --git a/chromeos/ash/components/network/cellular_esim_profile_handler_impl_unittest.cc b/chromeos/ash/components/network/cellular_esim_profile_handler_impl_unittest.cc
index b7df25d..81cbcb5 100644
--- a/chromeos/ash/components/network/cellular_esim_profile_handler_impl_unittest.cc
+++ b/chromeos/ash/components/network/cellular_esim_profile_handler_impl_unittest.cc
@@ -102,10 +102,10 @@
     base::RunLoop().RunUntilIdle();
 
     if (also_add_to_prefs) {
-      base::Value euicc_paths_from_prefs = GetEuiccListFromPrefs();
+      base::Value::List euicc_paths_from_prefs = GetEuiccListFromPrefs();
       euicc_paths_from_prefs.Append(euicc_path);
       device_prefs_.Set(prefs::kESimRefreshedEuiccs,
-                        std::move(euicc_paths_from_prefs));
+                        base::Value(std::move(euicc_paths_from_prefs)));
     }
   }
 
@@ -199,8 +199,8 @@
     return helper_.hermes_euicc_test()->GetLastRefreshProfilesRestoreSlotArg();
   }
 
-  base::Value GetEuiccListFromPrefs() {
-    return device_prefs_.GetList(prefs::kESimRefreshedEuiccs)->Clone();
+  base::Value::List GetEuiccListFromPrefs() {
+    return device_prefs_.GetValueList(prefs::kESimRefreshedEuiccs).Clone();
   }
 
   void SetPSimSlotInfo(const std::string& iccid) {
@@ -483,25 +483,22 @@
   AddEuicc(/*euicc_num=*/1, /*also_add_to_prefs=*/false);
 
   Init();
-  base::Value euicc_paths_from_prefs = GetEuiccListFromPrefs();
-  EXPECT_TRUE(euicc_paths_from_prefs.is_list());
-  EXPECT_TRUE(euicc_paths_from_prefs.GetListDeprecated().empty());
+  base::Value::List euicc_paths_from_prefs = GetEuiccListFromPrefs();
+  EXPECT_TRUE(euicc_paths_from_prefs.empty());
 
   // Set device prefs; a new auto-refresh should have started but not yet
   // completed.
   SetDevicePrefs();
   euicc_paths_from_prefs = GetEuiccListFromPrefs();
-  EXPECT_TRUE(euicc_paths_from_prefs.is_list());
-  EXPECT_TRUE(euicc_paths_from_prefs.GetListDeprecated().empty());
+  EXPECT_TRUE(euicc_paths_from_prefs.empty());
   EXPECT_FALSE(HasAutoRefreshedEuicc(/*euicc_num=*/1));
 
   FastForwardProfileRefreshDelay();
   base::RunLoop().RunUntilIdle();
   euicc_paths_from_prefs = GetEuiccListFromPrefs();
-  EXPECT_TRUE(euicc_paths_from_prefs.is_list());
-  EXPECT_EQ(1u, euicc_paths_from_prefs.GetListDeprecated().size());
+  EXPECT_EQ(1u, euicc_paths_from_prefs.size());
   EXPECT_EQ(CreateTestEuiccPath(/*euicc_num=*/1),
-            euicc_paths_from_prefs.GetListDeprecated()[0].GetString());
+            euicc_paths_from_prefs[0].GetString());
   EXPECT_TRUE(HasAutoRefreshedEuicc(/*euicc_num=*/1));
   EXPECT_TRUE(GetLastRefreshProfilesRestoreSlotArg());
 }
@@ -544,18 +541,16 @@
   SetDevicePrefs();
 
   // Verify that no EUICCs exist in pref.
-  base::Value euicc_paths_from_prefs = GetEuiccListFromPrefs();
-  EXPECT_TRUE(euicc_paths_from_prefs.is_list());
-  EXPECT_TRUE(euicc_paths_from_prefs.GetListDeprecated().empty());
+  base::Value::List euicc_paths_from_prefs = GetEuiccListFromPrefs();
+  EXPECT_TRUE(euicc_paths_from_prefs.empty());
 
   // Verify that EUICCs are refreshed after the cellular device is added.
   AddCellularDevice();
   FastForwardProfileRefreshDelay();
   euicc_paths_from_prefs = GetEuiccListFromPrefs();
-  EXPECT_TRUE(euicc_paths_from_prefs.is_list());
-  EXPECT_EQ(1u, euicc_paths_from_prefs.GetListDeprecated().size());
+  EXPECT_EQ(1u, euicc_paths_from_prefs.size());
   EXPECT_EQ(CreateTestEuiccPath(/*euicc_num=*/1),
-            euicc_paths_from_prefs.GetListDeprecated()[0].GetString());
+            euicc_paths_from_prefs[0].GetString());
 }
 
 TEST_F(CellularESimProfileHandlerImplTest, DisableActiveESimProfile) {
diff --git a/chromeos/ash/components/network/network_device_handler_impl.cc b/chromeos/ash/components/network/network_device_handler_impl.cc
index bb5833f..dd9dde5 100644
--- a/chromeos/ash/components/network/network_device_handler_impl.cc
+++ b/chromeos/ash/components/network/network_device_handler_impl.cc
@@ -112,7 +112,7 @@
     const std::string& shill_error_name,
     const std::string& shill_error_message) {
   CellularMetricsLogger::RecordSimPinOperationResult(
-      pin_operation, allow_cellular_sim_lock, shill_error_message);
+      pin_operation, allow_cellular_sim_lock, shill_error_name);
   HandleShillCallFailure(device_path, std::move(error_callback),
                          shill_error_name, shill_error_message);
 }
diff --git a/chromeos/ash/components/network/network_device_handler_unittest.cc b/chromeos/ash/components/network/network_device_handler_unittest.cc
index 08a6b51..00d97986 100644
--- a/chromeos/ash/components/network/network_device_handler_unittest.cc
+++ b/chromeos/ash/components/network/network_device_handler_unittest.cc
@@ -461,7 +461,7 @@
       CellularMetricsLogger::kSimPinRequireLockSuccessHistogram, 2);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kSimPinRequireLockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 1);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 1);
 }
 
 TEST_F(NetworkDeviceHandlerTest, EnterPinOnManagedDevice) {
@@ -496,13 +496,13 @@
       CellularMetricsLogger::kManagedSimPinUnlockSuccessHistogram, 2);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kManagedSimPinUnlockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 1);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 1);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kUnrestrictedSimPinUnlockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 1);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 1);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kRestrictedSimPinUnlockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 0);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 0);
 
   network_device_handler_->SetAllowCellularSimLock(
       /*allow_cellular_sim_lock=*/false);
@@ -519,7 +519,7 @@
   base::RunLoop().RunUntilIdle();
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kRestrictedSimPinUnlockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 1);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 1);
 }
 
 TEST_F(NetworkDeviceHandlerTest, EnterPinOnUnmanagedDevice) {
@@ -553,13 +553,13 @@
       CellularMetricsLogger::kUnmanagedSimPinUnlockSuccessHistogram, 2);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kUnmanagedSimPinUnlockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 1);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 1);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kUnrestrictedSimPinUnlockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 0);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 0);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kRestrictedSimPinUnlockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 0);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 0);
 }
 
 TEST_F(NetworkDeviceHandlerTest, UnblockPinOnManagedDevice) {
@@ -596,13 +596,13 @@
       CellularMetricsLogger::kManagedSimPinUnblockSuccessHistogram, 2);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kManagedSimPinUnblockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 1);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 1);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kUnrestrictedSimPinUnblockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 1);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 1);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kRestrictedSimPinUnblockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 0);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 0);
 
   network_device_handler_->SetAllowCellularSimLock(
       /*allow_cellular_sim_lock=*/false);
@@ -618,7 +618,7 @@
   base::RunLoop().RunUntilIdle();
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kRestrictedSimPinUnblockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 1);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 1);
 }
 
 TEST_F(NetworkDeviceHandlerTest, UnblockPinOnUnmanagedDevice) {
@@ -655,13 +655,13 @@
       CellularMetricsLogger::kUnmanagedSimPinUnblockSuccessHistogram, 2);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kUnmanagedSimPinUnblockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 1);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 1);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kUnrestrictedSimPinUnblockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 0);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 0);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kRestrictedSimPinUnblockSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 0);
+      CellularMetricsLogger::SimPinOperationResult::kErrorDeviceMissing, 0);
 
   histogram_tester.ExpectTotalCount(
       CellularMetricsLogger::kSimPinRemoveLockSuccessHistogram, 0);
@@ -707,7 +707,7 @@
       CellularMetricsLogger::kSimPinChangeSuccessHistogram, 2);
   histogram_tester.ExpectBucketCount(
       CellularMetricsLogger::kSimPinChangeSuccessHistogram,
-      CellularMetricsLogger::SimPinOperationResult::kErrorUnknown, 1);
+      CellularMetricsLogger::SimPinOperationResult::kErrorIncorrectPin, 1);
 }
 
 TEST_F(NetworkDeviceHandlerTest, RequirePinBlockedByPolicy) {
diff --git a/chromeos/chromeos_strings.grd b/chromeos/chromeos_strings.grd
index 53a6fff..04a4ea4 100644
--- a/chromeos/chromeos_strings.grd
+++ b/chromeos/chromeos_strings.grd
@@ -2777,22 +2777,22 @@
         Confirm
       </message>
       <!-- Landing page -->
-      <message name="IDS_SHIMLESS_RMA_LANDING_PAGE_TITLE" desc="Title for the landing page at the start of RMA.">
+      <message name="IDS_SHIMLESS_RMA_LANDING_PAGE_TITLE" translateable="false" desc="Title for the landing page at the start of RMA.">
         <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> repair
       </message>
-      <message name="IDS_SHIMLESS_RMA_AUTHORIZED_TECH_ONLY_WARNING" desc="Warning that RMA is only for qualified technicians.">
+      <message name="IDS_SHIMLESS_RMA_AUTHORIZED_TECH_ONLY_WARNING" translateable="false" desc="Warning that RMA is only for qualified technicians.">
         This repair process is intended for a trained repair technician. Start only after replacing the malfunctioning components.
       </message>
-      <message name="IDS_SHIMLESS_RMA_VALIDATING_COMPONENTS" desc="Checking that device components are approved for this device.">
+      <message name="IDS_SHIMLESS_RMA_VALIDATING_COMPONENTS" translateable="false" desc="Checking that device components are approved for this device.">
         Validating components...
       </message>
-      <message name="IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_SUCCESS" desc="Successfully checked that device components are approved for this device.">
+      <message name="IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_SUCCESS" translateable="false" desc="Successfully checked that device components are approved for this device.">
         Components are installed correctly.
       </message>
       <message name="IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_FAIL" desc="Validation check found that device components are NOT approved for this device.">
         <ph name="LINK_BEGIN">&lt;a id="unqualifiedComponentsLink"&gt;</ph>Unqualified components<ph name="LINK_END">&lt;/a&gt;</ph> detected. If you choose to confirm this has been installed, please do so now.
       </message>
-      <message name="IDS_SHIMLESS_RMA_GET_STARTED_BUTTON_LABEL" desc="The label for the button to start the RMA process.">
+      <message name="IDS_SHIMLESS_RMA_GET_STARTED_BUTTON_LABEL" translateable="false" desc="The label for the button to start the RMA process.">
         Get started
       </message>
       <message name="IDS_SHIMLESS_RMA_UNQUALIFIED_COMPONENTS_TITLE" desc="The title for the dialog showing the list of components unqualfiied by ChromeOS.">
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_AUTHORIZED_TECH_ONLY_WARNING.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_AUTHORIZED_TECH_ONLY_WARNING.png.sha1
deleted file mode 100644
index 5bcc4e4..0000000
--- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_AUTHORIZED_TECH_ONLY_WARNING.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-828d7ef2cdc6f7bb1027f8bba09e45bb3201e3d4
\ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_GET_STARTED_BUTTON_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_GET_STARTED_BUTTON_LABEL.png.sha1
deleted file mode 100644
index 62ea8ef..0000000
--- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_GET_STARTED_BUTTON_LABEL.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0ce335465067a12070951a4af1eb75a14998f246
\ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LANDING_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LANDING_PAGE_TITLE.png.sha1
deleted file mode 100644
index 5bcc4e4..0000000
--- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LANDING_PAGE_TITLE.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-828d7ef2cdc6f7bb1027f8bba09e45bb3201e3d4
\ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_SUCCESS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_SUCCESS.png.sha1
deleted file mode 100644
index abcd099..0000000
--- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_SUCCESS.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8b14ac275fa39d5cfdc82d61f7120e3531026564
\ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_VALIDATING_COMPONENTS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_VALIDATING_COMPONENTS.png.sha1
deleted file mode 100644
index 5bcc4e4..0000000
--- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_VALIDATING_COMPONENTS.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-828d7ef2cdc6f7bb1027f8bba09e45bb3201e3d4
\ No newline at end of file
diff --git a/chromeos/components/onc/onc_signature.cc b/chromeos/components/onc/onc_signature.cc
index bab1907b..095135d 100644
--- a/chromeos/components/onc/onc_signature.cc
+++ b/chromeos/components/onc/onc_signature.cc
@@ -382,7 +382,8 @@
     {nullptr}};
 
 const OncFieldSignature global_network_configuration_fields[] = {
-    {::onc::global_network_config::kAllowCellularSimLock, &kBoolSignature},
+    {::onc::global_network_config::kAllowCellularSimLock, &kBoolSignature,
+     []() { return base::Value(true); }},
     {::onc::global_network_config::kAllowOnlyPolicyCellularNetworks,
      &kBoolSignature},
     {::onc::global_network_config::kAllowOnlyPolicyNetworksToAutoconnect,
diff --git a/chromeos/profiles/atom.afdo.newest.txt b/chromeos/profiles/atom.afdo.newest.txt
index e8d776b4..a99b4925 100644
--- a/chromeos/profiles/atom.afdo.newest.txt
+++ b/chromeos/profiles/atom.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-atom-106-5187.0-1658747184-benchmark-106.0.5204.0-r1-redacted.afdo.xz
+chromeos-chrome-amd64-atom-106-5187.0-1658747184-benchmark-106.0.5211.0-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/bigcore.afdo.newest.txt b/chromeos/profiles/bigcore.afdo.newest.txt
index 6190a783..17e357a 100644
--- a/chromeos/profiles/bigcore.afdo.newest.txt
+++ b/chromeos/profiles/bigcore.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-bigcore-106-5187.0-1658744016-benchmark-106.0.5204.0-r1-redacted.afdo.xz
+chromeos-chrome-amd64-bigcore-106-5187.0-1658744016-benchmark-106.0.5211.0-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt
index 6939d4a..e003250 100644
--- a/chromeos/profiles/orderfile.newest.txt
+++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@
-chromeos-chrome-orderfile-field-105-5187.0-1658746147-benchmark-105.0.5195.6-r1.orderfile.xz
+chromeos-chrome-orderfile-field-105-5187.0-1658746147-benchmark-105.0.5195.11-r1.orderfile.xz
diff --git a/chromeos/strings/chromeos_strings_af.xtb b/chromeos/strings/chromeos_strings_af.xtb
index a96f3e4d..34d28a12 100644
--- a/chromeos/strings/chromeos_strings_af.xtb
+++ b/chromeos/strings/chromeos_strings_af.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">HERLAAI</translation>
 <translation id="3009958530611748826">Kies 'n vouer om in te stoor</translation>
 <translation id="3017079585324758401">Agtergrond</translation>
+<translation id="302435934487327038">Installasie is afgehandel</translation>
 <translation id="3027578600144895987">Maak die kamera toe</translation>
 <translation id="3031560714565892478">Toestel is 'n videokamera.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
@@ -664,13 +665,13 @@
 <translation id="6618744767048954150">Werk tans</translation>
 <translation id="6620487321149975369">Druktake sal in geskiedenis verskyn tensy hulle handmatig verwyder word</translation>
 <translation id="6643016212128521049">Vee uit</translation>
+<translation id="6644568396961840069">Lêer kon nie gestoor word nie. Probeer om by ’n ander eksterne berging in te prop, of probeer later weer.</translation>
 <translation id="6647510110698214773">Enkripsie-algoritme</translation>
 <translation id="6650062777702288430">Kana-/alfanumeriese skakelaar</translation>
 <translation id="6657585470893396449">Wagwoord</translation>
 <translation id="6659594942844771486">Oortjie</translation>
 <translation id="6692996468359469499">Kry inligting wat met jou keuse verband hou</translation>
 <translation id="6704062477274546131">DNS-ontbinding</translation>
-<translation id="6721744718589119342">Ons sal dalk vir jou ’n e-pos stuur vir meer inligting of opdaterings</translation>
 <translation id="6723839937902243910">Intensiteit</translation>
 <translation id="6723847290197874913">Sleutelbordagterlig</translation>
 <translation id="672609503628871915">Sien wat nuut is</translation>
@@ -826,6 +827,7 @@
 <translation id="8217675307824400706">Verbind</translation>
 <translation id="8221728673725659466">Kalibrasie is klaar</translation>
 <translation id="8226628635270268143">Kies jou gunstelingfoto's en -albums</translation>
+<translation id="8227119283605456246">Heg lêer aan</translation>
 <translation id="8230672074305416752">Kon nie die versteknetwerkdeurgang pieng nie</translation>
 <translation id="8246209727385807362">Onbekende diensverskaffer</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb
index e2c8f7b..2a58075 100644
--- a/chromeos/strings/chromeos_strings_am.xtb
+++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">ትር</translation>
 <translation id="6692996468359469499">ከእርስዎ ምርጫ ጋር የተገናኘ መረጃ ያግኙ</translation>
 <translation id="6704062477274546131">የዲኤንኤስ መፍትሔ</translation>
-<translation id="6721744718589119342">ለተጨማሪ መረጃ ወይም ዝማኔዎች በኢሜይል ልንልክልዎ እንችላለን</translation>
 <translation id="6723839937902243910">ኃይል</translation>
 <translation id="6723847290197874913">የቁልፍ ሰሌዳ የጀርባ ብርሃን</translation>
 <translation id="672609503628871915">ምን አዲስ ነገር እንዳለ ይመልከቱ</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">ይገናኙ</translation>
 <translation id="8221728673725659466">መቃኘት ተጠናቅቋል</translation>
 <translation id="8226628635270268143">የእርስዎን ተወዳጅ ፎቶዎች እና አልበሞች ይምረጡ</translation>
+<translation id="8227119283605456246">ፋይል አያይዝ</translation>
 <translation id="8230672074305416752">ነባሪ የሆነውን የአውታረ መረብ አግባቢ ፍኖት ፒንግ ማድረግ አልተሳካም</translation>
 <translation id="8246209727385807362">የማይታወቅ አገልግሎት አቅራቢ</translation>
 <translation id="827422111966801947">ወይን ጠጅ</translation>
diff --git a/chromeos/strings/chromeos_strings_ar.xtb b/chromeos/strings/chromeos_strings_ar.xtb
index 7ef7ddb..1ce3f1ba 100644
--- a/chromeos/strings/chromeos_strings_ar.xtb
+++ b/chromeos/strings/chromeos_strings_ar.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">علامة تبويب</translation>
 <translation id="6692996468359469499">الحصول على معلومات ذات صلة باختيارك</translation>
 <translation id="6704062477274546131">دقة نظام أسماء النطاقات</translation>
-<translation id="6721744718589119342">قد نرسل إليك رسالة إلكترونية للحصول على مزيد من المعلومات أو لإطلاعك على آخر التعديلات.</translation>
 <translation id="6723839937902243910">الطاقة</translation>
 <translation id="6723847290197874913">الإضاءة الخلفية للوحة المفاتيح</translation>
 <translation id="672609503628871915">تعرف على الجديد</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">الاتصال بالإنترنت</translation>
 <translation id="8221728673725659466">اكتملت المعايرة</translation>
 <translation id="8226628635270268143">اختيار صورك وألبوماتك المفضَّلة</translation>
+<translation id="8227119283605456246">إرفاق ملف</translation>
 <translation id="8230672074305416752">تعذَّر فحص اتصال بوابة الشبكة التلقائية.</translation>
 <translation id="8246209727385807362">مشغل شبكة جوّال غير معروف</translation>
 <translation id="827422111966801947">نيلي</translation>
diff --git a/chromeos/strings/chromeos_strings_as.xtb b/chromeos/strings/chromeos_strings_as.xtb
index 391f17b..afff424 100644
--- a/chromeos/strings/chromeos_strings_as.xtb
+++ b/chromeos/strings/chromeos_strings_as.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">ব্ৰাউজাৰ টেব</translation>
 <translation id="6692996468359469499">আপুনি বাছনি সম্পর্কীয় তথ্য পাওক</translation>
 <translation id="6704062477274546131">DNS ৰিজ’লিউশ্বন</translation>
-<translation id="6721744718589119342">অধিক তথ্য আৰু আপডে’টৰ বাবে আমি আপোনালৈ ইমেইল পঠিয়াব পাৰোঁ</translation>
 <translation id="6723839937902243910">পাৱাৰ</translation>
 <translation id="6723847290197874913">কীব’ৰ্ডৰ বেকলাইট</translation>
 <translation id="672609503628871915">নতুন কি আছে চাওক</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">সংযুক্ত হওক</translation>
 <translation id="8221728673725659466">কেলিব্ৰেশ্বন সম্পূৰ্ণ হ’ল</translation>
 <translation id="8226628635270268143">আপোনাৰ প্ৰিয় ফট’ আৰু এলবামসমূহ বাছনি কৰক</translation>
+<translation id="8227119283605456246">ফাইল সংলগ্ন কৰক</translation>
 <translation id="8230672074305416752">ডিফ'ল্ট নেটৱৰ্কৰ গে’টৱে’টো পিং কৰাত বিফল হ'ল</translation>
 <translation id="8246209727385807362">অজ্ঞাত বাহক</translation>
 <translation id="827422111966801947">ইণ্ডিগ'</translation>
diff --git a/chromeos/strings/chromeos_strings_az.xtb b/chromeos/strings/chromeos_strings_az.xtb
index 419d0ef1..131bced 100644
--- a/chromeos/strings/chromeos_strings_az.xtb
+++ b/chromeos/strings/chromeos_strings_az.xtb
@@ -669,7 +669,6 @@
 <translation id="6659594942844771486">Səkmə</translation>
 <translation id="6692996468359469499">Seçiminizlə bağlı məlumat əldə edin</translation>
 <translation id="6704062477274546131">DNS Həlli</translation>
-<translation id="6721744718589119342">Ətraflı məlumat və ya güncəlləmələr üçün sizə e-məktub göndərə bilərik</translation>
 <translation id="6723839937902243910">Enerji</translation>
 <translation id="6723847290197874913">Klaviaturanın arxa işığı</translation>
 <translation id="672609503628871915">Yeniliklərə baxın</translation>
@@ -825,6 +824,7 @@
 <translation id="8217675307824400706">Qoşulun</translation>
 <translation id="8221728673725659466">Tənzimləmə tamamdır</translation>
 <translation id="8226628635270268143">Sevimli fotolarınızı və albomlarınızı seçin</translation>
+<translation id="8227119283605456246">Fayl qoşun</translation>
 <translation id="8230672074305416752">Defolt şəbəkə girişini yoxlamaq alınmadı</translation>
 <translation id="8246209727385807362">Naməlum operator</translation>
 <translation id="827422111966801947">İndiqo</translation>
diff --git a/chromeos/strings/chromeos_strings_be.xtb b/chromeos/strings/chromeos_strings_be.xtb
index 1f3e018..530376f 100644
--- a/chromeos/strings/chromeos_strings_be.xtb
+++ b/chromeos/strings/chromeos_strings_be.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Укладка</translation>
 <translation id="6692996468359469499">Атрыманне інфармацыі, звязанай з вылучаным вамі</translation>
 <translation id="6704062477274546131">Супастаўленне імён DNS</translation>
-<translation id="6721744718589119342">Мы можам выкарыстоўваць электронную пошту, каб запытваць у вас дадатковыя звесткі і паведамляць пра абнаўленні</translation>
 <translation id="6723839937902243910">Кнопка сілкавання</translation>
 <translation id="6723847290197874913">Падсветка клавіятуры</translation>
 <translation id="672609503628871915">Пазнаёмцеся з навінкамі</translation>
@@ -801,7 +800,7 @@
 <translation id="7978412674231730200">Закрыты ключ</translation>
 <translation id="7982789257301363584">Сетка</translation>
 <translation id="7994702968232966508">Метад EAP</translation>
-<translation id="8018928621986160031">Захавана ў папцы "<ph name="FILE_LOCATION" />"</translation>
+<translation id="8018928621986160031">Захавана ў папцы <ph name="FILE_LOCATION" /></translation>
 <translation id="802154636333426148">Збой спампоўкі</translation>
 <translation id="8031884997696620457">HSPAPlus</translation>
 <translation id="80398733265834479">Уключыць рэжым аўтакарэкцыі колераў</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Устанавіце падключэнне</translation>
 <translation id="8221728673725659466">Калібраванне завершана</translation>
 <translation id="8226628635270268143">Выберыце любімыя фота і альбомы</translation>
+<translation id="8227119283605456246">Далучыць файл</translation>
 <translation id="8230672074305416752">Не ўдалося праверыць сувязь са стандартным сеткавым шлюзам</translation>
 <translation id="8246209727385807362">Невядомы аператар</translation>
 <translation id="827422111966801947">Індыга</translation>
diff --git a/chromeos/strings/chromeos_strings_bg.xtb b/chromeos/strings/chromeos_strings_bg.xtb
index ecacafef..a81ad7b 100644
--- a/chromeos/strings/chromeos_strings_bg.xtb
+++ b/chromeos/strings/chromeos_strings_bg.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Раздел</translation>
 <translation id="6692996468359469499">Получаване на информация, свързана с избраното от вас</translation>
 <translation id="6704062477274546131">Преобразуване от DNS</translation>
-<translation id="6721744718589119342">Възможно е да ви изпратим имейл за още информация или актуализации</translation>
 <translation id="6723839937902243910">Захранване</translation>
 <translation id="6723847290197874913">Фоново осветление на клавиатурата</translation>
 <translation id="672609503628871915">Вижте новите неща</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Установяване на връзка</translation>
 <translation id="8221728673725659466">Калибрирането завърши</translation>
 <translation id="8226628635270268143">Изберете любимите си снимки и албуми</translation>
+<translation id="8227119283605456246">Прикачване на файл</translation>
 <translation id="8230672074305416752">Неуспех при команда ping към шлюза на основната мрежа</translation>
 <translation id="8246209727385807362">Неизвестен оператор</translation>
 <translation id="827422111966801947">индиго</translation>
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb
index e2c54e5..875e4e3 100644
--- a/chromeos/strings/chromeos_strings_bn.xtb
+++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -669,7 +669,6 @@
 <translation id="6659594942844771486">ট্যাব</translation>
 <translation id="6692996468359469499">আপনার বেছে নেওয়া প্রশ্ন সম্পর্কিত উত্তর পান</translation>
 <translation id="6704062477274546131">DNS রেজোলিউশন</translation>
-<translation id="6721744718589119342">আরও তথ্য বা আপডেটের জন্য আমরা আপনাকে ইমেল করতে পারি</translation>
 <translation id="6723839937902243910">পাওয়ার</translation>
 <translation id="6723847290197874913">কীবোর্ড ব্যাকলাইট</translation>
 <translation id="672609503628871915">নতুন কী আছে দেখুন</translation>
@@ -825,6 +824,7 @@
 <translation id="8217675307824400706">কানেক্ট হন</translation>
 <translation id="8221728673725659466">ক্যালিব্রেশন হয়ে গেছে</translation>
 <translation id="8226628635270268143">আপনার পছন্দের ফটো ও অ্যালবাম বাছুন</translation>
+<translation id="8227119283605456246">ফাইল সংযুক্ত করুন</translation>
 <translation id="8230672074305416752">ডিফল্ট নেটওয়ার্ক গেটওয়েতে পিং করা যায়নি</translation>
 <translation id="8246209727385807362">অজানা পরিষেবা প্রদানকারী</translation>
 <translation id="827422111966801947">নীল</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb
index 14a9f5e2..d537fa1 100644
--- a/chromeos/strings/chromeos_strings_bs.xtb
+++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Kartica</translation>
 <translation id="6692996468359469499">Primajte informacije u vezi s vašim odabirom</translation>
 <translation id="6704062477274546131">Razrješavanje DNS-a</translation>
-<translation id="6721744718589119342">Možda ćemo vam poslati e-poruku za više informacija ili novosti</translation>
 <translation id="6723839937902243910">Napajanje</translation>
 <translation id="6723847290197874913">Pozadinsko svjetlo tastature</translation>
 <translation id="672609503628871915">Pogledajte što je novo</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Povežite se</translation>
 <translation id="8221728673725659466">Kalibracija je završena</translation>
 <translation id="8226628635270268143">Odaberite omiljene fotografije i albume</translation>
+<translation id="8227119283605456246">Priloži fajl</translation>
 <translation id="8230672074305416752">Provjera pingom zadanog mrežnog pristupnika nije uspjela</translation>
 <translation id="8246209727385807362">Nepoznat mobilni operater</translation>
 <translation id="827422111966801947">Indigo plava</translation>
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb
index 1ec1493..d3cc2c4 100644
--- a/chromeos/strings/chromeos_strings_ca.xtb
+++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Pestanya</translation>
 <translation id="6692996468359469499">Obtén informació relacionada amb la teva selecció</translation>
 <translation id="6704062477274546131">Resolució de DNS</translation>
-<translation id="6721744718589119342">També pot ser que et demanem més informació o t'enviem novetats per correu electrònic</translation>
 <translation id="6723839937902243910">Bateria</translation>
 <translation id="6723847290197874913">Il·luminació a contrallum del teclat</translation>
 <translation id="672609503628871915">Novetats</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Connecta't</translation>
 <translation id="8221728673725659466">S'ha completat el calibratge</translation>
 <translation id="8226628635270268143">Tria les teves fotos i els teus àlbums preferits</translation>
+<translation id="8227119283605456246">Adjunta un fitxer</translation>
 <translation id="8230672074305416752">No s'ha pogut fer ping a la passarel·la de xarxa predeterminada</translation>
 <translation id="8246209727385807362">Operador de telefonia mòbil desconegut</translation>
 <translation id="827422111966801947">Anyil</translation>
diff --git a/chromeos/strings/chromeos_strings_cs.xtb b/chromeos/strings/chromeos_strings_cs.xtb
index 789f6e0..a41e2925 100644
--- a/chromeos/strings/chromeos_strings_cs.xtb
+++ b/chromeos/strings/chromeos_strings_cs.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Karta</translation>
 <translation id="6692996468359469499">Získejte informace týkající se vybraného obsahu</translation>
 <translation id="6704062477274546131">Překlad DNS</translation>
-<translation id="6721744718589119342">O další informace vás můžeme požádat e-mailem</translation>
 <translation id="6723839937902243910">Napájení</translation>
 <translation id="6723847290197874913">Podsvícení klávesnice</translation>
 <translation id="672609503628871915">Co je nového</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Připojte se</translation>
 <translation id="8221728673725659466">Kalibrace dokončena</translation>
 <translation id="8226628635270268143">Vyberte své oblíbené fotky a alba</translation>
+<translation id="8227119283605456246">Přiložit soubor</translation>
 <translation id="8230672074305416752">Nepodařilo se pingnout bránu výchozí sítě</translation>
 <translation id="8246209727385807362">Neznámý operátor</translation>
 <translation id="827422111966801947">Indigová</translation>
diff --git a/chromeos/strings/chromeos_strings_cy.xtb b/chromeos/strings/chromeos_strings_cy.xtb
index 135793fd6..c0b05f3c 100644
--- a/chromeos/strings/chromeos_strings_cy.xtb
+++ b/chromeos/strings/chromeos_strings_cy.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Tab</translation>
 <translation id="6692996468359469499">Cael gwybodaeth sy'n gysylltiedig â'ch dewis</translation>
 <translation id="6704062477274546131">Cydraniad DNS</translation>
-<translation id="6721744718589119342">Mae'n bosib y byddwn yn anfon e-bost atoch am ragor o wybodaeth neu ddiweddariadau</translation>
 <translation id="6723839937902243910">Pŵer</translation>
 <translation id="6723847290197874913">Ôl-olau bysellfwrdd</translation>
 <translation id="672609503628871915">Gweld beth sy'n newydd</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Cysylltu</translation>
 <translation id="8221728673725659466">Wedi gorffen calibradu</translation>
 <translation id="8226628635270268143">Dewiswch eich hoff luniau ac albymau</translation>
+<translation id="8227119283605456246">Atodi ffeil</translation>
 <translation id="8230672074305416752">Wedi methu â phingio porth y rhwydwaith diofyn</translation>
 <translation id="8246209727385807362">Cludwr anhysbys</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb
index 8b24031..a89c656 100644
--- a/chromeos/strings/chromeos_strings_da.xtb
+++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -669,7 +669,6 @@
 <translation id="6659594942844771486">Fane</translation>
 <translation id="6692996468359469499">Få oplysninger om det, du har markeret</translation>
 <translation id="6704062477274546131">DNS-udførelse</translation>
-<translation id="6721744718589119342">Vi sender dig muligvis en mail med en opdatering eller anmodning om flere oplysninger</translation>
 <translation id="6723839937902243910">Strøm</translation>
 <translation id="6723847290197874913">Tastaturlys</translation>
 <translation id="672609503628871915">Se de nye funktioner</translation>
@@ -825,6 +824,7 @@
 <translation id="8217675307824400706">Få forbindelse</translation>
 <translation id="8221728673725659466">Kalibreringen er gennemført</translation>
 <translation id="8226628635270268143">Vælg dine foretrukne billeder og album</translation>
+<translation id="8227119283605456246">Vedhæft fil</translation>
 <translation id="8230672074305416752">Kunne ikke pinge standardnetværkets gateway</translation>
 <translation id="8246209727385807362">Ukendt mobilselskab</translation>
 <translation id="827422111966801947">Indigoblå</translation>
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb
index 7128329f..325e3c8 100644
--- a/chromeos/strings/chromeos_strings_de.xtb
+++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Tab</translation>
 <translation id="6692996468359469499">Informationen zu deiner Auswahl erhalten</translation>
 <translation id="6704062477274546131">DNS-Auflösung</translation>
-<translation id="6721744718589119342">Unter Umständen werden wir dich per E-Mail um weitere bzw. aktuelle Informationen bitten</translation>
 <translation id="6723839937902243910">Leistung</translation>
 <translation id="6723847290197874913">Hintergrundbeleuchtung der Tastatur</translation>
 <translation id="672609503628871915">Neuigkeiten</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Verbindung herstellen</translation>
 <translation id="8221728673725659466">Kalibrierung beendet</translation>
 <translation id="8226628635270268143">Hier kannst du deine bevorzugten Fotos und Alben auswählen</translation>
+<translation id="8227119283605456246">Datei anhängen</translation>
 <translation id="8230672074305416752">Das standardmäßige Netzwerk-Gateway konnte nicht kontaktiert werden</translation>
 <translation id="8246209727385807362">Unbekannter Mobilfunkanbieter</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb
index 8f1e08a..6f50ddf 100644
--- a/chromeos/strings/chromeos_strings_el.xtb
+++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Καρτέλα</translation>
 <translation id="6692996468359469499">Λάβετε πληροφορίες σχετικά με την επιλογή σας.</translation>
 <translation id="6704062477274546131">Επίλυση DNS</translation>
-<translation id="6721744718589119342">Ενδέχεται να σας στείλουμε μήνυμα ηλεκτρονικού ταχυδρομείου για περισσότερες πληροφορίες ή ενημερώσεις</translation>
 <translation id="6723839937902243910">Ενεργοποίηση</translation>
 <translation id="6723847290197874913">Οπίσθιος φωτισμός πληκτρολογίου</translation>
 <translation id="672609503628871915">Δείτε τι νέο υπάρχει</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Συνδεθείτε</translation>
 <translation id="8221728673725659466">Η βαθμονόμηση ολοκληρώθηκε</translation>
 <translation id="8226628635270268143">Επιλέξτε τις αγαπημένες σας φωτογραφίες και λευκώματα.</translation>
+<translation id="8227119283605456246">Επισύναψη αρχείου</translation>
 <translation id="8230672074305416752">Αποτυχία ping της προεπιλεγμένης πύλης δικτύου.</translation>
 <translation id="8246209727385807362">Άγνωστη εταιρεία κινητής τηλεφωνίας</translation>
 <translation id="827422111966801947">Λουλάκι</translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb
index 6e55d1c5..6782aa1 100644
--- a/chromeos/strings/chromeos_strings_en-GB.xtb
+++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -197,6 +197,7 @@
 <translation id="2448312741937722512">Types</translation>
 <translation id="2461822463642141190">Current</translation>
 <translation id="2480034874476596812">Manually turn off</translation>
+<translation id="248546197012830854">Device is offline. Connect to Wi-Fi network to see help content.</translation>
 <translation id="2491955442992294626">Keys aren't tested when you're using another window</translation>
 <translation id="2493126929778606526">Your best photos, selected automatically</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
@@ -664,6 +665,7 @@
 <translation id="6611280807952151149">Exit <ph name="DEVICE_TYPE" /> repair</translation>
 <translation id="6618744767048954150">Running</translation>
 <translation id="6620487321149975369">Print jobs will appear in history unless they are removed manually</translation>
+<translation id="6624819909909965616">Can't upload file larger than 10 MB</translation>
 <translation id="6643016212128521049">Clear</translation>
 <translation id="6644568396961840069">File couldn't be saved. Try plugging in a different external storage, or try again later.</translation>
 <translation id="6647510110698214773">Encryption algorithm</translation>
@@ -672,7 +674,6 @@
 <translation id="6659594942844771486">Tab</translation>
 <translation id="6692996468359469499">Get info related to your selection</translation>
 <translation id="6704062477274546131">DNS resolution</translation>
-<translation id="6721744718589119342">We may email you for more information or updates</translation>
 <translation id="6723839937902243910">Power</translation>
 <translation id="6723847290197874913">Keyboard backlight</translation>
 <translation id="672609503628871915">See what's new</translation>
@@ -700,6 +701,7 @@
 <translation id="6965382102122355670">OK</translation>
 <translation id="6977381486153291903">Firmware revision</translation>
 <translation id="6995564396478647735">Make sure that Write Protect is on</translation>
+<translation id="7005833343836210400">Device is offline</translation>
 <translation id="7028979494427204405"><ph name="MANAGER" /> manages this device and has access to all user activity, including web pages visited, passwords and email.</translation>
 <translation id="7040230719604914234">Operator</translation>
 <translation id="7041549558901442110">Device is not connected.</translation>
@@ -814,6 +816,7 @@
 <translation id="8082366717211101304">Can't resolve DNS from Android apps</translation>
 <translation id="8083281199617904460">This repair process is intended for a trained repair technician. Start only after replacing the malfunctioning components.</translation>
 <translation id="808894953321890993">Change password</translation>
+<translation id="8094062939584182041">Allow Google to email you about this issue</translation>
 <translation id="8104083085214006426">You are using an open and unsecure network</translation>
 <translation id="8109786307828817014">Proceed with failed calibrations?</translation>
 <translation id="811820734797650957">(Android) Gateway can be pinged</translation>
@@ -828,6 +831,7 @@
 <translation id="8217675307824400706">Get connected</translation>
 <translation id="8221728673725659466">Calibration complete</translation>
 <translation id="8226628635270268143">Choose your favourite photos and albums</translation>
+<translation id="8227119283605456246">Attach file</translation>
 <translation id="8230672074305416752">Failed to ping the default network gateway</translation>
 <translation id="8246209727385807362">Unknown operator</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index 53926ab..81e99e8 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Pestaña</translation>
 <translation id="6692996468359469499">Obtén información relacionada con tu selección</translation>
 <translation id="6704062477274546131">Resolución de DNS</translation>
-<translation id="6721744718589119342">Es posible que te enviemos correos electrónicos con más información o actualizaciones</translation>
 <translation id="6723839937902243910">Alimentación</translation>
 <translation id="6723847290197874913">Retroiluminación del teclado</translation>
 <translation id="672609503628871915">Novedades</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Conéctate</translation>
 <translation id="8221728673725659466">Calibración completa</translation>
 <translation id="8226628635270268143">Elige tus fotos y álbumes favoritos</translation>
+<translation id="8227119283605456246">Adjuntar un archivo</translation>
 <translation id="8230672074305416752">no se pudo hacer ping en la puerta de enlace de la red predeterminada</translation>
 <translation id="8246209727385807362">El proveedor es desconocido</translation>
 <translation id="827422111966801947">Índigo</translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb
index 2dd473d..745705f 100644
--- a/chromeos/strings/chromeos_strings_es.xtb
+++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -669,7 +669,6 @@
 <translation id="6659594942844771486">Pestaña</translation>
 <translation id="6692996468359469499">Obtener información sobre tu selección</translation>
 <translation id="6704062477274546131">Resolución de DNS</translation>
-<translation id="6721744718589119342">Podemos enviarte un correo para pedirte más información o notificarte cambios</translation>
 <translation id="6723839937902243910">Batería</translation>
 <translation id="6723847290197874913">Retroiluminación del teclado</translation>
 <translation id="672609503628871915">Consultar las novedades</translation>
@@ -825,6 +824,7 @@
 <translation id="8217675307824400706">Conéctate</translation>
 <translation id="8221728673725659466">Calibración completa</translation>
 <translation id="8226628635270268143">Elige tus fotos y álbumes favoritos</translation>
+<translation id="8227119283605456246">Adjuntar archivo</translation>
 <translation id="8230672074305416752">Se ha producido un error al hacer ping en la puerta de enlace de red predeterminada</translation>
 <translation id="8246209727385807362">Operador desconocido</translation>
 <translation id="827422111966801947">Índigo</translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb
index e26535a..f3eab78 100644
--- a/chromeos/strings/chromeos_strings_et.xtb
+++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Vaheleht</translation>
 <translation id="6692996468359469499">Hankige oma valiku kohta teavet</translation>
 <translation id="6704062477274546131">DNS-lahendus</translation>
-<translation id="6721744718589119342">Võime teile meili teel saata lisateavet või värskendusi</translation>
 <translation id="6723839937902243910">Toide</translation>
 <translation id="6723847290197874913">Klaviatuuri taustavalgus</translation>
 <translation id="672609503628871915">Vaadake, mis on uut</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Looge ühendus</translation>
 <translation id="8221728673725659466">Kalibreerimine on lõpetatud</translation>
 <translation id="8226628635270268143">Valige oma lemmikfotod ja -albumid</translation>
+<translation id="8227119283605456246">Manusta fail</translation>
 <translation id="8230672074305416752">Vaikevõrgulüüsi pingimine ebaõnnestus</translation>
 <translation id="8246209727385807362">Tundmatu operaator</translation>
 <translation id="827422111966801947">Indigosinine</translation>
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb
index 48776d2..f822a15a 100644
--- a/chromeos/strings/chromeos_strings_eu.xtb
+++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Fitxa</translation>
 <translation id="6692996468359469499">Lortu hautatutakoari buruzko informazioa</translation>
 <translation id="6704062477274546131">DNS bidezko ebazpena</translation>
-<translation id="6721744718589119342">Agian informazio edo berritasun gehiago eskatuko dizkizugu posta elektronikoz</translation>
 <translation id="6723839937902243910">Bateria</translation>
 <translation id="6723847290197874913">Teklatuaren atzeko argiztapena</translation>
 <translation id="672609503628871915">Ikusi azken berrikuntzak</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Konektatu</translation>
 <translation id="8221728673725659466">Kalibratu dira osagaiak</translation>
 <translation id="8226628635270268143">Aukeratu gogoko dituzun argazki eta albumak</translation>
+<translation id="8227119283605456246">Erantsi fitxategia</translation>
 <translation id="8230672074305416752">Ezin izan da egin ping sarerako atebide lehenetsian</translation>
 <translation id="8246209727385807362">Operadore ezezaguna</translation>
 <translation id="827422111966801947">Indigoa</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb
index 145eb3d4..d648190a 100644
--- a/chromeos/strings/chromeos_strings_fa.xtb
+++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">بازخوانی</translation>
 <translation id="3009958530611748826">پوشه‌ای را برای ذخیره در آن انتخاب کنید</translation>
 <translation id="3017079585324758401">پس‌زمینه</translation>
+<translation id="302435934487327038">نصب تکمیل شد</translation>
 <translation id="3027578600144895987">بستن دوربین</translation>
 <translation id="3031560714565892478">دستگاه دوربین ویدیویی است.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> میلی‌آمپر</translation>
@@ -664,13 +665,13 @@
 <translation id="6618744767048954150">درحال اجرا</translation>
 <translation id="6620487321149975369">کارهای چاپ تا زمانی‌که به‌طور دستی برداشته نشوند در سابقه نشان داده می‌شوند</translation>
 <translation id="6643016212128521049">پاک کردن</translation>
+<translation id="6644568396961840069">فایل ذخیره نشد. فضای ذخیره‌سازی خارجی دیگری را وصل کنید یا بعداً دوباره امتحان کنید.</translation>
 <translation id="6647510110698214773">الگوریتم رمزگذاری</translation>
 <translation id="6650062777702288430">تغییر میان کانا/ حرفی‌عددی</translation>
 <translation id="6657585470893396449">گذرواژه</translation>
 <translation id="6659594942844771486">برگه</translation>
 <translation id="6692996468359469499">دریافت اطلاعاتی که با انتخابتان مرتبط است</translation>
 <translation id="6704062477274546131">وضوح ساناد</translation>
-<translation id="6721744718589119342">ممکن است اطلاعات بیشتر یا به‌روزرسانی‌ها را برایتان ایمیل کنیم.</translation>
 <translation id="6723839937902243910">نیرو</translation>
 <translation id="6723847290197874913">نور پس‌زمینه صفحه‌کلید</translation>
 <translation id="672609503628871915">مشاهده تازه‌ها</translation>
@@ -826,6 +827,7 @@
 <translation id="8217675307824400706">متصل شوید</translation>
 <translation id="8221728673725659466">واسنجی تکمیل شد</translation>
 <translation id="8226628635270268143">انتخاب عکس‌ها و آلبوم‌های دلخواه</translation>
+<translation id="8227119283605456246">پیوست کردن فایل</translation>
 <translation id="8230672074305416752">پینگ کردن دروازه شبکه پیش‌فرض انجام نشد</translation>
 <translation id="8246209727385807362">شرکت مخابراتی ناشناس</translation>
 <translation id="827422111966801947">نیلی سیر</translation>
diff --git a/chromeos/strings/chromeos_strings_fi.xtb b/chromeos/strings/chromeos_strings_fi.xtb
index 675f7c2..78d2c6b 100644
--- a/chromeos/strings/chromeos_strings_fi.xtb
+++ b/chromeos/strings/chromeos_strings_fi.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Välilehti</translation>
 <translation id="6692996468359469499">Tietoja valinnastasi</translation>
 <translation id="6704062477274546131">DNS-ratkaisu</translation>
-<translation id="6721744718589119342">Voimme lähettää sinulle lisätietoa tai päivityksiä sähköpostitse</translation>
 <translation id="6723839937902243910">Virta</translation>
 <translation id="6723847290197874913">Näppämistön taustavalo</translation>
 <translation id="672609503628871915">Uudet ominaisuudet</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Muodosta yhteys</translation>
 <translation id="8221728673725659466">Kalibrointi valmis</translation>
 <translation id="8226628635270268143">Valitse suosikkikuvat ja ‑albumit</translation>
+<translation id="8227119283605456246">Liitä tiedosto</translation>
 <translation id="8230672074305416752">Oletusarvoisen verkkoyhdyskäytävän ping-kutsu epäonnistui</translation>
 <translation id="8246209727385807362">Tuntematon operaattori</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb
index 635d9e1..1545ad9e6 100644
--- a/chromeos/strings/chromeos_strings_fil.xtb
+++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Tab</translation>
 <translation id="6692996468359469499">Kumuha ng impormasyon kaugnay ng iyong pinili</translation>
 <translation id="6704062477274546131">Resolution ng DNS</translation>
-<translation id="6721744718589119342">Posibleng i-email ka namin para sa higit pang impormasyon o update</translation>
 <translation id="6723839937902243910">Power</translation>
 <translation id="6723847290197874913">Backlight ng keyboard</translation>
 <translation id="672609503628871915">Tingnan kung ano'ng bago</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Kumonekta</translation>
 <translation id="8221728673725659466">Kumpleto na ang pag-calibrate</translation>
 <translation id="8226628635270268143">Piliin ang iyong mga paboritong larawan at album</translation>
+<translation id="8227119283605456246">Mag-attach ng file</translation>
 <translation id="8230672074305416752">Hindi na-ping ang default na network gateway</translation>
 <translation id="8246209727385807362">Hindi kilalang carrier</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_fr-CA.xtb b/chromeos/strings/chromeos_strings_fr-CA.xtb
index c32faee..8cd0be9 100644
--- a/chromeos/strings/chromeos_strings_fr-CA.xtb
+++ b/chromeos/strings/chromeos_strings_fr-CA.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">ACTUALISER</translation>
 <translation id="3009958530611748826">Sélectionnez un dossier dans lequel enregistrer les fichiers</translation>
 <translation id="3017079585324758401">Arrière-plan</translation>
+<translation id="302435934487327038">Installation terminée</translation>
 <translation id="3027578600144895987">Fermer la caméra</translation>
 <translation id="3031560714565892478">L'appareil est une caméra vidéo.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
@@ -664,13 +665,13 @@
 <translation id="6618744767048954150">En cours…</translation>
 <translation id="6620487321149975369">Les tâches d'impression s'afficheront dans l'historique, sauf si vous les retirez manuellement</translation>
 <translation id="6643016212128521049">Effacer</translation>
+<translation id="6644568396961840069">Impossible d'enregistrer le fichier. Essayez d'utiliser un autre appareil de stockage externe ou réessayez plus tard.</translation>
 <translation id="6647510110698214773">Algorithme de chiffrement</translation>
 <translation id="6650062777702288430">Commutateur Kana/alphanumérique</translation>
 <translation id="6657585470893396449">Mot de passe</translation>
 <translation id="6659594942844771486">Onglet</translation>
 <translation id="6692996468359469499">Obtenir de l'information sur votre sélection</translation>
 <translation id="6704062477274546131">Résolution DNS</translation>
-<translation id="6721744718589119342">Nous pourrions vous envoyer un courriel pour vous demander davantage de renseignements ou pour vous offrir des mises à jour</translation>
 <translation id="6723839937902243910">Alimentation</translation>
 <translation id="6723847290197874913">Rétroéclairage du clavier</translation>
 <translation id="672609503628871915">Découvrir les nouveautés</translation>
@@ -826,6 +827,7 @@
 <translation id="8217675307824400706">Se connecter</translation>
 <translation id="8221728673725659466">Calibrage terminé</translation>
 <translation id="8226628635270268143">Sélectionner vos photos et vos albums préférés</translation>
+<translation id="8227119283605456246">Joindre un fichier</translation>
 <translation id="8230672074305416752">Impossible d'effectuer un ping avec la passerelle réseau par défaut</translation>
 <translation id="8246209727385807362">Opérateur inconnu</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_fr.xtb b/chromeos/strings/chromeos_strings_fr.xtb
index 188fc60..d3bcdad 100644
--- a/chromeos/strings/chromeos_strings_fr.xtb
+++ b/chromeos/strings/chromeos_strings_fr.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Onglet</translation>
 <translation id="6692996468359469499">Obtenir des informations sur votre sélection</translation>
 <translation id="6704062477274546131">Résolution DNS</translation>
-<translation id="6721744718589119342">Nous pourrons vous demander plus d'informations ou vous en envoyer par e-mail</translation>
 <translation id="6723839937902243910">Alimentation</translation>
 <translation id="6723847290197874913">Rétroéclairage du clavier</translation>
 <translation id="672609503628871915">Voir les nouveautés</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Se connecter</translation>
 <translation id="8221728673725659466">Calibrage terminé</translation>
 <translation id="8226628635270268143">Choisir vos photos et vos albums préférés</translation>
+<translation id="8227119283605456246">Joindre un fichier</translation>
 <translation id="8230672074305416752">Impossible de pinguer la passerelle du réseau par défaut</translation>
 <translation id="8246209727385807362">Opérateur inconnu</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_gl.xtb b/chromeos/strings/chromeos_strings_gl.xtb
index fafe4c3f..1b58fb6 100644
--- a/chromeos/strings/chromeos_strings_gl.xtb
+++ b/chromeos/strings/chromeos_strings_gl.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Pestana</translation>
 <translation id="6692996468359469499">Consultar a información relacionada coa túa selección</translation>
 <translation id="6704062477274546131">Resolución de DNS</translation>
-<translation id="6721744718589119342">Podemos poñernos en contacto contigo por correo electrónico para pedirche máis información ou manterte ao tanto das novidades</translation>
 <translation id="6723839937902243910">A</translation>
 <translation id="6723847290197874913">Luz traseira do teclado</translation>
 <translation id="672609503628871915">Ver as novidades</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Conéctate</translation>
 <translation id="8221728673725659466">Calibración completada</translation>
 <translation id="8226628635270268143">Escolle as fotos e os álbums que máis che gustan</translation>
+<translation id="8227119283605456246">Anexar ficheiro</translation>
 <translation id="8230672074305416752">Produciuse un erro ao facer ping na pasarela de rede predeterminada</translation>
 <translation id="8246209727385807362">Operador descoñecido</translation>
 <translation id="827422111966801947">Índigo</translation>
diff --git a/chromeos/strings/chromeos_strings_gu.xtb b/chromeos/strings/chromeos_strings_gu.xtb
index 7356746..dfe0b29 100644
--- a/chromeos/strings/chromeos_strings_gu.xtb
+++ b/chromeos/strings/chromeos_strings_gu.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">રિફ્રેશ કરો</translation>
 <translation id="3009958530611748826">સ્કૅન જેમાં સાચવવાના છે તે ફોલ્ડર પસંદ કરો</translation>
 <translation id="3017079585324758401">બૅકગ્રાઉન્ડ</translation>
+<translation id="302435934487327038">ઇન્સ્ટૉલ કરવાનું પૂર્ણ થયું</translation>
 <translation id="3027578600144895987">કૅમેરા બંધ કરો</translation>
 <translation id="3031560714565892478">ડિવાઇસ એક વીડિયો કૅમેરા છે.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
@@ -663,13 +664,13 @@
 <translation id="6618744767048954150">હજીપણ તપાસ થઈ રહી છે</translation>
 <translation id="6620487321149975369">જ્યાં સુધી પ્રિન્ટ કાર્યોને મેન્યુઅલી કાઢી નાખવામાં નહીં આવે, ત્યાં સુધી તે ઇતિહાસમાં દેખાશે</translation>
 <translation id="6643016212128521049">સાફ કરો</translation>
+<translation id="6644568396961840069">ફાઇલ સાચવી શકાઈ નથી. કોઈ અલગ બાહ્ય સ્ટોરેજ પ્લગ ઇન કરવાનો પ્રયાસ કરો અથવા થોડા સમય પછી ફરી પ્રયાસ કરો.</translation>
 <translation id="6647510110698214773">એન્ક્રિપ્શન ઍલ્ગોરિધમ</translation>
 <translation id="6650062777702288430">કાના/આલ્ફાન્યૂમેરિક સ્વિચ કી</translation>
 <translation id="6657585470893396449">પાસવર્ડ</translation>
 <translation id="6659594942844771486">બ્રાઉઝર ટૅબ</translation>
 <translation id="6692996468359469499">તમારી પસંદગી સંબંધિત માહિતી મેળવો</translation>
 <translation id="6704062477274546131">DNSનો ઉકેલ</translation>
-<translation id="6721744718589119342">વધુ માહિતી અથવા અપડેટ માટે, અમે તમને ઇમેઇલ મોકલી શકીએ છીએ</translation>
 <translation id="6723839937902243910">પાવર</translation>
 <translation id="6723847290197874913">કીબોર્ડ બૅકલાઇટ</translation>
 <translation id="672609503628871915">શું નવું છે તે જુઓ</translation>
@@ -825,6 +826,7 @@
 <translation id="8217675307824400706">કનેક્ટ કરો</translation>
 <translation id="8221728673725659466">કેલિબ્રેશન પૂર્ણ થયું</translation>
 <translation id="8226628635270268143">તમારા મનગમતા ફોટા અને આલ્બમ પસંદ કરો</translation>
+<translation id="8227119283605456246">ફાઇલ જોડો</translation>
 <translation id="8230672074305416752">ડિફૉલ્ટ નેટવર્ક ગેટવેને પિંગ કરવામાં નિષ્ફળ રહ્યાં</translation>
 <translation id="8246209727385807362">અજાણ કૅરિઅર</translation>
 <translation id="827422111966801947">ઘેરો ભૂરો</translation>
diff --git a/chromeos/strings/chromeos_strings_hi.xtb b/chromeos/strings/chromeos_strings_hi.xtb
index e188123..b5021f7 100644
--- a/chromeos/strings/chromeos_strings_hi.xtb
+++ b/chromeos/strings/chromeos_strings_hi.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">रीफ़्रेश करें</translation>
 <translation id="3009958530611748826">सेव करने के लिए कोई फ़ोल्डर चुनें</translation>
 <translation id="3017079585324758401">बैकग्राउंड</translation>
+<translation id="302435934487327038">फ़र्मवेयर इंस्टॉल हो गया है</translation>
 <translation id="3027578600144895987">कैमरा बंद करें</translation>
 <translation id="3031560714565892478">डिवाइस एक वीडियो कैमरा है.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
@@ -664,13 +665,13 @@
 <translation id="6618744767048954150">जांच चल रही है</translation>
 <translation id="6620487321149975369">प्रिंट की गई फ़ाइलें तब तक इतिहास में दिखेंगी, जब तक इन्हें मैन्युअल तरीके से हटा नहीं दिया जाता</translation>
 <translation id="6643016212128521049">साफ़ करें</translation>
+<translation id="6644568396961840069">फ़ाइल सेव नहीं की जा सकी. दूसरी तरह के बाहरी स्टोरेज को प्लग इन करके देखें या बाद में कोशिश करें.</translation>
 <translation id="6647510110698214773">एन्क्रिप्शन का एल्गोरिदम</translation>
 <translation id="6650062777702288430">काना/अक्षर और अंक स्विच करने वाला बटन</translation>
 <translation id="6657585470893396449">पासवर्ड</translation>
 <translation id="6659594942844771486">ब्राउज़र टैब</translation>
 <translation id="6692996468359469499">चुनी हुई सामग्री से जुड़ी जानकारी पाएं</translation>
 <translation id="6704062477274546131">डीएनएस रिज़ॉल्यूशन</translation>
-<translation id="6721744718589119342">हम ज़्यादा जानकारी या अपडेट के लिए, आपको ईमेल भेज सकते हैं</translation>
 <translation id="6723839937902243910">पावर</translation>
 <translation id="6723847290197874913">कीबोर्ड की बैकलाइट</translation>
 <translation id="672609503628871915">देखें कि नया क्या है</translation>
@@ -826,6 +827,7 @@
 <translation id="8217675307824400706">वाई-फ़ाई से कनेक्ट हों</translation>
 <translation id="8221728673725659466">कैलिब्रेशन पूरा हुआ</translation>
 <translation id="8226628635270268143">अपनी पसंदीदा फ़ोटो और एल्बम चुनें</translation>
+<translation id="8227119283605456246">फ़ाइल अटैच करें</translation>
 <translation id="8230672074305416752">डिफ़ॉल्ट नेटवर्क गेटवे को पिंग नहीं किया जा सका</translation>
 <translation id="8246209727385807362">अज्ञात वाहक</translation>
 <translation id="827422111966801947">गहरा नीला</translation>
diff --git a/chromeos/strings/chromeos_strings_hr.xtb b/chromeos/strings/chromeos_strings_hr.xtb
index 4a4fb859..0ee5f6e 100644
--- a/chromeos/strings/chromeos_strings_hr.xtb
+++ b/chromeos/strings/chromeos_strings_hr.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Kartica</translation>
 <translation id="6692996468359469499">Dohvaćanje informacija povezanih s vašim odabirom</translation>
 <translation id="6704062477274546131">Razrješavanje DNS-a</translation>
-<translation id="6721744718589119342">Možda ćemo vam poslati e-poruku s dodatnim informacijama ili novostima</translation>
 <translation id="6723839937902243910">Napajanje</translation>
 <translation id="6723847290197874913">Pozadinsko osvjetljenje tipkovnice</translation>
 <translation id="672609503628871915">Pogledajte što je novo</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Povežite se</translation>
 <translation id="8221728673725659466">Kalibracija dovršena</translation>
 <translation id="8226628635270268143">Odaberite svoje omiljene fotografije i albume</translation>
+<translation id="8227119283605456246">Priloži datoteku</translation>
 <translation id="8230672074305416752">Pinganje pristupnika zadane mreže nije uspjelo</translation>
 <translation id="8246209727385807362">Nepoznat mobilni operater</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb
index 6ac191a..ebd0d66 100644
--- a/chromeos/strings/chromeos_strings_hu.xtb
+++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Lap</translation>
 <translation id="6692996468359469499">Információk kérése a kiválasztott elemmel kapcsolatban</translation>
 <translation id="6704062477274546131">DNS-feloldás</translation>
-<translation id="6721744718589119342">Előfordulhat, hogy e-mailben kérünk további információt vagy a meglévők pontosítását</translation>
 <translation id="6723839937902243910">Energiaellátás</translation>
 <translation id="6723847290197874913">Billentyűzet háttérvilágítása</translation>
 <translation id="672609503628871915">Újdonságok</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Csatlakozás</translation>
 <translation id="8221728673725659466">A kalibrálás befejeződött</translation>
 <translation id="8226628635270268143">Kedvenc fotók és albumok kiválasztása</translation>
+<translation id="8227119283605456246">Fájl csatolása</translation>
 <translation id="8230672074305416752">Nem sikerült az alapértelmezett hálózati átjáró pingelése</translation>
 <translation id="8246209727385807362">Ismeretlen szolgáltató</translation>
 <translation id="827422111966801947">Indigókék</translation>
diff --git a/chromeos/strings/chromeos_strings_hy.xtb b/chromeos/strings/chromeos_strings_hy.xtb
index c7af940..f8838d5a 100644
--- a/chromeos/strings/chromeos_strings_hy.xtb
+++ b/chromeos/strings/chromeos_strings_hy.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Ներդիր</translation>
 <translation id="6692996468359469499">Ստացեք տեղեկություններ էկրանի տարրերի վերաբերյալ</translation>
 <translation id="6704062477274546131">DNS-ի լուծաչափ</translation>
-<translation id="6721744718589119342">Մենք կարող ենք էլփոստով ձեզնից լրացուցիչ տեղեկություններ խնդրել կամ հաղորդել թարմացումների մասին</translation>
 <translation id="6723839937902243910">Սնուցում</translation>
 <translation id="6723847290197874913">Ստեղնաշարի հետնալույս</translation>
 <translation id="672609503628871915">Իմանալ՝ ինչ նոր բան կա</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Միացեք ցանցին</translation>
 <translation id="8221728673725659466">Չափաբերումն ավարտված է</translation>
 <translation id="8226628635270268143">Ընտրեք ձեր սիրած լուսանկարներն ու ալբոմները</translation>
+<translation id="8227119283605456246">Կցել ֆայլ</translation>
 <translation id="8230672074305416752">Չհաջողվեց փինգ ուղարկել կանխադրված ցանցի անցախուցին</translation>
 <translation id="8246209727385807362">Անհայտ օպերատոր</translation>
 <translation id="827422111966801947">Ինդիգո</translation>
diff --git a/chromeos/strings/chromeos_strings_id.xtb b/chromeos/strings/chromeos_strings_id.xtb
index ee1b6152..8dab4fb 100644
--- a/chromeos/strings/chromeos_strings_id.xtb
+++ b/chromeos/strings/chromeos_strings_id.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Tab</translation>
 <translation id="6692996468359469499">Dapatkan info terkait pilihan Anda</translation>
 <translation id="6704062477274546131">Resolusi DNS</translation>
-<translation id="6721744718589119342">Kami mungkin mengirimi Anda email untuk meminta informasi lebih lanjut atau memberikan informasi terbaru</translation>
 <translation id="6723839937902243910">Daya</translation>
 <translation id="6723847290197874913">Lampu latar keyboard</translation>
 <translation id="672609503628871915">Lihat apa saja yang baru</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Hubungkan</translation>
 <translation id="8221728673725659466">Kalibrasi selesai</translation>
 <translation id="8226628635270268143">Pilih foto dan album favorit</translation>
+<translation id="8227119283605456246">Lampirkan file</translation>
 <translation id="8230672074305416752">Gagal melakukan ping ke gateway jaringan default</translation>
 <translation id="8246209727385807362">Operator tidak diketahui</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_is.xtb b/chromeos/strings/chromeos_strings_is.xtb
index 2711688..316206f 100644
--- a/chromeos/strings/chromeos_strings_is.xtb
+++ b/chromeos/strings/chromeos_strings_is.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Flipi</translation>
 <translation id="6692996468359469499">Fá upplýsingar í tengslum við val þitt</translation>
 <translation id="6704062477274546131">DNS-upplausn</translation>
-<translation id="6721744718589119342">Við kunnum að senda þér frekari upplýsingar eða uppfærslur í tölvupósti</translation>
 <translation id="6723839937902243910">Orka</translation>
 <translation id="6723847290197874913">Baklýsing lyklaborðs</translation>
 <translation id="672609503628871915">Skoða nýjungarnar</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Kominn tími til að tengjast</translation>
 <translation id="8221728673725659466">Kvörðun lokið</translation>
 <translation id="8226628635270268143">Veldu uppáhaldsmyndir og -möppur</translation>
+<translation id="8227119283605456246">Hengja skrá við</translation>
 <translation id="8230672074305416752">Ping-prófun sjálfvalinnar netkerfisgáttar mistókst</translation>
 <translation id="8246209727385807362">Óþekkt símafyrirtæki</translation>
 <translation id="827422111966801947">Dimmfjólublár</translation>
diff --git a/chromeos/strings/chromeos_strings_it.xtb b/chromeos/strings/chromeos_strings_it.xtb
index 53fb56a..2cda2f58 100644
--- a/chromeos/strings/chromeos_strings_it.xtb
+++ b/chromeos/strings/chromeos_strings_it.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Scheda</translation>
 <translation id="6692996468359469499">Ricevi informazioni correlate alla tua selezione</translation>
 <translation id="6704062477274546131">Risoluzione DNS</translation>
-<translation id="6721744718589119342">Potremmo inviarti un'email per maggiori informazioni o aggiornamenti</translation>
 <translation id="6723839937902243910">Alimentazione</translation>
 <translation id="6723847290197874913">Retroilluminazione della tastiera</translation>
 <translation id="672609503628871915">Scopri le novità</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Connettiti</translation>
 <translation id="8221728673725659466">Calibrazione completata</translation>
 <translation id="8226628635270268143">Scegli le tue foto e i tuoi album preferiti</translation>
+<translation id="8227119283605456246">Allega file</translation>
 <translation id="8230672074305416752">impossibile eseguire il ping del gateway di rete predefinito</translation>
 <translation id="8246209727385807362">Operatore sconosciuto</translation>
 <translation id="827422111966801947">Indaco</translation>
diff --git a/chromeos/strings/chromeos_strings_iw.xtb b/chromeos/strings/chromeos_strings_iw.xtb
index efe007a..bf7310b5 100644
--- a/chromeos/strings/chromeos_strings_iw.xtb
+++ b/chromeos/strings/chromeos_strings_iw.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">כרטיסייה</translation>
 <translation id="6692996468359469499">קבלת מידע בקשר לבחירה שלך</translation>
 <translation id="6704062477274546131">‏פענוח DNS</translation>
-<translation id="6721744718589119342">יכול להיות שנשלח לך באימייל עדכונים או בקשה לשליחת פרטים נוספים</translation>
 <translation id="6723839937902243910">חשמל</translation>
 <translation id="6723847290197874913">התאורה האחורית של המקלדת</translation>
 <translation id="672609503628871915">מה חדש</translation>
@@ -825,6 +824,7 @@
 <translation id="8217675307824400706">התחברות</translation>
 <translation id="8221728673725659466">הכיול הושלם</translation>
 <translation id="8226628635270268143">בחירת התמונות והאלבומים האהובים עליך</translation>
+<translation id="8227119283605456246">צירוף קובץ</translation>
 <translation id="8230672074305416752">לא ניתן היה לבצע פינג לשער הרשת המוגדרת כברירת מחדל</translation>
 <translation id="8246209727385807362">ספק לא ידוע</translation>
 <translation id="827422111966801947">כחול כהה</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb
index f00a1c51..1bae44c6 100644
--- a/chromeos/strings/chromeos_strings_ja.xtb
+++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">タブ</translation>
 <translation id="6692996468359469499">選択した項目に関連する情報を取得する</translation>
 <translation id="6704062477274546131">DNS の解決</translation>
-<translation id="6721744718589119342">詳細や最新情報に関するメールをお送りさせていただく場合があります</translation>
 <translation id="6723839937902243910">電源</translation>
 <translation id="6723847290197874913">キーボード バックライト</translation>
 <translation id="672609503628871915">新機能を確認する</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">接続</translation>
 <translation id="8221728673725659466">キャリブレーション完了</translation>
 <translation id="8226628635270268143">お気に入りの写真やアルバムを選択してください</translation>
+<translation id="8227119283605456246">添付ファイル</translation>
 <translation id="8230672074305416752">デフォルトのネットワーク ゲートウェイに向けた ping が失敗しました</translation>
 <translation id="8246209727385807362">不明な携帯通信会社</translation>
 <translation id="827422111966801947">インディゴ</translation>
diff --git a/chromeos/strings/chromeos_strings_ka.xtb b/chromeos/strings/chromeos_strings_ka.xtb
index d22590a..c9714914 100644
--- a/chromeos/strings/chromeos_strings_ka.xtb
+++ b/chromeos/strings/chromeos_strings_ka.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">ჩანართი</translation>
 <translation id="6692996468359469499">მიიღეთ თქვენს არჩევანთან დაკავშირებული ინფორმაცია</translation>
 <translation id="6704062477274546131">DNS-ის დარეგულირება</translation>
-<translation id="6721744718589119342">ელფოსტით შესაძლოა დამატებითი ინფორმაცია ან სიახლეები შეგატყობინოთ</translation>
 <translation id="6723839937902243910">ენერგია</translation>
 <translation id="6723847290197874913">კლავიატურის შენათება</translation>
 <translation id="672609503628871915">ნახეთ სიახლეებირა სიახლეა</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">დაამყარეთ კავშირი</translation>
 <translation id="8221728673725659466">კალიბრაცია დასრულდა</translation>
 <translation id="8226628635270268143">აირჩიეთ თქვენი რჩეული ფოტოები და ალბომები</translation>
+<translation id="8227119283605456246">ფაილის მიმაგრება</translation>
 <translation id="8230672074305416752">ნაგულისხმევი ქსელის გეითვეისთან კავშირის შემოწმება ვერ მოხერხდა</translation>
 <translation id="8246209727385807362">უცნობი ოპერატორი</translation>
 <translation id="827422111966801947">ინდიგო</translation>
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb
index 531621a5..431c8b11 100644
--- a/chromeos/strings/chromeos_strings_kk.xtb
+++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">ЖАҢАРТУ</translation>
 <translation id="3009958530611748826">Сканерленген мазмұн сақталатын қалтаны таңдаңыз</translation>
 <translation id="3017079585324758401">Фон</translation>
+<translation id="302435934487327038">Орнату аяқталды</translation>
 <translation id="3027578600144895987">Камераны жабу</translation>
 <translation id="3031560714565892478">Бұл — бейнекамера.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
@@ -663,13 +664,13 @@
 <translation id="6618744767048954150">Жұмыс істеп тұр</translation>
 <translation id="6620487321149975369">Қолмен өшірмесеңіз, баспа жұмыстары тарихта сақтала береді.</translation>
 <translation id="6643016212128521049">Тазалау</translation>
+<translation id="6644568396961840069">Файл сақталмады. Басқа сыртқы жадты қосып көріңіз немесе әрекетті кейінірек қайталаңыз.</translation>
 <translation id="6647510110698214773">Шифрлау алгоритмі</translation>
 <translation id="6650062777702288430">Кана мен әріптік-сандық белгілерді өзара ауыстыру</translation>
 <translation id="6657585470893396449">Құпия сөз</translation>
 <translation id="6659594942844771486">Қойынды</translation>
 <translation id="6692996468359469499">Таңдауға қатысты ақпарат алу</translation>
 <translation id="6704062477274546131">DNS ажыратымдылығы</translation>
-<translation id="6721744718589119342">Толығырақ ақпарат алып, жаңалықтардан хабардар болуыңыз үшін, сізге электрондық хаттар жіберуіміз мүмкін.</translation>
 <translation id="6723839937902243910">Күш</translation>
 <translation id="6723847290197874913">Пернетақта жарығы</translation>
 <translation id="672609503628871915">Жаңалықтарды қарау</translation>
@@ -825,6 +826,7 @@
 <translation id="8217675307824400706">Қосылу</translation>
 <translation id="8221728673725659466">Калибрлеу аяқталды</translation>
 <translation id="8226628635270268143">Өзіңізге ұнайтын фотосуреттер мен альбомдарды таңдау</translation>
+<translation id="8227119283605456246">Файл тіркеу</translation>
 <translation id="8230672074305416752">Әдепкі желі шлюзінің байланысы тексерілмеді.</translation>
 <translation id="8246209727385807362">Белгісіз оператор</translation>
 <translation id="827422111966801947">Индиго</translation>
diff --git a/chromeos/strings/chromeos_strings_km.xtb b/chromeos/strings/chromeos_strings_km.xtb
index 5e87551..5915466 100644
--- a/chromeos/strings/chromeos_strings_km.xtb
+++ b/chromeos/strings/chromeos_strings_km.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">ផ្ទុក​ឡើង​វិញ</translation>
 <translation id="3009958530611748826">ជ្រើសរើសថត ដើម្បីរក្សាទុកឯកសារស្កេន</translation>
 <translation id="3017079585324758401">ផ្ទៃខាងក្រោយ</translation>
+<translation id="302435934487327038">ការដំឡើង​ត្រូវ​បានបញ្ចប់</translation>
 <translation id="3027578600144895987">បិទ​កាមេរ៉ា</translation>
 <translation id="3031560714565892478">ឧបករណ៍គឺកាមេរ៉ាវីដេអូ។</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
@@ -663,13 +664,13 @@
 <translation id="6618744767048954150">កំពុងដំណើរការ</translation>
 <translation id="6620487321149975369">កិច្ចការបោះពុម្ពនឹងបង្ហាញនៅក្នុងប្រវត្តិ ប្រសិនបើអ្នកមិនលុបវាដោយដៃទេ</translation>
 <translation id="6643016212128521049">ជម្រះ</translation>
+<translation id="6644568396961840069">មិនអាច​រក្សាទុក​ឯកសារ​បានទេ។ សូម​សាកល្បង​ដោត​ភ្ជាប់​​ទំហំផ្ទុក​ខាងក្រៅ​ផ្សេង ឬ​ព្យាយាម​ម្ដងទៀត​នៅពេលក្រោយ។</translation>
 <translation id="6647510110698214773">ក្បួនអ៊ីនគ្រីប</translation>
 <translation id="6650062777702288430">ប៊ូតុងបិទបើក​កាណា/អក្សរលាយលេខ</translation>
 <translation id="6657585470893396449">ពាក្យសម្ងាត់</translation>
 <translation id="6659594942844771486">ផ្ទាំង</translation>
 <translation id="6692996468359469499">ទទួលបានព័ត៌មានពាក់ព័ន្ធនឹងការជ្រើសរើស​របស់អ្នក</translation>
 <translation id="6704062477274546131">ដំណោះស្រាយ DNS</translation>
-<translation id="6721744718589119342">យើងអាចផ្ញើ​អ៊ីមែលទៅអ្នក​សម្រាប់បច្ចុប្បន្នភាព ឬព័ត៌មានបន្ថែម</translation>
 <translation id="6723839937902243910">ថាមពល</translation>
 <translation id="6723847290197874913">ពន្លឺផ្នែកខាងក្រោយនៃក្ដារចុច</translation>
 <translation id="672609503628871915">មើលអ្វីដែលថ្មី</translation>
@@ -825,6 +826,7 @@
 <translation id="8217675307824400706">តភ្ជាប់</translation>
 <translation id="8221728673725659466">ការរៀបចំ​ចប់</translation>
 <translation id="8226628635270268143">ជ្រើសរើស​រូបថត និងអាល់ប៊ុមដែលអ្នកចូលចិត្ត</translation>
+<translation id="8227119283605456246">ភ្ជាប់ឯកសារ</translation>
 <translation id="8230672074305416752">មិនអាចភីងច្រកបណ្ដាញលំនាំដើមបានទេ</translation>
 <translation id="8246209727385807362">ក្រុមហ៊ុនបម្រើសេវាទូរសព្ទ​ដែលមិនស្គាល់</translation>
 <translation id="827422111966801947">ទឹកប៊ិក</translation>
diff --git a/chromeos/strings/chromeos_strings_kn.xtb b/chromeos/strings/chromeos_strings_kn.xtb
index b20c108..fe0bd4e 100644
--- a/chromeos/strings/chromeos_strings_kn.xtb
+++ b/chromeos/strings/chromeos_strings_kn.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">ರಿಫ್ರೆಶ್ ಮಾಡಿ</translation>
 <translation id="3009958530611748826">ಉಳಿಸಲು ಫೋಲ್ಡರ್ ಆಯ್ಕೆ ಮಾಡಿ</translation>
 <translation id="3017079585324758401">ಹಿನ್ನೆಲೆ</translation>
+<translation id="302435934487327038">ಇನ್‌ಸ್ಟಾಲ್ ಪೂರ್ಣಗೊಂಡಿದೆ</translation>
 <translation id="3027578600144895987">ಕ್ಯಾಮರಾವನ್ನು ಮುಚ್ಚಿರಿ</translation>
 <translation id="3031560714565892478">ಸಾಧನವು ವೀಡಿಯೊ ಕ್ಯಾಮರಾ ಆಗಿದೆ.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
@@ -663,13 +664,13 @@
 <translation id="6618744767048954150">ರನ್ ಆಗುತ್ತಿದೆ</translation>
 <translation id="6620487321149975369">ಮುದ್ರಣ ಕಾರ್ಯಗಳನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕದ ಹೊರತು, ಅವು ಇತಿಹಾಸದಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ</translation>
 <translation id="6643016212128521049">ತೆರವುಗೊಳಿಸಿ</translation>
+<translation id="6644568396961840069">ಫೈಲ್ ಅನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ. ಬೇರೆ ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆಯಲ್ಲಿ ಪ್ಲಗ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="6647510110698214773">ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಅಲ್ಗಾರಿದಮ್</translation>
 <translation id="6650062777702288430">ಕನಾ/ಆಲ್ಫಾನ್ಯೂಮರಿಕ್ ಸ್ವಿಚ್</translation>
 <translation id="6657585470893396449">ಪಾಸ್‌ವರ್ಡ್</translation>
 <translation id="6659594942844771486">ಬ್ರೌಸರ್ ಟ್ಯಾಬ್</translation>
 <translation id="6692996468359469499">ನಿಮ್ಮ ಆಯ್ಕೆಗೆ ಸಂಬಂಧಿಸಿದ ಮಾಹಿತಿ ಪಡೆಯಿರಿ</translation>
 <translation id="6704062477274546131">DNS ರೆಸಲ್ಯೂಷನ್‌‌</translation>
-<translation id="6721744718589119342">ಹೆಚ್ಚಿನ ಮಾಹಿತಿ ಅಥವಾ ಅಪ್‌ಡೇಟ್‌ಗಳಿಗಾಗಿ ನಾವು ನಿಮಗೆ ಇಮೇಲ್ ಕಳುಹಿಸಬಹುದು</translation>
 <translation id="6723839937902243910">ಪವರ್‌</translation>
 <translation id="6723847290197874913">ಕೀಬೋರ್ಡ್ ಬ್ಯಾಕ್‌ಲೈಟ್</translation>
 <translation id="672609503628871915">ಹೊಸದೇನಿದೆ ನೋಡಿ</translation>
@@ -825,6 +826,7 @@
 <translation id="8217675307824400706">ಕನೆಕ್ಟ್ ಆಗಿರಿ</translation>
 <translation id="8221728673725659466">ಕ್ಯಾಲಿಬ್ರೇಶನ್ ಪೂರ್ಣಗೊಂಡಿದೆ</translation>
 <translation id="8226628635270268143">ನಿಮ್ಮ ಮೆಚ್ಚಿನ ಫೋಟೋಗಳು ಮತ್ತು ಆಲ್ಬಮ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
+<translation id="8227119283605456246">ಫೈಲ್‌‎ ಲಗತ್ತಿಸಿ</translation>
 <translation id="8230672074305416752">ಡೀಫಾಲ್ಟ್ ನೆಟ್‌ವರ್ಕ್ ಗೇಟ್‌ವೇಗೆ ಪಿಂಗ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ</translation>
 <translation id="8246209727385807362">ಅಪರಿಚಿತ ವಾಹಕ</translation>
 <translation id="827422111966801947">ಇಂಡಿಗೊ</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb
index 0de91e97..d42d629 100644
--- a/chromeos/strings/chromeos_strings_ko.xtb
+++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">탭</translation>
 <translation id="6692996468359469499">선택 항목과 관련된 정보 얻기</translation>
 <translation id="6704062477274546131">DNS 변환</translation>
-<translation id="6721744718589119342">이메일로 추가 정보나 새로운 소식을 전송하도록 허용</translation>
 <translation id="6723839937902243910">전원</translation>
 <translation id="6723847290197874913">키보드 백라이트</translation>
 <translation id="672609503628871915">새로운 기능 알아보기</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">연결</translation>
 <translation id="8221728673725659466">보정 완료</translation>
 <translation id="8226628635270268143">좋아하는 사진 및 앨범을 선택합니다.</translation>
+<translation id="8227119283605456246">파일 첨부</translation>
 <translation id="8230672074305416752">기본 네트워크 게이트웨이를 핑할 수 없습니다.</translation>
 <translation id="8246209727385807362">알 수 없는 이동통신사</translation>
 <translation id="827422111966801947">인디고</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb
index a3e38150..ae532b6e 100644
--- a/chromeos/strings/chromeos_strings_ky.xtb
+++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">ЖАҢЫРТУУ</translation>
 <translation id="3009958530611748826">Скандалган нерселерди сактоо үчүн папка тандаңыз</translation>
 <translation id="3017079585324758401">Фон</translation>
+<translation id="302435934487327038">Орнотулду</translation>
 <translation id="3027578600144895987">Камераны жабуу</translation>
 <translation id="3031560714565892478">Түзмөк — видео камера.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />мА</translation>
@@ -664,13 +665,13 @@
 <translation id="6618744767048954150">Иштеп жатат</translation>
 <translation id="6620487321149975369">Басып чыгаруу тапшырмаларын кол менен өчүрмөйүнчө, алар таржымалда сакталат</translation>
 <translation id="6643016212128521049">Тазалоо</translation>
+<translation id="6644568396961840069">Файл сакталган жок. Башка тышкы сактагычты сайып көрүңүз же кийинчерээк кайталаңыз.</translation>
 <translation id="6647510110698214773">Шифрлөөнүн алгоритми</translation>
 <translation id="6650062777702288430">Кана/сандар менен тамгалар которгучу</translation>
 <translation id="6657585470893396449">Сырсөз</translation>
 <translation id="6659594942844771486">Өтмөк</translation>
 <translation id="6692996468359469499">Сиз тандаган нерсеге тиешелүү маалыматты алуу</translation>
 <translation id="6704062477274546131">DNS дааналыгы</translation>
-<translation id="6721744718589119342">Кошумча маалыматтар менен соңку жаңылыктарды электрондук кат аркылуу кабарлап турабыз</translation>
 <translation id="6723839937902243910">Кубат</translation>
 <translation id="6723847290197874913">Баскычтоптун жарыгы</translation>
 <translation id="672609503628871915">Эмне жаңылык бар</translation>
@@ -826,6 +827,7 @@
 <translation id="8217675307824400706">Туташыңыз</translation>
 <translation id="8221728673725659466">Калибрдөө аяктады</translation>
 <translation id="8226628635270268143">Сүйүктүү сүрөттөр менен альбомдорду тандоо</translation>
+<translation id="8227119283605456246">Файл тиркөө</translation>
 <translation id="8230672074305416752">Демейки тармактын шлюзуна ping сурамы жөнөтүлгөн жок</translation>
 <translation id="8246209727385807362">Белгисиз байланыш оператору</translation>
 <translation id="827422111966801947">Индиго</translation>
diff --git a/chromeos/strings/chromeos_strings_lo.xtb b/chromeos/strings/chromeos_strings_lo.xtb
index ec28b21..00680ed 100644
--- a/chromeos/strings/chromeos_strings_lo.xtb
+++ b/chromeos/strings/chromeos_strings_lo.xtb
@@ -671,7 +671,6 @@
 <translation id="6659594942844771486">ແຖບ</translation>
 <translation id="6692996468359469499">ຮັບຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບການເລືອກຂອງທ່ານ</translation>
 <translation id="6704062477274546131">ຄວາມລະອຽດ DNS</translation>
-<translation id="6721744718589119342">ພວກເຮົາອາດສົ່ງອີເມວຫາທ່ານສຳລັບຂໍ້ມູນ ຫຼື ອັບເດດເພີ່ມເຕີມ</translation>
 <translation id="6723839937902243910">ໄຟ</translation>
 <translation id="6723847290197874913">ໄຟແປ້ນພິມ</translation>
 <translation id="672609503628871915">ເບິ່ງ​ມີອັນໃດໃຫມ່</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">ເລີ່ມການເຊື່ອມຕໍ່</translation>
 <translation id="8221728673725659466">​ການ​ປັບ​ທຽ​ບ​ສຳ​ເລັດ​ແລ້ວ</translation>
 <translation id="8226628635270268143">ເລືອກຮູບພາບ ແລະ ອະລະບໍ້າທີ່ທ່ານມັກ</translation>
+<translation id="8227119283605456246">ຄັດ​ຕິດ​ໄຟລ໌</translation>
 <translation id="8230672074305416752">ໃຊ້ຄຳສັ່ງ ping ກັບເກດເວເຄືອຂ່າຍຄ່າເລີ່ມຕົ້ນບໍ່ໄດ້</translation>
 <translation id="8246209727385807362">ຜູ້ໃຫ້ບໍລິການທີ່ບໍ່ຮູ້ຈັກ</translation>
 <translation id="827422111966801947">ສີຄາມ</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb
index 4ccca18..3e4a9cb9 100644
--- a/chromeos/strings/chromeos_strings_lt.xtb
+++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">ATNAUJINTI</translation>
 <translation id="3009958530611748826">Pasirinkite aplanką, kuriame pageidaujate išsaugoti</translation>
 <translation id="3017079585324758401">Fonas</translation>
+<translation id="302435934487327038">Įdiegta</translation>
 <translation id="3027578600144895987">Uždaryti vaizdo kamerą</translation>
 <translation id="3031560714565892478">Įrenginys yra vaizdo kamera.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
@@ -664,13 +665,13 @@
 <translation id="6618744767048954150">Vykdoma</translation>
 <translation id="6620487321149975369">Spausdinimo užduotys bus rodomos istorijoje, nebent bus pašalintos neautomatiškai</translation>
 <translation id="6643016212128521049">Išvalyti</translation>
+<translation id="6644568396961840069">Failo nepavyko išsaugoti. Pabandykite prijungti kitą išorinę saugyklą arba vėliau bandykite dar kartą.</translation>
 <translation id="6647510110698214773">Šifruotės algoritmas</translation>
 <translation id="6650062777702288430">Kana / raidinių ir skaitinių simbolių jungiklis</translation>
 <translation id="6657585470893396449">Slaptažodis</translation>
 <translation id="6659594942844771486">Skirtukas</translation>
 <translation id="6692996468359469499">Su pasirinkimu susijusios informacijos gavimas</translation>
 <translation id="6704062477274546131">DNS pavadinimų vertimas</translation>
-<translation id="6721744718589119342">Išsiųsime jums el. laišką, jei reikės daugiau informacijos ar naujienų</translation>
 <translation id="6723839937902243910">Maitinimas</translation>
 <translation id="6723847290197874913">Klaviatūros foninis apšvietimas</translation>
 <translation id="672609503628871915">Sužinokite, kas naujo</translation>
@@ -826,6 +827,7 @@
 <translation id="8217675307824400706">Prisijungimas</translation>
 <translation id="8221728673725659466">Kalibravimas atliktas</translation>
 <translation id="8226628635270268143">Pasirinkite mėgstamiausias nuotraukas ir albumus</translation>
+<translation id="8227119283605456246">Pridėtas failas</translation>
 <translation id="8230672074305416752">Nepavyko patikrinti ryšio su numatytuoju tinklų sietuvu</translation>
 <translation id="8246209727385807362">Nežinomas operatorius</translation>
 <translation id="827422111966801947">Indigo spalva</translation>
diff --git a/chromeos/strings/chromeos_strings_lv.xtb b/chromeos/strings/chromeos_strings_lv.xtb
index 12b80ac2..26c1caa 100644
--- a/chromeos/strings/chromeos_strings_lv.xtb
+++ b/chromeos/strings/chromeos_strings_lv.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Cilne</translation>
 <translation id="6692996468359469499">Iespēja saņemt informāciju par atlasīto saturu</translation>
 <translation id="6704062477274546131">DNS atrise</translation>
-<translation id="6721744718589119342">Mēs varam nosūtīt jums e-pasta ziņojumu, ja mums būs nepieciešama plašāka informācija vai vēlēsimies paziņot jaunumus</translation>
 <translation id="6723839937902243910">Strāvas padeve</translation>
 <translation id="6723847290197874913">Tastatūras fona apgaismojums</translation>
 <translation id="672609503628871915">Uzzināt jaunumus</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Savienojuma izveide</translation>
 <translation id="8221728673725659466">Kalibrēšana pabeigta</translation>
 <translation id="8226628635270268143">Izvēlieties savus iecienītākos fotoattēlus un albumus.</translation>
+<translation id="8227119283605456246">Pievienot failu</translation>
 <translation id="8230672074305416752">Neizdevās ehotestēt noklusējuma tīkla vārteju</translation>
 <translation id="8246209727385807362">Nezināms operators</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_mk.xtb b/chromeos/strings/chromeos_strings_mk.xtb
index 0bbcc5f..c2f353d 100644
--- a/chromeos/strings/chromeos_strings_mk.xtb
+++ b/chromeos/strings/chromeos_strings_mk.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Картичка</translation>
 <translation id="6692996468359469499">Добивајте информации поврзани со вашиот избор</translation>
 <translation id="6704062477274546131">Одредување со DNS</translation>
-<translation id="6721744718589119342">Ќе ви испратиме е-порака за повеќе информации или известувања</translation>
 <translation id="6723839937902243910">Енергија</translation>
 <translation id="6723847290197874913">Заднинско светло на тастатура</translation>
 <translation id="672609503628871915">Погледнете што има ново</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Поврзете се</translation>
 <translation id="8221728673725659466">Калибрацијата заврши</translation>
 <translation id="8226628635270268143">Изберете ги омилените фотографии и албуми</translation>
+<translation id="8227119283605456246">Прикачи датотека</translation>
 <translation id="8230672074305416752">Не успеа да се пингува стандардниот мрежен портал</translation>
 <translation id="8246209727385807362">Непознат оператор</translation>
 <translation id="827422111966801947">Индиго</translation>
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb
index 9d4e804..263c759 100644
--- a/chromeos/strings/chromeos_strings_ml.xtb
+++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">റീഫ്രഷ് ചെയ്യുക</translation>
 <translation id="3009958530611748826">സംരക്ഷിക്കാൻ ഒരു ഫോൾഡർ തിരഞ്ഞെടുക്കുക</translation>
 <translation id="3017079585324758401">പശ്ചാത്തലം</translation>
+<translation id="302435934487327038">ഇൻസ്റ്റാൾ ചെയ്യൽ പൂർത്തിയായി</translation>
 <translation id="3027578600144895987">ക്യാമറ അടയ്ക്കുക</translation>
 <translation id="3031560714565892478">ഉപകരണം ഒരു വീഡിയോ ക്യാമറയാണ്.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
@@ -663,13 +664,13 @@
 <translation id="6618744767048954150">റൺ ചെയ്യുന്നു</translation>
 <translation id="6620487321149975369">നേരിട്ട് നീക്കം ചെയ്തില്ലെങ്കിൽ പ്രിന്റ് ജോലികൾ ചരിത്രത്തിൽ ദൃശ്യമാകും</translation>
 <translation id="6643016212128521049">മായ്‌ക്കുക</translation>
+<translation id="6644568396961840069">ഫയൽ സംരക്ഷിക്കാനായില്ല. മറ്റൊരു ബാഹ്യ സ്‌റ്റോറേജ് പ്ലഗ് ഇൻ ചെയ്ത് ശ്രമിക്കുക, അല്ലെങ്കിൽ പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="6647510110698214773">എൻക്രിപ്ഷൻ അൽഗോരിതം</translation>
 <translation id="6650062777702288430">കാന/ആൽഫാന്യൂമെറിക് സ്വിച്ച്</translation>
 <translation id="6657585470893396449">പാസ്‌വേഡ്</translation>
 <translation id="6659594942844771486">ബ്രൗസർ ടാബ്</translation>
 <translation id="6692996468359469499">നിങ്ങളുടെ തിരഞ്ഞെടുക്കലുമായി ബന്ധപ്പെട്ട വിവരങ്ങൾ നേടുക</translation>
 <translation id="6704062477274546131">DNS റെസല്യൂഷൻ</translation>
-<translation id="6721744718589119342">കൂടുതൽ വിവരങ്ങൾക്കും അപ്ഡേറ്റുകൾക്കുമായി ഞങ്ങൾക്ക് നിങ്ങളെ ഇമെയിലിൽ ബന്ധപ്പെടാം</translation>
 <translation id="6723839937902243910">പവർ</translation>
 <translation id="6723847290197874913">കീബോർഡ് ബാക്ക്‌ലൈറ്റ്</translation>
 <translation id="672609503628871915">പുതിയതെന്താണെന്ന് കാണുക</translation>
@@ -825,6 +826,7 @@
 <translation id="8217675307824400706">കണക്റ്റ് ചെയ്യുക</translation>
 <translation id="8221728673725659466">കാലിബ്രേഷൻ പൂർത്തിയായി</translation>
 <translation id="8226628635270268143">നിങ്ങളുടെ പ്രിയപ്പെട്ട ഫോട്ടോകളും ആൽബങ്ങളും തിരഞ്ഞെടുക്കുക</translation>
+<translation id="8227119283605456246">ഫയൽ അറ്റാച്ചുചെയ്യുക</translation>
 <translation id="8230672074305416752">ഡിഫോൾട്ട് നെറ്റ്‌വർക്ക് ഗേറ്റ്‍വേ പിംഗ് ചെയ്യാനായില്ല</translation>
 <translation id="8246209727385807362">അജ്ഞാത സേവനദാതാവ്</translation>
 <translation id="827422111966801947">ഇൻഡിഗോ</translation>
diff --git a/chromeos/strings/chromeos_strings_mn.xtb b/chromeos/strings/chromeos_strings_mn.xtb
index 31266ce4..41588a53 100644
--- a/chromeos/strings/chromeos_strings_mn.xtb
+++ b/chromeos/strings/chromeos_strings_mn.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Таб</translation>
 <translation id="6692996468359469499">Сонголттойгоо холбоотой мэдээлэл авах</translation>
 <translation id="6704062477274546131">DNS-н тайлал</translation>
-<translation id="6721744718589119342">Бид нэмэлт мэдээлэл эсвэл шинэчлэлтийг тань руу имэйлээр илгээж болзошгүй</translation>
 <translation id="6723839937902243910">Эрчим хүч</translation>
 <translation id="6723847290197874913">Гарын дэвсгэр өнгө</translation>
 <translation id="672609503628871915">Шинэ зүйл юу байна?</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Холбогдох</translation>
 <translation id="8221728673725659466">Тохируулж дууслаа</translation>
 <translation id="8226628635270268143">Дуртай зураг, цомгуудаа сонгоно уу</translation>
+<translation id="8227119283605456246">Файл хавсаргах</translation>
 <translation id="8230672074305416752">Сүлжээний өгөгдмөл гэйтвэйд пин илгээж чадсангүй</translation>
 <translation id="8246209727385807362">Тодорхойгүй оператор компани</translation>
 <translation id="827422111966801947">Хөхөвтөр нил ягаан</translation>
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb
index 4c508d0..15679e6 100644
--- a/chromeos/strings/chromeos_strings_mr.xtb
+++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">ब्राउझर टॅब</translation>
 <translation id="6692996468359469499">तुमच्या निवडीशी संबंधित माहिती मिळवा</translation>
 <translation id="6704062477274546131">DNS रिझोल्युशन</translation>
-<translation id="6721744718589119342">आम्ही अधिक माहिती आणि अपडेटसाठी तुम्हाला ईमेल पाठवू शकतो</translation>
 <translation id="6723839937902243910">सामर्थ्य</translation>
 <translation id="6723847290197874913">कीबोर्ड बॅकलाइट</translation>
 <translation id="672609503628871915">नवीन काय ते पहा</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">कनेक्ट व्हा</translation>
 <translation id="8221728673725659466">कॅलिब्रेशन पूर्ण</translation>
 <translation id="8226628635270268143">तुमचे आवडते फोटो आणि अल्बम निवडा</translation>
+<translation id="8227119283605456246">फाईल संलग्न करा</translation>
 <translation id="8230672074305416752">डीफॉल्ट नेटवर्क गेटवे पिंग करता आला नाही</translation>
 <translation id="8246209727385807362">माहीत नसलेला वाहक</translation>
 <translation id="827422111966801947">नीळ</translation>
diff --git a/chromeos/strings/chromeos_strings_ms.xtb b/chromeos/strings/chromeos_strings_ms.xtb
index c058a00..5610a7f 100644
--- a/chromeos/strings/chromeos_strings_ms.xtb
+++ b/chromeos/strings/chromeos_strings_ms.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Tab</translation>
 <translation id="6692996468359469499">Dapatkan maklumat yang berkaitan dengan pilihan anda</translation>
 <translation id="6704062477274546131">Peleraian DNS</translation>
-<translation id="6721744718589119342">Kami mungkin menghantar e-mel kepada anda untuk maklumat atau kemaskinian lanjut</translation>
 <translation id="6723839937902243910">Kuasa</translation>
 <translation id="6723847290197874913">Lampu latar papan kekunci</translation>
 <translation id="672609503628871915">Lihat apa yang baharu</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Berhubung</translation>
 <translation id="8221728673725659466">Penentukuran selesai</translation>
 <translation id="8226628635270268143">Pilih foto dan album kegemaran anda</translation>
+<translation id="8227119283605456246">Lampirkan fail</translation>
 <translation id="8230672074305416752">Gagal untuk ping get laluan rangkaian lalai</translation>
 <translation id="8246209727385807362">Pembawa tidak diketahui</translation>
 <translation id="827422111966801947">Biru Nila</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb
index 1813099..0fdc49ed 100644
--- a/chromeos/strings/chromeos_strings_my.xtb
+++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">ပြန်လည်စတင်ရန်</translation>
 <translation id="3009958530611748826">သိမ်းရန် ဖိုင်တွဲကို ရွေးပါ</translation>
 <translation id="3017079585324758401">နောက်ခံ</translation>
+<translation id="302435934487327038">ထည့်သွင်းပြီးပါပြီ</translation>
 <translation id="3027578600144895987">ကင်မရာပိတ်ရန်</translation>
 <translation id="3031560714565892478">ကိရိယာသည် ဗီဒီယိုကင်မရာ ဖြစ်သည်။</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
@@ -663,13 +664,13 @@
 <translation id="6618744767048954150">လုပ်ဆောင်နေသည်</translation>
 <translation id="6620487321149975369">ပရင့်ထုတ်ရန်ဖိုင်များကို ကိုယ်တိုင်မဖယ်ရှားပါက မှတ်တမ်းတွင် ပြပါမည်</translation>
 <translation id="6643016212128521049">ရှင်းရန်</translation>
+<translation id="6644568396961840069">ဖိုင်ကို သိမ်း၍မရပါ။ အခြားပြင်ပသိုလှောင်ခန်းတစ်ခုကို ပလတ်တပ်ကြည့်ပါ (သို့) နောက်မှထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="6647510110698214773">အသွင်ဝှက်ခြင်း လုပ်နည်းစနစ်</translation>
 <translation id="6650062777702288430">ခါန/အက္ခရာနှင့် ကိန်းဂဏန်းများ ပြောင်းရန်</translation>
 <translation id="6657585470893396449">စကားဝှက်</translation>
 <translation id="6659594942844771486">တဘ်</translation>
 <translation id="6692996468359469499">သင့်ရွေးချယ်မှုနှင့် သက်ဆိုင်သည့် အချက်အလက်များ ရယူခြင်း</translation>
 <translation id="6704062477274546131">DNS ဖြေရှင်းချက်</translation>
-<translation id="6721744718589119342">နောက်ထပ်အချက်အလက်များ (သို့) အပ်ဒိတ်များအတွက် သင့်ကို အီးမေးလ်ပို့နိုင်သည်</translation>
 <translation id="6723839937902243910">ပါဝါ</translation>
 <translation id="6723847290197874913">ကီးဘုတ်နောက်ခံအလင်းရောင်</translation>
 <translation id="672609503628871915">အသစ် ဘာတွေလဲ ကြည့်ရအောင်</translation>
@@ -825,6 +826,7 @@
 <translation id="8217675307824400706">ချိတ်ဆက်လိုက်ပါ</translation>
 <translation id="8221728673725659466">ချိန်ညှိမှု ပြီးဆုံး</translation>
 <translation id="8226628635270268143">သင့်အကြိုက်ဆုံး ဓာတ်ပုံနှင့် အယ်လ်ဘမ်များ ရွေးချယ်ရန်</translation>
+<translation id="8227119283605456246">ပူးတွဲဖိုင်</translation>
 <translation id="8230672074305416752">မူလကွန်ရက်ဂိတ်ဝကို ပင်လုပ်၍မရပါ</translation>
 <translation id="8246209727385807362">အမျိုးအမည်မသိရသော ဝန်ဆောင်မှုပေးသူ</translation>
 <translation id="827422111966801947">မဲနယ်</translation>
diff --git a/chromeos/strings/chromeos_strings_ne.xtb b/chromeos/strings/chromeos_strings_ne.xtb
index 08d94a47..e7b65bfb 100644
--- a/chromeos/strings/chromeos_strings_ne.xtb
+++ b/chromeos/strings/chromeos_strings_ne.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">पुनः ताजा गर्नुहोस्</translation>
 <translation id="3009958530611748826">सुरक्षित गर्न कुनै फोल्डर चयन गर्नुहोस्</translation>
 <translation id="3017079585324758401">पृष्ठभूमि</translation>
+<translation id="302435934487327038">इन्स्टल गर्ने प्रक्रिया पूरा भयो</translation>
 <translation id="3027578600144895987">क्यामेरा बन्द गर्नुहोस्</translation>
 <translation id="3031560714565892478">यो डिभाइस भिडियो क्यामेरा हो।</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
@@ -663,13 +664,13 @@
 <translation id="6618744767048954150">जाँच हुँदै छ</translation>
 <translation id="6620487321149975369">तपाईंले प्रिन्टसम्बन्धी कार्यहरू नहटाउँदासम्म ती कार्यहरू इतिहासमा देखिने छन्</translation>
 <translation id="6643016212128521049">खालि गर्नुहोस्</translation>
+<translation id="6644568396961840069">फाइल सेभ गर्न सकिएन। अर्कै बाह्य भण्डारण घुसाई हेर्नुहोस् वा पछि फेरि प्रयास गर्नुहोस्।</translation>
 <translation id="6647510110698214773">इन्क्रिप्सनसम्बन्धी एल्गोरिदम</translation>
 <translation id="6650062777702288430">काना र अङ्क तथा अक्षरमिश्रित वर्णहरू अदलबदल गर्ने की</translation>
 <translation id="6657585470893396449">पासवर्ड</translation>
 <translation id="6659594942844771486">ब्राउजर ट्याब</translation>
 <translation id="6692996468359469499">आफ्नो चयनसँग सम्बन्धित जानकारी प्राप्त गर्नुहोस्</translation>
 <translation id="6704062477274546131">DNS रिजोल्युसन</translation>
-<translation id="6721744718589119342">हामी तपाईंलाई इमेल पठाएर थप जानकारी वा अद्यावधिक सूचना माग्न सक्छौँ</translation>
 <translation id="6723839937902243910">पावर</translation>
 <translation id="6723847290197874913">किबोर्डको ब्याकलाइट</translation>
 <translation id="672609503628871915">नयाँ के छ हेर्नुहोस्</translation>
@@ -825,6 +826,7 @@
 <translation id="8217675307824400706">कनेक्ट गर्नुहोस्</translation>
 <translation id="8221728673725659466">क्यालिब्रेट गर्ने कार्य पूरा भयो</translation>
 <translation id="8226628635270268143">आफूलाई मन पर्ने फोटो र एल्बमहरू छनौट गर्नुहोस्</translation>
+<translation id="8227119283605456246">फाइल समावेश गर्नुहोस्</translation>
 <translation id="8230672074305416752">डिफल्ट नेटवर्कको गेटवे पिङ गर्न सकिएन</translation>
 <translation id="8246209727385807362">अज्ञात सेवा प्रदायक</translation>
 <translation id="827422111966801947">इन्डिगो</translation>
diff --git a/chromeos/strings/chromeos_strings_nl.xtb b/chromeos/strings/chromeos_strings_nl.xtb
index 478a62b..212cd81 100644
--- a/chromeos/strings/chromeos_strings_nl.xtb
+++ b/chromeos/strings/chromeos_strings_nl.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Browsertabblad</translation>
 <translation id="6692996468359469499">Informatie over je selectie bekijken</translation>
 <translation id="6704062477274546131">DNS-resolutie</translation>
-<translation id="6721744718589119342">We kunnen je een e-mail sturen als we meer informatie nodig hebben of als er updates zijn</translation>
 <translation id="6723839937902243910">Voeding</translation>
 <translation id="6723847290197874913">Achtergrondverlichting toetsenbord</translation>
 <translation id="672609503628871915">Wat is er nieuw?</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Verbinding maken</translation>
 <translation id="8221728673725659466">Kalibratie afgerond</translation>
 <translation id="8226628635270268143">Kies je favoriete foto's en albums</translation>
+<translation id="8227119283605456246">Bestand bijvoegen</translation>
 <translation id="8230672074305416752">Kan de standaard netwerkgateway niet pingen</translation>
 <translation id="8246209727385807362">Onbekende provider</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb
index 75ff320..3456867 100644
--- a/chromeos/strings/chromeos_strings_no.xtb
+++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Fane</translation>
 <translation id="6692996468359469499">Få informasjon tilknyttet det du har merket</translation>
 <translation id="6704062477274546131">DNS-konvertering</translation>
-<translation id="6721744718589119342">Vi kan sende deg e-post med oppdateringer eller for å be om mer informasjon</translation>
 <translation id="6723839937902243910">Strøm</translation>
 <translation id="6723847290197874913">Bakgrunnsbelysning for tastatur</translation>
 <translation id="672609503628871915">Se hva som er nytt</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Koble til</translation>
 <translation id="8221728673725659466">Kalibreringen er fullført</translation>
 <translation id="8226628635270268143">Velg favorittbildene og -albumene dine</translation>
+<translation id="8227119283605456246">Legg ved fil</translation>
 <translation id="8230672074305416752">Kunne ikke pinge gatewayen for standardnettverket</translation>
 <translation id="8246209727385807362">Ukjent operatør</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_or.xtb b/chromeos/strings/chromeos_strings_or.xtb
index 7ec5a59..575adb7 100644
--- a/chromeos/strings/chromeos_strings_or.xtb
+++ b/chromeos/strings/chromeos_strings_or.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">ଟାବ୍</translation>
 <translation id="6692996468359469499">ଆପଣଙ୍କ ଚୟନ ସମ୍ବନ୍ଧିତ ସୂଚନା ପାଆନ୍ତୁ</translation>
 <translation id="6704062477274546131">DNS ରିଜୋଲ୍ୟୁସନ୍</translation>
-<translation id="6721744718589119342">ଅଧିକ ସୂଚନା କିମ୍ବା ଅପଡେଟ ପାଇଁ ଆମେ ଆପଣଙ୍କୁ ଇମେଲ କରିପାରୁ</translation>
 <translation id="6723839937902243910">ପାୱର୍</translation>
 <translation id="6723847290197874913">କୀବୋର୍ଡ ବ୍ୟାକଲାଇଟ</translation>
 <translation id="672609503628871915">କ’ଣ ନୂଆ ଅଛି ଦେଖନ୍ତୁ</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">ସଂଯୋଗ କରନ୍ତୁ</translation>
 <translation id="8221728673725659466">କାଲିବ୍ରେସନ ସମ୍ପୂର୍ଣ୍ଣ ହୋଇଛି</translation>
 <translation id="8226628635270268143">ଆପଣଙ୍କ ପସନ୍ଦର ଫଟୋ ଏବଂ ଆଲବମଗୁଡ଼ିକ ବାଛନ୍ତୁ</translation>
+<translation id="8227119283605456246">ଫାଇଲ୍ ସଂଲଗ୍ନ କରନ୍ତୁ</translation>
 <translation id="8230672074305416752">ଡିଫଲ୍ଟ ନେଟୱାର୍କ ଗେଟୱେକୁ ପିଙ୍ଗ୍ କରିବାରେ ବିଫଳ ହୋଇଛି</translation>
 <translation id="8246209727385807362">ଅଜଣା ବାହକ</translation>
 <translation id="827422111966801947">ଘନନୀଳ</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb
index 7fc8fd9..f8549465 100644
--- a/chromeos/strings/chromeos_strings_pa.xtb
+++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -671,7 +671,6 @@
 <translation id="6659594942844771486">ਟੈਬ</translation>
 <translation id="6692996468359469499">ਆਪਣੀ ਚੋਣ ਨਾਲ ਸੰਬੰਧਿਤ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰੋ</translation>
 <translation id="6704062477274546131">DNS ਰੈਜ਼ੋਲਿਊਸ਼ਨ</translation>
-<translation id="6721744718589119342">ਅਸੀਂ ਤੁਹਾਨੂੰ ਹੋਰ ਜਾਣਕਾਰੀ ਜਾਂ ਅੱਪਡੇਟਾਂ ਲਈ ਈਮੇਲ ਭੇਜ ਸਕਦੇ ਹਾਂ</translation>
 <translation id="6723839937902243910">ਪਾਵਰ</translation>
 <translation id="6723847290197874913">ਕੀ-ਬੋਰਡ ਬੈਕਲਾਈਟ</translation>
 <translation id="672609503628871915">ਦੇਖੋ ਕਿ ਕੀ ਨਵਾਂ ਹੈ</translation>
@@ -827,6 +826,7 @@
 <translation id="8217675307824400706">ਕਨੈਕਟ ਹੋਵੋ</translation>
 <translation id="8221728673725659466">ਕੈਲੀਬਰੇਸ਼ਨ ਮੁਕੰਮਲ ਹੋਈ</translation>
 <translation id="8226628635270268143">ਆਪਣੀਆਂ ਮਨਪਸੰਦ ਫ਼ੋਟੋਆਂ ਅਤੇ ਐਲਬਮਾਂ ਚੁਣੋ</translation>
+<translation id="8227119283605456246">ਫ਼ਾਈਲ ਨੱਥੀ ਕਰੋ</translation>
 <translation id="8230672074305416752">ਪੂਰਵ-ਨਿਰਧਾਰਤ ਨੈੱਟਵਰਕ ਗੇਟਵੇ ਨੂੰ ਪਿੰਗ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ</translation>
 <translation id="8246209727385807362">ਅਗਿਆਤ ਕੈਰੀਅਰ</translation>
 <translation id="827422111966801947">ਜਾਮਨੀ ਨੀਲਾ</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb
index 261a2814..f59f13d 100644
--- a/chromeos/strings/chromeos_strings_pl.xtb
+++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Karta</translation>
 <translation id="6692996468359469499">Uzyskiwanie informacji związanych z zaznaczoną treścią</translation>
 <translation id="6704062477274546131">Rozwiązywanie nazw DNS</translation>
-<translation id="6721744718589119342">Możemy wysyłać do Ciebie e-maile z prośbą o dodatkowe szczegóły lub aktualne informacje</translation>
 <translation id="6723839937902243910">Zasilanie</translation>
 <translation id="6723847290197874913">Podświetlenie klawiatury</translation>
 <translation id="672609503628871915">Zobacz, co nowego</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Połącz się</translation>
 <translation id="8221728673725659466">Kalibracja ukończona</translation>
 <translation id="8226628635270268143">Wybierz ulubione zdjęcia i albumy</translation>
+<translation id="8227119283605456246">Załącz plik</translation>
 <translation id="8230672074305416752">Nie udało się sprawdzić pingiem domyślnej bramy sieciowej</translation>
 <translation id="8246209727385807362">Nieznany operator</translation>
 <translation id="827422111966801947">Indygo</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb
index 2d148261..d113aea 100644
--- a/chromeos/strings/chromeos_strings_pt-BR.xtb
+++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">ATUALIZAR</translation>
 <translation id="3009958530611748826">Selecione em que pasta quer salvar</translation>
 <translation id="3017079585324758401">Plano de fundo</translation>
+<translation id="302435934487327038">Instalação concluída</translation>
 <translation id="3027578600144895987">Fechar a câmera</translation>
 <translation id="3031560714565892478">Este dispositivo é uma câmera de vídeo.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
@@ -664,13 +665,13 @@
 <translation id="6618744767048954150">Em execução</translation>
 <translation id="6620487321149975369">Os trabalhos de impressão aparecerão no histórico, a menos que sejam removidos manualmente</translation>
 <translation id="6643016212128521049">Limpar</translation>
+<translation id="6644568396961840069">Não foi possível salvar o arquivo. Conecte outro tipo armazenamento externo ou tente novamente mais tarde.</translation>
 <translation id="6647510110698214773">Algoritmo de criptografia</translation>
 <translation id="6650062777702288430">Alternar entre o teclado kana e o alfanumérico</translation>
 <translation id="6657585470893396449">Senha</translation>
 <translation id="6659594942844771486">Guia</translation>
 <translation id="6692996468359469499">Veja informações relacionadas à sua seleção</translation>
 <translation id="6704062477274546131">Resolução de DNS</translation>
-<translation id="6721744718589119342">Podemos enviar e-mails a você pedindo mais informações ou atualizações</translation>
 <translation id="6723839937902243910">Energia</translation>
 <translation id="6723847290197874913">Luz de fundo do teclado</translation>
 <translation id="672609503628871915">Veja o que há de novo</translation>
@@ -826,6 +827,7 @@
 <translation id="8217675307824400706">Conectar</translation>
 <translation id="8221728673725659466">Calibragem completa</translation>
 <translation id="8226628635270268143">Escolher seus álbuns e fotos favoritos</translation>
+<translation id="8227119283605456246">Anexar arquivo</translation>
 <translation id="8230672074305416752">Falha no ping do gateway de rede padrão</translation>
 <translation id="8246209727385807362">Operadora desconhecida</translation>
 <translation id="827422111966801947">Índigo</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb
index 8cbd07b4e..9e6ec9aa 100644
--- a/chromeos/strings/chromeos_strings_pt-PT.xtb
+++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Separador</translation>
 <translation id="6692996468359469499">Obtenha informações relacionadas com a sua seleção</translation>
 <translation id="6704062477274546131">Resolução de DNS</translation>
-<translation id="6721744718589119342">Para mais informações ou atualizações, podemos enviar-lhe emails</translation>
 <translation id="6723839937902243910">Alimentação</translation>
 <translation id="6723847290197874913">Retroiluminação do teclado</translation>
 <translation id="672609503628871915">Descobrir as novidades mais recentes</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Estabeleça ligação</translation>
 <translation id="8221728673725659466">Calibração concluída</translation>
 <translation id="8226628635270268143">Escolha os seus álbuns ou fotos favoritos.</translation>
+<translation id="8227119283605456246">Anexar ficheiro</translation>
 <translation id="8230672074305416752">Falha ao enviar ping ao gateway da rede predefinida.</translation>
 <translation id="8246209727385807362">Operador desconhecido</translation>
 <translation id="827422111966801947">Índigo</translation>
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb
index de4f26f..e0adca10 100644
--- a/chromeos/strings/chromeos_strings_ro.xtb
+++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Filă</translation>
 <translation id="6692996468359469499">Obține informații despre selecție</translation>
 <translation id="6704062477274546131">Rezolvare DNS</translation>
-<translation id="6721744718589119342">Îți putem trimite e-mailuri pentru mai multe informații sau noutăți</translation>
 <translation id="6723839937902243910">Alimentare</translation>
 <translation id="6723847290197874913">Retroiluminarea tastaturii</translation>
 <translation id="672609503628871915">Vedeți noutățile</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Conectează-te</translation>
 <translation id="8221728673725659466">Calibrare finalizată</translation>
 <translation id="8226628635270268143">Alege fotografiile și albumele preferate</translation>
+<translation id="8227119283605456246">Atașează un fișier</translation>
 <translation id="8230672074305416752">Nu s-a putut da ping către gateway-ul de rețea prestabilit</translation>
 <translation id="8246209727385807362">Operator necunoscut</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb
index 97c625b..cf5317f 100644
--- a/chromeos/strings/chromeos_strings_ru.xtb
+++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Вкладка</translation>
 <translation id="6692996468359469499">Получайте информацию об объектах на экране</translation>
 <translation id="6704062477274546131">Разрешение DNS</translation>
-<translation id="6721744718589119342">Мы можем запрашивать у вас дополнительные сведения или уведомлять об обновлениях по электронной почте</translation>
 <translation id="6723839937902243910">Питание</translation>
 <translation id="6723847290197874913">Подсветка клавиатуры</translation>
 <translation id="672609503628871915">Узнать, что нового</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Подключение</translation>
 <translation id="8221728673725659466">Калибровка завершена</translation>
 <translation id="8226628635270268143">Выберите любимые фото и альбомы</translation>
+<translation id="8227119283605456246">Прикрепить файл</translation>
 <translation id="8230672074305416752">Не удалось выполнить проверку ping сетевого шлюза, заданного по умолчанию.</translation>
 <translation id="8246209727385807362">Неизвестный оператор</translation>
 <translation id="827422111966801947">Индиго</translation>
diff --git a/chromeos/strings/chromeos_strings_si.xtb b/chromeos/strings/chromeos_strings_si.xtb
index 0ea5961..9d1576c0 100644
--- a/chromeos/strings/chromeos_strings_si.xtb
+++ b/chromeos/strings/chromeos_strings_si.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">ටැබ</translation>
 <translation id="6692996468359469499">ඔබේ තේරීමට අදාළ තොරතුරු ලබා ගන්න</translation>
 <translation id="6704062477274546131">DNS විභේදනය</translation>
-<translation id="6721744718589119342">වැඩිදුර තොරතුරු හෝ යාවත්කාලීන කිරීම් සඳහා අප ඔබට ඉ-තැපැල් කළ හැකිය</translation>
 <translation id="6723839937902243910">බලය</translation>
 <translation id="6723847290197874913">යතුරු පුවරු පසු ආලෝකය</translation>
 <translation id="672609503628871915">අළුත් මොනවාදැයි බලන්න</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">සම්බන්ධ කර ගන්න</translation>
 <translation id="8221728673725659466">ක්‍රමාංකනය සම්පූර්ණයි</translation>
 <translation id="8226628635270268143">ඔබේ ප්‍රියතම ඡායාරූප සහ ඇල්බම තෝරන්න</translation>
+<translation id="8227119283605456246">ගොනුව අමුණන්න</translation>
 <translation id="8230672074305416752">පෙරනිමි ජාල වාහල පින්ග් කිරීම අසාර්ථක විය</translation>
 <translation id="8246209727385807362">නොදන්නා වාහකයෙකි</translation>
 <translation id="827422111966801947">අවරිය</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb
index 0b06b0e..e8b4250 100644
--- a/chromeos/strings/chromeos_strings_sk.xtb
+++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Karta</translation>
 <translation id="6692996468359469499">Získajte informácie súvisiace s vaším výberom</translation>
 <translation id="6704062477274546131">Prevod adresy IP na názov domény systémom DNS</translation>
-<translation id="6721744718589119342">Ďalšie informácie alebo aktuality vám môžeme poslať e‑mailom</translation>
 <translation id="6723839937902243910">Napájanie</translation>
 <translation id="6723847290197874913">Podsvietenie klávesnice</translation>
 <translation id="672609503628871915">Zobraziť novinky</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Pripojte sa</translation>
 <translation id="8221728673725659466">Kalibrácia bola dokončená</translation>
 <translation id="8226628635270268143">Vyberte svoje obľúbené fotky a albumy</translation>
+<translation id="8227119283605456246">Pripojiť súbor</translation>
 <translation id="8230672074305416752">Predvolenú bránu siete sa nepodarilo otestovať</translation>
 <translation id="8246209727385807362">Neznámy operátor</translation>
 <translation id="827422111966801947">Indigová</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb
index 6c0deb9..67ee03c 100644
--- a/chromeos/strings/chromeos_strings_sl.xtb
+++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Zavihek</translation>
 <translation id="6692996468359469499">Prejemanje podatkov, povezanih z izborom</translation>
 <translation id="6704062477274546131">Razrešitev DNS-ja</translation>
-<translation id="6721744718589119342">Morda vam bomo poslali e-poštno sporočilo zaradi več informacij ali obvestil.</translation>
 <translation id="6723839937902243910">Napajanje</translation>
 <translation id="6723847290197874913">Osvetlitev tipkovnice</translation>
 <translation id="672609503628871915">Oglejte si novosti</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Povežite se</translation>
 <translation id="8221728673725659466">Umerjanje je končano</translation>
 <translation id="8226628635270268143">Izberite priljubljene fotografije in albume</translation>
+<translation id="8227119283605456246">Prilaganje datoteke</translation>
 <translation id="8230672074305416752">Ni mogoče preveriti privzetega prehoda omrežja</translation>
 <translation id="8246209727385807362">Neznani operater</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_sq.xtb b/chromeos/strings/chromeos_strings_sq.xtb
index 23efbac..684d272 100644
--- a/chromeos/strings/chromeos_strings_sq.xtb
+++ b/chromeos/strings/chromeos_strings_sq.xtb
@@ -669,7 +669,6 @@
 <translation id="6659594942844771486">Skeda</translation>
 <translation id="6692996468359469499">Merr informacion në lidhje me përzgjedhjen tënde</translation>
 <translation id="6704062477274546131">Rezolucioni i DNS-së</translation>
-<translation id="6721744718589119342">Mund të të dërgojmë email-e për më shumë informacione ose për përditësime</translation>
 <translation id="6723839937902243910">Energjia</translation>
 <translation id="6723847290197874913">Drita e sfondit e tastierës</translation>
 <translation id="672609503628871915">Shiko ç'të reja ka</translation>
@@ -825,6 +824,7 @@
 <translation id="8217675307824400706">Lidh</translation>
 <translation id="8221728673725659466">Kalibrimi përfundoi</translation>
 <translation id="8226628635270268143">Zgjidh fotografitë dhe albumet e tua të preferuara</translation>
+<translation id="8227119283605456246">Bashkëngjit skedarin</translation>
 <translation id="8230672074305416752">Dështoi verifikimi "ping" për portën e parazgjedhur të kalimit</translation>
 <translation id="8246209727385807362">Operator celular i panjohur</translation>
 <translation id="827422111966801947">Indigo</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb
index e62d8b11..cde7100a 100644
--- a/chromeos/strings/chromeos_strings_sr-Latn.xtb
+++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Kartica</translation>
 <translation id="6692996468359469499">Pronađite informacije u vezi sa vašim izborom</translation>
 <translation id="6704062477274546131">DNS razrešavanje</translation>
-<translation id="6721744718589119342">Možda ćemo vam imejlom zatražiti više informacija ili novosti</translation>
 <translation id="6723839937902243910">Energija</translation>
 <translation id="6723847290197874913">Pozadinsko osvetljenje tastature</translation>
 <translation id="672609503628871915">Prikaži šta je novo</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Povežite se</translation>
 <translation id="8221728673725659466">Kalibracija je dovršena</translation>
 <translation id="8226628635270268143">Odaberite omiljene slike i albume</translation>
+<translation id="8227119283605456246">Priloži datoteku</translation>
 <translation id="8230672074305416752">Pingovanje podrazumevanog mrežnog prolaza nije uspelo</translation>
 <translation id="8246209727385807362">Nepoznat mobilni operater</translation>
 <translation id="827422111966801947">Tamnoplava</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index 1eb206f..44d5441e 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Картица</translation>
 <translation id="6692996468359469499">Пронађите информације у вези са вашим избором</translation>
 <translation id="6704062477274546131">DNS разрешавање</translation>
-<translation id="6721744718589119342">Можда ћемо вам имејлом затражити више информација или новости</translation>
 <translation id="6723839937902243910">Енергија</translation>
 <translation id="6723847290197874913">Позадинско осветљење тастатуре</translation>
 <translation id="672609503628871915">Прикажи шта је ново</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Повежите се</translation>
 <translation id="8221728673725659466">Калибрација је довршена</translation>
 <translation id="8226628635270268143">Одаберите омиљене слике и албуме</translation>
+<translation id="8227119283605456246">Приложи датотеку</translation>
 <translation id="8230672074305416752">Пинговање подразумеваног мрежног пролаза није успело</translation>
 <translation id="8246209727385807362">Непознат мобилни оператер</translation>
 <translation id="827422111966801947">Тамноплава</translation>
diff --git a/chromeos/strings/chromeos_strings_sv.xtb b/chromeos/strings/chromeos_strings_sv.xtb
index eafcd21..071301e 100644
--- a/chromeos/strings/chromeos_strings_sv.xtb
+++ b/chromeos/strings/chromeos_strings_sv.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Flik</translation>
 <translation id="6692996468359469499">Få information utifrån det du markerar</translation>
 <translation id="6704062477274546131">DNS-matchning</translation>
-<translation id="6721744718589119342">Det kan hända att vi kontaktar dig via e-post för mer information eller uppdateringar</translation>
 <translation id="6723839937902243910">Batteri</translation>
 <translation id="6723847290197874913">Tangentbordets bakgrundsbelysning</translation>
 <translation id="672609503628871915">Kolla nyheterna</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Anslutning</translation>
 <translation id="8221728673725659466">Kalibrering slutförd</translation>
 <translation id="8226628635270268143">Välj favoritfoton och favoritalbum</translation>
+<translation id="8227119283605456246">Bifoga fil</translation>
 <translation id="8230672074305416752">Det gick inte att pinga standardnätverkets gateway</translation>
 <translation id="8246209727385807362">Okänd operatör</translation>
 <translation id="827422111966801947">Indigoblå</translation>
diff --git a/chromeos/strings/chromeos_strings_sw.xtb b/chromeos/strings/chromeos_strings_sw.xtb
index 72329bbb..2fe08d0 100644
--- a/chromeos/strings/chromeos_strings_sw.xtb
+++ b/chromeos/strings/chromeos_strings_sw.xtb
@@ -669,7 +669,6 @@
 <translation id="6659594942844771486">Kichupo</translation>
 <translation id="6692996468359469499">Pata maelezo yanayohusiana na chaguo lako</translation>
 <translation id="6704062477274546131">Usuluhishaji wa DNS</translation>
-<translation id="6721744718589119342">Tunaweza kukutumia barua pepe ili kukupa maelezo au taarifa zaidi</translation>
 <translation id="6723839937902243910">Nishati</translation>
 <translation id="6723847290197874913">Mwangaza wa kibodi</translation>
 <translation id="672609503628871915">Angalia yaliyo mapya</translation>
@@ -825,6 +824,7 @@
 <translation id="8217675307824400706">Unganisha</translation>
 <translation id="8221728673725659466">Urekebishaji umekamilika</translation>
 <translation id="8226628635270268143">Chagua picha na albamu uzipendazo zaidi</translation>
+<translation id="8227119283605456246">Ambatisha faili</translation>
 <translation id="8230672074305416752">Imeshindwa kuita lango la mtandao chaguomsingi</translation>
 <translation id="8246209727385807362">Mtoa huduma asiyejulikana</translation>
 <translation id="827422111966801947">Nili</translation>
diff --git a/chromeos/strings/chromeos_strings_ta.xtb b/chromeos/strings/chromeos_strings_ta.xtb
index 918497d..6799fa1 100644
--- a/chromeos/strings/chromeos_strings_ta.xtb
+++ b/chromeos/strings/chromeos_strings_ta.xtb
@@ -92,6 +92,7 @@
 <translation id="1644574205037202324">வரலாறு</translation>
 <translation id="1645954272419197032">சாதனத் தகவலை உறுதிப்படுத்துதல்</translation>
 <translation id="1662989795263954667">பிரிண்டரில் மை தீர்ந்துவிட்டதால் அச்சிட முடியவில்லை</translation>
+<translation id="1664796644829245314"><ph name="PREVIEW_OBJECT" /> இன் மாதிரிக்காட்சியைக் காட்டும்</translation>
 <translation id="1668469839109562275">உள்ளமைந்த VPN</translation>
 <translation id="1672499492233627739">வெப்கேம் வீடியோ ஊட்டம்</translation>
 <translation id="1676557873873341166">வீடியோவை எடுக்கிறது</translation>
@@ -234,6 +235,7 @@
 <translation id="3008341117444806826">புதுப்பி</translation>
 <translation id="3009958530611748826">சேமிப்பதற்கான ஃபோல்டரைத் தேர்ந்தெடுக்கவும்</translation>
 <translation id="3017079585324758401">பின்புலம்</translation>
+<translation id="302435934487327038">நிறுவப்பட்டது</translation>
 <translation id="3027578600144895987">கேமராவை மூடும்</translation>
 <translation id="3031560714565892478">சாதனம் ஒரு வீடியோ கேமரா.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
@@ -663,13 +665,13 @@
 <translation id="6618744767048954150">சோதனை செய்கிறது</translation>
 <translation id="6620487321149975369">பிரிண்ட்டிங் பணிகளை நீங்களாகவே அகற்றும் வரை அவை வரலாற்றில் காட்டப்படும்</translation>
 <translation id="6643016212128521049">அழி</translation>
+<translation id="6644568396961840069">ஃபைலைச் சேமிக்க முடியவில்லை. வேறொரு வெளிப்புறச் சேமிப்பகத்தைப் பயன்படுத்தவும் அல்லது பிறகு முயலவும்.</translation>
 <translation id="6647510110698214773">என்க்ரிப்ஷன் அல்காரிதம்</translation>
 <translation id="6650062777702288430">கானா/எண்ணெழுத்து ஸ்விட்ச்</translation>
 <translation id="6657585470893396449">கடவுச்சொல்</translation>
 <translation id="6659594942844771486">உலாவிப் பக்கம்</translation>
 <translation id="6692996468359469499">திரையில் நீங்கள் தேர்ந்தெடுத்தது தொடர்பாக தகவல்களைப் பெறவும்</translation>
 <translation id="6704062477274546131">DNS ரெசல்யூஷன்</translation>
-<translation id="6721744718589119342">கூடுதல் தகவல்களைப் பெறுவதற்காகவோ அறிவிப்புகளை வழங்குவதற்காகவோ நாங்கள் உங்களுக்கு மின்னஞ்சல் அனுப்பலாம்</translation>
 <translation id="6723839937902243910">ஆற்றல்</translation>
 <translation id="6723847290197874913">கீபோர்டு பேக்லைட்</translation>
 <translation id="672609503628871915">புதியதைப் பார்க்கவும்</translation>
@@ -800,6 +802,7 @@
 <translation id="7978412674231730200">தனிப்பட்ட விசை</translation>
 <translation id="7982789257301363584">நெட்வொர்க்</translation>
 <translation id="7994702968232966508">EAP முறை</translation>
+<translation id="8018928621986160031">"<ph name="FILE_LOCATION" />" இல் சேமிக்கப்பட்டது</translation>
 <translation id="802154636333426148">பதிவிறக்க முடியவில்லை</translation>
 <translation id="8031884997696620457">HSPAPlus</translation>
 <translation id="80398733265834479">தன்னியக்க வண்ணப் பயன்முறையை இயக்கும்</translation>
@@ -824,6 +827,7 @@
 <translation id="8217675307824400706">இணையத்துடன் இணைத்திடுங்கள்</translation>
 <translation id="8221728673725659466">சரிசெய்தல் நிறைவடைந்தது</translation>
 <translation id="8226628635270268143">உங்களுக்குப் பிடித்த படங்களையும் ஆல்பங்களையும் தேர்வுசெய்க</translation>
+<translation id="8227119283605456246">ஃபைலை இணை</translation>
 <translation id="8230672074305416752">இயல்புநிலை நெட்வொர்க் கேட்வேயைப் பிங் செய்ய முடியவில்லை</translation>
 <translation id="8246209727385807362">அறியப்படாத தொலைத்தொடர்பு நிறுவனம்</translation>
 <translation id="827422111966801947">இண்டிகோ</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index 25c5073..79a9e68 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -671,7 +671,6 @@
 <translation id="6659594942844771486">బ్రౌజర్ ట్యాబ్</translation>
 <translation id="6692996468359469499">మీ ఎంచుకున్న దానికి సంబంధించిన సమాచారాన్ని పొందండి</translation>
 <translation id="6704062477274546131">DNS రిజల్యూషన్</translation>
-<translation id="6721744718589119342">మరింత సమాచారం లేదా అప్‌డేట్‌ల కోసం మేము మీకు ఈమెయిల్ చేయవచ్చు</translation>
 <translation id="6723839937902243910">పవర్</translation>
 <translation id="6723847290197874913">కీబోర్డ్ బ్యాక్‌లైట్</translation>
 <translation id="672609503628871915">కొత్తగా ఏమి ఉన్నాయో చూడండి</translation>
@@ -827,6 +826,7 @@
 <translation id="8217675307824400706">కనెక్ట్ అవ్వండి</translation>
 <translation id="8221728673725659466">కాలిబ్రేషన్ పూర్తయింది</translation>
 <translation id="8226628635270268143">మీకు ఇష్టమైన ఫోటోలు, ఆల్బమ్‌లను ఎంచుకోండి</translation>
+<translation id="8227119283605456246">ఫైల్‌ను జోడించు</translation>
 <translation id="8230672074305416752">డిఫాల్ట్ నెట్‌వర్క్ గేట్‌వేను పింగ్ చేయడంలో విఫలమైంది</translation>
 <translation id="8246209727385807362">తెలియని క్యారియర్</translation>
 <translation id="827422111966801947">నీలిమందు రంగు</translation>
diff --git a/chromeos/strings/chromeos_strings_th.xtb b/chromeos/strings/chromeos_strings_th.xtb
index 37ec53a..88e56de 100644
--- a/chromeos/strings/chromeos_strings_th.xtb
+++ b/chromeos/strings/chromeos_strings_th.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">แท็บ</translation>
 <translation id="6692996468359469499">ดูข้อมูลที่เกี่ยวข้องกับการเลือกของคุณ</translation>
 <translation id="6704062477274546131">การแปลง DNS</translation>
-<translation id="6721744718589119342">เราอาจส่งข้อมูลเพิ่มเติมหรือข้อมูลอัปเดตให้คุณทางอีเมล</translation>
 <translation id="6723839937902243910">พลังงาน</translation>
 <translation id="6723847290197874913">ไฟแบ็กไลต์ของแป้นพิมพ์</translation>
 <translation id="672609503628871915">ดูว่ามีอะไรใหม่</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">เชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="8221728673725659466">การปรับเทียบเสร็จสมบูรณ์</translation>
 <translation id="8226628635270268143">เลือกรูปภาพและอัลบั้มที่ชื่นชอบ</translation>
+<translation id="8227119283605456246">แนบไฟล์</translation>
 <translation id="8230672074305416752">ใช้คำสั่ง ping กับเกตเวย์เครือข่ายเริ่มต้นไม่สำเร็จ</translation>
 <translation id="8246209727385807362">ผู้ให้บริการที่ไม่รู้จัก</translation>
 <translation id="827422111966801947">สีคราม</translation>
diff --git a/chromeos/strings/chromeos_strings_tr.xtb b/chromeos/strings/chromeos_strings_tr.xtb
index b95e865..4e862ea 100644
--- a/chromeos/strings/chromeos_strings_tr.xtb
+++ b/chromeos/strings/chromeos_strings_tr.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">YENİLE</translation>
 <translation id="3009958530611748826">Kaydedilecek bir klasör seçin</translation>
 <translation id="3017079585324758401">Arka plan</translation>
+<translation id="302435934487327038">Yükleme tamamlandı</translation>
 <translation id="3027578600144895987">Kamerayı kapat</translation>
 <translation id="3031560714565892478">Cihazın türü video kamera.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
@@ -664,13 +665,13 @@
 <translation id="6618744767048954150">Çalışıyor</translation>
 <translation id="6620487321149975369">Yazdırma işleri, manuel olarak kaldırılmadığı sürece geçmişte görünür</translation>
 <translation id="6643016212128521049">Temizle</translation>
+<translation id="6644568396961840069">Dosya kaydedilemedi. Farklı bir harici depolama cihazı takmayı deneyin veya daha sonra tekrar deneyin.</translation>
 <translation id="6647510110698214773">Şifreleme algoritması</translation>
 <translation id="6650062777702288430">Kana/alfanümerik karaktere geç</translation>
 <translation id="6657585470893396449">Şifre</translation>
 <translation id="6659594942844771486">Sekme</translation>
 <translation id="6692996468359469499">Seçiminizle alakalı bilgi edinin</translation>
 <translation id="6704062477274546131">DNS Çözümlemesi</translation>
-<translation id="6721744718589119342">Daha fazla bilgi veya güncelleme için size e-posta gönderebiliriz</translation>
 <translation id="6723839937902243910">Güç</translation>
 <translation id="6723847290197874913">Klavye arka ışığı</translation>
 <translation id="672609503628871915">Yenilikleri görüntüle</translation>
@@ -826,6 +827,7 @@
 <translation id="8217675307824400706">Bağlanın</translation>
 <translation id="8221728673725659466">Ayarlama tamamlandı</translation>
 <translation id="8226628635270268143">En beğendiğiniz fotoğraf ve albümleri seçin</translation>
+<translation id="8227119283605456246">Dosya ekle</translation>
 <translation id="8230672074305416752">Varsayılan ağ geçidi pinglenemedi</translation>
 <translation id="8246209727385807362">Bilinmeyen operatör</translation>
 <translation id="827422111966801947">Çivit Mavisi</translation>
diff --git a/chromeos/strings/chromeos_strings_uk.xtb b/chromeos/strings/chromeos_strings_uk.xtb
index 6fd1071..2e2eb55 100644
--- a/chromeos/strings/chromeos_strings_uk.xtb
+++ b/chromeos/strings/chromeos_strings_uk.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">Вкладка</translation>
 <translation id="6692996468359469499">Отримати інформацію, пов'язану з виділеним текстом</translation>
 <translation id="6704062477274546131">Розпізнавання DNS</translation>
-<translation id="6721744718589119342">Ми можемо надсилати вам додаткову чи оновлену інформацію електронною поштою</translation>
 <translation id="6723839937902243910">Заряд</translation>
 <translation id="6723847290197874913">Підсвічування клавіатури</translation>
 <translation id="672609503628871915">Докладніше про нові функції</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">Підключіться до Інтернету</translation>
 <translation id="8221728673725659466">Калібрування завершено</translation>
 <translation id="8226628635270268143">Вибрати улюблені фотографії й альбоми</translation>
+<translation id="8227119283605456246">Вкласти файл</translation>
 <translation id="8230672074305416752">Не вдалося надіслати запит ping шлюзу мережі за умовчанням</translation>
 <translation id="8246209727385807362">Невідомий оператор</translation>
 <translation id="827422111966801947">Індиго</translation>
diff --git a/chromeos/strings/chromeos_strings_ur.xtb b/chromeos/strings/chromeos_strings_ur.xtb
index 585f9c9..926e084 100644
--- a/chromeos/strings/chromeos_strings_ur.xtb
+++ b/chromeos/strings/chromeos_strings_ur.xtb
@@ -671,7 +671,6 @@
 <translation id="6659594942844771486">براؤزر ٹیب</translation>
 <translation id="6692996468359469499">اپنے انتخاب سے متعلق معلومات حاصل کریں</translation>
 <translation id="6704062477274546131">‏DNS ریزولیوشن</translation>
-<translation id="6721744718589119342">مزید معلومات یا اپ ڈیٹس کیلئے ہم آپ کو ای میل کر سکتے ہیں</translation>
 <translation id="6723839937902243910">پاور</translation>
 <translation id="6723847290197874913">کی بورڈ بیک لائٹ</translation>
 <translation id="672609503628871915">دیکھیں کہ نیا کیا ہے</translation>
@@ -827,6 +826,7 @@
 <translation id="8217675307824400706">منسلک ہوں</translation>
 <translation id="8221728673725659466">کیلیبریشن کا عمل مکمل ہو گیا</translation>
 <translation id="8226628635270268143">اپنی پسندیدہ تصاویر اور البمز منتخب کریں</translation>
+<translation id="8227119283605456246">فائل منسلک کریں</translation>
 <translation id="8230672074305416752">ڈیفالٹ نیٹ ورک گیٹ وے کو پنگ کرنے میں ناکام</translation>
 <translation id="8246209727385807362">نامعلوم کیریئر</translation>
 <translation id="827422111966801947">گہرا نیلا</translation>
diff --git a/chromeos/strings/chromeos_strings_uz.xtb b/chromeos/strings/chromeos_strings_uz.xtb
index 61f5275..8c7815a0 100644
--- a/chromeos/strings/chromeos_strings_uz.xtb
+++ b/chromeos/strings/chromeos_strings_uz.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">Varaq</translation>
 <translation id="6692996468359469499">Tanlovingizga aloqador axborot olish</translation>
 <translation id="6704062477274546131">DNS parametrlari</translation>
-<translation id="6721744718589119342">Qoʻshimcha axborot yoki xabalar haqida sizga email yuboramiz</translation>
 <translation id="6723839937902243910">Quvvat</translation>
 <translation id="6723847290197874913">Klaviatura orqa chirogʻi</translation>
 <translation id="672609503628871915">Nimalar yangiligini ko‘ring</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">Internetga ulaning</translation>
 <translation id="8221728673725659466">Kalibrlash yakunlandi</translation>
 <translation id="8226628635270268143">Sevimli suratlar va albomlaringizni tanlang</translation>
+<translation id="8227119283605456246">Fayl biriktirish</translation>
 <translation id="8230672074305416752">Birlamchi tarmoq shlyuzi ping qilinmadi</translation>
 <translation id="8246209727385807362">Noma’lum provayder</translation>
 <translation id="827422111966801947">Toʻq siyohrang</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb
index eab1f420..fa240c8 100644
--- a/chromeos/strings/chromeos_strings_vi.xtb
+++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">LÀM MỚI</translation>
 <translation id="3009958530611748826">Chọn một thư mục để lưu</translation>
 <translation id="3017079585324758401">Nền</translation>
+<translation id="302435934487327038">Quá trình cài đặt đã hoàn tất</translation>
 <translation id="3027578600144895987">Tắt máy ảnh</translation>
 <translation id="3031560714565892478">Thiết bị là máy quay video.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
@@ -664,13 +665,13 @@
 <translation id="6618744767048954150">Đang chạy</translation>
 <translation id="6620487321149975369">Lệnh in sẽ xuất hiện trong lịch sử in trừ phi bạn tự xóa</translation>
 <translation id="6643016212128521049">Xóa</translation>
+<translation id="6644568396961840069">Không thể lưu tệp. Hãy thử sử dụng một bộ nhớ ngoài khác hoặc thử lại sau.</translation>
 <translation id="6647510110698214773">Thuật toán mã hoá</translation>
 <translation id="6650062777702288430">Chuyển sang bàn phím Kana/ký tự chữ-số</translation>
 <translation id="6657585470893396449">Mật khẩu</translation>
 <translation id="6659594942844771486">Thẻ</translation>
 <translation id="6692996468359469499">Nhận thông tin liên quan đến lựa chọn của bạn</translation>
 <translation id="6704062477274546131">Phân giải DNS</translation>
-<translation id="6721744718589119342">Chúng tôi có thể gửi email cho bạn để hỏi thêm thông tin hoặc để cập nhật thông tin cho bạn</translation>
 <translation id="6723839937902243910">Nguồn</translation>
 <translation id="6723847290197874913">Đèn nền bàn phím</translation>
 <translation id="672609503628871915">Xem tính năng mới</translation>
@@ -826,6 +827,7 @@
 <translation id="8217675307824400706">Kết nối</translation>
 <translation id="8221728673725659466">Hiệu chỉnh xong</translation>
 <translation id="8226628635270268143">Chọn ảnh và album bạn yêu thích</translation>
+<translation id="8227119283605456246">Đính kèm tệp</translation>
 <translation id="8230672074305416752">Không ping được cổng của mạng mặc định</translation>
 <translation id="8246209727385807362">Nhà cung cấp dịch vụ không xác định</translation>
 <translation id="827422111966801947">Màu chàm</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb
index 142d2d2..1070b3b 100644
--- a/chromeos/strings/chromeos_strings_zh-CN.xtb
+++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -670,7 +670,6 @@
 <translation id="6659594942844771486">标签页</translation>
 <translation id="6692996468359469499">获取与您的所选项相关的信息</translation>
 <translation id="6704062477274546131">DNS 解析</translation>
-<translation id="6721744718589119342">如果需要您提供更多信息或想向您提供最新信息,我们可能会向您发送电子邮件</translation>
 <translation id="6723839937902243910">电源</translation>
 <translation id="6723847290197874913">键盘背光</translation>
 <translation id="672609503628871915">了解一下新变化</translation>
@@ -826,6 +825,7 @@
 <translation id="8217675307824400706">连接到网络</translation>
 <translation id="8221728673725659466">校准完成</translation>
 <translation id="8226628635270268143">选择您喜爱的照片和影集</translation>
+<translation id="8227119283605456246">附上文件</translation>
 <translation id="8230672074305416752">未能对默认网关执行 ping 操作</translation>
 <translation id="8246209727385807362">未知运营商</translation>
 <translation id="827422111966801947">靛青色</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb
index afbe7e0e..aa0953e 100644
--- a/chromeos/strings/chromeos_strings_zh-HK.xtb
+++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">分頁</translation>
 <translation id="6692996468359469499">取得您選取項目相關資料</translation>
 <translation id="6704062477274546131">DNS 解析</translation>
-<translation id="6721744718589119342">我們可能會透過電郵提供更新資訊,或要求您提供更多資訊</translation>
 <translation id="6723839937902243910">電源</translation>
 <translation id="6723847290197874913">鍵盤背光</translation>
 <translation id="672609503628871915">查看最新內容</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">連線至互聯網</translation>
 <translation id="8221728673725659466">校正完成</translation>
 <translation id="8226628635270268143">選擇喜愛的相片和相簿</translation>
+<translation id="8227119283605456246">附加檔案</translation>
 <translation id="8230672074305416752">無法連線偵測預設的網絡閘道</translation>
 <translation id="8246209727385807362">不明流動網絡供應商</translation>
 <translation id="827422111966801947">靛藍色</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb
index a259a938..d92d2dd 100644
--- a/chromeos/strings/chromeos_strings_zh-TW.xtb
+++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -672,7 +672,6 @@
 <translation id="6659594942844771486">分頁</translation>
 <translation id="6692996468359469499">取得選取項目的相關資訊</translation>
 <translation id="6704062477274546131">DNS 解析</translation>
-<translation id="6721744718589119342">我們可能會透過電子郵件提供更新資訊或要求你提供更多資訊</translation>
 <translation id="6723839937902243910">電源</translation>
 <translation id="6723847290197874913">鍵盤背光</translation>
 <translation id="672609503628871915">查看新功能</translation>
@@ -828,6 +827,7 @@
 <translation id="8217675307824400706">連上網路</translation>
 <translation id="8221728673725659466">校正完成</translation>
 <translation id="8226628635270268143">選擇你最喜愛的相片和相簿</translation>
+<translation id="8227119283605456246">附加檔案</translation>
 <translation id="8230672074305416752">無法連線偵測預設的網路閘道</translation>
 <translation id="8246209727385807362">不明電信業者</translation>
 <translation id="827422111966801947">靛藍</translation>
diff --git a/chromeos/strings/chromeos_strings_zu.xtb b/chromeos/strings/chromeos_strings_zu.xtb
index 1b45867..a6fb2f2 100644
--- a/chromeos/strings/chromeos_strings_zu.xtb
+++ b/chromeos/strings/chromeos_strings_zu.xtb
@@ -235,6 +235,7 @@
 <translation id="3008341117444806826">VUSELELA</translation>
 <translation id="3009958530611748826">Khetha ifolda ozolondoloza kuyo</translation>
 <translation id="3017079585324758401">Ingemuva</translation>
+<translation id="302435934487327038">Ukufaka kuqedile</translation>
 <translation id="3027578600144895987">Vala ikhamera</translation>
 <translation id="3031560714565892478">Idivayisi iyikhamera yevidiyo.</translation>
 <translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
@@ -664,13 +665,13 @@
 <translation id="6618744767048954150">Uyagijima</translation>
 <translation id="6620487321149975369">Imisebenzi yokuphrinta izovela emlandweni ngaphandle kwalapho uma isuswe mathupha</translation>
 <translation id="6643016212128521049">Sula</translation>
+<translation id="6644568396961840069">Ifayela alilondolozwanga. Zama ukuxhuma isitoreji sangaphandle esihlukile, noma uzame futhi ngokuhamba kwesikhathi.</translation>
 <translation id="6647510110698214773">Ukubethela i-algorithm</translation>
 <translation id="6650062777702288430">Shintsha i-Kana/alphanumeric</translation>
 <translation id="6657585470893396449">Igama lokungena</translation>
 <translation id="6659594942844771486">Ithebhu</translation>
 <translation id="6692996468359469499">Thola ukwaziswa okuhlobene nokhetho lwakho</translation>
 <translation id="6704062477274546131">Ukulungiswa kwe-DNS</translation>
-<translation id="6721744718589119342">Singakuthumela i-imeyili ukuze uthole ulwazi oluningi noma izibuyekezo</translation>
 <translation id="6723839937902243910">Amandla</translation>
 <translation id="6723847290197874913">Ukukhanya kwangemuva kwekhibhodi</translation>
 <translation id="672609503628871915">Bona okusha</translation>
@@ -826,6 +827,7 @@
 <translation id="8217675307824400706">Xhumeka</translation>
 <translation id="8221728673725659466">Ukulinganiswa kuqediwe</translation>
 <translation id="8226628635270268143">Khetha izithombe zakho eziyintandokazi kanye nama-albhamu</translation>
+<translation id="8227119283605456246">Namathisela ifayela</translation>
 <translation id="8230672074305416752">Yehlulekile ukuqhweba umasango wenethiwekhi yokuzenzakalelayo</translation>
 <translation id="8246209727385807362">Inkampani yenethiwekhi engaziwa</translation>
 <translation id="827422111966801947">I-Indigo</translation>
diff --git a/chromeos/ui/frame/highlight_border_overlay.cc b/chromeos/ui/frame/highlight_border_overlay.cc
index d495a87..c20e3b0 100644
--- a/chromeos/ui/frame/highlight_border_overlay.cc
+++ b/chromeos/ui/frame/highlight_border_overlay.cc
@@ -95,7 +95,10 @@
                                                      const void* key,
                                                      intptr_t old) {
   if (key == chromeos::kFrameActiveColorKey) {
-    UpdateNinePatchLayer();
+    if (window->GetProperty(chromeos::kFrameActiveColorKey) !=
+        static_cast<SkColor>(old)) {
+      UpdateNinePatchLayer();
+    }
     return;
   }
 
diff --git a/components/autofill/content/renderer/password_generation_agent.cc b/components/autofill/content/renderer/password_generation_agent.cc
index b8b126d..c6e055f 100644
--- a/components/autofill/content/renderer/password_generation_agent.cc
+++ b/components/autofill/content/renderer/password_generation_agent.cc
@@ -205,7 +205,7 @@
   // True when PasswordGenerationAgent updates other password fields on the page
   // due to the generated password being edited. It's used to suppress the fake
   // blur events coming from there.
-  bool updating_other_password_fileds_ = false;
+  bool updating_other_password_fields_ = false;
 };
 
 PasswordGenerationAgent::PasswordGenerationAgent(
@@ -280,7 +280,7 @@
 
 bool PasswordGenerationAgent::ShouldIgnoreBlur() const {
   return current_generation_item_ &&
-         current_generation_item_->updating_other_password_fileds_;
+         current_generation_item_->updating_other_password_fields_;
 }
 
 bool PasswordGenerationAgent::IsPrerendering() const {
@@ -301,7 +301,7 @@
   LogMessage(Logger::STRING_GENERATION_RENDERER_GENERATED_PASSWORD_ACCEPTED);
   for (auto& password_element : current_generation_item_->password_elements_) {
     base::AutoReset<bool> auto_reset_update_confirmation_password(
-        &current_generation_item_->updating_other_password_fileds_, true);
+        &current_generation_item_->updating_other_password_fields_, true);
     password_element.SetAutofillValue(blink::WebString::FromUTF16(password));
     // setAutofillValue() above may have resulted in JavaScript closing the
     // frame.
@@ -554,7 +554,7 @@
     } else if (current_generation_item_->password_is_generated_) {
       current_generation_item_->password_edited_ = true;
       base::AutoReset<bool> auto_reset_update_confirmation_password(
-          &current_generation_item_->updating_other_password_fileds_, true);
+          &current_generation_item_->updating_other_password_fields_, true);
       // Mirror edits to any confirmation password fields.
       CopyElementValueToOtherInputElements(
           &element, &current_generation_item_->password_elements_);
@@ -649,7 +649,7 @@
   for (WebInputElement& element :
        current_generation_item_->password_elements_) {
     base::AutoReset<bool> auto_reset_update_confirmation_password(
-        &current_generation_item_->updating_other_password_fileds_, true);
+        &current_generation_item_->updating_other_password_fields_, true);
     if (current_generation_item_->generation_element_ != element)
       element.SetAutofillValue(blink::WebString());
   }
diff --git a/components/autofill/core/browser/autofill_field.cc b/components/autofill/core/browser/autofill_field.cc
index d53d042..757a5bae 100644
--- a/components/autofill/core/browser/autofill_field.cc
+++ b/components/autofill/core/browser/autofill_field.cc
@@ -111,13 +111,6 @@
   html_type_ = type;
   html_mode_ = mode;
   overall_type_ = AutofillType(NO_SERVER_DATA);
-
-  if (type == HTML_TYPE_TEL_LOCAL_PREFIX)
-    phone_part_ = PHONE_PREFIX;
-  else if (type == HTML_TYPE_TEL_LOCAL_SUFFIX)
-    phone_part_ = PHONE_SUFFIX;
-  else
-    phone_part_ = IGNORED;
 }
 
 void AutofillField::SetTypeTo(const AutofillType& type) {
diff --git a/components/autofill/core/browser/autofill_field.h b/components/autofill/core/browser/autofill_field.h
index 523bbc27..15ee399 100644
--- a/components/autofill/core/browser/autofill_field.h
+++ b/components/autofill/core/browser/autofill_field.h
@@ -32,12 +32,6 @@
 
 class AutofillField : public FormFieldData {
  public:
-  enum PhonePart {
-    IGNORED = 0,
-    PHONE_PREFIX = 1,
-    PHONE_SUFFIX = 2,
-  };
-
   AutofillField();
   explicit AutofillField(const FormFieldData& field);
 
@@ -70,7 +64,6 @@
   const ServerFieldTypeValidityStatesMap& possible_types_validities() const {
     return possible_types_validities_;
   }
-  PhonePart phone_part() const { return phone_part_; }
   bool previously_autofilled() const { return previously_autofilled_; }
   const std::u16string& parseable_name() const { return parseable_name_; }
   const std::u16string& parseable_label() const { return parseable_label_; }
@@ -275,9 +268,6 @@
   // The set of possible types and their validity for this field.
   ServerFieldTypeValidityStatesMap possible_types_validities_;
 
-  // Used to track whether this field is a phone prefix or suffix.
-  PhonePart phone_part_ = IGNORED;
-
   // A low-entropy hash of the field's initial value before user-interactions or
   // automatic fillings. This field is used to detect static placeholders.
   absl::optional<uint32_t> initial_value_hash_;
diff --git a/components/autofill/core/browser/autofill_form_test_utils.cc b/components/autofill/core/browser/autofill_form_test_utils.cc
index c58f17d..e943a5a 100644
--- a/components/autofill/core/browser/autofill_form_test_utils.cc
+++ b/components/autofill/core/browser/autofill_form_test_utils.cc
@@ -173,11 +173,6 @@
                 form_structure->field(i)->html_type());
     }
     for (size_t i = 0;
-         i < test_case.expected_field_types.expected_phone_part.size(); i++) {
-      EXPECT_EQ(test_case.expected_field_types.expected_phone_part[i],
-                form_structure->field(i)->phone_part());
-    }
-    for (size_t i = 0;
          i < test_case.expected_field_types.expected_heuristic_type.size();
          i++) {
       EXPECT_EQ(test_case.expected_field_types.expected_heuristic_type[i],
diff --git a/components/autofill/core/browser/autofill_form_test_utils.h b/components/autofill/core/browser/autofill_form_test_utils.h
index 498bfdf..076711d 100644
--- a/components/autofill/core/browser/autofill_form_test_utils.h
+++ b/components/autofill/core/browser/autofill_form_test_utils.h
@@ -90,7 +90,6 @@
 template <typename = void>
 struct ExpectedFieldTypeValues {
   std::vector<HtmlFieldType> expected_html_type = {};
-  std::vector<AutofillField::PhonePart> expected_phone_part = {};
   std::vector<ServerFieldType> expected_heuristic_type = {};
   std::vector<ServerFieldType> expected_overall_type = {};
 };
diff --git a/components/autofill/core/browser/autofill_regexes.cc b/components/autofill/core/browser/autofill_regexes.cc
index c95556c9..e6032f333 100644
--- a/components/autofill/core/browser/autofill_regexes.cc
+++ b/components/autofill/core/browser/autofill_regexes.cc
@@ -11,6 +11,7 @@
 
 #include "base/check.h"
 #include "base/i18n/unicodestring.h"
+#include "base/memory/ptr_util.h"
 #include "base/no_destructor.h"
 
 namespace {
@@ -23,83 +24,82 @@
 
 namespace autofill {
 
-AutofillRegexes::AutofillRegexes(ThreadSafe thread_safe)
+std::unique_ptr<const icu::RegexPattern> CompileRegex(
+    base::StringPiece16 regex) {
+  const icu::UnicodeString icu_regex(false, regex.data(), regex.length());
+  UErrorCode status = U_ZERO_ERROR;
+  std::unique_ptr<icu::RegexPattern> regex_pattern = base::WrapUnique(
+      icu::RegexPattern::compile(icu_regex, UREGEX_CASE_INSENSITIVE, status));
+  DCHECK(U_SUCCESS(status));
+  return regex_pattern;
+}
+
+bool MatchesRegex(base::StringPiece16 input,
+                  const icu::RegexPattern& regex_pattern,
+                  std::vector<std::u16string>* groups) {
+  if (input.size() > kMaxStringLength)
+    return false;
+
+  UErrorCode status = U_ZERO_ERROR;
+  // `icu_input` must outlive `regex_matcher` because it holds a reference to
+  // it.
+  icu::UnicodeString icu_input(false, input.data(), input.length());
+  std::unique_ptr<icu::RegexMatcher> regex_matcher =
+      base::WrapUnique(regex_pattern.matcher(icu_input, status));
+  UBool matched = regex_matcher->find(0, status);
+  DCHECK(U_SUCCESS(status));
+
+  if (matched && groups) {
+    int32_t matched_groups = regex_matcher->groupCount();
+    groups->resize(matched_groups + 1);
+    for (int32_t i = 0; i < matched_groups + 1; ++i) {
+      icu::UnicodeString match_unicode = regex_matcher->group(i, status);
+      DCHECK(U_SUCCESS(status));
+      (*groups)[i] = base::i18n::UnicodeStringToString16(match_unicode);
+    }
+  }
+  return matched;
+}
+
+bool MatchesPatternInMainThread(base::StringPiece16 input,
+                                base::StringPiece16 regex,
+                                std::vector<std::u16string>* groups) {
+  static base::NoDestructor<AutofillRegexCache> cache(ThreadSafe(true));
+  const icu::RegexPattern* regex_pattern = cache->GetRegexPattern(regex);
+  return MatchesRegex(input, *regex_pattern, groups);
+}
+
+AutofillRegexCache::AutofillRegexCache(ThreadSafe thread_safe)
     : thread_safe_(thread_safe) {
   if (!thread_safe_)
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
-AutofillRegexes::~AutofillRegexes() {
+AutofillRegexCache::~AutofillRegexCache() {
   if (!thread_safe_)
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 }
 
-icu::RegexMatcher* AutofillRegexes::GetMatcher(
-    const base::StringPiece16& pattern) {
-  if (!thread_safe_)
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
-  auto it = matchers_.find(pattern);
-  if (it == matchers_.end()) {
-    const icu::UnicodeString icu_pattern(false, pattern.data(),
-                                         pattern.length());
-
-    UErrorCode status = U_ZERO_ERROR;
-    auto matcher = std::make_unique<icu::RegexMatcher>(
-        icu_pattern, UREGEX_CASE_INSENSITIVE, status);
-
-    auto result = matchers_.insert(std::make_pair(pattern, std::move(matcher)));
-    DCHECK(result.second);
-    it = result.first;
-    DCHECK(U_SUCCESS(status));
-  }
-  return it->second.get();
-}
-
-bool AutofillRegexes::MatchesPattern(const base::StringPiece16& input,
-                                     const base::StringPiece16& pattern,
-                                     std::vector<std::u16string>* groups) {
-  if (input.size() > kMaxStringLength)
-    return false;
-
-  auto Match = [&]() {
-    UErrorCode status = U_ZERO_ERROR;
-    // `icu_input` must outlive `matcher` because it holds a reference to it.
-    icu::UnicodeString icu_input(false, input.data(), input.length());
-    icu::RegexMatcher* matcher = GetMatcher(pattern);
-    matcher->reset(icu_input);
-    UBool matched = matcher->find(0, status);
-    DCHECK(U_SUCCESS(status));
-
-    if (matched && groups) {
-      int32_t matched_groups = matcher->groupCount();
-      groups->resize(matched_groups + 1);
-
-      for (int32_t i = 0; i < matched_groups + 1; ++i) {
-        icu::UnicodeString match_unicode = matcher->group(i, status);
-        DCHECK(U_SUCCESS(status));
-        (*groups)[i] = base::i18n::UnicodeStringToString16(match_unicode);
-      }
+const icu::RegexPattern* AutofillRegexCache::GetRegexPattern(
+    base::StringPiece16 regex) {
+  auto GetOrCreate = [&]() {
+    auto it = cache_.find(regex);
+    if (it == cache_.end()) {
+      bool success;
+      std::tie(it, success) =
+          cache_.emplace(std::u16string(regex), CompileRegex(regex));
+      DCHECK(success);
     }
-
-    return matched;
+    DCHECK(it != cache_.end());
+    DCHECK(it->second.get());
+    return it->second.get();
   };
-
   if (!thread_safe_) {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    return Match();
+    return GetOrCreate();
   }
-
   base::AutoLock lock(lock_);
-  return Match();
-}
-
-bool MatchesPatternInMainThread(const base::StringPiece16& input,
-                                const base::StringPiece16& pattern,
-                                std::vector<std::u16string>* groups) {
-  static base::NoDestructor<AutofillRegexes> g_autofill_regexes(
-      ThreadSafe(true));
-  return g_autofill_regexes->MatchesPattern(input, pattern, groups);
+  return GetOrCreate();
 }
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/autofill_regexes.h b/components/autofill/core/browser/autofill_regexes.h
index 01a2aba..d13c2b8 100644
--- a/components/autofill/core/browser/autofill_regexes.h
+++ b/components/autofill/core/browser/autofill_regexes.h
@@ -20,53 +20,68 @@
 
 using ThreadSafe = base::StrongAlias<struct ThreadSafeTag, bool>;
 
-// A thread-local class that serves as a cache of compiled regex patterns.
+// Compiles a case-insensitive regular expression.
 //
-// The regexp state can be accessed from multiple threads in single process
-// mode, and this class offers per-thread instance instead of per-process
-// singleton instance (https://crbug.com/812182).
-class AutofillRegexes {
+// The return icu::RegexPattern is thread-safe (because it's const and icu
+// guarantees thread-safety of the const functions). In particularly this
+// includes icu::RegexPattern::matcher().
+//
+// May also be used to initialize `static base::NoDestructor<icu::RegexPattern>`
+// function-scope variables.
+std::unique_ptr<const icu::RegexPattern> CompileRegex(
+    base::StringPiece16 regex);
+
+// Returns true if `regex` is found in `input`.
+// If `groups` is non-null, it gets resized and the found capture groups
+// are written into it.
+// Thread-safe.
+bool MatchesRegex(base::StringPiece16 input,
+                  const icu::RegexPattern& regex_pattern,
+                  std::vector<std::u16string>* groups = nullptr);
+
+// Calls MatchesRegex() after compiling the `regex` or retrieving it from a
+// cache.
+//
+// This function is thread-safe. Nevertheless, it should only be called from the
+// main thread to avoid the UI being blocked on some worker task.
+//
+// TODO(crbug.com/1345089): Merge FormField::MatchesPattern() and this function
+// one into a single MatchesPattern() that distinguishes between the main thread
+// and worker threads.
+bool MatchesPatternInMainThread(base::StringPiece16 input,
+                                base::StringPiece16 regex,
+                                std::vector<std::u16string>* groups = nullptr);
+
+// A cache of compiled regex patterns. It can be configured to be thread-safe
+// (using a mutex) or not (in which case it uses a sequence checker).
+class AutofillRegexCache {
  public:
-  explicit AutofillRegexes(ThreadSafe thread_safe);
-  ~AutofillRegexes();
+  explicit AutofillRegexCache(ThreadSafe thread_safe);
+  ~AutofillRegexCache();
 
-  AutofillRegexes(const AutofillRegexes&) = delete;
-  AutofillRegexes& operator=(const AutofillRegexes&) = delete;
+  AutofillRegexCache(const AutofillRegexCache&) = delete;
+  AutofillRegexCache& operator=(const AutofillRegexCache&) = delete;
 
-  // Case-insensitive regular expression matching.
-  // Returns true if `pattern` is found in `input`.
-  // If `groups` is non-null, it gets resized and the found capture groups
-  // are written into it.
-  // Thread-safety depends on `thread_safe_`.
-  bool MatchesPattern(const base::StringPiece16& input,
-                      const base::StringPiece16& pattern,
-                      std::vector<std::u16string>* groups = nullptr);
+  // Returns the compiled regex corresponding to `regex`.
+  // This function is thread-safe if `thread_safe_`.
+  // The returned object is thread-safe in any case (because it's const).
+  // Although the returned pointer is guaranteed to be non-nullptr, we do not
+  // return a reference to avoid accidental copies.
+  const icu::RegexPattern* GetRegexPattern(base::StringPiece16 regex);
 
  private:
-  // Returns the compiled regex matcher corresponding to `pattern`.
-  icu::RegexMatcher* GetMatcher(const base::StringPiece16& pattern);
-
   // `MatchesPattern()` uses the lock if `thread_safe_`. Otherwise, it validates
   // the sequence.
   ThreadSafe thread_safe_{false};
   base::Lock lock_;
   SEQUENCE_CHECKER(sequence_checker_);
 
-  // Maps patterns to their corresponding regex matchers.
-  std::map<std::u16string, std::unique_ptr<icu::RegexMatcher>, std::less<>>
-      matchers_;
+  // Maps regex strings to their corresponding compiled regex patterns.
+  std::
+      map<std::u16string, std::unique_ptr<const icu::RegexPattern>, std::less<>>
+          cache_;
 };
 
-// Calls MatchesPattern() for a global, thread-safe AutofillRegexes object.
-// Although this is thread-safe, this should only be called from the main thread
-// to avoid the UI being blocked on some worker task.
-// TODO(crbug.com/1345089): Merge FormField::MatchesPattern() and this function
-// one into a single MatchesPattern() that distinguishes between the main thread
-// and worker threads.
-bool MatchesPatternInMainThread(const base::StringPiece16& input,
-                                const base::StringPiece16& pattern,
-                                std::vector<std::u16string>* groups = nullptr);
-
 }  // namespace autofill
 
 #endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_REGEXES_H_
diff --git a/components/autofill/core/browser/autofill_type.cc b/components/autofill/core/browser/autofill_type.cc
index c7493cb..03b60e7 100644
--- a/components/autofill/core/browser/autofill_type.cc
+++ b/components/autofill/core/browser/autofill_type.cc
@@ -330,10 +330,14 @@
       return PHONE_HOME_CITY_CODE;
 
     case HTML_TYPE_TEL_LOCAL:
-    case HTML_TYPE_TEL_LOCAL_PREFIX:
-    case HTML_TYPE_TEL_LOCAL_SUFFIX:
       return PHONE_HOME_NUMBER;
 
+    case HTML_TYPE_TEL_LOCAL_PREFIX:
+      return PHONE_HOME_NUMBER_PREFIX;
+
+    case HTML_TYPE_TEL_LOCAL_SUFFIX:
+      return PHONE_HOME_NUMBER_SUFFIX;
+
     case HTML_TYPE_TEL_EXTENSION:
       return PHONE_HOME_EXTENSION;
 
diff --git a/components/autofill/core/browser/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
index 2f2d87a9..052acf1 100644
--- a/components/autofill/core/browser/browser_autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
@@ -4833,10 +4833,7 @@
   EXPECT_EQ(u"4567", response_data2.fields[3].value);
   EXPECT_EQ(std::u16string(), response_data2.fields[4].value);
 
-  // We should not be able to fill international numbers correctly in a form
-  // containing fields with US max_length. However, the field should fill with
-  // the number of digits equal to the max length specified, starting from the
-  // right.
+  // For other countries, fill prefix and suffix fields with best effort.
   work_profile->SetRawInfo(ADDRESS_HOME_COUNTRY, u"GB");
   work_profile->SetRawInfo(PHONE_HOME_WHOLE_NUMBER, u"447700954321");
   page_id = 3;
@@ -4851,7 +4848,7 @@
   ASSERT_EQ(5U, response_data3.fields.size());
   EXPECT_EQ(u"4", response_data3.fields[0].value);
   EXPECT_EQ(u"700", response_data3.fields[1].value);
-  EXPECT_EQ(u"321", response_data3.fields[2].value);
+  EXPECT_EQ(u"95", response_data3.fields[2].value);
   EXPECT_EQ(u"4321", response_data3.fields[3].value);
   EXPECT_EQ(std::u16string(), response_data3.fields[4].value);
 
@@ -4867,8 +4864,8 @@
   ASSERT_EQ(5U, response_data4.fields.size());
   EXPECT_EQ(u"44", response_data4.fields[0].value);
   EXPECT_EQ(u"7700", response_data4.fields[1].value);
-  EXPECT_EQ(u"954321", response_data4.fields[2].value);
-  EXPECT_EQ(u"954321", response_data4.fields[3].value);
+  EXPECT_EQ(u"95", response_data4.fields[2].value);
+  EXPECT_EQ(u"4321", response_data4.fields[3].value);
   EXPECT_EQ(std::u16string(), response_data4.fields[4].value);
 }
 
@@ -6377,8 +6374,8 @@
     {"1", {PHONE_HOME_COUNTRY_CODE}, {PHONE_HOME_COUNTRY_CODE}},
     {"234", {PHONE_HOME_CITY_CODE}, {PHONE_HOME_CITY_CODE}},
     {"5678901", {PHONE_HOME_NUMBER}, {PHONE_HOME_NUMBER}},
-    {"567", {PHONE_HOME_NUMBER}, {PHONE_HOME_NUMBER}},
-    {"8901", {PHONE_HOME_NUMBER}, {PHONE_HOME_NUMBER}},
+    {"567", {PHONE_HOME_NUMBER_PREFIX}, {PHONE_HOME_NUMBER_PREFIX}},
+    {"8901", {PHONE_HOME_NUMBER_SUFFIX}, {PHONE_HOME_NUMBER_SUFFIX}},
 
     // Test a European profile.
     {"Paris", {ADDRESS_HOME_CITY}, {ADDRESS_HOME_CITY}},
diff --git a/components/autofill/core/browser/data_model/phone_number.cc b/components/autofill/core/browser/data_model/phone_number.cc
index b2ed0ae6..2eab409 100644
--- a/components/autofill/core/browser/data_model/phone_number.cc
+++ b/components/autofill/core/browser/data_model/phone_number.cc
@@ -68,6 +68,8 @@
 void PhoneNumber::GetSupportedTypes(ServerFieldTypeSet* supported_types) const {
   supported_types->insert(PHONE_HOME_WHOLE_NUMBER);
   supported_types->insert(PHONE_HOME_NUMBER);
+  supported_types->insert(PHONE_HOME_NUMBER_PREFIX);
+  supported_types->insert(PHONE_HOME_NUMBER_SUFFIX);
   supported_types->insert(PHONE_HOME_CITY_CODE);
   supported_types->insert(PHONE_HOME_CITY_AND_NUMBER);
   supported_types->insert(PHONE_HOME_COUNTRY_CODE);
@@ -119,17 +121,6 @@
   base::RemoveChars(stripped_text, u" .()-", &stripped_text);
   FormGroup::GetMatchingTypes(stripped_text, app_locale, matching_types);
 
-  // For US numbers, also compare to the three-digit prefix and the four-digit
-  // suffix, since web sites often split numbers into these two fields.
-  std::u16string number = GetInfo(AutofillType(PHONE_HOME_NUMBER), app_locale);
-  if (GetRegion(*profile_, app_locale) == "US" &&
-      number.size() == (kPrefixLength + kSuffixLength)) {
-    std::u16string prefix = number.substr(kPrefixOffset, kPrefixLength);
-    std::u16string suffix = number.substr(kSuffixOffset, kSuffixLength);
-    if (text == prefix || text == suffix)
-      matching_types->insert(PHONE_HOME_NUMBER);
-  }
-
   // TODO(crbug.com/581391): Investigate the use of PhoneNumberUtil when
   // matching phone numbers for upload.
   // If there is not already a match for PHONE_HOME_WHOLE_NUMBER, normalize the
@@ -365,7 +356,13 @@
     return true;
   }
 
-  if (storable_type == PHONE_HOME_NUMBER) {
+  if (storable_type == PHONE_HOME_NUMBER ||
+      storable_type == PHONE_HOME_NUMBER_PREFIX) {
+    phone_ = value;
+    return true;
+  }
+
+  if (storable_type == PHONE_HOME_NUMBER_SUFFIX) {
     phone_.append(value);
     return true;
   }
diff --git a/components/autofill/core/browser/data_model/phone_number.h b/components/autofill/core/browser/data_model/phone_number.h
index aa76657..4d3bb90f 100644
--- a/components/autofill/core/browser/data_model/phone_number.h
+++ b/components/autofill/core/browser/data_model/phone_number.h
@@ -39,12 +39,6 @@
       const std::u16string& value,
       structured_address::VerificationStatus status) override;
 
-  // Size and offset of the prefix and suffix portions of phone numbers.
-  static const size_t kPrefixOffset = 0;
-  static const size_t kPrefixLength = 3;
-  static const size_t kSuffixOffset = 3;
-  static const size_t kSuffixLength = 4;
-
   // The class used to combine home phone parts into a whole number.
   class PhoneCombineHelper {
    public:
diff --git a/components/autofill/core/browser/data_model/phone_number_unittest.cc b/components/autofill/core/browser/data_model/phone_number_unittest.cc
index 98d7379d..0f9eb50 100644
--- a/components/autofill/core/browser/data_model/phone_number_unittest.cc
+++ b/components/autofill/core/browser/data_model/phone_number_unittest.cc
@@ -67,8 +67,8 @@
                      {u"16502345678", {PHONE_HOME_WHOLE_NUMBER}},
                      {u"650", {PHONE_HOME_CITY_CODE}},
                      {u"2345678", {PHONE_HOME_NUMBER}},
-                     {u"234", {PHONE_HOME_NUMBER}},
-                     {u"5678", {PHONE_HOME_NUMBER}},
+                     {u"234", {PHONE_HOME_NUMBER_PREFIX}},
+                     {u"5678", {PHONE_HOME_NUMBER_SUFFIX}},
                      {u"2345", {}},
                      {u"6502345678", {PHONE_HOME_CITY_AND_NUMBER}},
                      {u"(650)2345678", {PHONE_HOME_CITY_AND_NUMBER}}});
@@ -272,8 +272,8 @@
 
   PhoneNumber::PhoneCombineHelper number6;
   EXPECT_TRUE(number6.SetInfo(AutofillType(PHONE_HOME_CITY_CODE), u"650"));
-  EXPECT_TRUE(number6.SetInfo(AutofillType(PHONE_HOME_NUMBER), u"234"));
-  EXPECT_TRUE(number6.SetInfo(AutofillType(PHONE_HOME_NUMBER), u"5682"));
+  EXPECT_TRUE(number6.SetInfo(AutofillType(PHONE_HOME_NUMBER_PREFIX), u"234"));
+  EXPECT_TRUE(number6.SetInfo(AutofillType(PHONE_HOME_NUMBER_SUFFIX), u"5682"));
   EXPECT_TRUE(number6.ParseNumber(profile, "en-US", &parsed_phone));
   EXPECT_EQ(u"(650) 234-5682", parsed_phone);
 
@@ -281,8 +281,8 @@
   // based on the app locale.
   PhoneNumber::PhoneCombineHelper number7;
   EXPECT_TRUE(number7.SetInfo(AutofillType(PHONE_HOME_CITY_CODE), u"650"));
-  EXPECT_TRUE(number7.SetInfo(AutofillType(PHONE_HOME_NUMBER), u"234"));
-  EXPECT_TRUE(number7.SetInfo(AutofillType(PHONE_HOME_NUMBER), u"5682"));
+  EXPECT_TRUE(number7.SetInfo(AutofillType(PHONE_HOME_NUMBER_PREFIX), u"234"));
+  EXPECT_TRUE(number7.SetInfo(AutofillType(PHONE_HOME_NUMBER_SUFFIX), u"5682"));
   EXPECT_TRUE(number7.ParseNumber(AutofillProfile(), "en-US", &parsed_phone));
   EXPECT_EQ(u"(650) 234-5682", parsed_phone);
 }
diff --git a/components/autofill/core/browser/field_filler.cc b/components/autofill/core/browser/field_filler.cc
index f8497ec..e6deec3 100644
--- a/components/autofill/core/browser/field_filler.cc
+++ b/components/autofill/core/browser/field_filler.cc
@@ -1092,24 +1092,6 @@
     const std::u16string& number,
     const std::u16string& phone_home_city_and_number,
     const FormFieldData& field_data) {
-  // TODO(crbug.com/581485): Investigate the use of libphonenumber here.
-  // Check to see if the |field| size matches the "prefix" or "suffix" size or
-  // if the field was labeled as such. If so, return the appropriate substring.
-  if (number.length() ==
-      PhoneNumber::kPrefixLength + PhoneNumber::kSuffixLength) {
-    if (field.phone_part() == AutofillField::PHONE_PREFIX ||
-        field_data.max_length == PhoneNumber::kPrefixLength) {
-      return number.substr(PhoneNumber::kPrefixOffset,
-                           PhoneNumber::kPrefixLength);
-    }
-
-    if (field.phone_part() == AutofillField::PHONE_SUFFIX ||
-        field_data.max_length == PhoneNumber::kSuffixLength) {
-      return number.substr(PhoneNumber::kSuffixOffset,
-                           PhoneNumber::kSuffixLength);
-    }
-  }
-
   // If no max length was specified, return the complete number.
   if (field_data.max_length == 0)
     return number;
diff --git a/components/autofill/core/browser/field_filler_unittest.cc b/components/autofill/core/browser/field_filler_unittest.cc
index b82fbca..03067757 100644
--- a/components/autofill/core/browser/field_filler_unittest.cc
+++ b/components/autofill/core/browser/field_filler_unittest.cc
@@ -577,11 +577,6 @@
         AutofillPhoneFieldFillerTestCase{HTML_TYPE_TEL_LOCAL_SUFFIX,
                                          /*field_max_length=*/0, u"4578",
                                          u"+15145554578"},
-        // Filling a phone type field with a max length of 3 should fill only
-        // the prefix.
-        AutofillPhoneFieldFillerTestCase{HTML_TYPE_TEL_LOCAL,
-                                         /*field_max_length=*/3, u"555",
-                                         u"+15145554578"},
         // TODO(crbug.com/581485): There should be a test case where the full
         // number is requested (HTML_TYPE_TEL) but a field_max_length of 3 would
         // fill the prefix.
diff --git a/components/autofill/core/browser/field_types.h b/components/autofill/core/browser/field_types.h
index b68b3ef..c946456 100644
--- a/components/autofill/core/browser/field_types.h
+++ b/components/autofill/core/browser/field_types.h
@@ -310,7 +310,7 @@
   // Variants of type hints specified in the HTML specification that are
   // inferred based on a field's 'maxlength' attribute.
   // TODO(isherman): Remove these types, in favor of understanding maxlength
-  // when filling fields.  See also: AutofillField::phone_part_.
+  // when filling fields.
   HTML_TYPE_ADDITIONAL_NAME_INITIAL,
   HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR,
   HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR,
diff --git a/components/autofill/core/browser/form_data_importer_unittest.cc b/components/autofill/core/browser/form_data_importer_unittest.cc
index adcf0618..f09abde 100644
--- a/components/autofill/core/browser/form_data_importer_unittest.cc
+++ b/components/autofill/core/browser/form_data_importer_unittest.cc
@@ -1298,7 +1298,9 @@
       {{NAME_FIRST, kDefaultFirstName},
        {NAME_LAST, kDefaultLastName},
        {EMAIL_ADDRESS, kDefaultMail},
-       // Add six phone number fields.
+       // Add two phone number fields, split across 3 fields each.
+       // They are all declared as PHONE_HOME_WHOLE_NUMBER, which only affects
+       // the label. Local heuristics will classify them correctly.
        {PHONE_HOME_WHOLE_NUMBER, kDefaultPhoneAreaCode},
        {PHONE_HOME_WHOLE_NUMBER, kDefaultPhonePrefix},
        {PHONE_HOME_WHOLE_NUMBER, kDefaultPhoneSuffix},
diff --git a/components/autofill/core/browser/form_parsing/form_field.cc b/components/autofill/core/browser/form_parsing/form_field.cc
index 903b72c..b7d02a3e 100644
--- a/components/autofill/core/browser/form_parsing/form_field.cc
+++ b/components/autofill/core/browser/form_parsing/form_field.cc
@@ -54,9 +54,9 @@
 bool FormField::MatchesPattern(const base::StringPiece16& input,
                                const base::StringPiece16& pattern,
                                std::vector<std::u16string>* groups) {
-  static base::NoDestructor<AutofillRegexes> g_autofill_regexes(
-      ThreadSafe(true));
-  return g_autofill_regexes->MatchesPattern(input, pattern, groups);
+  static base::NoDestructor<AutofillRegexCache> cache(ThreadSafe(true));
+  const icu::RegexPattern* regex_pattern = cache->GetRegexPattern(pattern);
+  return regex_pattern && autofill::MatchesRegex(input, *regex_pattern, groups);
 }
 
 // static
diff --git a/components/autofill/core/browser/form_parsing/phone_field.cc b/components/autofill/core/browser/form_parsing/phone_field.cc
index b821423..6f75bab8 100644
--- a/components/autofill/core/browser/form_parsing/phone_field.cc
+++ b/components/autofill/core/browser/form_parsing/phone_field.cc
@@ -58,6 +58,7 @@
 // The following notation is used to describe the patterns:
 // <cc> - country code field.
 // <ac> - area code field.
+// TODO(crbug.com/1348137): Add a separate prefix type.
 // <phone> - phone or prefix.
 // <suffix> - suffix.
 // :N means field is limited to N characters, otherwise it is unlimited.
@@ -270,6 +271,7 @@
   DCHECK(parsed_fields[FIELD_PHONE] != nullptr);
 
   // Look for a suffix field using two different regex.
+  // TODO(crbug.com/1348137): Revise or remove.
   bool suffix_matched = false;
   if (!parsed_fields[FIELD_SUFFIX]) {
     suffix_matched =
@@ -287,8 +289,8 @@
                                                 GetPhoneGrammars().size());
 
   // Now look for an extension.
-  // The extension is not actually used, so this just eats the field so other
-  // parsers do not mistaken it for something else.
+  // The extension is unused, but it is parsed to prevent other parsers from
+  // misclassifying it as something else.
   ParsePhoneField(scanner, kPhoneExtensionRe, &parsed_fields[FIELD_EXTENSION],
                   {log_manager, "kPhoneExtensionRe"},
                   /*is_country_code_field=*/false, "PHONE_EXTENSION",
@@ -321,24 +323,27 @@
       AddClassification(parsed_phone_fields_[FIELD_AREA_CODE], area_code_type,
                         kBasePhoneParserScore, field_candidates);
     } else if (has_country_code) {
-      // Only if we can find country code without city code, it means the phone
-      // number include city code.
       field_number_type =
           base::FeatureList::IsEnabled(
               features::kAutofillEnableSupportForPhoneNumberTrunkTypes)
               ? PHONE_HOME_CITY_AND_NUMBER_WITHOUT_TRUNK_PREFIX
               : PHONE_HOME_CITY_AND_NUMBER;
     }
-    // We tag the prefix as PHONE_HOME_NUMBER, then when filling the form
-    // we fill only the prefix depending on the size of the input field.
+    // PHONE_HOME_NUMBER = PHONE_HOME_NUMBER_PREFIX + PHONE_HOME_NUMBER_SUFFIX
+    // is technically dialable (seven-digit dialing), and thus not contained in
+    // the area code branch.
+    if (parsed_phone_fields_[FIELD_SUFFIX]) {
+      // TODO(crbug.com/1348137): Ideally we want to DCHECK that
+      // `parsed_phone_fields_[FIELD_AREA_CODE] || !has_country_code` here.
+      // With the current grammars this can be violated, even though it
+      // seemingly never happens in practice according to our metrics.
+      field_number_type = PHONE_HOME_NUMBER_PREFIX;
+      AddClassification(parsed_phone_fields_[FIELD_SUFFIX],
+                        PHONE_HOME_NUMBER_SUFFIX, kBasePhoneParserScore,
+                        field_candidates);
+    }
     AddClassification(parsed_phone_fields_[FIELD_PHONE], field_number_type,
                       kBasePhoneParserScore, field_candidates);
-    // We tag the suffix as PHONE_HOME_NUMBER, then when filling the form
-    // we fill only the suffix depending on the size of the input field.
-    if (parsed_phone_fields_[FIELD_SUFFIX]) {
-      AddClassification(parsed_phone_fields_[FIELD_SUFFIX], PHONE_HOME_NUMBER,
-                        kBasePhoneParserScore, field_candidates);
-    }
   } else {
     AddClassification(parsed_phone_fields_[FIELD_PHONE],
                       PHONE_HOME_WHOLE_NUMBER, kBasePhoneParserScore,
diff --git a/components/autofill/core/browser/form_parsing/phone_field_unittest.cc b/components/autofill/core/browser/form_parsing/phone_field_unittest.cc
index d9f03b4..fa6c1b0 100644
--- a/components/autofill/core/browser/form_parsing/phone_field_unittest.cc
+++ b/components/autofill/core/browser/form_parsing/phone_field_unittest.cc
@@ -202,8 +202,10 @@
   for (const char* field_type : kFieldTypes) {
     RunParsingTest(
         {{field_type, u"Phone:", u"dayphone1", PHONE_HOME_CITY_CODE},
-         {field_type, u"-", u"dayphone2", PHONE_HOME_NUMBER, /*max_length=*/3},
-         {field_type, u"-", u"dayphone3", PHONE_HOME_NUMBER, /*max_length=*/4},
+         {field_type, u"-", u"dayphone2", PHONE_HOME_NUMBER_PREFIX,
+          /*max_length=*/3},
+         {field_type, u"-", u"dayphone3", PHONE_HOME_NUMBER_SUFFIX,
+          /*max_length=*/4},
          {field_type, u"ext.:", u"dayphone4", PHONE_HOME_EXTENSION}});
   }
 }
@@ -214,8 +216,8 @@
 TEST_P(PhoneFieldTest, ThreePartPhoneNumberPrefixSuffix) {
   for (const char* field_type : kFieldTypes) {
     RunParsingTest({{field_type, u"Phone:", u"area", PHONE_HOME_CITY_CODE},
-                    {field_type, u"", u"prefix", PHONE_HOME_NUMBER},
-                    {field_type, u"", u"suffix", PHONE_HOME_NUMBER,
+                    {field_type, u"", u"prefix", PHONE_HOME_NUMBER_PREFIX},
+                    {field_type, u"", u"suffix", PHONE_HOME_NUMBER_SUFFIX,
                      /*max_length=*/4}});
   }
 }
@@ -224,8 +226,9 @@
   for (const char* field_type : kFieldTypes) {
     RunParsingTest(
         {{field_type, u"(", u"phone1", PHONE_HOME_CITY_CODE, /*max_length=*/3},
-         {field_type, u")", u"phone2", PHONE_HOME_NUMBER, /*max_length=*/3},
-         {field_type, u"", u"phone3", PHONE_HOME_NUMBER,
+         {field_type, u")", u"phone2", PHONE_HOME_NUMBER_PREFIX,
+          /*max_length=*/3},
+         {field_type, u"", u"phone3", PHONE_HOME_NUMBER_SUFFIX,
           /*max_length=*/4}});
   }
 }
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc
index d85d199e..1adb32ad 100644
--- a/components/autofill/core/browser/form_structure.cc
+++ b/components/autofill/core/browser/form_structure.cc
@@ -298,7 +298,7 @@
 ServerFieldTypeSet GetNecessaryTypesFor(ServerFieldType type) {
   switch (type) {
     case PHONE_HOME_COUNTRY_CODE:
-      return {PHONE_HOME_NUMBER,
+      return {PHONE_HOME_NUMBER, PHONE_HOME_NUMBER_PREFIX,
               base::FeatureList::IsEnabled(
                   features::kAutofillEnableSupportForPhoneNumberTrunkTypes)
                   ? PHONE_HOME_CITY_AND_NUMBER_WITHOUT_TRUNK_PREFIX
diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc
index 6545964f..fbe09a5 100644
--- a/components/autofill/core/browser/form_structure_unittest.cc
+++ b/components/autofill/core/browser/form_structure_unittest.cc
@@ -1033,10 +1033,7 @@
          .field_count = 3,
          .autofill_count = 3},
         {.expected_html_type = {HTML_TYPE_TEL_LOCAL, HTML_TYPE_TEL_LOCAL_PREFIX,
-                                HTML_TYPE_TEL_LOCAL_SUFFIX},
-         .expected_phone_part = {AutofillField::IGNORED,
-                                 AutofillField::PHONE_PREFIX,
-                                 AutofillField::PHONE_SUFFIX}}}});
+                                HTML_TYPE_TEL_LOCAL_SUFFIX}}}});
 }
 
 // The heuristics and server predictions should run if there are more than two
@@ -2166,13 +2163,11 @@
   ASSERT_EQ(4U, form_structure->field_count());
   ASSERT_EQ(4U, form_structure->autofill_count());
 
-  // Area code.
   EXPECT_EQ(PHONE_HOME_CITY_CODE, form_structure->field(0)->heuristic_type());
-  // Phone number suffix.
-  EXPECT_EQ(PHONE_HOME_NUMBER, form_structure->field(1)->heuristic_type());
-  // Phone number suffix.
-  EXPECT_EQ(PHONE_HOME_NUMBER, form_structure->field(2)->heuristic_type());
-  // Phone extension.
+  EXPECT_EQ(PHONE_HOME_NUMBER_PREFIX,
+            form_structure->field(1)->heuristic_type());
+  EXPECT_EQ(PHONE_HOME_NUMBER_SUFFIX,
+            form_structure->field(2)->heuristic_type());
   EXPECT_EQ(PHONE_HOME_EXTENSION, form_structure->field(3)->heuristic_type());
 }
 
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc
index 0394479..e1beddd5 100644
--- a/components/autofill/core/browser/personal_data_manager_unittest.cc
+++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -1750,6 +1750,8 @@
                                               ADDRESS_HOME_ZIP,
                                               ADDRESS_HOME_COUNTRY,
                                               PHONE_HOME_NUMBER,
+                                              PHONE_HOME_NUMBER_PREFIX,
+                                              PHONE_HOME_NUMBER_SUFFIX,
                                               PHONE_HOME_COUNTRY_CODE,
                                               PHONE_HOME_CITY_CODE,
                                               PHONE_HOME_CITY_AND_NUMBER,
diff --git a/components/autofill/core/browser/rationalization_util.cc b/components/autofill/core/browser/rationalization_util.cc
index 243e3f0..8118bbe 100644
--- a/components/autofill/core/browser/rationalization_util.cc
+++ b/components/autofill/core/browser/rationalization_util.cc
@@ -30,23 +30,20 @@
     ServerFieldType current_field_type = field->Type().GetStorableType();
     switch (current_field_type) {
       case PHONE_HOME_NUMBER:
+        found_number_field = field;
+        phone_number_found = true;
+        break;
+      case PHONE_HOME_NUMBER_PREFIX:
         if (!found_number_field) {
           found_number_field = field;
-          if (field->max_length < 5) {
-            phone_number_separate_fields = true;
-          } else {
-            phone_number_found = true;
-          }
-          break;
+          phone_number_separate_fields = true;
         }
-        // If the form has phone number separated into exchange and subscriber
-        // number we mark both of them as number fields.
-        // TODO(wuandy): A less hacky solution to have dedicated enum for
-        // exchange and subscriber number.
-        DCHECK(phone_number_separate_fields);
-        DCHECK(!found_number_field_second);
-        found_number_field_second = field;
-        phone_number_found = true;
+        break;
+      case PHONE_HOME_NUMBER_SUFFIX:
+        if (phone_number_separate_fields) {
+          found_number_field_second = field;
+          phone_number_found = true;
+        }
         break;
       case PHONE_HOME_CITY_CODE_WITH_TRUNK_PREFIX:
       case PHONE_HOME_CITY_CODE:
diff --git a/components/autofill_assistant/browser/client_settings_unittest.cc b/components/autofill_assistant/browser/client_settings_unittest.cc
index 0d762a8..edd38df6 100644
--- a/components/autofill_assistant/browser/client_settings_unittest.cc
+++ b/components/autofill_assistant/browser/client_settings_unittest.cc
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 #include "components/autofill_assistant/browser/client_settings.h"
+#include <string>
+#include "base/time/time.h"
 #include "components/autofill_assistant/browser/mock_client.h"
 
 namespace autofill_assistant {
@@ -43,6 +45,29 @@
             "https://www.example.com/favicon.ico");
 }
 
+TEST_F(ClientSettingsTest, NoImageSizeInvalidOverlay) {
+  ClientSettingsProto proto;
+  proto.mutable_overlay_image()->set_image_url(
+      "https://www.example.com/favicon.ico");
+
+  ClientSettings settings;
+  settings.UpdateFromProto(proto);
+
+  EXPECT_FALSE(settings.overlay_image.has_value());
+}
+
+TEST_F(ClientSettingsTest, TextWithoutColorOrSizeInvalidOverlay) {
+  ClientSettingsProto proto;
+  proto.mutable_overlay_image()->set_image_url(
+      "https://www.example.com/favicon.ico");
+  proto.mutable_overlay_image()->set_text("Test text");
+
+  ClientSettings settings;
+  settings.UpdateFromProto(proto);
+
+  EXPECT_FALSE(settings.overlay_image.has_value());
+}
+
 TEST_F(ClientSettingsTest, NoDisplayStringsNoLocale) {
   ClientSettingsProto proto;
   ClientSettings settings;
@@ -187,5 +212,126 @@
                               Pair(ClientSettingsProto::MAYBE_GIVE_UP,
                                    "maybe_give_up")))));
 }
+
+TEST_F(ClientSettingsTest, PeriodicIntervalValues) {
+  ClientSettingsProto proto;
+  proto.set_periodic_script_check_interval_ms(987);
+  proto.set_periodic_element_check_interval_ms(876);
+  proto.set_element_position_update_interval_ms(765);
+  proto.set_short_wait_for_element_deadline_ms(654);
+
+  ClientSettings settings;
+  settings.UpdateFromProto(proto);
+
+  EXPECT_EQ(settings.periodic_script_check_interval, base::Milliseconds(987));
+  EXPECT_EQ(settings.periodic_element_check_interval, base::Milliseconds(876));
+  EXPECT_EQ(settings.element_position_update_interval, base::Milliseconds(765));
+  EXPECT_EQ(settings.short_wait_for_element_deadline, base::Milliseconds(654));
+}
+
+TEST_F(ClientSettingsTest, BoxModel) {
+  ClientSettingsProto proto;
+  proto.set_box_model_check_interval_ms(543);
+  proto.set_box_model_check_count(6);
+
+  ClientSettings settings;
+  settings.UpdateFromProto(proto);
+
+  EXPECT_EQ(settings.box_model_check_interval, base::Milliseconds(543));
+  EXPECT_EQ(settings.box_model_check_count, 6);
+}
+
+TEST_F(ClientSettingsTest, DocumentReadyCheckTimeoutValue) {
+  ClientSettingsProto proto;
+  proto.set_document_ready_check_timeout_ms(432);
+  ClientSettings settings;
+  settings.UpdateFromProto(proto);
+
+  EXPECT_EQ(settings.document_ready_check_timeout, base::Milliseconds(432));
+}
+
+TEST_F(ClientSettingsTest, CancelDelayValue) {
+  ClientSettingsProto proto;
+  proto.set_cancel_delay_ms(321);
+
+  ClientSettings settings;
+  settings.UpdateFromProto(proto);
+
+  EXPECT_EQ(settings.cancel_delay, base::Milliseconds(321));
+}
+
+TEST_F(ClientSettingsTest, Tap) {
+  ClientSettingsProto proto;
+  proto.set_tap_count(8);
+  proto.set_tap_tracking_duration_ms(210);
+  proto.set_tap_shutdown_delay_ms(109);
+
+  ClientSettings settings;
+  settings.UpdateFromProto(proto);
+
+  EXPECT_EQ(settings.tap_count, 8);
+  EXPECT_EQ(settings.tap_tracking_duration, base::Milliseconds(210));
+  EXPECT_EQ(settings.tap_shutdown_delay, base::Milliseconds(109));
+}
+
+TEST_F(ClientSettingsTest, TalkBackSheetSizeFractionValue) {
+  ClientSettingsProto proto;
+  proto.set_talkback_sheet_size_fraction(.6f);
+
+  ClientSettings settings;
+  settings.UpdateFromProto(proto);
+
+  EXPECT_EQ(settings.talkback_sheet_size_fraction, .6f);
+}
+
+TEST_F(ClientSettingsTest, SelectorObserver) {
+  ClientSettingsProto proto;
+  proto.set_selector_observer_debounce_interval_ms(987);
+  proto.set_selector_observer_extra_timeout_ms(876);
+
+  ClientSettings settings;
+  settings.UpdateFromProto(proto);
+
+  EXPECT_EQ(settings.selector_observer_extra_timeout, base::Milliseconds(876));
+  EXPECT_EQ(settings.selector_observer_debounce_interval,
+            base::Milliseconds(987));
+}
+
+TEST_F(ClientSettingsTest, SlowWarningSettings) {
+  ClientSettingsProto proto;
+  ClientSettingsProto::SlowWarningSettings slow_settings;
+
+  slow_settings.set_enable_slow_connection_warnings(true);
+  slow_settings.set_enable_slow_website_warnings(true);
+  slow_settings.set_only_show_warning_once(true);
+  slow_settings.set_only_show_connection_warning_once(true);
+  slow_settings.set_only_show_website_warning_once(true);
+  slow_settings.set_warning_delay_ms(987);
+  slow_settings.set_slow_roundtrip_threshold_ms(876);
+  slow_settings.set_max_consecutive_slow_roundtrips(765);
+  slow_settings.set_minimum_warning_message_duration_ms(654);
+  slow_settings.set_message_mode(
+      ClientSettingsProto::SlowWarningSettings::CONCATENATE);
+  slow_settings.set_slow_connection_message("Slow Connection");
+  slow_settings.set_slow_website_message("Slow Website");
+
+  *proto.mutable_slow_warning_settings() = slow_settings;
+  ClientSettings settings;
+  settings.UpdateFromProto(proto);
+
+  EXPECT_TRUE(settings.enable_slow_connection_warnings);
+  EXPECT_TRUE(settings.enable_slow_website_warnings);
+  EXPECT_TRUE(settings.only_show_warning_once);
+  EXPECT_TRUE(settings.only_show_connection_warning_once);
+  EXPECT_TRUE(settings.only_show_website_warning_once);
+  EXPECT_EQ(settings.warning_delay, base::Milliseconds(987));
+  EXPECT_EQ(settings.slow_roundtrip_threshold, base::Milliseconds(876));
+  EXPECT_EQ(settings.max_consecutive_slow_roundtrips, 765);
+  EXPECT_EQ(settings.minimum_warning_duration, base::Milliseconds(654));
+  EXPECT_EQ(settings.message_mode,
+            ClientSettingsProto::SlowWarningSettings::CONCATENATE);
+  EXPECT_EQ(settings.slow_connection_message, "Slow Connection");
+  EXPECT_EQ(settings.slow_website_message, "Slow Website");
+}
 }  // namespace
 }  // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/public/password_change/save_password_leak_detection_delegate.cc b/components/autofill_assistant/browser/public/password_change/save_password_leak_detection_delegate.cc
index c652630..5b12ddb 100644
--- a/components/autofill_assistant/browser/public/password_change/save_password_leak_detection_delegate.cc
+++ b/components/autofill_assistant/browser/public/password_change/save_password_leak_detection_delegate.cc
@@ -62,6 +62,7 @@
     leak_detection_timer_.Stop();
     std::move(callback).Run(
         LeakDetectionStatus(LeakDetectionStatusCode::ABORTED), false);
+    return;
   }
 
   leak_check_ = leak_factory_->TryCreateLeakCheck(
diff --git a/components/browser_ui/accessibility/android/java/res/drawable/page_zoom_background.xml b/components/browser_ui/accessibility/android/java/res/drawable/page_zoom_background.xml
index 37872d0..77cf7d44 100644
--- a/components/browser_ui/accessibility/android/java/res/drawable/page_zoom_background.xml
+++ b/components/browser_ui/accessibility/android/java/res/drawable/page_zoom_background.xml
@@ -4,16 +4,9 @@
      found in the LICENSE file. -->
 
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <!-- TODO(mschillaci): Replace all hardcoded values if this becomes part of final UI. -->
-    <solid android:color="@android:color/white"/>
-
-    <stroke android:width="1px" android:color="@android:color/black" />
-
-    <corners android:radius="44dp"/>
-
+    <solid android:color="@macro/default_bg_color"/>
+    <corners android:radius="@dimen/page_zoom_view_corner_radius"/>
     <padding
-        android:left="20dp"
-        android:right="20dp"
-        android:top="8dp"
-        android:bottom="8dp" />
+        android:top="@dimen/page_zoom_view_padding"
+        android:bottom="@dimen/page_zoom_view_padding" />
 </shape>
\ No newline at end of file
diff --git a/components/browser_ui/accessibility/android/java/res/layout/page_zoom_view.xml b/components/browser_ui/accessibility/android/java/res/layout/page_zoom_view.xml
index d40fd6d9..a04e3ee5 100644
--- a/components/browser_ui/accessibility/android/java/res/layout/page_zoom_view.xml
+++ b/components/browser_ui/accessibility/android/java/res/layout/page_zoom_view.xml
@@ -9,6 +9,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="@drawable/page_zoom_background"
+    android:elevation="@dimen/page_zoom_view_elevation"
     android:gravity="center"
     android:orientation="horizontal" >
 
diff --git a/components/browser_ui/accessibility/android/java/res/values/dimens.xml b/components/browser_ui/accessibility/android/java/res/values/dimens.xml
index 62897bf..e517864 100644
--- a/components/browser_ui/accessibility/android/java/res/values/dimens.xml
+++ b/components/browser_ui/accessibility/android/java/res/values/dimens.xml
@@ -6,4 +6,9 @@
 -->
 <resources xmlns:tools="http://schemas.android.com/tools">
     <dimen name="page_zoom_preview_image_size">24dp</dimen>
+
+    <dimen name="page_zoom_view_margins">16dp</dimen>
+    <dimen name="page_zoom_view_padding">4dp</dimen>
+    <dimen name="page_zoom_view_elevation">4dp</dimen>
+    <dimen name="page_zoom_view_corner_radius">44dp</dimen>
 </resources>
\ No newline at end of file
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AddExceptionPreference.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AddExceptionPreference.java
index b0c3489..a90a6cd 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AddExceptionPreference.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AddExceptionPreference.java
@@ -124,7 +124,7 @@
         final CheckBox thirdPartyExceptionsBox =
                 (CheckBox) view.findViewById(R.id.third_parties_exception_checkbox);
 
-        if (!mCategory.showSites(SiteSettingsCategory.Type.COOKIES)) {
+        if (mCategory.getType() != SiteSettingsCategory.Type.COOKIES) {
             // TODO(crbug.com/1077766): Change the string of the checkbox to something like
             // "including third-party cookies on this site".
             thirdPartyExceptionsBox.setVisibility(View.GONE);
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AllSiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AllSiteSettings.java
index ae063728..2c0d4ef7 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AllSiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AllSiteSettings.java
@@ -121,15 +121,15 @@
             mCategory = SiteSettingsCategory.createFromType(
                     browserContextHandle, SiteSettingsCategory.Type.ALL_SITES);
         }
-        if (!(mCategory.showSites(SiteSettingsCategory.Type.ALL_SITES)
-                    || mCategory.showSites(SiteSettingsCategory.Type.USE_STORAGE))) {
+        if (!(mCategory.getType() == SiteSettingsCategory.Type.ALL_SITES
+                    || mCategory.getType() == SiteSettingsCategory.Type.USE_STORAGE)) {
             throw new IllegalArgumentException("Use SingleCategorySettings instead.");
         };
 
         ViewGroup view = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState);
 
         // Add custom views for Storage Preferences to bottom of the fragment.
-        if (mCategory.showSites(SiteSettingsCategory.Type.USE_STORAGE)) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.USE_STORAGE) {
             inflater.inflate(R.layout.storage_preferences_view, view, true);
             mEmptyView = view.findViewById(R.id.empty_storage);
             mClearButton = view.findViewById(R.id.clear_button);
@@ -391,7 +391,7 @@
     /** Returns whether the new All Sites UI should be used. */
     private boolean isNewAllSitesUiEnabled() {
         // Only in the "All sites" mode and with the flag enabled.
-        return mCategory.showSites(SiteSettingsCategory.Type.ALL_SITES)
+        return mCategory.getType() == SiteSettingsCategory.Type.ALL_SITES
                 && SiteSettingsFeatureList.isEnabled(
                         SiteSettingsFeatureList.SITE_DATA_IMPROVEMENTS);
     }
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 22ec8fe..294653c 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
@@ -218,14 +218,11 @@
     private boolean isOnBlockList(WebsitePreference website) {
         BrowserContextHandle browserContextHandle =
                 getSiteSettingsDelegate().getBrowserContextHandle();
-        for (@SiteSettingsCategory.Type int i = 0; i < SiteSettingsCategory.Type.NUM_ENTRIES; i++) {
-            if (!mCategory.showSites(i)) continue;
-            @ContentSettingValues
-            Integer contentSetting = website.site().getContentSetting(
-                    browserContextHandle, SiteSettingsCategory.contentSettingsType(i));
-            if (contentSetting != null) {
-                return ContentSettingValues.BLOCK == contentSetting;
-            }
+        @ContentSettingValues
+        Integer contentSetting = website.site().getContentSetting(
+                browserContextHandle, mCategory.getContentSettingsType());
+        if (contentSetting != null) {
+            return ContentSettingValues.BLOCK == contentSetting;
         }
         return false;
     }
@@ -247,7 +244,7 @@
         if (!mGroupByAllowBlock) return;
 
         int resourceId;
-        if (mCategory.showSites(SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE)) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE) {
             // REQUEST_DESKTOP_SITE has its own Allowed list header.
             resourceId = R.string.website_settings_allowed_group_heading_request_desktop_site;
         } else if (toggleValue) {
@@ -272,9 +269,9 @@
 
         // Set the title and arrow icons for the header.
         int resourceId;
-        if (mCategory.showSites(SiteSettingsCategory.Type.SOUND)) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.SOUND) {
             resourceId = R.string.website_settings_blocked_group_heading_sound;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE)) {
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE) {
             resourceId = R.string.website_settings_blocked_group_heading_request_desktop_site;
         } else {
             resourceId = R.string.website_settings_blocked_group_heading;
@@ -327,8 +324,8 @@
                     browserContextHandle, getArguments().getString(EXTRA_CATEGORY, ""));
         }
 
-        if (mCategory.showSites(SiteSettingsCategory.Type.ALL_SITES)
-                || mCategory.showSites(SiteSettingsCategory.Type.USE_STORAGE)) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.ALL_SITES
+                || mCategory.getType() == SiteSettingsCategory.Type.USE_STORAGE) {
             throw new IllegalArgumentException("Use AllSiteSettings instead.");
         }
 
@@ -406,7 +403,7 @@
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == R.id.menu_id_site_settings_help) {
-            if (mCategory.showSites(SiteSettingsCategory.Type.PROTECTED_MEDIA)) {
+            if (mCategory.getType() == SiteSettingsCategory.Type.PROTECTED_MEDIA) {
                 getSiteSettingsDelegate().launchProtectedContentHelpAndFeedbackActivity(
                         getActivity());
             } else {
@@ -443,7 +440,7 @@
                 website_pref.getExtras().putInt(
                         SettingsNavigationSource.EXTRA_KEY, navigationSource);
             } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
-                    && mCategory.showSites(SiteSettingsCategory.Type.NOTIFICATIONS)) {
+                    && mCategory.getType() == SiteSettingsCategory.Type.NOTIFICATIONS) {
                 // In  Android O+, users can manage Notification channels through App Info. If this
                 // is the case we send the user directly to Android Settings to modify the
                 // Notification exception.
@@ -475,7 +472,7 @@
 
             for (@SiteSettingsCategory.Type int type = 0;
                     type < SiteSettingsCategory.Type.NUM_ENTRIES; type++) {
-                if (!mCategory.showSites(type)) {
+                if (mCategory.getType() != type) {
                     continue;
                 }
 
@@ -573,21 +570,21 @@
         BrowserContextHandle browserContextHandle =
                 getSiteSettingsDelegate().getBrowserContextHandle();
         int resource = 0;
-        if (mCategory.showSites(SiteSettingsCategory.Type.AUTOMATIC_DOWNLOADS)) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.AUTOMATIC_DOWNLOADS) {
             resource = R.string.website_settings_add_site_description_automatic_downloads;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.BACKGROUND_SYNC)) {
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.BACKGROUND_SYNC) {
             resource = R.string.website_settings_add_site_description_background_sync;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.JAVASCRIPT)) {
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.JAVASCRIPT) {
             resource = WebsitePreferenceBridge.isCategoryEnabled(
                                browserContextHandle, ContentSettingsType.JAVASCRIPT)
                     ? R.string.website_settings_add_site_description_javascript_block
                     : R.string.website_settings_add_site_description_javascript_allow;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.SOUND)) {
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.SOUND) {
             resource = WebsitePreferenceBridge.isCategoryEnabled(
                                browserContextHandle, ContentSettingsType.SOUND)
                     ? R.string.website_settings_add_site_description_sound_block
                     : R.string.website_settings_add_site_description_sound_allow;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.COOKIES)) {
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.COOKIES) {
             if (mRequiresFourStateSetting) {
                 resource = cookieSettingsExceptionShouldBlock()
                         ? R.string.website_settings_add_site_description_cookies_block
@@ -598,11 +595,11 @@
                         ? R.string.website_settings_add_site_description_cookies_block
                         : R.string.website_settings_add_site_description_cookies_allow;
             }
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT)) {
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT) {
             assert WebsitePreferenceBridge.isCategoryEnabled(
                     browserContextHandle, ContentSettingsType.AUTO_DARK_WEB_CONTENT);
             resource = R.string.website_settings_add_site_description_auto_dark_block;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.FEDERATED_IDENTITY_API)) {
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.FEDERATED_IDENTITY_API) {
             resource = WebsitePreferenceBridge.isCategoryEnabled(
                                browserContextHandle, ContentSettingsType.FEDERATED_IDENTITY_API)
                     ? R.string.website_settings_add_site_description_federated_identity_block
@@ -644,7 +641,7 @@
         BrowserContextHandle browserContextHandle =
                 getSiteSettingsDelegate().getBrowserContextHandle();
         int setting;
-        if (mCategory.showSites(SiteSettingsCategory.Type.COOKIES) && mRequiresFourStateSetting) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.COOKIES && mRequiresFourStateSetting) {
             setting = cookieSettingsExceptionShouldBlock() ? ContentSettingValues.BLOCK
                                                            : ContentSettingValues.ALLOW;
         } else {
@@ -666,7 +663,7 @@
 
         getInfoForOrigins();
 
-        if (mCategory.showSites(SiteSettingsCategory.Type.SOUND)) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.SOUND) {
             if (setting == ContentSettingValues.BLOCK) {
                 RecordUserAction.record("SoundContentSetting.MuteBy.PatternException");
             } else {
@@ -689,21 +686,21 @@
         BrowserContextHandle browserContextHandle =
                 getSiteSettingsDelegate().getBrowserContextHandle();
         boolean allowSpecifyingExceptions = false;
-        if (mCategory.showSites(SiteSettingsCategory.Type.SOUND)) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.SOUND) {
             allowSpecifyingExceptions = true;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.JAVASCRIPT)) {
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.JAVASCRIPT) {
             allowSpecifyingExceptions = true;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.COOKIES)) {
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.COOKIES) {
             allowSpecifyingExceptions = true;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.BACKGROUND_SYNC)
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.BACKGROUND_SYNC
                 && !WebsitePreferenceBridge.isCategoryEnabled(
                         browserContextHandle, ContentSettingsType.BACKGROUND_SYNC)) {
             allowSpecifyingExceptions = true;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.AUTOMATIC_DOWNLOADS)
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.AUTOMATIC_DOWNLOADS
                 && !WebsitePreferenceBridge.isCategoryEnabled(
                         browserContextHandle, ContentSettingsType.AUTOMATIC_DOWNLOADS)) {
             allowSpecifyingExceptions = true;
-        } else if (mCategory.showSites(SiteSettingsCategory.Type.FEDERATED_IDENTITY_API)) {
+        } else if (mCategory.getType() == SiteSettingsCategory.Type.FEDERATED_IDENTITY_API) {
             allowSpecifyingExceptions = true;
         }
         if (allowSpecifyingExceptions) {
@@ -754,7 +751,7 @@
                     (PreferenceGroup) getPreferenceScreen().findPreference(MANAGED_GROUP);
 
             Set<String> delegatedOrigins =
-                    mCategory.showSites(SiteSettingsCategory.Type.NOTIFICATIONS)
+                    mCategory.getType() == SiteSettingsCategory.Type.NOTIFICATIONS
                     ? getSiteSettingsDelegate().getAllDelegatedNotificationOrigins()
                     : Collections.emptySet();
 
@@ -773,7 +770,7 @@
 
             // For the ads permission, the Allowed list should appear first. Default
             // collapsed settings should not change.
-            if (mCategory.showSites(SiteSettingsCategory.Type.ADS)) {
+            if (mCategory.getType() == SiteSettingsCategory.Type.ADS) {
                 blockedGroup.setOrder(allowedGroup.getOrder() + 1);
             }
 
@@ -929,7 +926,7 @@
             configureBinaryToggle(binaryToggle, contentType);
         }
 
-        if (!mCategory.showSites(SiteSettingsCategory.Type.COOKIES)) {
+        if (mCategory.getType() != SiteSettingsCategory.Type.COOKIES) {
             screen.removePreference(screen.findPreference(COOKIE_INFO_TEXT_KEY));
         }
 
@@ -950,7 +947,7 @@
         }
 
         // Configure/hide the notifications secondary controls, as needed.
-        if (mCategory.showSites(SiteSettingsCategory.Type.NOTIFICATIONS)) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.NOTIFICATIONS) {
             if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
                 notificationsVibrate.setOnPreferenceChangeListener(this);
             } else {
@@ -970,7 +967,7 @@
         }
 
         // Configure/hide the desktop site secondary controls, as needed.
-        if (mCategory.showSites(SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE)
+        if (mCategory.getType() == SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE
                 && ContentFeatureList.isEnabled(
                         ContentFeatureList.REQUEST_DESKTOP_SITE_ADDITIONS)) {
             mDesktopSitePeripheralPref.setOnPreferenceChangeListener(this);
@@ -982,7 +979,7 @@
         }
 
         // Only show the link that explains protected content settings when needed.
-        if (mCategory.showSites(SiteSettingsCategory.Type.PROTECTED_MEDIA)
+        if (mCategory.getType() == SiteSettingsCategory.Type.PROTECTED_MEDIA
                 && getSiteSettingsDelegate().isHelpAndFeedbackEnabled()) {
             explainProtectedMediaKey.setOnPreferenceClickListener(preference -> {
                 getSiteSettingsDelegate().launchProtectedContentHelpAndFeedbackActivity(
@@ -1068,7 +1065,7 @@
         // Set summary on or off.
         BrowserContextHandle browserContextHandle =
                 getSiteSettingsDelegate().getBrowserContextHandle();
-        if (mCategory.showSites(SiteSettingsCategory.Type.DEVICE_LOCATION)
+        if (mCategory.getType() == SiteSettingsCategory.Type.DEVICE_LOCATION
                 && WebsitePreferenceBridge.isLocationAllowedByPolicy(browserContextHandle)) {
             binaryToggle.setSummaryOn(ContentSettingsResources.getGeolocationAllowedSummary());
         } else {
@@ -1173,8 +1170,8 @@
                             site.setContentSetting(browserContextHandle, contentSettingsType,
                                     ContentSettingValues.DEFAULT);
 
-                            if (mCategory.showSites(
-                                        SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT)) {
+                            if (mCategory.getType()
+                                    == SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT) {
                                 AutoDarkMetrics.recordAutoDarkSettingsChangeSource(
                                         AutoDarkSettingsChangeSource.SITE_SETTINGS_EXCEPTION_LIST,
                                         false);
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 1ea3178..74ad5fd 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
@@ -289,6 +289,13 @@
     }
 
     /**
+     * Returns the {@link SiteSettingsCategory.Type} for this category.
+     */
+    public @Type int getType() {
+        return mCategory;
+    }
+
+    /**
      * Returns the {@link ContentSettingsType} for this category, or -1 if no such type exists.
      */
     public @ContentSettingsType int getContentSettingsType() {
@@ -304,13 +311,6 @@
     }
 
     /**
-     * Returns whether this category is the specified type.
-     */
-    public boolean showSites(@Type int type) {
-        return type == mCategory;
-    }
-
-    /**
      * Returns whether the Ads category is enabled via an experiment flag.
      */
     public static boolean adsCategoryEnabled() {
@@ -325,12 +325,12 @@
     public boolean isManaged() {
         // TODO(dullweber): Why do we check some permissions for managed state and some for user
         // modifiability and some not at all?
-        if (showSites(Type.AUTOMATIC_DOWNLOADS) || showSites(Type.BACKGROUND_SYNC)
-                || showSites(Type.JAVASCRIPT) || showSites(Type.POPUPS)) {
+        if (mCategory == Type.AUTOMATIC_DOWNLOADS || mCategory == Type.BACKGROUND_SYNC
+                || mCategory == Type.JAVASCRIPT || mCategory == Type.POPUPS) {
             return WebsitePreferenceBridge.isContentSettingManaged(
                     getBrowserContextHandle(), getContentSettingsType());
-        } else if (showSites(Type.COOKIES) || showSites(Type.DEVICE_LOCATION)
-                || showSites(Type.CAMERA) || showSites(Type.MICROPHONE)) {
+        } else if (mCategory == Type.COOKIES || mCategory == Type.DEVICE_LOCATION
+                || mCategory == Type.CAMERA || mCategory == Type.MICROPHONE) {
             return !WebsitePreferenceBridge.isContentSettingUserModifiable(
                     getBrowserContextHandle(), getContentSettingsType());
         }
@@ -343,8 +343,8 @@
      */
     public boolean isManagedByCustodian() {
         // TODO(dullweber): Why do we only check these types?
-        if (showSites(Type.COOKIES) || showSites(Type.DEVICE_LOCATION) || showSites(Type.CAMERA)
-                || showSites(Type.MICROPHONE)) {
+        if (mCategory == Type.COOKIES || mCategory == Type.DEVICE_LOCATION
+                || mCategory == Type.CAMERA || mCategory == Type.MICROPHONE) {
             return WebsitePreferenceBridge.isContentSettingManagedByCustodian(
                     getBrowserContextHandle(), getContentSettingsType());
         }
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
index edfd2c5e..14e3cc2a 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
@@ -163,13 +163,13 @@
      */
     public void fetchPreferencesForCategory(
             SiteSettingsCategory category, WebsitePermissionsCallback callback) {
-        if (category.showSites(SiteSettingsCategory.Type.ALL_SITES)) {
+        if (category.getType() == SiteSettingsCategory.Type.ALL_SITES) {
             fetchAllPreferences(callback);
             return;
         }
 
         TaskQueue queue = new TaskQueue();
-        if (category.showSites(SiteSettingsCategory.Type.USE_STORAGE)) {
+        if (category.getType() == SiteSettingsCategory.Type.USE_STORAGE) {
             addFetcherForStorage(queue);
         } else {
             assert getPermissionsType(category.getContentSettingsType()) != null;
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreference.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreference.java
index 9a1fa18..cb5539d9 100644
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreference.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreference.java
@@ -109,7 +109,7 @@
             return super.compareTo(preference);
         }
         WebsitePreference other = (WebsitePreference) preference;
-        if (mCategory.showSites(SiteSettingsCategory.Type.USE_STORAGE)) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.USE_STORAGE) {
             return mSite.compareByStorageTo(other.mSite);
         }
 
@@ -121,7 +121,7 @@
         super.onBindViewHolder(holder);
         TextView usageText = (TextView) holder.findViewById(R.id.usage_text);
         usageText.setVisibility(View.GONE);
-        if (mCategory.showSites(SiteSettingsCategory.Type.USE_STORAGE)) {
+        if (mCategory.getType() == SiteSettingsCategory.Type.USE_STORAGE) {
             long totalUsage = mSite.getTotalUsage();
             if (totalUsage > 0) {
                 usageText.setText(Formatter.formatShortFileSize(getContext(), totalUsage));
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 c4acba0..d373715 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">Demp video</translation>
 <translation id="3596414637720633074">Blokkeer derdepartywebkoekies in Incognito</translation>
 <translation id="3600792891314830896">Demp werwe wat klank speel</translation>
+<translation id="3628308229821498208">Voorgestelde soektogte</translation>
 <translation id="3744111561329211289">Agtergrondsinkronisering</translation>
 <translation id="3763247130972274048">Dubbeltik links of regs op video om 10 s. oor te slaan</translation>
 <translation id="3797520601150691162">Moenie donkertema vir 'n spesifieke werf toepas nie</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">Blokkeer derdeparty-webkoekies</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" />-opsies</translation>
 <translation id="6231752747840485235">Deïnstalleer "<ph name="APP_NAME" />"?</translation>
+<translation id="6262191102408817757">Gegrond op jou laaste oortjie</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> en <ph name="PERMISSION_2" /> word geblokkeer.</translation>
 <translation id="6270391203985052864">Werwe kan vra om kennisgewings te stuur</translation>
 <translation id="6295158916970320988">Alle werwe</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 705dfc7..6cb5fb6 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">بی‌صدا کردن ویدیو</translation>
 <translation id="3596414637720633074">مسدود کردن کوکی‌های شخص ثالث در «حالت ناشناس»</translation>
 <translation id="3600792891314830896">سایت‌هایی که صدا پخش می‌کنند بی‌صدا شوند</translation>
+<translation id="3628308229821498208">جستجوهای پیشنهادی</translation>
 <translation id="3744111561329211289">همگام‌سازی پس‌زمینه</translation>
 <translation id="3763247130972274048">در سمت راست یا چپ ویدیو دو ضربه سریع بزنید تا ۱۰ ثانیه رد شود</translation>
 <translation id="3797520601150691162">زمینه تیره برای سایت خاصی استفاده نشود</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">مسدود کردن کوکی‌های شخص ثالث</translation>
 <translation id="6216432067784365534">گزینه‌های <ph name="NAME_OF_LIST_ITEM" /></translation>
 <translation id="6231752747840485235">«<ph name="APP_NAME" />» حذف نصب شود؟</translation>
+<translation id="6262191102408817757">براساس آخرین برگه شما</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> و <ph name="PERMISSION_2" /> مسدود هستند</translation>
 <translation id="6270391203985052864">سایت‌ها می‌توانند برای ارسال اعلان درخواست دهند</translation>
 <translation id="6295158916970320988">همه سایت‌ها</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 3f1ebeb..df2e25f 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">Désactiver le son de la vidéo</translation>
 <translation id="3596414637720633074">Bloquer les témoins tiers en navigation privée</translation>
 <translation id="3600792891314830896">Désactiver le son sur les sites qui en font jouer</translation>
+<translation id="3628308229821498208">Recherches suggérées</translation>
 <translation id="3744111561329211289">Synchronisation en arrière-plan</translation>
 <translation id="3763247130972274048">Touchez deux fois à gauche ou à droite de la vidéo pour sauter 10 secondes</translation>
 <translation id="3797520601150691162">Ne pas appliquer le thème sombre à un site particulier</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">Bloquer les témoins de tiers</translation>
 <translation id="6216432067784365534">Options de <ph name="NAME_OF_LIST_ITEM" /></translation>
 <translation id="6231752747840485235">Désinstaller « <ph name="APP_NAME" /> »?</translation>
+<translation id="6262191102408817757">En fonction de votre dernier onglet</translation>
 <translation id="6262279340360821358">Autorisations <ph name="PERMISSION_1" /> et <ph name="PERMISSION_2" /> bloquées</translation>
 <translation id="6270391203985052864">Les sites peuvent vous demander l'autorisation d'envoyer des notifications</translation>
 <translation id="6295158916970320988">Tous les sites</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 8c0901a..e6acca4f 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">વીડિયોને મ્યૂટ કરો</translation>
 <translation id="3596414637720633074">ત્રીજા પક્ષની કુકીને છૂપા મોડમાં બ્લૉક કરો</translation>
 <translation id="3600792891314830896">જે સાઇટ સાઉન્ડ ચલાવતી હોય તેઓને મ્યૂટ કરો</translation>
+<translation id="3628308229821498208">સૂચવેલી શોધ</translation>
 <translation id="3744111561329211289">બૅકગ્રાઉન્ડ સિંક</translation>
 <translation id="3763247130972274048">10 સેકન્ડ છોડવા માટે ડાબે અથવા જમણે બે વાર ટૅપ કરો</translation>
 <translation id="3797520601150691162">કોઈ ચોક્કસ સાઇટ માટે ઘેરી થીમ લાગુ કરશો નહીં</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">ત્રીજા પક્ષની કુકીને બ્લૉક કરો</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" />ના વિકલ્પો</translation>
 <translation id="6231752747840485235">'<ph name="APP_NAME" />' અનઇન્સ્ટૉલ કરીએ?</translation>
+<translation id="6262191102408817757">તમારા છેલ્લા ટૅબના આધારે</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> અને <ph name="PERMISSION_2" />ને બ્લૉક કર્યા</translation>
 <translation id="6270391203985052864">સાઇટ તમને નોટિફિકેશન મોકલવા માટે પૂછી શકે છે</translation>
 <translation id="6295158916970320988">બધી સાઇટ</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 9f63401d..91aa9c0 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">वीडियो म्यूट करें</translation>
 <translation id="3596414637720633074">गुप्त मोड के दौरान तीसरे पक्ष की कुकी को ब्लॉक करें</translation>
 <translation id="3600792891314830896">आवाज़ चलाने वाली साइटों की आवाज़ बंद करें</translation>
+<translation id="3628308229821498208">सुझाई गई खोजें</translation>
 <translation id="3744111561329211289">बैकग्राउंड सिंक</translation>
 <translation id="3763247130972274048">वीडियो को 10 सेकंड आगे या पीछे करने के लिए, बाएं या दाएं दो बार टैप करें</translation>
 <translation id="3797520601150691162">कुछ खास साइटों पर गहरे रंग वाली थीम लागू न करें</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">तीसरे पक्ष की कुकी ब्लॉक करें</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> विकल्प</translation>
 <translation id="6231752747840485235">क्या आपको '<ph name="APP_NAME" />' अनइंस्टॉल करना है?</translation>
+<translation id="6262191102408817757">आपके आखिरी टैब के आधार पर</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> और <ph name="PERMISSION_2" /> को ब्लॉक किया गया</translation>
 <translation id="6270391203985052864">साइटें आपको सूचनाएं भेजने के लिए पूछ सकती हैं</translation>
 <translation id="6295158916970320988">सभी साइटें</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 18d4cd8..3ff2a24 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">Бейненің дыбысын өшіру</translation>
 <translation id="3596414637720633074">Инкогнито режимінде үшінші тарап cookie файлдарын бөгеу</translation>
 <translation id="3600792891314830896">Сайттардың дыбысы өшірілді</translation>
+<translation id="3628308229821498208">Ұсынылған іздеу сұраулары</translation>
 <translation id="3744111561329211289">Фондық синхрондау</translation>
 <translation id="3763247130972274048">10 секунд уақытты өткізіп жіберу үшін бейнені солға немесе оңға қарай екі рет түртіңіз.</translation>
 <translation id="3797520601150691162">Белгілі бір сайтқа қараңғы режим қолданылмайды.</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">Үшінші тарап cookie файлдарын бөгеу</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> опциялары</translation>
 <translation id="6231752747840485235">"<ph name="APP_NAME" />" қолданбасы жойылсын ба?</translation>
+<translation id="6262191102408817757">Соңғы ашылған қойындыға негізделген.</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> және <ph name="PERMISSION_2" /> үшін тыйым салынған.</translation>
 <translation id="6270391203985052864">Сайттар хабарландырулар жіберу рұқсатын сұрай алады</translation>
 <translation id="6295158916970320988">Барлық сайттар</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 64f38cb..4d9e604 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">បិទ​សំឡេង​វីដេអូ</translation>
 <translation id="3596414637720633074">ទប់ស្កាត់​ខូគីភាគីទីបីក្នុងមុខងារឯកជន</translation>
 <translation id="3600792891314830896">បិទសំឡេងទំព័រដែលចាក់សំឡេង</translation>
+<translation id="3628308229821498208">ការស្វែងរក​ដែលបាន​ណែនាំ</translation>
 <translation id="3744111561329211289">សមកាលកម្មផ្ទៃខាងក្រោយ</translation>
 <translation id="3763247130972274048">ចុច​ខាងឆ្វេង ឬ​ខាងស្ដាំពីរដង​​លើវីដេអូ ដើម្បី​រំលង 10 វិ</translation>
 <translation id="3797520601150691162">កុំប្រើរចនាប័ទ្មងងឹតសម្រាប់គេហទំព័រជាក់លាក់</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">រារាំង​ខូគី​ភាគី​ទីបី</translation>
 <translation id="6216432067784365534">ជម្រើស <ph name="NAME_OF_LIST_ITEM" /></translation>
 <translation id="6231752747840485235">លុប '<ph name="APP_NAME" />' ឬ?</translation>
+<translation id="6262191102408817757">ដោយផ្អែកលើ​ផ្ទាំង​ចុងក្រោយ​របស់អ្នក</translation>
 <translation id="6262279340360821358">បានទប់ស្កាត់ <ph name="PERMISSION_1" /> និង <ph name="PERMISSION_2" /></translation>
 <translation id="6270391203985052864">គេហទំព័រ​អាច​ស្នើសុំ​ការអនុញ្ញាត​ដើម្បី​ផ្ញើ​ការជូន​ដំណឹង</translation>
 <translation id="6295158916970320988">គេហទំព័រទាំងអស់</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 867f815..f7c82b3d 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">ವೀಡಿಯೊ ಮ್ಯೂಟ್ ಮಾಡಿ</translation>
 <translation id="3596414637720633074">ಅದೃಶ್ಯ ಮೋಡ್‌ನಲ್ಲಿ ಥರ್ಡ್-ಪಾರ್ಟಿ ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
 <translation id="3600792891314830896">ಕೆಲವು ಸೈಟ್‌ಗಳಲ್ಲಿ ಧ್ವನಿ ಪ್ಲೇ ಆಗುವುದನ್ನು ಮ್ಯೂಟ್ ಮಾಡಿ</translation>
+<translation id="3628308229821498208">ಸೂಚಿಸಲಾದ ಹುಡುಕಾಟಗಳು</translation>
 <translation id="3744111561329211289">ಹಿನ್ನೆಲೆ ಸಿಂಕ್</translation>
 <translation id="3763247130972274048">10 ಸೆಕೆಂಡ್‌ಗಳಷ್ಟು ಸ್ಕಿಪ್ ಮಾಡಲು ವೀಡಿಯೊದ ಎಡ ಅಥವಾ ಬಲಭಾಗದಲ್ಲಿ ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
 <translation id="3797520601150691162">ನಿರ್ದಿಷ್ಟವಾದ ಸೈಟ್‌ಗೆ ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಅನ್ವಯಿಸಬೇಡಿ</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">ಥರ್ಡ್ ಪಾರ್ಟಿ ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> ಆಯ್ಕೆಗಳು</translation>
 <translation id="6231752747840485235">'<ph name="APP_NAME" />' ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬೇಕೆ?</translation>
+<translation id="6262191102408817757">ನಿಮ್ಮ ಕೊನೆಯ ಟ್ಯಾಬ್ ಅನ್ನು ಆಧರಿಸಿದೆ</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> ಮತ್ತು <ph name="PERMISSION_2" /> ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="6270391203985052864">ಅಧಿಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸಬಹುದೇ ಎಂದು ಸೈಟ್‌ಗಳು ಕೇಳಬಹುದು</translation>
 <translation id="6295158916970320988">ಎಲ್ಲಾ ಸೈಟ್‌ಗಳು</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 64b5f3d..0819339 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">Видеонун үнүн басуу</translation>
 <translation id="3596414637720633074">Жашыруун режимде үчүнчү тараптын cookie файлдарын бөгөттөө</translation>
 <translation id="3600792891314830896">Добуш чыгарган сайттардын үнү өчүрүлөт</translation>
+<translation id="3628308229821498208">Сунушталган издөөлөр</translation>
 <translation id="3744111561329211289">Фонду шайкештирүү</translation>
 <translation id="3763247130972274048">10 сек. өткөрүп жиберүү үчүн видеонун сол же оң жагын эки жолу таптаңыз</translation>
 <translation id="3797520601150691162">Белгилүү бир сайт үчүн караңгы тема колдонулбасын</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">Үчүнчү жактын кукилери бөгөттөлсүн</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> Параметрлер</translation>
 <translation id="6231752747840485235">"<ph name="APP_NAME" />" колдонмосун чыгарып саласызбы?</translation>
+<translation id="6262191102408817757">Акыркы өтмөктүн негизинде көрсөтүлдү</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> жана <ph name="PERMISSION_2" /> бөгөттөлдү</translation>
 <translation id="6270391203985052864">Сайттар билдирмелерди жөнөтүүнү сурана алышат</translation>
 <translation id="6295158916970320988">Бардык сайттар</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 1582c95a..cedd66e 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">Nutildyti vaizdo įrašą</translation>
 <translation id="3596414637720633074">Blokuoti trečiųjų šalių slapukus inkognito režimu</translation>
 <translation id="3600792891314830896">Nutildyti svetaines, kurios leidžia garsą</translation>
+<translation id="3628308229821498208">Siūlomos paieškos</translation>
 <translation id="3744111561329211289">Fono sinchronizavimas</translation>
 <translation id="3763247130972274048">Dukart palieskite vaizdo įrašą, kad praleistumėte 10 sek.</translation>
 <translation id="3797520601150691162">Netaikyti tamsiosios temos konkrečiai svetainei</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">Blokuoti trečiosios šalies slapukus</translation>
 <translation id="6216432067784365534">„<ph name="NAME_OF_LIST_ITEM" />“ parinktys</translation>
 <translation id="6231752747840485235">Pašalinti „<ph name="APP_NAME" />“?</translation>
+<translation id="6262191102408817757">Pagal paskutinį skirtuką</translation>
 <translation id="6262279340360821358">Užblokuota: <ph name="PERMISSION_1" /> ir <ph name="PERMISSION_2" /></translation>
 <translation id="6270391203985052864">Svetainės gali prašyti siųsti pranešimus</translation>
 <translation id="6295158916970320988">Visos svetainės</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 485feb6..5ee5687 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">വീഡിയോ മ്യൂട്ട് ചെയ്യുക</translation>
 <translation id="3596414637720633074">അദൃശ്യ മോഡിൽ മൂന്നാം കക്ഷി കുക്കികളെ ബ്ലോക്ക് ചെയ്യുക</translation>
 <translation id="3600792891314830896">ശബ്‌ദം പ്ലേ ചെയ്യുന്ന സൈറ്റുകളെ മ്യൂട്ട് ചെയ്യുക</translation>
+<translation id="3628308229821498208">നിർദ്ദേശിക്കുന്ന തിരയലുകൾ</translation>
 <translation id="3744111561329211289">പശ്ചാത്തല സമന്വയിപ്പിക്കൽ</translation>
 <translation id="3763247130972274048">10 സെക്കൻഡ് ഒഴിവാക്കാൻ വീഡിയോയിൽ ഇടത്തോ വലത്തോ ഡബിൾ ടാപ്പ് ചെയ്യുക</translation>
 <translation id="3797520601150691162">ഒരു പ്രത്യേക സൈറ്റിന് ഡാർക്ക് തീം ബാധകമാക്കരുത്</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">മൂന്നാം കക്ഷി കുക്കികള്‍ ബ്ലോക്കുചെയ്യുക</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> ഓപ്‌ഷനുകൾ</translation>
 <translation id="6231752747840485235">'<ph name="APP_NAME" />' അൺഇൻസ്റ്റാൾ ചെയ്യണോ?</translation>
+<translation id="6262191102408817757">നിങ്ങളുടെ അവസാന ടാബിനെ അടിസ്ഥാനമാക്കി</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" />,<ph name="PERMISSION_2" /> എന്നിവ ബ്ലോക്ക് ചെയ്‌തു</translation>
 <translation id="6270391203985052864">അറിയിപ്പുകൾ അയയ്ക്കാൻ സൈറ്റുകൾക്ക് അനുവാദം ചോദിക്കേണ്ടി വരും</translation>
 <translation id="6295158916970320988">എല്ലാ സൈറ്റുകളും</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 4cc5bfd..ab2241b7 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">ဗီဒီယိုကို အသံပိတ်ရန်</translation>
 <translation id="3596414637720633074">'ရုပ်ဖျက်' မုဒ်တွင် ပြင်ပကုမ္ပဏီ၏ ကွတ်ကီးများကို ပိတ်ပါ</translation>
 <translation id="3600792891314830896">အသံဖွင့်နိုင်သော ဝဘ်ဆိုက်များကို အသံတိတ်ထားသည်</translation>
+<translation id="3628308229821498208">အကြံပြုထားသည့် ရှာဖွေမှုများ</translation>
 <translation id="3744111561329211289">နောက်ခံတွင် စင့်ခ်လုပ်ခြင်း</translation>
 <translation id="3763247130972274048">၁၀ စက္ကန့်ကျော်ရန် ဗီဒီယိုဘယ်ဘက် သို့မဟုတ် ညာဘက်တွင် နှစ်ချက်တို့ပါ</translation>
 <translation id="3797520601150691162">ဝဘ်ဆိုက်တစ်ခုအတွက် မှောင်သည့် အပြင်အဆင်ကိုမပြောင်းပါ</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">ပြင်ပကုမ္ပဏီကွတ်ကီးများကို ပိတ်ဆို့မည်</translation>
 <translation id="6216432067784365534">ရွေးစရာ <ph name="NAME_OF_LIST_ITEM" /> ခု</translation>
 <translation id="6231752747840485235">‘<ph name="APP_NAME" />’ ဖယ်ရှားမလား။</translation>
+<translation id="6262191102408817757">သင့်နောက်ဆုံးတဘ်ကို အခြေခံသည်</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> နှင့် <ph name="PERMISSION_2" /> ပိတ်ထားသည်</translation>
 <translation id="6270391203985052864">ဝဘ်ဆိုက်များက အကြောင်းကြားချက်များပို့ရန် တောင်းဆိုနိုင်သည်</translation>
 <translation id="6295158916970320988">ဆိုဒ်များအားလုံး</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 c872f28..5352ed0 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">भिडियो म्युट गर्नुहोस्</translation>
 <translation id="3596414637720633074">इन्कोग्निटो मोडमा तेस्रो पक्षीय कुकीहरूमाथि रोक लगाउनुहोस्</translation>
 <translation id="3600792891314830896">आवाज प्ले गर्ने साइटहरूलाई म्युट गर्नुहोस्‌</translation>
+<translation id="3628308229821498208">सिफारिस गरिएका खोजहरू</translation>
 <translation id="3744111561329211289">पृष्ठभूमिमा सिंक गर्ने सुविधा</translation>
 <translation id="3763247130972274048">१० सेकेन्ड छाडेर अगाडि पछाडि जान भिडियोको बायाँ वा दायाँतिर डबल ट्याप गर्नुहोस्</translation>
 <translation id="3797520601150691162">निश्चित साइटमा अँध्यारो थिम लागू नगर्नुहोस्</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">तेस्रो पक्षीय कुकीहरूमाथि रोक लगाउनुहोस्</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> विकल्पहरू</translation>
 <translation id="6231752747840485235">'<ph name="APP_NAME" />' अनइन्स्टल गर्ने हो?</translation>
+<translation id="6262191102408817757">तपाईंको अन्तिम ट्याबका आधारमा</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> र <ph name="PERMISSION_2" /> ब्लक गरियो</translation>
 <translation id="6270391203985052864">साइटहरूले सूचनाहरू पठाउनका निम्ति अनुमति माग्न सक्छन्।</translation>
 <translation id="6295158916970320988">सबै साइटहरू</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 91827bc..c9fb0ae 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">Desativar som do vídeo</translation>
 <translation id="3596414637720633074">Bloquear cookies de terceiros na navegação anônima</translation>
 <translation id="3600792891314830896">Silenciar sites com áudio</translation>
+<translation id="3628308229821498208">Pesquisas sugeridas</translation>
 <translation id="3744111561329211289">Sincronização em segundo plano</translation>
 <translation id="3763247130972274048">Toque duas vezes no lado esquerdo ou direito do vídeo para pular 10 s</translation>
 <translation id="3797520601150691162">Não aplicar o tema escuro para um site específico</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">Bloquear cookies de terceiros</translation>
 <translation id="6216432067784365534">Opções de <ph name="NAME_OF_LIST_ITEM" /></translation>
 <translation id="6231752747840485235">Desinstalar <ph name="APP_NAME" />?</translation>
+<translation id="6262191102408817757">Com base na sua última guia</translation>
 <translation id="6262279340360821358">Bloqueadas: <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /></translation>
 <translation id="6270391203985052864">Os sites podem pedir para enviar notificações</translation>
 <translation id="6295158916970320988">Todos os sites</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 37080e6f..15bad41 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">வீடியோவின் ஒலியை முடக்கு</translation>
 <translation id="3596414637720633074">மறைநிலை அம்சத்தில் மூன்றாம் தரப்பு குக்கீகளைத் தடுக்கும்</translation>
 <translation id="3600792891314830896">ஒலியை இயக்கும் தளங்களில் ஒலியடக்கு</translation>
+<translation id="3628308229821498208">பரிந்துரைக்கப்படும் தேடல்கள்</translation>
 <translation id="3744111561329211289">பின்புல ஒத்திசைவு</translation>
 <translation id="3763247130972274048">10வி தவிர்க்க, வீடியோவில் இடப்புறம்/வலப்புறம் இருமுறை தட்டுக</translation>
 <translation id="3797520601150691162">குறிப்பிட்ட தளத்திற்கு டார்க் தீமினைப் பயன்படுத்த வேண்டாம்</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">மூன்றாம் தரப்புக் குக்கீகளைத் தடு</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> விருப்பத்தேர்வுகள்</translation>
 <translation id="6231752747840485235">'<ph name="APP_NAME" />' ஆப்ஸை நிறுவல் நீக்கவா?</translation>
+<translation id="6262191102408817757">உங்கள் கடைசிப் பக்கத்தின் அடிப்படையில்</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ஆகியவற்றுக்கான அனுமதிகள் தடுக்கப்பட்டன</translation>
 <translation id="6270391203985052864">அறிவிப்புகளை அனுப்புவதற்கான அனுமதியைத் தளங்களால் கோர முடியும்</translation>
 <translation id="6295158916970320988">எல்லா தளங்களும்</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 2d47ae4..6e183426 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">Videonun sesini kapat</translation>
 <translation id="3596414637720633074">Gizli modda üçüncü taraf çerezleri engelle</translation>
 <translation id="3600792891314830896">Ses çalan sitelerin sesini kapat</translation>
+<translation id="3628308229821498208">Önerilen aramalar</translation>
 <translation id="3744111561329211289">Arka plan senkronizasyonu</translation>
 <translation id="3763247130972274048">10 sn. atlamak için videoda sola veya sağa iki kez dokunun</translation>
 <translation id="3797520601150691162">Belirli bir siteye koyu tema uygulama</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">Üçüncü taraf çerezlerini engelle</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> Seçenekleri</translation>
 <translation id="6231752747840485235">"<ph name="APP_NAME" />" uygulaması kaldırılsın mı?</translation>
+<translation id="6262191102408817757">Son sekmenize dayalı olarak</translation>
 <translation id="6262279340360821358"><ph name="PERMISSION_1" /> ve <ph name="PERMISSION_2" /> engellendi</translation>
 <translation id="6270391203985052864">Siteler bildirim gönderme izni isteyebilir</translation>
 <translation id="6295158916970320988">Tüm siteler</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 36b8bd10..f6c59070 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">Tắt tiếng video</translation>
 <translation id="3596414637720633074">Chặn các cookie của bên thứ ba trong chế độ Ẩn danh</translation>
 <translation id="3600792891314830896">Tắt tiếng trên các trang web phát âm thanh</translation>
+<translation id="3628308229821498208">Cụm từ tìm kiếm đề xuất</translation>
 <translation id="3744111561329211289">Đồng bộ hóa dưới nền</translation>
 <translation id="3763247130972274048">Nhấn đúp vào bên trái hoặc bên phải của video để tua lại/tua đi 10 giây</translation>
 <translation id="3797520601150691162">Không áp dụng giao diện tối cho một trang web cụ thể</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">Chặn cookie của bên thứ ba</translation>
 <translation id="6216432067784365534">Tùy chọn <ph name="NAME_OF_LIST_ITEM" /></translation>
 <translation id="6231752747840485235">Gỡ cài đặt "<ph name="APP_NAME" />"?</translation>
+<translation id="6262191102408817757">Dựa trên thẻ gần đây nhất của bạn</translation>
 <translation id="6262279340360821358">Đã chặn <ph name="PERMISSION_1" /> và <ph name="PERMISSION_2" /></translation>
 <translation id="6270391203985052864">Các trang web có thể xin phép gửi thông báo</translation>
 <translation id="6295158916970320988">Tất cả các trang web</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 a143eab..f64a021 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
@@ -116,6 +116,7 @@
 <translation id="3594780231884063836">Thulisa ividiyo</translation>
 <translation id="3596414637720633074">Vimba amakhukhi wenkampani yangaphandle ku-Incognito</translation>
 <translation id="3600792891314830896">Thulisa amasayithi adlala umsindo</translation>
+<translation id="3628308229821498208">Usesho oluphakanyisiwe</translation>
 <translation id="3744111561329211289">Ukuvumelanisa ngemuva</translation>
 <translation id="3763247130972274048">Thepha kabili ividiyo ngakwesokunxele noma ngakwesokudla ukuze weqe nge-10s</translation>
 <translation id="3797520601150691162">Ungasebenzisi itimu emnyama yesayithi elithile</translation>
@@ -227,6 +228,7 @@
 <translation id="6196640612572343990">Vimba amakhukhi enkampani yangaphandle</translation>
 <translation id="6216432067784365534"><ph name="NAME_OF_LIST_ITEM" /> Izinketho</translation>
 <translation id="6231752747840485235">Khipha i-'<ph name="APP_NAME" />'?</translation>
+<translation id="6262191102408817757">Ngokusekelwe kuthebhu yakho yokugcina</translation>
 <translation id="6262279340360821358">I-<ph name="PERMISSION_1" /> ne-<ph name="PERMISSION_2" /> kuvinjelwe</translation>
 <translation id="6270391203985052864">Amasayithi angacela ukuthumela izaziso</translation>
 <translation id="6295158916970320988">Wonke amasayithi</translation>
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 557a84fd7..fe95685 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "10.57",
-  "log_list_timestamp": "2022-07-29T12:54:40Z",
+  "version": "10.60",
+  "log_list_timestamp": "2022-08-01T12:54:24Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/commerce/core/shopping_service.cc b/components/commerce/core/shopping_service.cc
index e8ce1e6..93cf751 100644
--- a/components/commerce/core/shopping_service.cc
+++ b/components/commerce/core/shopping_service.cc
@@ -172,14 +172,15 @@
     data_decoder::DataDecoder::ValueOrError result) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if (!result.has_value())
+  if (!result.has_value() || !result.value().is_dict())
     return;
 
   auto it = product_info_cache_.find(url.spec());
   // If there was no entry or the data doesn't need javascript run, do
   // nothing.
   if (it != product_info_cache_.end())
-    MergeProductInfoData(std::get<2>(it->second).get(), result.value());
+    MergeProductInfoData(std::get<2>(it->second).get(),
+                         result.value().GetDict());
 }
 
 void ShoppingService::WebWrapperDestroyed(WebWrapper* web) {
@@ -384,8 +385,9 @@
   std::move(callback).Run(url, optional_info);
 }
 
-void ShoppingService::MergeProductInfoData(ProductInfo* info,
-                                           base::Value& on_page_data_map) {
+void ShoppingService::MergeProductInfoData(
+    ProductInfo* info,
+    const base::Value::Dict& on_page_data_map) {
   if (!info)
     return;
 
@@ -395,16 +397,16 @@
 
   bool had_fallback_image = false;
 
-  for (auto it : on_page_data_map.DictItems()) {
-    if (base::CompareCaseInsensitiveASCII(it.first, kOgTitle) == 0) {
+  for (const auto [key, value] : on_page_data_map) {
+    if (base::CompareCaseInsensitiveASCII(key, kOgTitle) == 0) {
       if (info->title.empty()) {
-        info->title = it.second.GetString();
+        info->title = value.GetString();
         base::UmaHistogramEnumeration(
             "Commerce.ShoppingService.ProductInfo.FallbackDataContent",
             ProductInfoFallback::kTitle);
         data_was_merged = true;
       }
-    } else if (base::CompareCaseInsensitiveASCII(it.first, kOgImage) == 0) {
+    } else if (base::CompareCaseInsensitiveASCII(key, kOgImage) == 0) {
       had_fallback_image = true;
 
       // If the product already has an image, add the one found on the page as
@@ -412,7 +414,7 @@
       // retrieved from the proto received from optimization guide before this
       // callback runs.
       if (info->image_url.is_empty()) {
-        GURL og_url(it.second.GetString());
+        GURL og_url(value.GetString());
 
         // Only keep the local image if we're allowed to.
         if (base::FeatureList::IsEnabled(commerce::kCommerceAllowLocalImages))
@@ -425,16 +427,15 @@
       }
       // TODO(mdjones): Add capacity for fallback images when necessary.
 
-    } else if (base::CompareCaseInsensitiveASCII(it.first, kOgPriceCurrency) ==
-               0) {
+    } else if (base::CompareCaseInsensitiveASCII(key, kOgPriceCurrency) == 0) {
       if (info->amount_micros <= 0) {
         double amount = 0;
-        if (base::StringToDouble(
-                *on_page_data_map.FindStringKey(kOgPriceAmount), &amount)) {
+        if (base::StringToDouble(*on_page_data_map.FindString(kOgPriceAmount),
+                                 &amount)) {
           // Currency is stored in micro-units rather than standard units, so we
           // need to convert (open graph provides standard units).
           info->amount_micros = amount * kToMicroCurrency;
-          info->currency_code = it.second.GetString();
+          info->currency_code = value.GetString();
           base::UmaHistogramEnumeration(
               "Commerce.ShoppingService.ProductInfo.FallbackDataContent",
               ProductInfoFallback::kPrice);
diff --git a/components/commerce/core/shopping_service.h b/components/commerce/core/shopping_service.h
index e246b92..ca2cf49 100644
--- a/components/commerce/core/shopping_service.h
+++ b/components/commerce/core/shopping_service.h
@@ -236,7 +236,7 @@
   // heuristics -- a JSON object holding key -> value pairs (a map) stored in
   // |on_page_data_map|. The merged data is written to |info|.
   static void MergeProductInfoData(ProductInfo* info,
-                                   base::Value& on_page_data_map);
+                                   const base::Value::Dict& on_page_data_map);
 
   void HandleOptGuideMerchantInfoResponse(
       const GURL& url,
diff --git a/components/commerce/core/shopping_service_test_base.cc b/components/commerce/core/shopping_service_test_base.cc
index a874313..9c57b4f 100644
--- a/components/commerce/core/shopping_service_test_base.cc
+++ b/components/commerce/core/shopping_service_test_base.cc
@@ -188,7 +188,7 @@
 
 void ShoppingServiceTestBase::MergeProductInfoData(
     ProductInfo* info,
-    base::Value& on_page_data_map) {
+    const base::Value::Dict& on_page_data_map) {
   ShoppingService::MergeProductInfoData(info, on_page_data_map);
 }
 
diff --git a/components/commerce/core/shopping_service_test_base.h b/components/commerce/core/shopping_service_test_base.h
index 72775b12..a0fc36d9 100644
--- a/components/commerce/core/shopping_service_test_base.h
+++ b/components/commerce/core/shopping_service_test_base.h
@@ -126,7 +126,7 @@
   void DidNavigateAway(WebWrapper* web, const GURL& url);
   void WebWrapperDestroyed(WebWrapper* web);
   static void MergeProductInfoData(ProductInfo* info,
-                                   base::Value& on_page_data_map);
+                                   const base::Value::Dict& on_page_data_map);
 
   // Get the count of the number of tabs a particular URL is open in from the
   // product info cache.
diff --git a/components/commerce/core/shopping_service_unittest.cc b/components/commerce/core/shopping_service_unittest.cc
index 5630bce..4c7ce82 100644
--- a/components/commerce/core/shopping_service_unittest.cc
+++ b/components/commerce/core/shopping_service_unittest.cc
@@ -322,8 +322,8 @@
   ProductInfo info;
   info.image_url = GURL(kImageUrl);
 
-  base::DictionaryValue data_map;
-  data_map.SetStringKey("image", "https://example.com/fallback_image.png");
+  base::Value::Dict data_map;
+  data_map.Set("image", "https://example.com/fallback_image.png");
 
   MergeProductInfoData(&info, data_map);
 
@@ -335,8 +335,8 @@
       {kCommerceAllowLocalImages, kCommerceAllowServerImages}, {});
   ProductInfo info;
 
-  base::DictionaryValue data_map;
-  data_map.SetStringKey("image", kImageUrl);
+  base::Value::Dict data_map;
+  data_map.Set("image", kImageUrl);
 
   MergeProductInfoData(&info, data_map);
 
@@ -347,8 +347,8 @@
   ProductInfo info;
   info.title = kTitle;
 
-  base::DictionaryValue data_map;
-  data_map.SetStringKey("title", "Some other fallback title");
+  base::Value::Dict data_map;
+  data_map.Set("title", "Some other fallback title");
 
   MergeProductInfoData(&info, data_map);
 
@@ -358,8 +358,8 @@
 TEST_F(ShoppingServiceTest, TestDataMergeWithNoTitle) {
   ProductInfo info;
 
-  base::DictionaryValue data_map;
-  data_map.SetStringKey("title", kTitle);
+  base::Value::Dict data_map;
+  data_map.Set("title", kTitle);
 
   MergeProductInfoData(&info, data_map);
 
diff --git a/components/component_updater/component_installer.cc b/components/component_updater/component_installer.cc
index 6dbbc5e..9d31905 100644
--- a/components/component_updater/component_installer.cc
+++ b/components/component_updater/component_installer.cc
@@ -4,6 +4,7 @@
 
 #include "components/component_updater/component_installer.h"
 
+#include <algorithm>
 #include <cstdint>
 #include <string>
 #include <tuple>
@@ -36,6 +37,7 @@
 #include "components/update_client/component_unpacker.h"
 #include "components/update_client/update_client.h"
 #include "components/update_client/update_client_errors.h"
+#include "components/update_client/update_query_params.h"
 #include "components/update_client/utils.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -356,6 +358,19 @@
                   << ").";
       older_paths.push_back(path);
       continue;
+    } else {
+      const base::Value::List* accept_archs =
+          manifest.GetDict().FindList("accept_arch");
+      if (accept_archs != nullptr &&
+          std::none_of(accept_archs->begin(), accept_archs->end(),
+                       [](const base::Value& v) {
+                         return v.is_string() &&
+                                v.GetString() ==
+                                    update_client::UpdateQueryParams::GetArch();
+                       })) {
+        older_paths.push_back(path);
+        continue;
+      }
     }
 
     // New valid |version| folder found!
diff --git a/components/content_settings/browser/content_settings_manager_impl.cc b/components/content_settings/browser/content_settings_manager_impl.cc
index d377f20..48d7802c 100644
--- a/components/content_settings/browser/content_settings_manager_impl.cc
+++ b/components/content_settings/browser/content_settings_manager_impl.cc
@@ -173,7 +173,8 @@
   GURL url = origin.GetURL();
 
   bool allowed = cookie_settings_->IsFullCookieAccessAllowed(
-      url, site_for_cookies, top_frame_origin);
+      url, site_for_cookies, top_frame_origin,
+      CookieSettings::QueryReason::kSiteStorage);
   if (delegate_->AllowStorageAccess(render_process_id_, render_frame_id,
                                     storage_type, url, allowed, &callback)) {
     DCHECK(!callback);
diff --git a/components/content_settings/browser/ui/cookie_controls_controller.cc b/components/content_settings/browser/ui/cookie_controls_controller.cc
index 071ca673..bbaad3e 100644
--- a/components/content_settings/browser/ui/cookie_controls_controller.cc
+++ b/components/content_settings/browser/ui/cookie_controls_controller.cc
@@ -74,7 +74,8 @@
 
   SettingSource source;
   bool is_allowed = cookie_settings_->IsThirdPartyAccessAllowed(
-      web_contents->GetLastCommittedURL(), &source);
+      web_contents->GetLastCommittedURL(), &source,
+      CookieSettings::QueryReason::kCookies);
 
   CookieControlsStatus status = is_allowed
                                     ? CookieControlsStatus::kDisabledForSite
@@ -85,7 +86,8 @@
   } else if (is_allowed && original_cookie_settings_ &&
              original_cookie_settings_->ShouldBlockThirdPartyCookies() &&
              original_cookie_settings_->IsThirdPartyAccessAllowed(
-                 web_contents->GetLastCommittedURL(), nullptr /* source */)) {
+                 web_contents->GetLastCommittedURL(), nullptr /* source */,
+                 CookieSettings::QueryReason::kCookies)) {
     // TODO(crbug.com/1015767): Rules from regular mode can't be temporarily
     // overridden in incognito.
     enforcement = CookieControlsEnforcement::kEnforcedByCookieSetting;
@@ -114,7 +116,8 @@
 bool CookieControlsController::FirstPartyCookiesBlocked() {
   const GURL& url = GetWebContents()->GetLastCommittedURL();
   return !cookie_settings_->IsFullCookieAccessAllowed(
-      url, net::SiteForCookies::FromUrl(url), url::Origin::Create(url));
+      url, net::SiteForCookies::FromUrl(url), url::Origin::Create(url),
+      CookieSettings::QueryReason::kCookies);
 }
 
 int CookieControlsController::GetAllowedCookieCount() {
diff --git a/components/content_settings/core/browser/cookie_settings.cc b/components/content_settings/core/browser/cookie_settings.cc
index ccb9867..d08d6f5c 100644
--- a/components/content_settings/core/browser/cookie_settings.cc
+++ b/components/content_settings/core/browser/cookie_settings.cc
@@ -18,7 +18,6 @@
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
 #include "extensions/buildflags/buildflags.h"
-#include "net/base/features.h"
 #include "net/cookies/cookie_util.h"
 #include "net/cookies/site_for_cookies.h"
 #include "url/gurl.h"
@@ -91,10 +90,12 @@
 
 bool CookieSettings::IsThirdPartyAccessAllowed(
     const GURL& first_party_url,
-    content_settings::SettingSource* source) {
+    content_settings::SettingSource* source,
+    QueryReason query_reason) {
   // Use GURL() as an opaque primary url to check if any site
   // could access cookies in a 3p context on |first_party_url|.
-  return IsAllowed(GetCookieSetting(GURL(), first_party_url, source));
+  return IsAllowed(
+      GetCookieSetting(GURL(), first_party_url, source, query_reason));
 }
 
 void CookieSettings::SetThirdPartyCookieSetting(const GURL& first_party_url,
@@ -167,7 +168,8 @@
     const GURL& url,
     const GURL& first_party_url,
     bool is_third_party_request,
-    content_settings::SettingSource* source) const {
+    content_settings::SettingSource* source,
+    QueryReason query_reason) const {
   // Auto-allow in extensions or for WebUI embedding a secure origin.
   if (ShouldAlwaysAllowCookies(url, first_party_url)) {
     return CONTENT_SETTING_ALLOW;
@@ -204,7 +206,7 @@
   // our checking logic.
   // We'll perform this check after we know if we will |block| or not to avoid
   // performing extra work in scenarios we already allow.
-  if (block && base::FeatureList::IsEnabled(net::features::kStorageAccessAPI)) {
+  if (block && ShouldConsiderStorageAccessGrants(query_reason)) {
     ContentSetting host_setting = host_content_settings_map_->GetContentSetting(
         url, first_party_url, ContentSettingsType::STORAGE_ACCESS);
 
diff --git a/components/content_settings/core/browser/cookie_settings.h b/components/content_settings/core/browser/cookie_settings.h
index 57bba8ae..30739947 100644
--- a/components/content_settings/core/browser/cookie_settings.h
+++ b/components/content_settings/core/browser/cookie_settings.h
@@ -51,6 +51,7 @@
                        public content_settings::Observer,
                        public RefcountedKeyedService {
  public:
+  using QueryReason = CookieSettingsBase::QueryReason;
   class Observer : public base::CheckedObserver {
    public:
     virtual void OnThirdPartyCookieBlockingChanged(
@@ -107,7 +108,8 @@
   //
   // This should only be called on the UI thread.
   bool IsThirdPartyAccessAllowed(const GURL& first_party_url,
-                                 content_settings::SettingSource* source);
+                                 content_settings::SettingSource* source,
+                                 QueryReason query_reason);
 
   // Sets the cookie setting for the site and third parties embedded in it.
   //
@@ -165,7 +167,8 @@
       const GURL& url,
       const GURL& first_party_url,
       bool is_third_party_request,
-      content_settings::SettingSource* source) const override;
+      content_settings::SettingSource* source,
+      QueryReason query_reason) const override;
 
   // content_settings::Observer:
   void OnContentSettingChanged(
diff --git a/components/content_settings/core/browser/cookie_settings_unittest.cc b/components/content_settings/core/browser/cookie_settings_unittest.cc
index 533ad6a6..3777432 100644
--- a/components/content_settings/core/browser/cookie_settings_unittest.cc
+++ b/components/content_settings/core/browser/cookie_settings_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <cstddef>
 
+#include "base/feature_list.h"
 #include "base/memory/raw_ptr.h"
 #include "base/scoped_observation.h"
 #include "base/test/metrics/histogram_tester.h"
@@ -42,6 +43,8 @@
 
 namespace {
 
+using QueryReason = CookieSettings::QueryReason;
+
 class CookieSettingsObserver : public CookieSettings::Observer {
  public:
   explicit CookieSettingsObserver(CookieSettings* settings)
@@ -68,7 +71,7 @@
       scoped_observation_{this};
 };
 
-class CookieSettingsTest : public testing::Test {
+class CookieSettingsTest : public testing::TestWithParam<bool> {
  public:
   CookieSettingsTest()
       : task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME),
@@ -87,11 +90,17 @@
         kHttpsSubdomainSite("https://www.example.com"),
         kHttpsSite8080("https://example.com:8080"),
         kAllHttpsSitesPattern(ContentSettingsPattern::FromString("https://*")) {
+    std::vector<base::Feature> enabled_features;
+    std::vector<base::Feature> disabled_features;
 #if BUILDFLAG(IS_IOS)
-    feature_list_.InitAndEnableFeature(kImprovedCookieControls);
-#else
-    feature_list_.Init();
+    enabled_features.push_back(kImprovedCookieControls);
 #endif
+    if (IsStorageAccessAPIEnabled()) {
+      enabled_features.push_back(net::features::kStorageAccessAPI);
+    } else {
+      disabled_features.push_back(net::features::kStorageAccessAPI);
+    }
+    feature_list_.InitWithFeatures(enabled_features, disabled_features);
   }
 
   ~CookieSettingsTest() override { settings_map_->ShutdownOnUIThread(); }
@@ -113,6 +122,15 @@
     task_environment_.FastForwardBy(delta);
   }
 
+  bool IsStorageAccessAPIEnabled() const { return GetParam(); }
+
+  // Assumes that cookie access would be blocked if not for a Storage Access API
+  // grant.
+  ContentSetting SettingWithStorageAccessGrantOverride() const {
+    return IsStorageAccessAPIEnabled() ? CONTENT_SETTING_ALLOW
+                                       : CONTENT_SETTING_BLOCK;
+  }
+
  protected:
   bool ShouldDeleteCookieOnExit(const std::string& domain, bool is_https) {
     return cookie_settings_->ShouldDeleteCookieOnExit(
@@ -147,71 +165,76 @@
   base::test::ScopedFeatureList feature_list_;
 };
 
-TEST_F(CookieSettingsTest, TestAllowlistedScheme) {
+TEST(CookieSettings, TestDefaultStorageAccessSetting) {
+  EXPECT_FALSE(base::FeatureList::IsEnabled(net::features::kStorageAccessAPI));
+}
+
+TEST_P(CookieSettingsTest, TestAllowlistedScheme) {
   cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
-  EXPECT_FALSE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpSite, kChromeURL));
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kChromeURL));
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kChromeURL, kHttpSite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpSite, kChromeURL, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kChromeURL, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kChromeURL, kHttpSite, QueryReason::kCookies));
 #if BUILDFLAG(ENABLE_EXTENSIONS)
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kExtensionURL,
-                                                          kExtensionURL));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kExtensionURL, kExtensionURL, QueryReason::kCookies));
 #else
-  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(kExtensionURL,
-                                                           kExtensionURL));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kExtensionURL, kExtensionURL, QueryReason::kCookies));
 #endif
-  EXPECT_FALSE(
-      cookie_settings_->IsFullCookieAccessAllowed(kExtensionURL, kHttpSite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kExtensionURL, kHttpSite, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesBlockSingle) {
+TEST_P(CookieSettingsTest, CookiesBlockSingle) {
   cookie_settings_->SetCookieSetting(kBlockedSite, CONTENT_SETTING_BLOCK);
-  EXPECT_FALSE(
-      cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite, kBlockedSite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kBlockedSite, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesBlockThirdParty) {
+TEST_P(CookieSettingsTest, CookiesBlockThirdParty) {
   prefs_.SetInteger(prefs::kCookieControlsMode,
                     static_cast<int>(CookieControlsMode::kBlockThirdParty));
-  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                           kFirstPartySite));
-  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kBlockedSite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kBlockedSite,
+                                                     QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesControlsDefault) {
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                          kFirstPartySite));
+TEST_P(CookieSettingsTest, CookiesControlsDefault) {
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
   EXPECT_FALSE(cookie_settings_incognito_->IsFullCookieAccessAllowed(
-      kBlockedSite, kFirstPartySite));
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesControlsEnabled) {
+TEST_P(CookieSettingsTest, CookiesControlsEnabled) {
   prefs_.SetInteger(prefs::kCookieControlsMode,
                     static_cast<int>(CookieControlsMode::kBlockThirdParty));
-  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                           kFirstPartySite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
   EXPECT_FALSE(cookie_settings_incognito_->IsFullCookieAccessAllowed(
-      kBlockedSite, kFirstPartySite));
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesControlsDisabled) {
+TEST_P(CookieSettingsTest, CookiesControlsDisabled) {
   prefs_.SetInteger(prefs::kCookieControlsMode,
                     static_cast<int>(CookieControlsMode::kOff));
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                          kFirstPartySite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
   EXPECT_TRUE(cookie_settings_incognito_->IsFullCookieAccessAllowed(
-      kBlockedSite, kFirstPartySite));
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesControlsEnabledForIncognito) {
+TEST_P(CookieSettingsTest, CookiesControlsEnabledForIncognito) {
   prefs_.SetInteger(prefs::kCookieControlsMode,
                     static_cast<int>(CookieControlsMode::kIncognitoOnly));
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                          kFirstPartySite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
   EXPECT_FALSE(cookie_settings_incognito_->IsFullCookieAccessAllowed(
-      kBlockedSite, kFirstPartySite));
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
 }
 
 #if BUILDFLAG(IS_IOS)
@@ -227,50 +250,56 @@
   base::test::ScopedFeatureList feature_list_;
 };
 
-TEST_F(ImprovedCookieControlsDisabledCookieSettingsTest,
+TEST_P(ImprovedCookieControlsDisabledCookieSettingsTest,
        CookiesControlsEnabledButFeatureDisabled) {
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                          kFirstPartySite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
   EXPECT_TRUE(cookie_settings_incognito_->IsFullCookieAccessAllowed(
-      kBlockedSite, kFirstPartySite));
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
   prefs_.SetInteger(prefs::kCookieControlsMode,
                     static_cast<int>(CookieControlsMode::kBlockThirdParty));
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                          kFirstPartySite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
   EXPECT_TRUE(cookie_settings_incognito_->IsFullCookieAccessAllowed(
-      kBlockedSite, kFirstPartySite));
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
 }
+INSTANTIATE_TEST_SUITE_P(/* no prefix */,
+                         ImprovedCookieControlsDisabledCookieSettingsTest,
+                         testing::Bool());
 #endif
 
-TEST_F(CookieSettingsTest, CookiesAllowThirdParty) {
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                          kFirstPartySite));
-  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kBlockedSite));
+TEST_P(CookieSettingsTest, CookiesAllowThirdParty) {
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kBlockedSite,
+                                                     QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesExplicitBlockSingleThirdParty) {
+TEST_P(CookieSettingsTest, CookiesExplicitBlockSingleThirdParty) {
   cookie_settings_->SetCookieSetting(kBlockedSite, CONTENT_SETTING_BLOCK);
-  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                           kFirstPartySite));
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kAllowedSite,
-                                                          kFirstPartySite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kAllowedSite, kFirstPartySite, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesExplicitSessionOnly) {
+TEST_P(CookieSettingsTest, CookiesExplicitSessionOnly) {
   cookie_settings_->SetCookieSetting(kBlockedSite,
                                      CONTENT_SETTING_SESSION_ONLY);
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                          kFirstPartySite));
-  EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kBlockedSite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kBlockedSite,
+                                                    QueryReason::kCookies));
 
   prefs_.SetInteger(prefs::kCookieControlsMode,
                     static_cast<int>(CookieControlsMode::kBlockThirdParty));
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite,
-                                                          kFirstPartySite));
-  EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kBlockedSite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kFirstPartySite, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kBlockedSite,
+                                                    QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, KeepBlocked) {
+TEST_P(CookieSettingsTest, KeepBlocked) {
   // Keep blocked cookies.
   cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_ALLOW);
   cookie_settings_->SetCookieSetting(kHttpsSite, CONTENT_SETTING_BLOCK);
@@ -280,7 +309,7 @@
   EXPECT_FALSE(ShouldDeleteCookieOnExit(kDotDomain, true));
 }
 
-TEST_F(CookieSettingsTest, DeleteSessionOnly) {
+TEST_P(CookieSettingsTest, DeleteSessionOnly) {
   // Keep session_only http cookies if https is allowed.
   cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY);
   cookie_settings_->SetCookieSetting(kHttpsSite, CONTENT_SETTING_ALLOW);
@@ -324,7 +353,7 @@
   EXPECT_TRUE(ShouldDeleteCookieOnExit(kSubDomain, true));
 }
 
-TEST_F(CookieSettingsTest, DeletionWithDifferentPorts) {
+TEST_P(CookieSettingsTest, DeletionWithDifferentPorts) {
   // Keep cookies for site with special port.
   cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY);
   cookie_settings_->SetCookieSetting(kHttpsSite8080, CONTENT_SETTING_ALLOW);
@@ -343,7 +372,7 @@
   EXPECT_TRUE(ShouldDeleteCookieOnExit(kDotDomain, true));
 }
 
-TEST_F(CookieSettingsTest, DeletionWithSubDomains) {
+TEST_P(CookieSettingsTest, DeletionWithSubDomains) {
   // Cookies accessible by subdomains are kept.
   cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY);
   cookie_settings_->SetCookieSetting(kHttpsSubdomainSite,
@@ -379,20 +408,21 @@
   EXPECT_TRUE(ShouldDeleteCookieOnExit(kSubDomain, true));
 }
 
-TEST_F(CookieSettingsTest, CookiesThirdPartyBlockedExplicitAllow) {
+TEST_P(CookieSettingsTest, CookiesThirdPartyBlockedExplicitAllow) {
   cookie_settings_->SetCookieSetting(kAllowedSite, CONTENT_SETTING_ALLOW);
   prefs_.SetInteger(prefs::kCookieControlsMode,
                     static_cast<int>(CookieControlsMode::kBlockThirdParty));
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kAllowedSite,
-                                                          kFirstPartySite));
-  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kAllowedSite, kFirstPartySite, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite,
+                                                     QueryReason::kCookies));
 
   // Extensions should always be allowed to use cookies.
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kAllowedSite, kExtensionURL));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kAllowedSite, kExtensionURL, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesThirdPartyBlockedAllSitesAllowed) {
+TEST_P(CookieSettingsTest, CookiesThirdPartyBlockedAllSitesAllowed) {
   cookie_settings_->SetCookieSetting(kAllowedSite, CONTENT_SETTING_ALLOW);
   prefs_.SetInteger(prefs::kCookieControlsMode,
                     static_cast<int>(CookieControlsMode::kBlockThirdParty));
@@ -404,50 +434,54 @@
   cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY);
 
   // |kAllowedSite| should be allowed.
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kAllowedSite, kBlockedSite));
-  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kAllowedSite, kBlockedSite, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite,
+                                                     QueryReason::kCookies));
 
   // HTTPS sites should be allowed in a first-party context.
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kHttpsSite));
-  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kHttpsSite, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite,
+                                                     QueryReason::kCookies));
 
   // HTTP sites should be allowed, but session-only.
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kFirstPartySite,
-                                                          kFirstPartySite));
-  EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kFirstPartySite));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kFirstPartySite, kFirstPartySite, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kFirstPartySite,
+                                                    QueryReason::kCookies));
 
   // Third-party cookies should be blocked.
-  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(kFirstPartySite,
-                                                           kBlockedSite));
-  EXPECT_FALSE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kBlockedSite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kFirstPartySite, kBlockedSite, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kBlockedSite, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesBlockEverything) {
+TEST_P(CookieSettingsTest, CookiesBlockEverything) {
   cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
 
-  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(kFirstPartySite,
-                                                           kFirstPartySite));
-  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(kAllowedSite,
-                                                           kFirstPartySite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kFirstPartySite, kFirstPartySite, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kAllowedSite, kFirstPartySite, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, CookiesBlockEverythingExceptAllowed) {
+TEST_P(CookieSettingsTest, CookiesBlockEverythingExceptAllowed) {
   cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
   cookie_settings_->SetCookieSetting(kAllowedSite, CONTENT_SETTING_ALLOW);
-  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(kFirstPartySite,
-                                                           kFirstPartySite));
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kAllowedSite,
-                                                          kFirstPartySite));
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kAllowedSite, kAllowedSite));
-  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kFirstPartySite, kFirstPartySite, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kAllowedSite, kFirstPartySite, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kAllowedSite, kAllowedSite, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite,
+                                                     QueryReason::kCookies));
 }
 
 #if !BUILDFLAG(IS_IOS)
-TEST_F(CookieSettingsTest, GetCookieSettingAllowedTelemetry) {
+TEST_P(CookieSettingsTest, GetCookieSettingAllowedTelemetry) {
   const GURL top_level_url = GURL(kFirstPartySite);
   const GURL url = GURL(kAllowedSite);
 
@@ -457,7 +491,8 @@
   base::HistogramTester histogram_tester;
   histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 0);
 
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr),
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr,
+                                               QueryReason::kCookies),
             CONTENT_SETTING_ALLOW);
   histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 1);
   histogram_tester.ExpectBucketCount(
@@ -466,59 +501,10 @@
       1);
 }
 
-// When the Storage Access API is disabled, block third party cookie setting
-// should behave like normal.
-TEST_F(CookieSettingsTest, GetCookieSettingDisabledSAA) {
-  base::test::ScopedFeatureList scoped_disable;
-  scoped_disable.InitAndDisableFeature(net::features::kStorageAccessAPI);
-
-  const GURL top_level_url = GURL(kFirstPartySite);
-  const GURL url = GURL(kAllowedSite);
-
-  prefs_.SetInteger(prefs::kCookieControlsMode,
-                    static_cast<int>(CookieControlsMode::kBlockThirdParty));
-
-  settings_map_->SetContentSettingCustomScope(
-      ContentSettingsPattern::FromURLNoWildcard(url),
-      ContentSettingsPattern::FromURLNoWildcard(top_level_url),
-      ContentSettingsType::STORAGE_ACCESS, CONTENT_SETTING_ALLOW);
-
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr),
-            CONTENT_SETTING_BLOCK);
-}
-
-// The current default behaviour of the Storage Access API should be to not
-// enable access as it is gated behind |kStorageAccessAPI|.
-TEST_F(CookieSettingsTest, GetCookieSettingDefaultSAA) {
-  const GURL top_level_url = GURL(kFirstPartySite);
-  const GURL url = GURL(kAllowedSite);
-
-  base::HistogramTester histogram_tester;
-  histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 0);
-
-  prefs_.SetInteger(prefs::kCookieControlsMode,
-                    static_cast<int>(CookieControlsMode::kBlockThirdParty));
-
-  settings_map_->SetContentSettingCustomScope(
-      ContentSettingsPattern::FromURLNoWildcard(url),
-      ContentSettingsPattern::FromURLNoWildcard(top_level_url),
-      ContentSettingsType::STORAGE_ACCESS, CONTENT_SETTING_ALLOW);
-
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr),
-            CONTENT_SETTING_BLOCK);
-  histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 1);
-  histogram_tester.ExpectBucketCount(
-      kAllowedRequestsHistogram,
-      static_cast<int>(net::cookie_util::StorageAccessResult::ACCESS_BLOCKED),
-      1);
-}
-
-// When enabled, the Storage Access API should unblock storage access that would
-// otherwise be blocked.
-TEST_F(CookieSettingsTest, GetCookieSettingEnabledSAA) {
-  base::test::ScopedFeatureList scoped_enable;
-  scoped_enable.InitAndEnableFeature(net::features::kStorageAccessAPI);
-
+// The behaviour of the Storage Access API should be gated behind
+// |kStorageAccessAPI|. The setting also affects which buckets are used by
+// metrics.
+TEST_P(CookieSettingsTest, GetCookieSettingSAA) {
   const GURL top_level_url = GURL(kFirstPartySite);
   const GURL url = GURL(kAllowedSite);
   const GURL third_url = GURL(kBlockedSite);
@@ -534,37 +520,37 @@
       ContentSettingsPattern::FromURLNoWildcard(top_level_url),
       ContentSettingsType::STORAGE_ACCESS, CONTENT_SETTING_ALLOW);
 
-  // When requesting our setting for the url/top-level combination our
-  // grant is for access should be allowed. For any other domain pairs access
-  // should still be blocked.
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr),
-            CONTENT_SETTING_ALLOW);
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr,
+                                               QueryReason::kCookies),
+            SettingWithStorageAccessGrantOverride());
   histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 1);
   histogram_tester.ExpectBucketCount(
       kAllowedRequestsHistogram,
-      static_cast<int>(net::cookie_util::StorageAccessResult::
-                           ACCESS_ALLOWED_STORAGE_ACCESS_GRANT),
+      static_cast<int>(
+          IsStorageAccessAPIEnabled()
+              ? net::cookie_util::StorageAccessResult::
+                    ACCESS_ALLOWED_STORAGE_ACCESS_GRANT
+              : net::cookie_util::StorageAccessResult::ACCESS_BLOCKED),
       1);
 
   // Invalid pair the |top_level_url| granting access to |url| is now
   // being loaded under |url| as the top level url.
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(top_level_url, url, nullptr),
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(top_level_url, url, nullptr,
+                                               QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 
   // Invalid pairs where a |third_url| is used.
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, third_url, nullptr),
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, third_url, nullptr,
+                                               QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
-  EXPECT_EQ(
-      cookie_settings_->GetCookieSetting(third_url, top_level_url, nullptr),
-      CONTENT_SETTING_BLOCK);
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(third_url, top_level_url,
+                                               nullptr, QueryReason::kCookies),
+            CONTENT_SETTING_BLOCK);
 }
 
 // Subdomains of the granted resource url should not gain access if a valid
 // grant exists.
-TEST_F(CookieSettingsTest, GetCookieSettingSAAResourceWildcards) {
-  base::test::ScopedFeatureList scoped_enable;
-  scoped_enable.InitAndEnableFeature(net::features::kStorageAccessAPI);
-
+TEST_P(CookieSettingsTest, GetCookieSettingSAAResourceWildcards) {
   const GURL top_level_url = GURL(kFirstPartySite);
   const GURL url = GURL(kHttpSite);
 
@@ -576,19 +562,18 @@
       ContentSettingsPattern::FromURLNoWildcard(top_level_url),
       ContentSettingsType::STORAGE_ACCESS, CONTENT_SETTING_ALLOW);
 
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr),
-            CONTENT_SETTING_ALLOW);
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr,
+                                               QueryReason::kCookies),
+            SettingWithStorageAccessGrantOverride());
   EXPECT_EQ(cookie_settings_->GetCookieSetting(GURL(kHttpsSubdomainSite),
-                                               top_level_url, nullptr),
+                                               top_level_url, nullptr,
+                                               QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 
 // Subdomains of the granted top level url should not grant access if a valid
 // grant exists.
-TEST_F(CookieSettingsTest, GetCookieSettingSAATopLevelWildcards) {
-  base::test::ScopedFeatureList scoped_enable;
-  scoped_enable.InitAndEnableFeature(net::features::kStorageAccessAPI);
-
+TEST_P(CookieSettingsTest, GetCookieSettingSAATopLevelWildcards) {
   const GURL top_level_url = GURL(kHttpSite);
   const GURL url = GURL(kFirstPartySite);
 
@@ -600,19 +585,17 @@
       ContentSettingsPattern::FromURLNoWildcard(top_level_url),
       ContentSettingsType::STORAGE_ACCESS, CONTENT_SETTING_ALLOW);
 
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr),
-            CONTENT_SETTING_ALLOW);
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr,
+                                               QueryReason::kCookies),
+            SettingWithStorageAccessGrantOverride());
   EXPECT_EQ(cookie_settings_->GetCookieSetting(url, GURL(kHttpsSubdomainSite),
-                                               nullptr),
+                                               nullptr, QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 
-// Any Storage Access API grant should not override an explicit setting to block
-// cookie access.
-TEST_F(CookieSettingsTest, GetCookieSettingSAARespectsSettings) {
-  base::test::ScopedFeatureList scoped_enable;
-  scoped_enable.InitAndEnableFeature(net::features::kStorageAccessAPI);
-
+// Explicit settings should be respected regardless of whether Storage Access
+// API is enabled and/or has grants.
+TEST_P(CookieSettingsTest, GetCookieSettingRespectsExplicitSettings) {
   const GURL top_level_url = GURL(kFirstPartySite);
   const GURL url = GURL(kAllowedSite);
 
@@ -623,15 +606,13 @@
       ContentSettingsPattern::FromURLNoWildcard(top_level_url),
       ContentSettingsType::STORAGE_ACCESS, CONTENT_SETTING_ALLOW);
 
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr),
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr,
+                                               QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 
 // Once a grant expires access should no longer be given.
-TEST_F(CookieSettingsTest, GetCookieSettingSAAExpiredGrant) {
-  base::test::ScopedFeatureList scoped_enable;
-  scoped_enable.InitAndEnableFeature(net::features::kStorageAccessAPI);
-
+TEST_P(CookieSettingsTest, GetCookieSettingSAAExpiredGrant) {
   const GURL top_level_url = GURL(kFirstPartySite);
   const GURL url = GURL(kAllowedSite);
 
@@ -645,104 +626,106 @@
       {content_settings::GetConstraintExpiration(base::Seconds(100)),
        SessionModel::UserSession});
 
-  // When requesting our setting for the url/top-level combination our
-  // grant is for access should be allowed. For any other domain pairs access
-  // should still be blocked.
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr),
-            CONTENT_SETTING_ALLOW);
+  // When requesting our setting for the url/top-level combination our grant is
+  // for access should be allowed iff SAA is enabled. For any other domain pairs
+  // access should still be blocked.
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr,
+                                               QueryReason::kCookies),
+            SettingWithStorageAccessGrantOverride());
 
   // If we fastforward past the expiration of our grant the result should be
   // CONTENT_SETTING_BLOCK now.
   FastForwardTime(base::Seconds(101));
-  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr),
+  EXPECT_EQ(cookie_settings_->GetCookieSetting(url, top_level_url, nullptr,
+                                               QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 #endif
 
-TEST_F(CookieSettingsTest, ExtensionsRegularSettings) {
+TEST_P(CookieSettingsTest, ExtensionsRegularSettings) {
   cookie_settings_->SetCookieSetting(kBlockedSite, CONTENT_SETTING_BLOCK);
 
   // Regular cookie settings also apply to extensions.
-  EXPECT_FALSE(
-      cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite, kExtensionURL));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kExtensionURL, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, ExtensionsOwnCookies) {
+TEST_P(CookieSettingsTest, ExtensionsOwnCookies) {
   cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
 
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   // Extensions can always use cookies (and site data) in their own origin.
-  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(kExtensionURL,
-                                                          kExtensionURL));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kExtensionURL, kExtensionURL, QueryReason::kCookies));
 #else
   // Except if extensions are disabled. Then the extension-specific checks do
   // not exist and the default setting is to block.
-  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(kExtensionURL,
-                                                           kExtensionURL));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kExtensionURL, kExtensionURL, QueryReason::kCookies));
 #endif
 }
 
-TEST_F(CookieSettingsTest, ExtensionsThirdParty) {
+TEST_P(CookieSettingsTest, ExtensionsThirdParty) {
   prefs_.SetInteger(prefs::kCookieControlsMode,
                     static_cast<int>(CookieControlsMode::kBlockThirdParty));
 
   // XHRs stemming from extensions are exempt from third-party cookie blocking
   // rules (as the first party is always the extension's security origin).
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kBlockedSite, kExtensionURL));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kBlockedSite, kExtensionURL, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, ThirdPartyException) {
-  EXPECT_TRUE(
-      cookie_settings_->IsThirdPartyAccessAllowed(kFirstPartySite, nullptr));
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kFirstPartySite));
+TEST_P(CookieSettingsTest, ThirdPartyException) {
+  EXPECT_TRUE(cookie_settings_->IsThirdPartyAccessAllowed(
+      kFirstPartySite, nullptr, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kFirstPartySite, QueryReason::kCookies));
 
   prefs_.SetInteger(prefs::kCookieControlsMode,
                     static_cast<int>(CookieControlsMode::kBlockThirdParty));
-  EXPECT_FALSE(
-      cookie_settings_->IsThirdPartyAccessAllowed(kFirstPartySite, nullptr));
-  EXPECT_FALSE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kFirstPartySite));
+  EXPECT_FALSE(cookie_settings_->IsThirdPartyAccessAllowed(
+      kFirstPartySite, nullptr, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kFirstPartySite, QueryReason::kCookies));
 
   cookie_settings_->SetThirdPartyCookieSetting(kFirstPartySite,
                                                CONTENT_SETTING_ALLOW);
-  EXPECT_TRUE(
-      cookie_settings_->IsThirdPartyAccessAllowed(kFirstPartySite, nullptr));
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kFirstPartySite));
+  EXPECT_TRUE(cookie_settings_->IsThirdPartyAccessAllowed(
+      kFirstPartySite, nullptr, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kFirstPartySite, QueryReason::kCookies));
 
   cookie_settings_->ResetThirdPartyCookieSetting(kFirstPartySite);
-  EXPECT_FALSE(
-      cookie_settings_->IsThirdPartyAccessAllowed(kFirstPartySite, nullptr));
-  EXPECT_FALSE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kFirstPartySite));
+  EXPECT_FALSE(cookie_settings_->IsThirdPartyAccessAllowed(
+      kFirstPartySite, nullptr, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kFirstPartySite, QueryReason::kCookies));
 
   cookie_settings_->SetCookieSetting(kHttpsSite, CONTENT_SETTING_ALLOW);
-  EXPECT_FALSE(
-      cookie_settings_->IsThirdPartyAccessAllowed(kFirstPartySite, nullptr));
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kFirstPartySite));
+  EXPECT_FALSE(cookie_settings_->IsThirdPartyAccessAllowed(
+      kFirstPartySite, nullptr, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kFirstPartySite, QueryReason::kCookies));
 }
 
-TEST_F(CookieSettingsTest, ManagedThirdPartyException) {
+TEST_P(CookieSettingsTest, ManagedThirdPartyException) {
   SettingSource source;
-  EXPECT_TRUE(
-      cookie_settings_->IsThirdPartyAccessAllowed(kFirstPartySite, &source));
-  EXPECT_TRUE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kFirstPartySite));
+  EXPECT_TRUE(cookie_settings_->IsThirdPartyAccessAllowed(
+      kFirstPartySite, &source, QueryReason::kCookies));
+  EXPECT_TRUE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kFirstPartySite, QueryReason::kCookies));
   EXPECT_EQ(source, SettingSource::SETTING_SOURCE_USER);
 
   prefs_.SetManagedPref(prefs::kManagedDefaultCookiesSetting,
                         std::make_unique<base::Value>(CONTENT_SETTING_BLOCK));
-  EXPECT_FALSE(
-      cookie_settings_->IsThirdPartyAccessAllowed(kFirstPartySite, &source));
-  EXPECT_FALSE(
-      cookie_settings_->IsFullCookieAccessAllowed(kHttpsSite, kFirstPartySite));
+  EXPECT_FALSE(cookie_settings_->IsThirdPartyAccessAllowed(
+      kFirstPartySite, &source, QueryReason::kCookies));
+  EXPECT_FALSE(cookie_settings_->IsFullCookieAccessAllowed(
+      kHttpsSite, kFirstPartySite, QueryReason::kCookies));
   EXPECT_EQ(source, SettingSource::SETTING_SOURCE_POLICY);
 }
 
-TEST_F(CookieSettingsTest, ThirdPartySettingObserver) {
+TEST_P(CookieSettingsTest, ThirdPartySettingObserver) {
   CookieSettingsObserver observer(cookie_settings_.get());
   EXPECT_FALSE(observer.last_value());
   prefs_.SetInteger(prefs::kCookieControlsMode,
@@ -750,7 +733,7 @@
   EXPECT_TRUE(observer.last_value());
 }
 
-TEST_F(CookieSettingsTest, LegacyCookieAccessAllowAll) {
+TEST_P(CookieSettingsTest, LegacyCookieAccessAllowAll) {
   settings_map_->SetDefaultContentSetting(
       ContentSettingsType::LEGACY_COOKIE_ACCESS, CONTENT_SETTING_ALLOW);
   EXPECT_EQ(net::CookieAccessSemantics::LEGACY,
@@ -759,7 +742,7 @@
             cookie_settings_->GetCookieAccessSemanticsForDomain(kDotDomain));
 }
 
-TEST_F(CookieSettingsTest, LegacyCookieAccessBlockAll) {
+TEST_P(CookieSettingsTest, LegacyCookieAccessBlockAll) {
   settings_map_->SetDefaultContentSetting(
       ContentSettingsType::LEGACY_COOKIE_ACCESS, CONTENT_SETTING_BLOCK);
   EXPECT_EQ(net::CookieAccessSemantics::NONLEGACY,
@@ -768,7 +751,7 @@
             cookie_settings_->GetCookieAccessSemanticsForDomain(kDotDomain));
 }
 
-TEST_F(CookieSettingsTest, LegacyCookieAccessAllowDomainPattern) {
+TEST_P(CookieSettingsTest, LegacyCookieAccessAllowDomainPattern) {
   // Override the policy provider for this test, since the legacy cookie access
   // setting can only be set by policy.
   TestUtils::OverrideProvider(
@@ -795,7 +778,7 @@
   }
 }
 
-TEST_F(CookieSettingsTest, LegacyCookieAccessAllowDomainWildcardPattern) {
+TEST_P(CookieSettingsTest, LegacyCookieAccessAllowDomainWildcardPattern) {
   // Override the policy provider for this test, since the legacy cookie access
   // setting can only be set by policy.
   TestUtils::OverrideProvider(
@@ -822,6 +805,8 @@
   }
 }
 
+INSTANTIATE_TEST_SUITE_P(/* no prefix */, CookieSettingsTest, testing::Bool());
+
 }  // namespace
 
 }  // namespace content_settings
diff --git a/components/content_settings/core/common/BUILD.gn b/components/content_settings/core/common/BUILD.gn
index 84bf57a..ba2499d 100644
--- a/components/content_settings/core/common/BUILD.gn
+++ b/components/content_settings/core/common/BUILD.gn
@@ -54,6 +54,7 @@
   deps = [
     ":common",
     "//base",
+    "//base/test:test_support",
     "//net",
     "//testing/gmock",
     "//testing/gtest",
diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/components/content_settings/core/common/cookie_settings_base.cc
index 8275f4eb..5e46cf3b 100644
--- a/components/content_settings/core/common/cookie_settings_base.cc
+++ b/components/content_settings/core/common/cookie_settings_base.cc
@@ -12,6 +12,7 @@
 #include "base/stl_util.h"
 #include "build/build_config.h"
 #include "components/content_settings/core/common/features.h"
+#include "net/base/features.h"
 #include "net/base/net_errors.h"
 #include "net/cookies/cookie_util.h"
 #include "net/cookies/site_for_cookies.h"
@@ -42,7 +43,8 @@
     const std::string& domain,
     bool is_https) const {
   GURL origin = net::cookie_util::CookieOriginToURL(domain, is_https);
-  ContentSetting setting = GetCookieSetting(origin, origin, nullptr);
+  ContentSetting setting =
+      GetCookieSetting(origin, origin, nullptr, QueryReason::kCookies);
   DCHECK(IsValidSetting(setting));
   if (setting == CONTENT_SETTING_ALLOW)
     return false;
@@ -74,38 +76,44 @@
 ContentSetting CookieSettingsBase::GetCookieSetting(
     const GURL& url,
     const GURL& first_party_url,
-    content_settings::SettingSource* source) const {
+    content_settings::SettingSource* source,
+    QueryReason query_reason) const {
   return GetCookieSettingInternal(
       url, first_party_url,
       IsThirdPartyRequest(url, net::SiteForCookies::FromUrl(first_party_url)),
-      source);
+      source, query_reason);
 }
 
 bool CookieSettingsBase::IsFullCookieAccessAllowed(
     const GURL& url,
-    const GURL& first_party_url) const {
+    const GURL& first_party_url,
+    QueryReason query_reason) const {
 #if !BUILDFLAG(IS_IOS)
   // IOS uses this method with an empty |first_party_url| but we don't have
   // content settings on IOS, so it does not matter.
   DCHECK(!first_party_url.is_empty() || url.is_empty()) << url;
 #endif
-  return IsAllowed(GetCookieSetting(url, first_party_url, nullptr));
+  return IsAllowed(
+      GetCookieSetting(url, first_party_url, nullptr, query_reason));
 }
 
 bool CookieSettingsBase::IsFullCookieAccessAllowed(
     const GURL& url,
     const net::SiteForCookies& site_for_cookies,
-    const absl::optional<url::Origin>& top_frame_origin) const {
+    const absl::optional<url::Origin>& top_frame_origin,
+    QueryReason query_reason) const {
   ContentSetting setting = GetCookieSettingInternal(
       url,
       GetFirstPartyURL(site_for_cookies,
                        base::OptionalOrNullptr(top_frame_origin)),
-      IsThirdPartyRequest(url, site_for_cookies), nullptr);
+      IsThirdPartyRequest(url, site_for_cookies), nullptr, query_reason);
   return IsAllowed(setting);
 }
 
-bool CookieSettingsBase::IsCookieSessionOnly(const GURL& origin) const {
-  ContentSetting setting = GetCookieSetting(origin, origin, nullptr);
+bool CookieSettingsBase::IsCookieSessionOnly(const GURL& origin,
+                                             QueryReason query_reason) const {
+  ContentSetting setting =
+      GetCookieSetting(origin, origin, nullptr, query_reason);
   DCHECK(IsValidSetting(setting));
   return setting == CONTENT_SETTING_SESSION_ONLY;
 }
@@ -127,6 +135,21 @@
 }
 
 // static
+bool CookieSettingsBase::ShouldConsiderStorageAccessGrants(
+    QueryReason query_reason) {
+  switch (query_reason) {
+    case QueryReason::kSetting:
+      return false;
+    case QueryReason::kPrivacySandbox:
+      return false;
+    case QueryReason::kSiteStorage:
+      return base::FeatureList::IsEnabled(net::features::kStorageAccessAPI);
+    case QueryReason::kCookies:
+      return base::FeatureList::IsEnabled(net::features::kStorageAccessAPI);
+  }
+}
+
+// static
 bool CookieSettingsBase::IsValidSetting(ContentSetting setting) {
   return (setting == CONTENT_SETTING_ALLOW ||
           setting == CONTENT_SETTING_SESSION_ONLY ||
diff --git a/components/content_settings/core/common/cookie_settings_base.h b/components/content_settings/core/common/cookie_settings_base.h
index 954be95..e75715f 100644
--- a/components/content_settings/core/common/cookie_settings_base.h
+++ b/components/content_settings/core/common/cookie_settings_base.h
@@ -87,6 +87,32 @@
       const std::string& domain,
       bool is_https) const;
 
+  // This enum is provided to CookieSettingsBase query methods by callers in
+  // order to indicate the reason for the query. This allows CookieSettingsBase
+  // (or its subclasses) to optionally apply different policies based on how the
+  // returned content setting will be used. E.g., a CookieSettings class may
+  // choose to alter the value returned to the caller based on whether the
+  // caller cares about the setting itself, or whether the caller just cares
+  // about access to a particular cookie.
+  enum class QueryReason {
+    // The query is about getting the user's setting (possibly for UI exposure).
+    // Storage Access API permission grants will not be considered when
+    // answering the query.
+    kSetting = 0,
+    // The query is to determine whether Privacy Sandbox APIs should be enabled,
+    // based on the cookies content setting. Storage Access API permission
+    // grants will not be considered when answering the query.
+    kPrivacySandbox,
+    // The query is about access to site-scoped storage in practice, after
+    // taking all settings and permission into account. Storage Access API
+    // permission grants will be considered when answering the query.
+    kSiteStorage,
+    // The query is about determining whether cookies are accessible in
+    // practice, after taking all settings and permissions into account. Storage
+    // Access API permission grants will be considered when answering the query.
+    kCookies,
+  };
+
   // Returns true if the page identified by (|url|, |first_party_url|) is
   // allowed to access (i.e., read or write) cookies. |first_party_url|
   // is used to determine third-party-ness of |url|.
@@ -94,7 +120,8 @@
   // This may be called on any thread.
   // DEPRECATED: Replace with IsFullCookieAccessAllowed(GURL, GURL, Origin).
   bool IsFullCookieAccessAllowed(const GURL& url,
-                                 const GURL& first_party_url) const;
+                                 const GURL& first_party_url,
+                                 QueryReason query_reason) const;
 
   // Similar to IsFullCookieAccessAllowed(GURL, GURL) but provides a mechanism
   // to specify a separate `site_for_cookies`, which is used to determine
@@ -105,20 +132,21 @@
   bool IsFullCookieAccessAllowed(
       const GURL& url,
       const net::SiteForCookies& site_for_cookies,
-      const absl::optional<url::Origin>& top_frame_origin) const;
+      const absl::optional<url::Origin>& top_frame_origin,
+      QueryReason query_reason) const;
 
   // Returns true if the cookie set by a page identified by |url| should be
   // session only. Querying this only makes sense if |IsFullCookieAccessAllowed|
   // has returned true.
   //
   // This may be called on any thread.
-  bool IsCookieSessionOnly(const GURL& url) const;
+  bool IsCookieSessionOnly(const GURL& url, QueryReason query_reason) const;
 
   // A helper for applying third party cookie blocking rules.
-  ContentSetting GetCookieSetting(
-      const GURL& url,
-      const GURL& first_party_url,
-      content_settings::SettingSource* source) const;
+  ContentSetting GetCookieSetting(const GURL& url,
+                                  const GURL& first_party_url,
+                                  content_settings::SettingSource* source,
+                                  QueryReason query_reason) const;
 
   // Returns the cookie access semantics (legacy or nonlegacy) to be applied for
   // cookies on the given domain. The |cookie_domain| can be provided as the
@@ -177,6 +205,8 @@
   // access.
   static bool IsValidSettingForLegacyAccess(ContentSetting setting);
 
+  static bool ShouldConsiderStorageAccessGrants(QueryReason query_reason);
+
  protected:
   // Returns true iff the request is considered third-party.
   static bool IsThirdPartyRequest(const GURL& url,
@@ -193,7 +223,8 @@
       const GURL& url,
       const GURL& first_party_url,
       bool is_third_party_request,
-      content_settings::SettingSource* source) const = 0;
+      content_settings::SettingSource* source,
+      QueryReason query_reason) const = 0;
 };
 
 }  // namespace content_settings
diff --git a/components/content_settings/core/common/cookie_settings_base_unittest.cc b/components/content_settings/core/common/cookie_settings_base_unittest.cc
index d04e6de9..20d35ef 100644
--- a/components/content_settings/core/common/cookie_settings_base_unittest.cc
+++ b/components/content_settings/core/common/cookie_settings_base_unittest.cc
@@ -7,6 +7,8 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/notreached.h"
+#include "base/test/scoped_feature_list.h"
+#include "net/base/features.h"
 #include "net/cookies/cookie_util.h"
 #include "net/cookies/site_for_cookies.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -18,6 +20,7 @@
 constexpr char kDomain[] = "foo.com";
 
 using GetSettingCallback = base::RepeatingCallback<ContentSetting(const GURL&)>;
+using QueryReason = CookieSettingsBase::QueryReason;
 
 ContentSettingPatternSource CreateSetting(ContentSetting setting) {
   return ContentSettingPatternSource(
@@ -43,7 +46,8 @@
       const GURL& url,
       const GURL& first_party_url,
       bool is_third_party_request,
-      content_settings::SettingSource* source) const override {
+      content_settings::SettingSource* source,
+      QueryReason query_reason) const override {
     return callback_.Run(url);
   }
   ContentSetting GetSettingForLegacyCookieAccess(
@@ -140,20 +144,25 @@
 TEST(CookieSettingsBaseTest, CookieAccessNotAllowedWithBlockedSetting) {
   CallbackCookieSettings settings(
       base::BindRepeating([](const GURL&) { return CONTENT_SETTING_BLOCK; }));
-  EXPECT_FALSE(
-      settings.IsFullCookieAccessAllowed(GURL(kDomain), GURL(kDomain)));
+  EXPECT_FALSE(settings.IsFullCookieAccessAllowed(
+      GURL(kDomain), GURL(kDomain),
+      CallbackCookieSettings::QueryReason::kCookies));
 }
 
 TEST(CookieSettingsBaseTest, CookieAccessAllowedWithAllowSetting) {
   CallbackCookieSettings settings(
       base::BindRepeating([](const GURL&) { return CONTENT_SETTING_ALLOW; }));
-  EXPECT_TRUE(settings.IsFullCookieAccessAllowed(GURL(kDomain), GURL(kDomain)));
+  EXPECT_TRUE(settings.IsFullCookieAccessAllowed(
+      GURL(kDomain), GURL(kDomain),
+      CallbackCookieSettings::QueryReason::kCookies));
 }
 
 TEST(CookieSettingsBaseTest, CookieAccessAllowedWithSessionOnlySetting) {
   CallbackCookieSettings settings(base::BindRepeating(
       [](const GURL&) { return CONTENT_SETTING_SESSION_ONLY; }));
-  EXPECT_TRUE(settings.IsFullCookieAccessAllowed(GURL(kDomain), GURL(kDomain)));
+  EXPECT_TRUE(settings.IsFullCookieAccessAllowed(
+      GURL(kDomain), GURL(kDomain),
+      CallbackCookieSettings::QueryReason::kCookies));
 }
 
 TEST(CookieSettingsBaseTest, LegacyCookieAccessSemantics) {
@@ -170,19 +179,22 @@
 TEST(CookieSettingsBaseTest, IsCookieSessionOnlyWithAllowSetting) {
   CallbackCookieSettings settings(
       base::BindRepeating([](const GURL&) { return CONTENT_SETTING_ALLOW; }));
-  EXPECT_FALSE(settings.IsCookieSessionOnly(GURL(kDomain)));
+  EXPECT_FALSE(settings.IsCookieSessionOnly(
+      GURL(kDomain), CookieSettingsBase::QueryReason::kCookies));
 }
 
 TEST(CookieSettingsBaseTest, IsCookieSessionOnlyWithBlockSetting) {
   CallbackCookieSettings settings(
       base::BindRepeating([](const GURL&) { return CONTENT_SETTING_BLOCK; }));
-  EXPECT_FALSE(settings.IsCookieSessionOnly(GURL(kDomain)));
+  EXPECT_FALSE(settings.IsCookieSessionOnly(
+      GURL(kDomain), CookieSettingsBase::QueryReason::kCookies));
 }
 
 TEST(CookieSettingsBaseTest, IsCookieSessionOnlySessionWithOnlySetting) {
   CallbackCookieSettings settings(base::BindRepeating(
       [](const GURL&) { return CONTENT_SETTING_SESSION_ONLY; }));
-  EXPECT_TRUE(settings.IsCookieSessionOnly(GURL(kDomain)));
+  EXPECT_TRUE(settings.IsCookieSessionOnly(
+      GURL(kDomain), CookieSettingsBase::QueryReason::kCookies));
 }
 
 TEST(CookieSettingsBaseTest, IsValidSetting) {
@@ -212,5 +224,38 @@
       CONTENT_SETTING_SESSION_ONLY));
 }
 
+class CookieSettingsBaseStorageAccessAPITest
+    : public testing::TestWithParam<bool> {
+ public:
+  CookieSettingsBaseStorageAccessAPITest() {
+    features_.InitWithFeatureState(net::features::kStorageAccessAPI,
+                                   IsStorageAccessAPIEnabled());
+  }
+
+  bool IsStorageAccessAPIEnabled() const { return GetParam(); }
+
+ private:
+  base::test::ScopedFeatureList features_;
+};
+
+TEST_P(CookieSettingsBaseStorageAccessAPITest,
+       ShouldConsiderStorageAccessGrants) {
+  EXPECT_FALSE(CookieSettingsBase::ShouldConsiderStorageAccessGrants(
+      QueryReason::kSetting));
+  EXPECT_FALSE(CookieSettingsBase::ShouldConsiderStorageAccessGrants(
+      QueryReason::kPrivacySandbox));
+
+  EXPECT_EQ(CookieSettingsBase::ShouldConsiderStorageAccessGrants(
+                QueryReason::kSiteStorage),
+            IsStorageAccessAPIEnabled());
+  EXPECT_EQ(CookieSettingsBase::ShouldConsiderStorageAccessGrants(
+                QueryReason::kCookies),
+            IsStorageAccessAPIEnabled());
+}
+
+INSTANTIATE_TEST_SUITE_P(/* no prefix */,
+                         CookieSettingsBaseStorageAccessAPITest,
+                         testing::Bool());
+
 }  // namespace
 }  // namespace content_settings
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetLoggerFactory.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetLoggerFactory.java
index 0a77996..7013359 100644
--- a/components/cronet/android/java/src/org/chromium/net/impl/CronetLoggerFactory.java
+++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetLoggerFactory.java
@@ -5,6 +5,7 @@
 package org.chromium.net.impl;
 
 import android.content.Context;
+import android.os.Build;
 
 import androidx.annotation.Nullable;
 
@@ -40,7 +41,11 @@
     public static CronetLogger createLogger(Context ctx, CronetSource source) {
         if (sTestingLogger != null) return sTestingLogger;
 
-        if (!CronetManifest.isAppOptedInForTelemetry(ctx, source)) return sDefaultLogger;
+        // The CronetLoggerImpl only works from apiLevel 30
+        if (!CronetManifest.isAppOptedInForTelemetry(ctx, source)
+                || Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
+            return sDefaultLogger;
+        }
 
         Class<? extends CronetLogger> cronetLoggerImplClass = fetchLoggerImplClass();
         if (cronetLoggerImplClass == null) return sDefaultLogger;
diff --git a/components/device_signals/core/common/BUILD.gn b/components/device_signals/core/common/BUILD.gn
index c0c4e8d..c66351e 100644
--- a/components/device_signals/core/common/BUILD.gn
+++ b/components/device_signals/core/common/BUILD.gn
@@ -17,6 +17,7 @@
     "file_system_service.cc",
     "hashing_utils.cc",
     "hashing_utils.h",
+    "platform_delegate.cc",
     "signals_constants.cc",
   ]
 
diff --git a/components/device_signals/core/common/base_platform_delegate_unittest.cc b/components/device_signals/core/common/base_platform_delegate_unittest.cc
index 47330d1..299343e 100644
--- a/components/device_signals/core/common/base_platform_delegate_unittest.cc
+++ b/components/device_signals/core/common/base_platform_delegate_unittest.cc
@@ -29,9 +29,9 @@
               ResolveFilePath,
               (const base::FilePath&, base::FilePath*),
               (override));
-  MOCK_METHOD(ExecutableMetadata,
-              GetExecutableMetadata,
-              (const base::FilePath&),
+  MOCK_METHOD(FilePathMap<ExecutableMetadata>,
+              GetAllExecutableMetadata,
+              (const FilePathSet&),
               (override));
 };
 
diff --git a/components/device_signals/core/common/file_system_service.cc b/components/device_signals/core/common/file_system_service.cc
index 72e77af..cb957830 100644
--- a/components/device_signals/core/common/file_system_service.cc
+++ b/components/device_signals/core/common/file_system_service.cc
@@ -15,6 +15,19 @@
 
 namespace device_signals {
 
+namespace {
+
+std::vector<FileSystemItem> GetAllItems(
+    const FilePathMap<std::vector<FileSystemItem>>& map) {
+  std::vector<FileSystemItem> items;
+  for (const auto& pair : map) {
+    items.insert(items.end(), pair.second.begin(), pair.second.end());
+  }
+  return items;
+}
+
+}  // namespace
+
 class FileSystemServiceImpl : public FileSystemService {
  public:
   explicit FileSystemServiceImpl(std::unique_ptr<PlatformDelegate> delegate);
@@ -45,7 +58,14 @@
 
 std::vector<FileSystemItem> FileSystemServiceImpl::GetSignals(
     const std::vector<GetFileSystemInfoOptions>& options) {
-  std::vector<FileSystemItem> collected_items;
+  // Keeping a map of resolved file paths to their corresponding
+  // FileSystemItem objects is required in order to call the batch
+  // GetAllExecutableMetadata API and having a way to map the resulting
+  // ExecutableMetadata back to the corresponding FileSystemItem.
+  // The value of the map is a vector since there is no guarantee that some of
+  // the resolved file paths don't point to the same file.
+  FilePathMap<std::vector<FileSystemItem>> resolved_paths_to_item_map;
+  FilePathSet executable_paths;
   for (const auto& option : options) {
     FileSystemItem collected_item;
     collected_item.file_path = option.file_path;
@@ -56,14 +76,44 @@
     collected_item.presence =
         ResolveFileSystemItem(option.file_path, &resolved_file_path);
 
-    if (option.compute_sha256) {
-      collected_item.sha256_hash = HashFile(resolved_file_path);
+    // Only try to collect more signals if a file exists at the resolved path.
+    if (collected_item.presence == PresenceValue::kFound &&
+        !base::DirectoryExists(resolved_file_path)) {
+      if (option.compute_sha256) {
+        collected_item.sha256_hash = HashFile(resolved_file_path);
+      }
+
+      if (option.compute_executable_metadata) {
+        if (!executable_paths.contains(resolved_file_path)) {
+          executable_paths.insert(resolved_file_path);
+        }
+      }
     }
 
-    collected_items.push_back(std::move(collected_item));
+    if (!resolved_paths_to_item_map.contains(resolved_file_path)) {
+      resolved_paths_to_item_map[resolved_file_path] =
+          std::vector<FileSystemItem>();
+    }
+
+    resolved_paths_to_item_map[resolved_file_path].push_back(
+        std::move(collected_item));
   }
 
-  return collected_items;
+  auto collected_executable_metadata =
+      delegate_->GetAllExecutableMetadata(executable_paths);
+
+  for (const auto& path_metadata_pair : collected_executable_metadata) {
+    if (!resolved_paths_to_item_map.contains(path_metadata_pair.first)) {
+      continue;
+    }
+
+    for (auto& collected_item :
+         resolved_paths_to_item_map[path_metadata_pair.first]) {
+      collected_item.executable_metadata = path_metadata_pair.second;
+    }
+  }
+
+  return GetAllItems(resolved_paths_to_item_map);
 }
 
 PresenceValue FileSystemServiceImpl::ResolveFileSystemItem(
diff --git a/components/device_signals/core/common/file_system_service_unittest.cc b/components/device_signals/core/common/file_system_service_unittest.cc
index 835bc13d..ba65ea8f 100644
--- a/components/device_signals/core/common/file_system_service_unittest.cc
+++ b/components/device_signals/core/common/file_system_service_unittest.cc
@@ -41,6 +41,17 @@
       base::HexEncode(std::data(hashed_data), hashed_data.size()));
 }
 
+absl::optional<size_t> FindItemIndexByFilePath(
+    const base::FilePath& expected_file_path,
+    const std::vector<FileSystemItem>& items) {
+  for (size_t i = 0; i < items.size(); i++) {
+    if (items[i].file_path == expected_file_path) {
+      return i;
+    }
+  }
+  return absl::nullopt;
+}
+
 }  // namespace
 
 class FileSystemServiceTest : public testing::Test {
@@ -52,6 +63,9 @@
 
     file_system_service_ =
         FileSystemService::Create(std::move(mock_platform_delegate));
+
+    ON_CALL(*mock_platform_delegate_, GetAllExecutableMetadata(FilePathSet()))
+        .WillByDefault(Return(FilePathMap<ExecutableMetadata>()));
   }
 
   void ExpectResolvablePath(const base::FilePath& path,
@@ -98,26 +112,33 @@
   ExpectPathIsReadable(found_path_resolved);
 
   std::vector<GetFileSystemInfoOptions> options;
-  options.push_back(CreateOptions(unresolvable_file_path, true, true));
-  options.push_back(CreateOptions(access_denied_path, true, true));
+  options.push_back(CreateOptions(unresolvable_file_path, true, false));
+  options.push_back(CreateOptions(access_denied_path, true, false));
   options.push_back(CreateOptions(found_path, false, false));
 
   std::array<PresenceValue, 4> expected_presence_values{
       PresenceValue::kNotFound, PresenceValue::kAccessDenied,
       PresenceValue::kFound};
 
+  EXPECT_CALL(*mock_platform_delegate_,
+              GetAllExecutableMetadata(FilePathSet()));
+
   auto file_system_items = file_system_service_->GetSignals(options);
 
   ASSERT_EQ(file_system_items.size(), options.size());
 
-  for (size_t i = 0; i < file_system_items.size(); i++) {
-    EXPECT_EQ(file_system_items[i].file_path, options[i].file_path);
-    EXPECT_EQ(file_system_items[i].presence, expected_presence_values[i]);
+  for (size_t i = 0; i < options.size(); i++) {
+    auto index =
+        FindItemIndexByFilePath(options[i].file_path, file_system_items);
+    ASSERT_TRUE(index.has_value());
+
+    const FileSystemItem& item = file_system_items[index.value()];
+    EXPECT_EQ(item.presence, expected_presence_values[i]);
 
     // No metadata was collected, as it was only requested for the two files
     // that cannot be found/accessed.
-    EXPECT_FALSE(file_system_items[i].sha256_hash.has_value());
-    EXPECT_FALSE(file_system_items[i].executable_metadata.has_value());
+    EXPECT_FALSE(item.sha256_hash.has_value());
+    EXPECT_FALSE(item.executable_metadata.has_value());
   }
 }
 
@@ -147,6 +168,9 @@
   options.push_back(
       CreateOptions(scoped_dir.GetPath(), /*compute_sha256=*/true, false));
 
+  EXPECT_CALL(*mock_platform_delegate_,
+              GetAllExecutableMetadata(FilePathSet()));
+
   auto file_system_items = file_system_service_->GetSignals(options);
 
   constexpr char expected_sha256_hash[] =
@@ -154,16 +178,78 @@
   ASSERT_EQ(file_system_items.size(), options.size());
 
   // The file's hash was computed.
-  EXPECT_EQ(file_system_items[0].file_path, absolute_file_path);
-  EXPECT_EQ(file_system_items[0].presence, PresenceValue::kFound);
-  ASSERT_TRUE(file_system_items[0].sha256_hash.has_value());
-  EXPECT_EQ(HexEncodeHash(file_system_items[0].sha256_hash.value()),
-            expected_sha256_hash);
+  auto index = FindItemIndexByFilePath(absolute_file_path, file_system_items);
+  ASSERT_TRUE(index.has_value());
+  FileSystemItem& item = file_system_items[index.value()];
+  EXPECT_EQ(item.presence, PresenceValue::kFound);
+  ASSERT_TRUE(item.sha256_hash.has_value());
+  EXPECT_EQ(HexEncodeHash(item.sha256_hash.value()), expected_sha256_hash);
 
   // The directory does not have a hash.
-  EXPECT_EQ(file_system_items[1].file_path, scoped_dir.GetPath());
-  EXPECT_EQ(file_system_items[1].presence, PresenceValue::kFound);
-  EXPECT_FALSE(file_system_items[1].sha256_hash.has_value());
+  index = FindItemIndexByFilePath(scoped_dir.GetPath(), file_system_items);
+  ASSERT_TRUE(index.has_value());
+  item = file_system_items[index.value()];
+  EXPECT_EQ(item.file_path, scoped_dir.GetPath());
+  EXPECT_EQ(item.presence, PresenceValue::kFound);
+  EXPECT_FALSE(item.sha256_hash.has_value());
+}
+
+// Tests that the FileSystemService uses the PlatformDelegate to collect
+// the ExecutableMetadata only when requested.
+TEST_F(FileSystemServiceTest, GetSignals_ExecutableMetadata) {
+  base::FilePath first_found_path =
+      base::FilePath::FromUTF8Unsafe("/first/found");
+  base::FilePath first_found_path_resolved =
+      base::FilePath::FromUTF8Unsafe("/first/found/resolved");
+  ExpectResolvablePath(first_found_path, first_found_path_resolved);
+  ExpectPathIsReadable(first_found_path_resolved);
+
+  base::FilePath second_found_path =
+      base::FilePath::FromUTF8Unsafe("/second/found");
+  base::FilePath second_found_path_resolved =
+      base::FilePath::FromUTF8Unsafe("/second/found/resolved");
+  ExpectResolvablePath(second_found_path, second_found_path_resolved);
+  ExpectPathIsReadable(second_found_path_resolved);
+
+  ExecutableMetadata executable_metadata;
+  executable_metadata.is_running = true;
+
+  FilePathSet expected_path_set;
+  expected_path_set.insert(first_found_path_resolved);
+
+  FilePathMap<ExecutableMetadata> result_metadata_map;
+  result_metadata_map.insert({first_found_path_resolved, executable_metadata});
+
+  EXPECT_CALL(*mock_platform_delegate_,
+              GetAllExecutableMetadata(expected_path_set))
+      .WillOnce(Return(result_metadata_map));
+
+  std::vector<GetFileSystemInfoOptions> options;
+  options.push_back(CreateOptions(first_found_path, false,
+                                  /*compute_executable_metadata=*/true));
+  options.push_back(CreateOptions(second_found_path, false,
+                                  /*compute_executable_metadata=*/false));
+
+  auto file_system_items = file_system_service_->GetSignals(options);
+
+  ASSERT_EQ(file_system_items.size(), options.size());
+
+  // The first file's executable metadata was properly retrieved via the
+  // mocked delegate.
+  auto index = FindItemIndexByFilePath(first_found_path, file_system_items);
+  ASSERT_TRUE(index.has_value());
+  FileSystemItem& item = file_system_items[index.value()];
+  EXPECT_EQ(item.presence, PresenceValue::kFound);
+  ASSERT_TRUE(item.executable_metadata.has_value());
+  EXPECT_EQ(item.executable_metadata.value(), executable_metadata);
+
+  // We did not request executable metadata from the second file, so it should
+  // be absl::nullopt.
+  index = FindItemIndexByFilePath(second_found_path, file_system_items);
+  ASSERT_TRUE(index.has_value());
+  item = file_system_items[index.value()];
+  EXPECT_EQ(item.presence, PresenceValue::kFound);
+  EXPECT_FALSE(item.executable_metadata.has_value());
 }
 
 }  // namespace device_signals
diff --git a/components/device_signals/core/common/linux/linux_platform_delegate.cc b/components/device_signals/core/common/linux/linux_platform_delegate.cc
index f7deaab..6ed64ad 100644
--- a/components/device_signals/core/common/linux/linux_platform_delegate.cc
+++ b/components/device_signals/core/common/linux/linux_platform_delegate.cc
@@ -13,9 +13,10 @@
 
 LinuxPlatformDelegate::~LinuxPlatformDelegate() = default;
 
-ExecutableMetadata LinuxPlatformDelegate::GetExecutableMetadata(
-    const base::FilePath& file_path) {
-  return ExecutableMetadata();
+FilePathMap<ExecutableMetadata> LinuxPlatformDelegate::GetAllExecutableMetadata(
+    const FilePathSet& file_paths) {
+  // TODO(b:231326345): Implement.
+  return FilePathMap<ExecutableMetadata>();
 }
 
 }  // namespace device_signals
diff --git a/components/device_signals/core/common/linux/linux_platform_delegate.h b/components/device_signals/core/common/linux/linux_platform_delegate.h
index 9cc9f6a..5980d6e 100644
--- a/components/device_signals/core/common/linux/linux_platform_delegate.h
+++ b/components/device_signals/core/common/linux/linux_platform_delegate.h
@@ -15,8 +15,8 @@
   ~LinuxPlatformDelegate() override;
 
   // PlatformDelegate:
-  ExecutableMetadata GetExecutableMetadata(
-      const base::FilePath& file_path) override;
+  FilePathMap<ExecutableMetadata> GetAllExecutableMetadata(
+      const FilePathSet& file_paths) override;
 };
 
 }  // namespace device_signals
diff --git a/components/device_signals/core/common/mac/mac_platform_delegate.h b/components/device_signals/core/common/mac/mac_platform_delegate.h
index 7a2b64a..05d7be0e 100644
--- a/components/device_signals/core/common/mac/mac_platform_delegate.h
+++ b/components/device_signals/core/common/mac/mac_platform_delegate.h
@@ -15,8 +15,8 @@
   ~MacPlatformDelegate() override;
 
   // FileSystemDelegate:
-  ExecutableMetadata GetExecutableMetadata(
-      const base::FilePath& file_path) override;
+  FilePathMap<ExecutableMetadata> GetAllExecutableMetadata(
+      const FilePathSet& file_paths) override;
 };
 
 }  // namespace device_signals
diff --git a/components/device_signals/core/common/mac/mac_platform_delegate.mm b/components/device_signals/core/common/mac/mac_platform_delegate.mm
index 2df7117b5..c6c7ef7e 100644
--- a/components/device_signals/core/common/mac/mac_platform_delegate.mm
+++ b/components/device_signals/core/common/mac/mac_platform_delegate.mm
@@ -13,9 +13,10 @@
 
 MacPlatformDelegate::~MacPlatformDelegate() = default;
 
-ExecutableMetadata MacPlatformDelegate::GetExecutableMetadata(
-    const base::FilePath& file_path) {
-  return ExecutableMetadata();
+FilePathMap<ExecutableMetadata> MacPlatformDelegate::GetAllExecutableMetadata(
+    const FilePathSet& file_paths) {
+  // TODO(b:231326198): Implement.
+  return FilePathMap<ExecutableMetadata>();
 }
 
 }  // namespace device_signals
diff --git a/components/device_signals/core/common/mock_platform_delegate.h b/components/device_signals/core/common/mock_platform_delegate.h
index fce6c41..5d8c3d9 100644
--- a/components/device_signals/core/common/mock_platform_delegate.h
+++ b/components/device_signals/core/common/mock_platform_delegate.h
@@ -23,9 +23,9 @@
               ResolveFilePath,
               (const base::FilePath&, base::FilePath*),
               (override));
-  MOCK_METHOD(ExecutableMetadata,
-              GetExecutableMetadata,
-              (const base::FilePath&),
+  MOCK_METHOD(FilePathMap<ExecutableMetadata>,
+              GetAllExecutableMetadata,
+              (const FilePathSet&),
               (override));
 };
 
diff --git a/components/device_signals/core/common/platform_delegate.cc b/components/device_signals/core/common/platform_delegate.cc
new file mode 100644
index 0000000..5c94f4f
--- /dev/null
+++ b/components/device_signals/core/common/platform_delegate.cc
@@ -0,0 +1,23 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/device_signals/core/common/platform_delegate.h"
+
+#include "base/files/file_path.h"
+#include "build/build_config.h"
+
+namespace device_signals {
+
+bool CustomFilePathComparator::operator()(const base::FilePath& a,
+                                          const base::FilePath& b) const {
+#if BUILDFLAG(IS_LINUX)
+  // On Linux, the file system is case sensitive.
+  return a < b;
+#else
+  // On Windows and Mac, the file system is case insensitive.
+  return base::FilePath::CompareLessIgnoreCase(a.value(), b.value());
+#endif
+}
+
+}  // namespace device_signals
diff --git a/components/device_signals/core/common/platform_delegate.h b/components/device_signals/core/common/platform_delegate.h
index 5b563e3c..6a218bf 100644
--- a/components/device_signals/core/common/platform_delegate.h
+++ b/components/device_signals/core/common/platform_delegate.h
@@ -5,6 +5,9 @@
 #ifndef COMPONENTS_DEVICE_SIGNALS_CORE_COMMON_PLATFORM_DELEGATE_H_
 #define COMPONENTS_DEVICE_SIGNALS_CORE_COMMON_PLATFORM_DELEGATE_H_
 
+#include "base/containers/flat_map.h"
+#include "base/containers/flat_set.h"
+
 namespace base {
 class FilePath;
 }  // namespace base
@@ -13,6 +16,15 @@
 
 struct ExecutableMetadata;
 
+struct CustomFilePathComparator {
+  bool operator()(const base::FilePath& a, const base::FilePath& b) const;
+};
+
+template <typename T>
+using FilePathMap = base::flat_map<base::FilePath, T, CustomFilePathComparator>;
+
+using FilePathSet = base::flat_set<base::FilePath, CustomFilePathComparator>;
+
 // Interface whose derived types encapsulate OS-specific functionalities.
 class PlatformDelegate {
  public:
@@ -30,9 +42,9 @@
   virtual bool ResolveFilePath(const base::FilePath& file_path,
                                base::FilePath* resolved_file_path) = 0;
 
-  // Collects and return executable metadata for the file at `file_path`.
-  virtual ExecutableMetadata GetExecutableMetadata(
-      const base::FilePath& file_path) = 0;
+  // Collects and return executable metadata for all the files in `file_paths`.
+  virtual FilePathMap<ExecutableMetadata> GetAllExecutableMetadata(
+      const FilePathSet& file_paths) = 0;
 };
 
 }  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/win/win_platform_delegate.cc b/components/device_signals/core/system_signals/win/win_platform_delegate.cc
index 1007855..86d6520 100644
--- a/components/device_signals/core/system_signals/win/win_platform_delegate.cc
+++ b/components/device_signals/core/system_signals/win/win_platform_delegate.cc
@@ -59,9 +59,10 @@
   return true;
 }
 
-ExecutableMetadata WinPlatformDelegate::GetExecutableMetadata(
-    const base::FilePath& file_path) {
-  return ExecutableMetadata();
+FilePathMap<ExecutableMetadata> WinPlatformDelegate::GetAllExecutableMetadata(
+    const FilePathSet& file_paths) {
+  // TODO(b:231472924): Implement.
+  return FilePathMap<ExecutableMetadata>();
 }
 
 }  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/win/win_platform_delegate.h b/components/device_signals/core/system_signals/win/win_platform_delegate.h
index 46e3ba5..ad453e1 100644
--- a/components/device_signals/core/system_signals/win/win_platform_delegate.h
+++ b/components/device_signals/core/system_signals/win/win_platform_delegate.h
@@ -17,8 +17,8 @@
   // PlatformDelegate:
   bool ResolveFilePath(const base::FilePath& file_path,
                        base::FilePath* resolved_file_path) override;
-  ExecutableMetadata GetExecutableMetadata(
-      const base::FilePath& file_path) override;
+  FilePathMap<ExecutableMetadata> GetAllExecutableMetadata(
+      const FilePathSet& file_paths) override;
 };
 
 }  // namespace device_signals
diff --git a/components/download/public/common/download_stats.h b/components/download/public/common/download_stats.h
index 6e80bc70..bbc80f0b 100644
--- a/components/download/public/common/download_stats.h
+++ b/components/download/public/common/download_stats.h
@@ -145,7 +145,7 @@
 
 // Enum for in-progress download DB, used in histogram
 // "Download.InProgressDB.Counts".
-enum InProgressDBCountTypes {
+enum InProgressDBCountTypes : uint8_t {
   // Count of initialization attempts.
   kInitializationCount = 0,
 
diff --git a/components/embedder_support/content_settings_utils.cc b/components/embedder_support/content_settings_utils.cc
index 999bf66..7ff1e66 100644
--- a/components/embedder_support/content_settings_utils.cc
+++ b/components/embedder_support/content_settings_utils.cc
@@ -16,6 +16,7 @@
 
 using StorageType =
     content_settings::mojom::ContentSettingsManager::StorageType;
+using QueryReason = content_settings::CookieSettings::QueryReason;
 
 namespace {
 bool AllowWorkerStorageAccess(
@@ -24,7 +25,8 @@
     const std::vector<content::GlobalRenderFrameHostId>& render_frames,
     const content_settings::CookieSettings* cookie_settings) {
   bool allow = cookie_settings->IsFullCookieAccessAllowed(
-      url, net::SiteForCookies::FromUrl(url), url::Origin::Create(url));
+      url, net::SiteForCookies::FromUrl(url), url::Origin::Create(url),
+      QueryReason::kSiteStorage);
 
   for (const auto& it : render_frames) {
     content_settings::PageSpecificContentSettings::StorageAccessed(
@@ -51,7 +53,7 @@
 
   // Check if cookies are allowed.
   bool allow_cookies = cookie_settings->IsFullCookieAccessAllowed(
-      scope, site_for_cookies, top_frame_origin);
+      scope, site_for_cookies, top_frame_origin, QueryReason::kSiteStorage);
 
   return content::AllowServiceWorkerResult::FromPolicy(!allow_javascript,
                                                        !allow_cookies);
@@ -67,7 +69,8 @@
     int render_frame_id,
     const content_settings::CookieSettings* cookie_settings) {
   bool allow = cookie_settings->IsFullCookieAccessAllowed(
-      worker_url, site_for_cookies, top_frame_origin);
+      worker_url, site_for_cookies, top_frame_origin,
+      QueryReason::kSiteStorage);
 
   content_settings::PageSpecificContentSettings::SharedWorkerAccessed(
       render_process_id, render_frame_id, worker_url, name, storage_key,
diff --git a/components/embedder_support/origin_trials/component_updater_utils_unittest.cc b/components/embedder_support/origin_trials/component_updater_utils_unittest.cc
index 34b14c3..58d5c77 100644
--- a/components/embedder_support/origin_trials/component_updater_utils_unittest.cc
+++ b/components/embedder_support/origin_trials/component_updater_utils_unittest.cc
@@ -96,16 +96,15 @@
     ASSERT_TRUE(local_state()->HasPrefPath(
         embedder_support::prefs::kOriginTrialDisabledFeatures));
 
-    const base::Value* disabled_feature_list = local_state()->GetList(
-        embedder_support::prefs::kOriginTrialDisabledFeatures);
-    ASSERT_TRUE(disabled_feature_list);
+    const base::Value::List& disabled_feature_list =
+        local_state()->GetValueList(
+            embedder_support::prefs::kOriginTrialDisabledFeatures);
 
-    ASSERT_EQ(features.size(),
-              disabled_feature_list->GetListDeprecated().size());
+    ASSERT_EQ(features.size(), disabled_feature_list.size());
 
     for (size_t i = 0; i < features.size(); ++i) {
       const std::string* disabled_feature =
-          disabled_feature_list->GetListDeprecated()[i].GetIfString();
+          disabled_feature_list[i].GetIfString();
       if (!disabled_feature) {
         ADD_FAILURE() << "Entry not found or not a string at index " << i;
         continue;
@@ -131,15 +130,13 @@
     ASSERT_TRUE(local_state()->HasPrefPath(
         embedder_support::prefs::kOriginTrialDisabledTokens));
 
-    const base::Value* disabled_token_list = local_state()->GetList(
+    const base::Value::List& disabled_token_list = local_state()->GetValueList(
         embedder_support::prefs::kOriginTrialDisabledTokens);
-    ASSERT_TRUE(disabled_token_list);
 
-    ASSERT_EQ(tokens.size(), disabled_token_list->GetListDeprecated().size());
+    ASSERT_EQ(tokens.size(), disabled_token_list.size());
 
     for (size_t i = 0; i < tokens.size(); ++i) {
-      const std::string* disabled_token =
-          disabled_token_list->GetListDeprecated()[i].GetIfString();
+      const std::string* disabled_token = disabled_token_list[i].GetIfString();
 
       if (!disabled_token) {
         ADD_FAILURE() << "Entry not found or not a string at index " << i;
diff --git a/components/exo/BUILD.gn b/components/exo/BUILD.gn
index c608ef8..7e1d263 100644
--- a/components/exo/BUILD.gn
+++ b/components/exo/BUILD.gn
@@ -225,6 +225,8 @@
     "test/exo_test_suite_aura.h",
     "test/mock_security_delegate.cc",
     "test/mock_security_delegate.h",
+    "test/test_security_delegate.cc",
+    "test/test_security_delegate.h",
   ]
 
   public_deps = [ "//testing/gtest" ]
diff --git a/components/exo/pointer.cc b/components/exo/pointer.cc
index 18ea4cb..75cd6bb 100644
--- a/components/exo/pointer.cc
+++ b/components/exo/pointer.cc
@@ -11,7 +11,6 @@
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "build/chromeos_buildflags.h"
-#include "chromeos/ui/base/window_properties.h"
 #include "components/exo/input_trace.h"
 #include "components/exo/pointer_constraint_delegate.h"
 #include "components/exo/pointer_delegate.h"
@@ -19,6 +18,8 @@
 #include "components/exo/pointer_stylus_delegate.h"
 #include "components/exo/relative_pointer_delegate.h"
 #include "components/exo/seat.h"
+#include "components/exo/security_delegate.h"
+#include "components/exo/shell_surface_base.h"
 #include "components/exo/shell_surface_util.h"
 #include "components/exo/surface.h"
 #include "components/exo/wm_helper.h"
@@ -47,19 +48,13 @@
 #include "ui/wm/core/cursor_util.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "ash/constants/ash_features.h"
+// #include "ash/constants/ash_features.h"
 #include "ash/drag_drop/drag_drop_controller.h"
-#include "ash/public/cpp/app_types_util.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/wm/window_util.h"
 #endif
 
 namespace exo {
-
-// Controls Pointer capture in exo/wayland.
-const base::Feature kPointerCapture{"ExoPointerCapture",
-                                    base::FEATURE_ENABLED_BY_DEFAULT};
-
 namespace {
 
 // TODO(oshima): Some accessibility features, including large cursors, disable
@@ -138,6 +133,10 @@
 
 Pointer::~Pointer() {
   WMHelper* helper = WMHelper::GetInstance();
+  // Remove the pretarget handler in case the pointer is deleted
+  // w/o disabling pointer capture.
+  aura::Env::GetInstance()->RemovePreTargetHandler(this);
+
   helper->RemovePreTargetHandler(this);
   delegate_->OnPointerDestroying(this);
   if (focus_surface_)
@@ -264,14 +263,14 @@
     return false;
   }
 
-  // Pointer lock is permitted for ARC windows, and for windows configured to
-  // notify the user on lock activation. In the latter case, the
-  // kExoPointerLock feature must be enabled.
+  // Permission of Pointer lock is controlled by SecurityDelegate, created per
+  // server instance. Default implementation allows this for ARC and Lacros
+  // windows which have their own security mechanism and are consiered trusted.
   aura::Window* toplevel = constrained_surface->window()->GetToplevelWindow();
-  bool permitted =
-      ash::IsArcWindow(toplevel) ||
-      (base::FeatureList::IsEnabled(chromeos::features::kExoPointerLock) &&
-       toplevel->GetProperty(chromeos::kUseOverviewToExitPointerLock));
+  auto* shell_surface_base = GetShellSurfaceBaseForWindow(toplevel);
+  auto* security_delegate = shell_surface_base->GetSecurityDelegate();
+
+  bool permitted = security_delegate->CanLockPointer(toplevel);
   if (!permitted) {
     delegate->OnDefunct();
     return false;
@@ -363,11 +362,6 @@
     return false;
   }
 
-  if (!base::FeatureList::IsEnabled(kPointerCapture)) {
-    LOG(WARNING) << "Unable to capture the pointer, feature is disabled.";
-    return false;
-  }
-
   aura::Window* window = capture_surface->window();
   aura::Window* active_window = WMHelper::GetInstance()->GetActiveWindow();
   if (!active_window || !active_window->Contains(window)) {
diff --git a/components/exo/pointer_unittest.cc b/components/exo/pointer_unittest.cc
index 9cd3d422..20da2818 100644
--- a/components/exo/pointer_unittest.cc
+++ b/components/exo/pointer_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "components/exo/pointer.h"
 
+#include "ash/constants/app_types.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/shell.h"
 #include "ash/wm/desks/desks_util.h"
@@ -27,11 +28,13 @@
 #include "components/exo/test/exo_test_base.h"
 #include "components/exo/test/exo_test_data_exchange_delegate.h"
 #include "components/exo/test/exo_test_helper.h"
+#include "components/exo/test/mock_security_delegate.h"
 #include "components/exo/test/shell_surface_builder.h"
 #include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/service/surfaces/surface.h"
 #include "components/viz/service/surfaces/surface_manager.h"
 #include "testing/gmock/include/gmock/gmock.h"
+#include "ui/aura/client/aura_constants.h"
 #include "ui/aura/client/cursor_client.h"
 #include "ui/aura/client/focus_client.h"
 #include "ui/base/cursor/mojom/cursor_type.mojom-shared.h"
@@ -223,10 +226,8 @@
     std::unique_ptr<ShellSurface> shell_surface =
         test::ShellSurfaceBuilder({10, 10}).BuildShellSurface();
 
-    shell_surface->surface_for_testing()
-        ->window()
-        ->GetToplevelWindow()
-        ->SetProperty(chromeos::kUseOverviewToExitPointerLock, true);
+    shell_surface->GetWidget()->GetNativeWindow()->SetProperty(
+        chromeos::kUseOverviewToExitPointerLock, true);
 
     return shell_surface;
   }
@@ -1817,6 +1818,52 @@
   EXPECT_CALL(delegate_, OnPointerDestroying(pointer_.get()));
   pointer_.reset();
 }
+
+TEST_F(PointerConstraintTest, DefaultSecrityDeletegate) {
+  auto default_security_delegate =
+      SecurityDelegate::GetDefaultSecurityDelegate();
+  auto shell_surface = test::ShellSurfaceBuilder({10, 10})
+                           .SetSecurityDelegate(default_security_delegate.get())
+                           .BuildShellSurface();
+
+  auto* surface = shell_surface->surface_for_testing();
+
+  focus_client_->FocusWindow(surface->window());
+
+  MockPointerConstraintDelegate constraint_delegate;
+
+  EXPECT_CALL(constraint_delegate, GetConstrainedSurface())
+      .WillRepeatedly(testing::Return(surface));
+
+  EXPECT_CALL(constraint_delegate, OnDefunct()).Times(1);
+  EXPECT_FALSE(pointer_->ConstrainPointer(&constraint_delegate));
+  ::testing::Mock::VerifyAndClearExpectations(&constraint_delegate);
+
+  shell_surface->GetWidget()->GetNativeWindow()->SetProperty(
+      aura::client::kAppType, static_cast<int>(ash::AppType::LACROS));
+
+  EXPECT_CALL(constraint_delegate, GetConstrainedSurface())
+      .WillRepeatedly(testing::Return(surface));
+  EXPECT_CALL(constraint_delegate, OnDefunct()).Times(0);
+  EXPECT_TRUE(pointer_->ConstrainPointer(&constraint_delegate));
+
+  ::testing::Mock::VerifyAndClearExpectations(&constraint_delegate);
+
+  EXPECT_CALL(constraint_delegate, GetConstrainedSurface())
+      .WillRepeatedly(testing::Return(surface));
+  shell_surface->GetWidget()->GetNativeWindow()->SetProperty(
+      aura::client::kAppType, static_cast<int>(ash::AppType::ARC_APP));
+  EXPECT_CALL(constraint_delegate, OnDefunct()).Times(0);
+  EXPECT_TRUE(pointer_->ConstrainPointer(&constraint_delegate));
+
+  ::testing::Mock::VerifyAndClearExpectations(&constraint_delegate);
+
+  pointer_->OnPointerConstraintDelegateDestroying(&constraint_delegate);
+  EXPECT_CALL(delegate_, OnPointerDestroying(pointer_.get()));
+
+  pointer_.reset();
+}
+
 #endif
 
 TEST_F(PointerTest, PointerStylus) {
diff --git a/components/exo/security_delegate.cc b/components/exo/security_delegate.cc
index a472526..21cce49 100644
--- a/components/exo/security_delegate.cc
+++ b/components/exo/security_delegate.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <string>
 
+#include "ash/public/cpp/app_types_util.h"
 #include "components/exo/shell_surface_util.h"
 
 namespace exo {
@@ -17,7 +18,13 @@
  public:
   ~DefaultSecurityDelegate() override = default;
 
+  // SecurityDelegate:
   std::string GetSecurityContext() const override { return ""; }
+  bool CanLockPointer(aura::Window* toplevel) const override {
+    // TODO(b/200896773): Move this out from exo's default security delegate
+    // define in client's security delegates.
+    return ash::IsArcWindow(toplevel) || ash::IsLacrosWindow(toplevel);
+  }
 };
 
 }  // namespace
@@ -39,4 +46,8 @@
   return HasPermissionToActivate(window);
 }
 
+bool SecurityDelegate::CanLockPointer(aura::Window* window) const {
+  return false;
+}
+
 }  // namespace exo
diff --git a/components/exo/security_delegate.h b/components/exo/security_delegate.h
index 8d8974b..7938090a 100644
--- a/components/exo/security_delegate.h
+++ b/components/exo/security_delegate.h
@@ -45,6 +45,12 @@
   // per-subsystem, i.e. a product like ARC++ knows that its windows should be
   // able to self activate, whereas Crostini knows they usually shouldn't.
   virtual bool CanSelfActivate(aura::Window* window) const;
+
+  // Called when a client made pointer lock request, defined in
+  // pointer-constraints-unstable-v1.xml extension protocol.  True if the client
+  // can lock the location of the pointer and disable movement, or return false
+  // to reject the pointer lock request.
+  virtual bool CanLockPointer(aura::Window* window) const;
 };
 
 }  // namespace exo
diff --git a/components/exo/server/wayland_server_controller_unittest.cc b/components/exo/server/wayland_server_controller_unittest.cc
index 1da40cff..cbdfc792 100644
--- a/components/exo/server/wayland_server_controller_unittest.cc
+++ b/components/exo/server/wayland_server_controller_unittest.cc
@@ -16,17 +16,13 @@
 #include "components/exo/input_method_surface_manager.h"
 #include "components/exo/notification_surface_manager.h"
 #include "components/exo/security_delegate.h"
+#include "components/exo/test/test_security_delegate.h"
 #include "components/exo/toast_surface_manager.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace exo {
 namespace {
 
-class TestSecurityDelegate : public SecurityDelegate {
- public:
-  std::string GetSecurityContext() const override { return "test"; }
-};
-
 class WaylandServerControllerTest : public ash::AshTestBase {
  public:
   void SetUp() override {
@@ -56,7 +52,7 @@
   {
     base::ScopedDisallowBlocking no_blocking;
     WaylandServerController::Get()->CreateServer(
-        std::make_unique<TestSecurityDelegate>(),
+        std::make_unique<test::TestSecurityDelegate>(),
         base::BindLambdaForTesting(
             [&loop, &socket_path](bool success,
                                   const base::FilePath& new_path) {
diff --git a/components/exo/test/mock_security_delegate.h b/components/exo/test/mock_security_delegate.h
index b280d26..d36f4258 100644
--- a/components/exo/test/mock_security_delegate.h
+++ b/components/exo/test/mock_security_delegate.h
@@ -18,6 +18,7 @@
 
   MOCK_METHOD(std::string, GetSecurityContext, (), (const, override));
   MOCK_METHOD(bool, CanSelfActivate, (aura::Window*), (const, override));
+  MOCK_METHOD(bool, CanLockPointer, (aura::Window*), (const, override));
 };
 
 }  // namespace exo::test
diff --git a/components/exo/test/shell_surface_builder.cc b/components/exo/test/shell_surface_builder.cc
index bb316bc..22aeebd7 100644
--- a/components/exo/test/shell_surface_builder.cc
+++ b/components/exo/test/shell_surface_builder.cc
@@ -11,16 +11,16 @@
 #include "ash/wm/window_positioning_utils.h"
 #include "components/exo/buffer.h"
 #include "components/exo/display.h"
+#include "components/exo/security_delegate.h"
 #include "components/exo/sub_surface.h"
 #include "components/exo/surface.h"
 #include "components/exo/test/exo_test_base.h"
+#include "components/exo/test/test_security_delegate.h"
 #include "components/exo/xdg_shell_surface.h"
 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
 #include "ui/aura/client/aura_constants.h"
 #include "ui/aura/env.h"
 
-#include "base/logging.h"
-
 namespace {
 
 // Internal structure that owns buffer, surface and subsurface instances.
@@ -31,6 +31,7 @@
                          std::unique_ptr<exo::Surface>,
                          std::unique_ptr<exo::SubSurface>>>
       sub_surfaces;
+  std::unique_ptr<exo::SecurityDelegate> security_delegate_;
 
   void AddRootSurface(const gfx::Size& size,
                       absl::optional<gfx::BufferFormat> buffer_format) {
@@ -83,6 +84,11 @@
     }
     root_surface = nullptr;
   }
+
+  exo::SecurityDelegate* CreateTestSecurityDelegate() {
+    security_delegate_ = std::make_unique<exo::test::TestSecurityDelegate>();
+    return security_delegate_.get();
+  }
 };
 
 }  // namespace
@@ -391,6 +397,10 @@
 
   if (security_delegate_) {
     shell_surface->SetSecurityDelegate(security_delegate_);
+  } else {
+    auto* holder =
+        shell_surface->host_window()->GetProperty(kBuilderResourceHolderKey);
+    shell_surface->SetSecurityDelegate(holder->CreateTestSecurityDelegate());
   }
 
   if (commit_on_build_) {
diff --git a/components/exo/test/test_security_delegate.cc b/components/exo/test/test_security_delegate.cc
new file mode 100644
index 0000000..5727eb8
--- /dev/null
+++ b/components/exo/test/test_security_delegate.cc
@@ -0,0 +1,20 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/exo/test/test_security_delegate.h"
+
+#include "chromeos/ui/base/window_properties.h"
+#include "ui/aura/window.h"
+
+namespace exo::test {
+
+std::string TestSecurityDelegate::GetSecurityContext() const {
+  return "test";
+}
+
+bool TestSecurityDelegate::CanLockPointer(aura::Window* toplevel) const {
+  return toplevel->GetProperty(chromeos::kUseOverviewToExitPointerLock);
+}
+
+}  // namespace exo::test
diff --git a/components/exo/test/test_security_delegate.h b/components/exo/test/test_security_delegate.h
new file mode 100644
index 0000000..7ea516c
--- /dev/null
+++ b/components/exo/test/test_security_delegate.h
@@ -0,0 +1,26 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_EXO_TEST_TEST_SECURITY_DELEGATE_H_
+#define COMPONENTS_EXO_TEST_TEST_SECURITY_DELEGATE_H_
+
+#include <string>
+
+#include "components/exo/security_delegate.h"
+
+namespace aura {
+class Window;
+}
+
+namespace exo::test {
+
+class TestSecurityDelegate : public SecurityDelegate {
+ public:
+  std::string GetSecurityContext() const override;
+  bool CanLockPointer(aura::Window* toplevel) const override;
+};
+
+}  // namespace exo::test
+
+#endif  // COMPONENTS_EXO_TEST_TEST_SECURITY_DELEGATE_H_
diff --git a/components/exo/wayland/test/wayland_server_test_base.cc b/components/exo/wayland/test/wayland_server_test_base.cc
index 2aca214..884699f 100644
--- a/components/exo/wayland/test/wayland_server_test_base.cc
+++ b/components/exo/wayland/test/wayland_server_test_base.cc
@@ -23,6 +23,7 @@
 #include "components/exo/display.h"
 #include "components/exo/security_delegate.h"
 #include "components/exo/test/exo_test_base_views.h"
+#include "components/exo/test/test_security_delegate.h"
 #include "components/exo/wayland/server.h"
 #include "components/exo/wayland/server_util.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -35,11 +36,6 @@
 
 base::AtomicSequenceNumber g_next_socket_id;
 
-class TestSecurityDelegate : public SecurityDelegate {
- public:
-  std::string GetSecurityContext() const override { return "test"; }
-};
-
 }  // namespace
 
 // static
@@ -66,13 +62,13 @@
 }
 
 std::unique_ptr<Server> WaylandServerTestBase::CreateServer() {
-  return CreateServer(std::make_unique<TestSecurityDelegate>());
+  return CreateServer(std::make_unique<::exo::test::TestSecurityDelegate>());
 }
 
 std::unique_ptr<Server> WaylandServerTestBase::CreateServer(
     std::unique_ptr<SecurityDelegate> security_delegate) {
   if (!security_delegate)
-    security_delegate = std::make_unique<TestSecurityDelegate>();
+    security_delegate = std::make_unique<::exo::test::TestSecurityDelegate>();
   return Server::Create(display_.get(), std::move(security_delegate));
 }
 
diff --git a/components/flags_ui/flags_state_unittest.cc b/components/flags_ui/flags_state_unittest.cc
index b902488..5337ee2 100644
--- a/components/flags_ui/flags_state_unittest.cc
+++ b/components/flags_ui/flags_state_unittest.cc
@@ -245,40 +245,48 @@
   flags_state_->SetFeatureEntryEnabled(&flags_storage_, kFlags1, true);
   flags_state_->SetFeatureEntryEnabled(&flags_storage_, kFlags2, true);
 
-  const base::Value* entries_list = prefs_.GetList(prefs::kAboutFlagsEntries);
-  ASSERT_TRUE(entries_list != nullptr);
+  {
+    const base::Value::List& entries_list =
+        prefs_.GetValueList(prefs::kAboutFlagsEntries);
+    ASSERT_EQ(2u, entries_list.size());
 
-  ASSERT_EQ(2u, entries_list->GetListDeprecated().size());
+    std::string s0 = entries_list[0].GetString();
+    std::string s1 = entries_list[1].GetString();
 
-  std::string s0 = entries_list->GetListDeprecated()[0].GetString();
-  std::string s1 = entries_list->GetListDeprecated()[1].GetString();
-
-  EXPECT_TRUE(s0 == kFlags1 || s1 == kFlags1);
-  EXPECT_TRUE(s0 == kFlags2 || s1 == kFlags2);
+    EXPECT_TRUE(s0 == kFlags1 || s1 == kFlags1);
+    EXPECT_TRUE(s0 == kFlags2 || s1 == kFlags2);
+  }
 
   // Remove one entry, check the other's still around.
   flags_state_->SetFeatureEntryEnabled(&flags_storage_, kFlags2, false);
 
-  entries_list = prefs_.GetList(prefs::kAboutFlagsEntries);
-  ASSERT_TRUE(entries_list != nullptr);
-  ASSERT_EQ(1u, entries_list->GetListDeprecated().size());
-  s0 = entries_list->GetListDeprecated()[0].GetString();
-  EXPECT_TRUE(s0 == kFlags1);
+  {
+    const base::Value::List& entries_list =
+        prefs_.GetValueList(prefs::kAboutFlagsEntries);
+    ASSERT_EQ(1u, entries_list.size());
+    std::string s0 = entries_list[0].GetString();
+    EXPECT_TRUE(s0 == kFlags1);
+  }
 }
 
 TEST_F(FlagsStateTest, AddTwoFlagsRemoveBoth) {
   // Add two entries, check the pref exists.
   flags_state_->SetFeatureEntryEnabled(&flags_storage_, kFlags1, true);
   flags_state_->SetFeatureEntryEnabled(&flags_storage_, kFlags2, true);
-  const base::Value* entries_list = prefs_.GetList(prefs::kAboutFlagsEntries);
-  ASSERT_TRUE(entries_list != nullptr);
+  {
+    const base::Value::List& entries_list =
+        prefs_.GetValueList(prefs::kAboutFlagsEntries);
+    ASSERT_EQ(2u, entries_list.size());
+  }
 
   // Remove both, the pref should have been removed completely.
   flags_state_->SetFeatureEntryEnabled(&flags_storage_, kFlags1, false);
   flags_state_->SetFeatureEntryEnabled(&flags_storage_, kFlags2, false);
-  entries_list = prefs_.GetList(prefs::kAboutFlagsEntries);
-  EXPECT_TRUE(entries_list == nullptr ||
-              entries_list->GetListDeprecated().size() == 0);
+  {
+    const base::Value::List& entries_list =
+        prefs_.GetValueList(prefs::kAboutFlagsEntries);
+    EXPECT_TRUE(entries_list.empty());
+  }
 }
 
 TEST_F(FlagsStateTest, CombineOriginListValues) {
@@ -577,12 +585,12 @@
   EXPECT_FALSE(command_line.HasSwitch(kSwitch3));
 
   // FeatureEntry 3 should show still be persisted in preferences though.
-  const base::Value* entries_list = prefs_.GetList(prefs::kAboutFlagsEntries);
-  ASSERT_TRUE(entries_list);
-  EXPECT_EQ(2U, entries_list->GetListDeprecated().size());
-  std::string s0 = entries_list->GetListDeprecated()[0].GetString();
+  const base::Value::List& entries_list =
+      prefs_.GetValueList(prefs::kAboutFlagsEntries);
+  EXPECT_EQ(2U, entries_list.size());
+  std::string s0 = entries_list[0].GetString();
   EXPECT_EQ(kFlags1, s0);
-  std::string s1 = entries_list->GetListDeprecated()[1].GetString();
+  std::string s1 = entries_list[1].GetString();
   EXPECT_EQ(kFlags3, s1);
 }
 
@@ -629,12 +637,12 @@
 #endif
 
   // And it should persist.
-  const base::Value* entries_list = prefs_.GetList(prefs::kAboutFlagsEntries);
-  ASSERT_TRUE(entries_list);
-  EXPECT_EQ(2U, entries_list->GetListDeprecated().size());
-  std::string s0 = entries_list->GetListDeprecated()[0].GetString();
+  const base::Value::List& entries_list =
+      prefs_.GetValueList(prefs::kAboutFlagsEntries);
+  EXPECT_EQ(2U, entries_list.size());
+  std::string s0 = entries_list[0].GetString();
   EXPECT_EQ(kFlags1, s0);
-  std::string s1 = entries_list->GetListDeprecated()[1].GetString();
+  std::string s1 = entries_list[1].GetString();
   EXPECT_EQ(kFlags2, s1);
 }
 
diff --git a/components/gcm_driver/gcm_client.h b/components/gcm_driver/gcm_client.h
index 51f9c70..84f8de6 100644
--- a/components/gcm_driver/gcm_client.h
+++ b/components/gcm_driver/gcm_client.h
@@ -58,7 +58,7 @@
   };
 
   // Used for UMA. Can add enum values, but never renumber or delete and reuse.
-  enum Result {
+  enum Result : uint8_t {
     // Successful operation.
     SUCCESS,
     // Invalid parameter.
diff --git a/components/gcm_driver/instance_id/instance_id.h b/components/gcm_driver/instance_id/instance_id.h
index 01c19c46..b8219b6 100644
--- a/components/gcm_driver/instance_id/instance_id.h
+++ b/components/gcm_driver/instance_id/instance_id.h
@@ -30,7 +30,7 @@
 class InstanceID {
  public:
   // Used in UMA. Can add enum values, but never renumber or delete and reuse.
-  enum Result {
+  enum Result : uint8_t {
     // Successful operation.
     SUCCESS = 0,
     // Invalid parameter.
diff --git a/components/network_time/network_time_tracker.cc b/components/network_time/network_time_tracker.cc
index 3cc080bb..0a7cdec 100644
--- a/components/network_time/network_time_tracker.cc
+++ b/components/network_time/network_time_tracker.cc
@@ -539,14 +539,13 @@
     RecordFetchValidHistogram(false);
     return false;
   }
-  const base::DictionaryValue* dict;
-  if (!value->GetAsDictionary(&dict)) {
+  if (!value->is_dict()) {
     DVLOG(1) << "not a dictionary";
     RecordFetchValidHistogram(false);
     return false;
   }
   absl::optional<double> current_time_millis =
-      dict->FindDoubleKey("current_time_millis");
+      value->GetDict().FindDouble("current_time_millis");
   if (!current_time_millis) {
     DVLOG(1) << "no current_time_millis";
     RecordFetchValidHistogram(false);
diff --git a/components/optimization_guide/core/BUILD.gn b/components/optimization_guide/core/BUILD.gn
index 1b844bf..a63eb5c 100644
--- a/components/optimization_guide/core/BUILD.gn
+++ b/components/optimization_guide/core/BUILD.gn
@@ -173,6 +173,7 @@
     "prediction_model_fetcher.h",
     "prediction_model_fetcher_impl.cc",
     "prediction_model_fetcher_impl.h",
+    "push_notification_manager.cc",
     "push_notification_manager.h",
     "store_update_data.cc",
     "store_update_data.h",
@@ -368,6 +369,7 @@
     "prediction_manager_unittest.cc",
     "prediction_model_download_manager_unittest.cc",
     "prediction_model_fetcher_unittest.cc",
+    "push_notification_manager_unittest.cc",
     "store_update_data_unittest.cc",
     "url_pattern_with_wildcards_unittest.cc",
   ]
diff --git a/components/optimization_guide/core/mock_push_notification_manager.h b/components/optimization_guide/core/mock_push_notification_manager.h
index fedfef2..81f0265 100644
--- a/components/optimization_guide/core/mock_push_notification_manager.h
+++ b/components/optimization_guide/core/mock_push_notification_manager.h
@@ -16,17 +16,14 @@
   MockPushNotificationManager();
   ~MockPushNotificationManager() override;
 
-  MOCK_METHOD(void,
-              SetDelegate,
-              (PushNotificationManager::Delegate*),
-              (override));
+  MOCK_METHOD(void, SetDelegate, (PushNotificationManager::Delegate*));
   MOCK_METHOD(void, OnDelegateReady, (), (override));
   MOCK_METHOD(void,
               OnNewPushNotification,
               (const proto::HintNotificationPayload&),
               (override));
-  MOCK_METHOD(void, AddObserver, (Observer * observer), (override));
-  MOCK_METHOD(void, RemoveObserver, (Observer * observer), (override));
+  MOCK_METHOD(void, AddObserver, (Observer * observer));
+  MOCK_METHOD(void, RemoveObserver, (Observer * observer));
 };
 
 }  // namespace optimization_guide
diff --git a/components/optimization_guide/core/push_notification_manager.cc b/components/optimization_guide/core/push_notification_manager.cc
new file mode 100644
index 0000000..a602bab
--- /dev/null
+++ b/components/optimization_guide/core/push_notification_manager.cc
@@ -0,0 +1,70 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/optimization_guide/core/push_notification_manager.h"
+
+#include "base/callback_helpers.h"
+#include "base/metrics/histogram_functions.h"
+#include "components/optimization_guide/core/optimization_guide_features.h"
+
+namespace optimization_guide {
+
+PushNotificationManager::PushNotificationManager() = default;
+
+PushNotificationManager::~PushNotificationManager() = default;
+
+void PushNotificationManager::SetDelegate(
+    PushNotificationManager::Delegate* delegate) {
+  delegate_ = delegate;
+}
+
+void PushNotificationManager::OnDelegateReady() {
+  DCHECK(delegate_);
+  DCHECK(features::IsPushNotificationsEnabled());
+}
+
+void PushNotificationManager::OnNewPushNotification(
+    const proto::HintNotificationPayload& notification) {
+  if (!notification.has_hint_key())
+    return;
+
+  if (!notification.has_key_representation())
+    return;
+
+  DispatchPayload(notification);
+}
+
+void PushNotificationManager::AddObserver(
+    PushNotificationManager::Observer* observer) {
+  observers_.AddObserver(observer);
+}
+
+void PushNotificationManager::RemoveObserver(
+    PushNotificationManager::Observer* observer) {
+  observers_.RemoveObserver(observer);
+}
+
+void PushNotificationManager::DispatchPayload(
+    const proto::HintNotificationPayload& notification) {
+  // No custom payload or optimization type.
+  if (!notification.has_payload() || !notification.has_optimization_type()) {
+    return;
+  }
+
+  base::UmaHistogramEnumeration(
+      "OptimizationGuide.PushNotifications.ReceivedNotificationType",
+      notification.optimization_type(),
+      static_cast<optimization_guide::proto::OptimizationType>(
+          optimization_guide::proto::OptimizationType_ARRAYSIZE));
+
+  for (Observer& observer : observers_) {
+    observer.OnNotificationPayload(notification.optimization_type(),
+                                   notification.payload());
+  }
+  delegate_->RemoveFetchedEntriesByHintKeys(base::DoNothing(),
+                                            notification.key_representation(),
+                                            {notification.hint_key()});
+}
+
+}  // namespace optimization_guide
diff --git a/components/optimization_guide/core/push_notification_manager.h b/components/optimization_guide/core/push_notification_manager.h
index 789c65fd..9443d759 100644
--- a/components/optimization_guide/core/push_notification_manager.h
+++ b/components/optimization_guide/core/push_notification_manager.h
@@ -9,6 +9,7 @@
 
 #include "base/callback.h"
 #include "base/containers/flat_set.h"
+#include "base/observer_list.h"
 #include "base/observer_list_types.h"
 #include "components/optimization_guide/proto/hints.pb.h"
 #include "components/optimization_guide/proto/push_notification.pb.h"
@@ -33,6 +34,8 @@
 
     // If a cache of notifications overflowed and the set of hints to invalidate
     // were lost, this asks the delegate to purge the whole database.
+    // TODO(crbug.com/1347657) can be removed when Android uses
+    // PushNotificationManager and not AndroidPushNotificationManager.
     virtual void PurgeFetchedEntries(base::OnceClosure on_success) = 0;
   };
 
@@ -48,26 +51,35 @@
 
   PushNotificationManager(const PushNotificationManager&) = delete;
   PushNotificationManager& operator=(const PushNotificationManager&) = delete;
-  virtual ~PushNotificationManager() = default;
+  PushNotificationManager();
+  virtual ~PushNotificationManager();
 
   // Sets |this|'s delegate.
-  virtual void SetDelegate(Delegate* delegate) = 0;
+  void SetDelegate(Delegate* delegate);
 
   // Informs |this| that the delegate is ready to process pushed hints.
-  virtual void OnDelegateReady() = 0;
+  virtual void OnDelegateReady();
 
   // Called when a new push notification arrives.
   virtual void OnNewPushNotification(
-      const proto::HintNotificationPayload& notification) = 0;
+      const proto::HintNotificationPayload& notification);
 
   // Adds an observer to handle payload in HintNotificationPayload.payload.
-  virtual void AddObserver(Observer* observer) = 0;
+  virtual void AddObserver(Observer* observer);
 
   // Removes an observer that handles HintNotificationPayload.payload.
-  virtual void RemoveObserver(Observer* observer) = 0;
+  virtual void RemoveObserver(Observer* observer);
 
  protected:
-  PushNotificationManager() = default;
+  // Owns |this|
+  raw_ptr<PushNotificationManager::Delegate> delegate_ = nullptr;
+
+ private:
+  friend class PushNotificationManagerUnitTest;
+  void DispatchPayload(const proto::HintNotificationPayload& notification);
+
+  // Observers to handle the custom payload.
+  base::ObserverList<PushNotificationManager::Observer> observers_;
 };
 
 }  // namespace optimization_guide
diff --git a/components/optimization_guide/core/push_notification_manager_unittest.cc b/components/optimization_guide/core/push_notification_manager_unittest.cc
new file mode 100644
index 0000000..7453396f
--- /dev/null
+++ b/components/optimization_guide/core/push_notification_manager_unittest.cc
@@ -0,0 +1,147 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/optimization_guide/core/push_notification_manager.h"
+
+#include "base/test/metrics/histogram_tester.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::_;
+using ::testing::SaveArg;
+
+namespace optimization_guide {
+
+class TestDelegate : public PushNotificationManager::Delegate {
+ public:
+  using RemoveMultiplePair =
+      std::pair<proto::KeyRepresentation, base::flat_set<std::string>>;
+
+  TestDelegate() = default;
+  ~TestDelegate() = default;
+
+  const std::vector<RemoveMultiplePair>& removed_entries() const {
+    return removed_entries_;
+  }
+
+  void RemoveFetchedEntriesByHintKeys(
+      base::OnceClosure on_success,
+      proto::KeyRepresentation key_representation,
+      const base::flat_set<std::string>& hint_keys) override {
+    removed_entries_.emplace_back(key_representation, hint_keys);
+    std::move(on_success).Run();
+  }
+
+  void PurgeFetchedEntries(base::OnceClosure on_success) override {
+    // unused - will be deprecated as part of crbug.com/1347657
+  }
+
+ private:
+  std::vector<RemoveMultiplePair> removed_entries_;
+};
+
+class MockObserver : public PushNotificationManager::Observer {
+ public:
+  MockObserver() = default;
+  ~MockObserver() override = default;
+  MOCK_METHOD(void,
+              OnNotificationPayload,
+              (proto::OptimizationType, const optimization_guide::proto::Any&),
+              (override));
+};
+
+class AnotherMockObserver : public PushNotificationManager::Observer {
+ public:
+  AnotherMockObserver() = default;
+  ~AnotherMockObserver() override = default;
+
+  MOCK_METHOD(void,
+              OnNotificationPayload,
+              (proto::OptimizationType, const optimization_guide::proto::Any&),
+              (override));
+};
+
+class PushNotificationManagerUnitTest : public testing::Test {
+ public:
+  PushNotificationManagerUnitTest() = default;
+  ~PushNotificationManagerUnitTest() override = default;
+
+  void SetUp() override {
+    manager_.SetDelegate(&delegate_);
+    manager_.AddObserver(&observer_);
+  }
+
+  MockObserver* observer() { return &observer_; }
+
+  PushNotificationManager* manager() { return &manager_; }
+
+  TestDelegate* delegate() { return &delegate_; }
+
+  bool manager_has_observer(PushNotificationManager::Observer* observer) {
+    return manager()->observers_.HasObserver(observer);
+  }
+
+ private:
+  MockObserver observer_;
+  PushNotificationManager manager_;
+  TestDelegate delegate_;
+};
+
+TEST_F(PushNotificationManagerUnitTest, TestNewNotificationReceived) {
+  base::HistogramTester histogram_tester;
+
+  proto::HintNotificationPayload notification;
+  notification.set_hint_key("hintkey");
+  notification.set_key_representation(proto::KeyRepresentation::HOST);
+  notification.set_optimization_type(
+      proto::OptimizationType::PERFORMANCE_HINTS);
+  optimization_guide::proto::Any* payload = notification.mutable_payload();
+  payload->set_type_url("type_url");
+  payload->set_value("value");
+
+  optimization_guide::proto::Any payload_to_observer;
+  EXPECT_CALL(*observer(), OnNotificationPayload(
+                               proto::OptimizationType::PERFORMANCE_HINTS, _))
+      .WillOnce(SaveArg<1>(&payload_to_observer));
+
+  manager()->OnNewPushNotification(notification);
+
+  histogram_tester.ExpectUniqueSample(
+      "OptimizationGuide.PushNotifications.ReceivedNotificationType",
+      proto::OptimizationType::PERFORMANCE_HINTS, 1);
+  EXPECT_EQ(payload_to_observer.type_url(), "type_url");
+  EXPECT_EQ(payload_to_observer.value(), "value");
+  std::vector<TestDelegate::RemoveMultiplePair> removed_entries =
+      delegate()->removed_entries();
+  EXPECT_EQ(1U, removed_entries.size());
+  EXPECT_EQ(proto::KeyRepresentation::HOST, removed_entries[0].first);
+  EXPECT_EQ(base::flat_set<std::string>{"hintkey"}, removed_entries[0].second);
+}
+
+TEST_F(PushNotificationManagerUnitTest, TestNewNotificationReceivedNoPayload) {
+  base::HistogramTester histogram_tester;
+
+  proto::HintNotificationPayload notification;
+  notification.set_hint_key("hintkey");
+  notification.set_key_representation(proto::KeyRepresentation::HOST);
+  notification.set_optimization_type(
+      proto::OptimizationType::PERFORMANCE_HINTS);
+  EXPECT_CALL(*observer(), OnNotificationPayload(_, _)).Times(0);
+
+  manager()->OnNewPushNotification(notification);
+
+  histogram_tester.ExpectUniqueSample(
+      "OptimizationGuide.PushNotifications.ReceivedNotificationType",
+      proto::OptimizationType::PERFORMANCE_HINTS, 0);
+  EXPECT_EQ(0U, delegate()->removed_entries().size());
+}
+
+TEST_F(PushNotificationManagerUnitTest, TestAddRemoveObserver) {
+  AnotherMockObserver another_mock_observer;
+  manager()->AddObserver(&another_mock_observer);
+  EXPECT_TRUE(manager_has_observer(&another_mock_observer));
+  manager()->RemoveObserver(&another_mock_observer);
+  EXPECT_FALSE(manager_has_observer(&another_mock_observer));
+}
+
+}  // namespace optimization_guide
diff --git a/components/password_manager/core/browser/password_access_authenticator.cc b/components/password_manager/core/browser/password_access_authenticator.cc
index 0465b38..55c0448 100644
--- a/components/password_manager/core/browser/password_access_authenticator.cc
+++ b/components/password_manager/core/browser/password_access_authenticator.cc
@@ -33,7 +33,7 @@
   // This is to address crbug.com/1317549. If the current time is earlier than the
   // `last_authentication_time_`, `last_authentication_time_` is invalid.
   // So need ForceUserReauthentication()
-  if (last_authentication_time_ < base::Time::Now() && 
+  if (last_authentication_time_ < base::Time::Now() &&
       base::Time::Now() <= last_authentication_time_ + kAuthValidityPeriod) {
     LogPasswordSettingsReauthResult(ReauthResult::kSkipped);
     std::move(callback).Run(true);
@@ -48,7 +48,10 @@
   os_reauth_call_.Run(
       purpose,
       base::BindOnce(&PasswordAccessAuthenticator::OnUserReauthenticationResult,
-                     base::Unretained(this), std::move(callback)));
+                     base::Unretained(this),
+                     metrics_util::TimeCallback(
+                         std::move(callback),
+                         "PasswordManager.Settings.AuthenticationTime")));
 }
 
 void PasswordAccessAuthenticator::OnUserReauthenticationResult(
diff --git a/components/password_manager/core/browser/password_access_authenticator_unittest.cc b/components/password_manager/core/browser/password_access_authenticator_unittest.cc
index 772796b1..19cca5f 100644
--- a/components/password_manager/core/browser/password_access_authenticator_unittest.cc
+++ b/components/password_manager/core/browser/password_access_authenticator_unittest.cc
@@ -24,6 +24,7 @@
 namespace password_manager {
 
 using metrics_util::ReauthResult;
+using testing::_;
 
 using MockAuthResultCallback =
     base::MockCallback<PasswordAccessAuthenticator::AuthResultCallback>;
@@ -56,9 +57,9 @@
 // Check that a passed authentication does not expire before kAuthValidityPeriod
 // and does expire after kAuthValidityPeriod.
 TEST_P(PasswordAccessAuthenticatorTest, Expiration) {
-  EXPECT_CALL(os_reauth_callback(), Run(purpose(), testing::_))
+  EXPECT_CALL(os_reauth_callback(), Run(purpose(), _))
       .WillOnce(testing::WithArg<1>(
-          [&](PasswordAccessAuthenticator::AuthResultCallback callback) {
+          [](PasswordAccessAuthenticator::AuthResultCallback callback) {
             std::move(callback).Run(true);
           }));
   EXPECT_CALL(result_callback(), Run(true));
@@ -75,9 +76,9 @@
                                        1);
 
   task_environment().AdvanceClock(base::Seconds(2));
-  EXPECT_CALL(os_reauth_callback(), Run(purpose(), testing::_))
+  EXPECT_CALL(os_reauth_callback(), Run(purpose(), _))
       .WillOnce(testing::WithArg<1>(
-          [&](PasswordAccessAuthenticator::AuthResultCallback callback) {
+          [](PasswordAccessAuthenticator::AuthResultCallback callback) {
             std::move(callback).Run(true);
           }));
   EXPECT_CALL(result_callback(), Run(true));
@@ -88,9 +89,9 @@
 
 // Check that a forced authentication ignores previous successful challenges.
 TEST_P(PasswordAccessAuthenticatorTest, ForceReauth) {
-  EXPECT_CALL(os_reauth_callback(), Run(purpose(), testing::_))
+  EXPECT_CALL(os_reauth_callback(), Run(purpose(), _))
       .WillOnce(testing::WithArg<1>(
-          [&](PasswordAccessAuthenticator::AuthResultCallback callback) {
+          [](PasswordAccessAuthenticator::AuthResultCallback callback) {
             std::move(callback).Run(true);
           }));
   EXPECT_CALL(result_callback(), Run(true));
@@ -98,9 +99,9 @@
   histogram_tester().ExpectBucketCount(kHistogramName, ReauthResult::kSuccess,
                                        1);
 
-  EXPECT_CALL(os_reauth_callback(), Run(purpose(), testing::_))
+  EXPECT_CALL(os_reauth_callback(), Run(purpose(), _))
       .WillOnce(testing::WithArg<1>(
-          [&](PasswordAccessAuthenticator::AuthResultCallback callback) {
+          [](PasswordAccessAuthenticator::AuthResultCallback callback) {
             std::move(callback).Run(true);
           }));
   EXPECT_CALL(result_callback(), Run(true));
@@ -112,9 +113,9 @@
 // Check that a failed authentication does not start the grace period for
 // skipping authentication.
 TEST_P(PasswordAccessAuthenticatorTest, Failed) {
-  EXPECT_CALL(os_reauth_callback(), Run(purpose(), testing::_))
+  EXPECT_CALL(os_reauth_callback(), Run(purpose(), _))
       .WillOnce(testing::WithArg<1>(
-          [&](PasswordAccessAuthenticator::AuthResultCallback callback) {
+          [](PasswordAccessAuthenticator::AuthResultCallback callback) {
             std::move(callback).Run(false);
           }));
   EXPECT_CALL(result_callback(), Run(false));
@@ -125,9 +126,9 @@
   // Advance just a little bit, so that if |authenticator| starts the grace
   // period, this is still within it.
   task_environment().AdvanceClock(base::Seconds(1));
-  EXPECT_CALL(os_reauth_callback(), Run(purpose(), testing::_))
+  EXPECT_CALL(os_reauth_callback(), Run(purpose(), _))
       .WillOnce(testing::WithArg<1>(
-          [&](PasswordAccessAuthenticator::AuthResultCallback callback) {
+          [](PasswordAccessAuthenticator::AuthResultCallback callback) {
             std::move(callback).Run(false);
           }));
   EXPECT_CALL(result_callback(), Run(false));
@@ -136,6 +137,67 @@
                                        2);
 }
 
+// Check that measurement of time it takes user to authenticate is correct and
+// that when the time from the last successful authentication is smaller than
+// kAuthValidityPeriod we don't force reauthentication.
+TEST_P(PasswordAccessAuthenticatorTest,
+       AuthenticationTimeMetricWithValidityPeriod) {
+  EXPECT_CALL(os_reauth_callback(), Run(purpose(), _))
+      .WillOnce(testing::WithArg<1>(
+          [this](PasswordAccessAuthenticator::AuthResultCallback callback) {
+            // Waiting for 10 seconds to simulate the time user will need to
+            // authenticate, any other not zero time would also do.
+            task_environment().FastForwardBy(base::Seconds(10));
+            std::move(callback).Run(true);
+          }));
+  EXPECT_CALL(result_callback(), Run(true)).Times(2);
+
+  authenticator().EnsureUserIsAuthenticated(purpose(), result_callback().Get());
+  histogram_tester().ExpectUniqueTimeSample(
+      "PasswordManager.Settings.AuthenticationTime", base::Seconds(10), 1);
+
+  // Simulatiing time between authentications.
+  task_environment().FastForwardBy(
+      PasswordAccessAuthenticator::kAuthValidityPeriod / 2);
+
+  // Wait time is smaller than the kAuthValidityPeriod so we shouldn't prompt
+  // user for reauthentication. Only one authentication should be recorded.
+  authenticator().EnsureUserIsAuthenticated(purpose(), result_callback().Get());
+  histogram_tester().ExpectUniqueTimeSample(
+      "PasswordManager.Settings.AuthenticationTime", base::Seconds(10), 1);
+}
+
+// Check that measurement of time it takes user to authenticate is correct and
+// that when the time from the last successful authentication is larger than
+// kAuthValidityPeriod we force reauthentication and measure its time
+// correctly.
+TEST_P(PasswordAccessAuthenticatorTest, AuthenticationTimeMetric) {
+  EXPECT_CALL(os_reauth_callback(), Run(purpose(), _))
+      .Times(2)
+      .WillRepeatedly(testing::WithArg<1>(
+          [this](PasswordAccessAuthenticator::AuthResultCallback callback) {
+            // Waiting for 10 seconds to simulate the time user will need to
+            // authenticate, any other not zero time would also do.
+            task_environment().FastForwardBy(base::Seconds(10));
+            std::move(callback).Run(true);
+          }));
+  EXPECT_CALL(result_callback(), Run(true)).Times(2);
+
+  authenticator().EnsureUserIsAuthenticated(purpose(), result_callback().Get());
+  histogram_tester().ExpectUniqueTimeSample(
+      "PasswordManager.Settings.AuthenticationTime", base::Seconds(10), 1);
+
+  // Additional wait to ensure reauthenticating.
+  task_environment().FastForwardBy(
+      PasswordAccessAuthenticator::kAuthValidityPeriod * 2);
+
+  // Because waiting time is longer than the kAuthValidityPeriod(60 sec.) User
+  // will have to reauthenticate, so we expect 2 samples in the bucket.
+  authenticator().EnsureUserIsAuthenticated(purpose(), result_callback().Get());
+  histogram_tester().ExpectUniqueTimeSample(
+      "PasswordManager.Settings.AuthenticationTime", base::Seconds(10), 2);
+}
+
 INSTANTIATE_TEST_SUITE_P(,
                          PasswordAccessAuthenticatorTest,
                          Values(ReauthPurpose::VIEW_PASSWORD,
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.h b/components/password_manager/core/browser/password_manager_metrics_util.h
index f5b7f6dd..5f1f875e 100644
--- a/components/password_manager/core/browser/password_manager_metrics_util.h
+++ b/components/password_manager/core/browser/password_manager_metrics_util.h
@@ -9,6 +9,10 @@
 
 #include <string>
 
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/metrics/histogram_functions.h"
+#include "base/timer/elapsed_timer.h"
 #include "components/autofill/core/common/mojom/autofill_types.mojom.h"
 #include "components/autofill/core/common/password_generation_util.h"
 #include "components/password_manager/core/common/credential_manager_types.h"
@@ -804,6 +808,22 @@
 // dialogs.
 void LogPasswordNoteActionInSettings(PasswordNoteAction action);
 
+// Wraps |callback| into another callback that measures the elapsed time between
+// construction and actual execution of the callback. Records the result to
+// |histogram|, which is expected to be a char literal.
+template <typename R, typename... Args>
+base::OnceCallback<R(Args...)> TimeCallback(
+    base::OnceCallback<R(Args...)> callback,
+    const char* histogram) {
+  return base::BindOnce(
+      [](const char* histogram, const base::ElapsedTimer& timer,
+         base::OnceCallback<R(Args...)> callback, Args... args) {
+        base::UmaHistogramTimes(histogram, timer.Elapsed());
+        return std::move(callback).Run(std::forward<Args>(args)...);
+      },
+      histogram, base::ElapsedTimer(), std::move(callback));
+}
+
 }  // namespace metrics_util
 
 }  // namespace password_manager
diff --git a/components/permissions/android/BUILD.gn b/components/permissions/android/BUILD.gn
index 633785a..a2e2cf3 100644
--- a/components/permissions/android/BUILD.gn
+++ b/components/permissions/android/BUILD.gn
@@ -13,7 +13,6 @@
     "java/src/org/chromium/components/permissions/BluetoothScanningPermissionDialog.java",
     "java/src/org/chromium/components/permissions/PermissionDialogController.java",
     "java/src/org/chromium/components/permissions/PermissionDialogDelegate.java",
-    "java/src/org/chromium/components/permissions/PermissionUmaUtil.java",
     "java/src/org/chromium/components/permissions/PermissionUtil.java",
     "java/src/org/chromium/components/permissions/PermissionsAndroidFeatureList.java",
     "java/src/org/chromium/components/permissions/nfc/NfcSystemLevelSetting.java",
@@ -111,7 +110,6 @@
     "java/src/org/chromium/components/permissions/PermissionDialogController.java",
     "java/src/org/chromium/components/permissions/PermissionDialogDelegate.java",
     "java/src/org/chromium/components/permissions/PermissionDialogModel.java",
-    "java/src/org/chromium/components/permissions/PermissionUmaUtil.java",
     "java/src/org/chromium/components/permissions/nfc/NfcSystemLevelPrompt.java",
     "java/src/org/chromium/components/permissions/nfc/NfcSystemLevelSetting.java",
   ]
diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionUmaUtil.java b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionUmaUtil.java
deleted file mode 100644
index 1cf72e0..0000000
--- a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionUmaUtil.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.components.permissions;
-
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.BatteryManager;
-
-import org.chromium.base.ContextUtils;
-import org.chromium.base.annotations.CalledByNative;
-import org.chromium.base.metrics.RecordHistogram;
-
-/**
- * Utility for logging UMA for permission-related operations.
- */
-public class PermissionUmaUtil {
-    private PermissionUmaUtil() {}
-
-    /**
-     * Log an action with the current battery level percentage.
-     */
-    @CalledByNative
-    private static void recordWithBatteryBucket(String histogram) {
-        IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
-        Intent batteryStatus = ContextUtils.getApplicationContext().registerReceiver(null, ifilter);
-        int current = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
-        int max = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
-        if (max == 0) return;
-        int percentage = (int) (100.0 * current / max);
-
-        RecordHistogram.recordPercentageHistogram(histogram, percentage);
-    }
-}
diff --git a/components/permissions/contexts/geolocation_permission_context_android.cc b/components/permissions/contexts/geolocation_permission_context_android.cc
index 4bf702d7..5729de8 100644
--- a/components/permissions/contexts/geolocation_permission_context_android.cc
+++ b/components/permissions/contexts/geolocation_permission_context_android.cc
@@ -13,7 +13,6 @@
 #include "components/location/android/location_settings_impl.h"
 #include "components/permissions/android/android_permission_util.h"
 #include "components/permissions/permission_request_id.h"
-#include "components/permissions/permission_uma_util.h"
 #include "components/permissions/permissions_client.h"
 #include "components/permissions/pref_names.h"
 #include "components/prefs/pref_registry_simple.h"
@@ -36,10 +35,6 @@
     "Geolocation.SettingsDialog.AcceptEvent.";
 const char kLocationSettingsDenyMetricBase[] =
     "Geolocation.SettingsDialog.DenyEvent.";
-const char kLocationSettingsAcceptBatteryMetric[] =
-    "Permissions.BatteryLevel.Accepted.LocationSettingsDialog";
-const char kLocationSettingsDenyBatteryMetric[] =
-    "Permissions.BatteryLevel.Denied.LocationSettingsDialog";
 
 const char kLocationSettingsMetricDSESuffix[] = "DSE";
 const char kLocationSettingsMetricNonDSESuffix[] = "NonDSE";
@@ -390,15 +385,11 @@
     LogLocationSettingsMetric(kLocationSettingsAcceptMetricBase,
                               is_default_search,
                               LocationSettingsBackOffLevel(is_default_search));
-    PermissionUmaUtil::RecordWithBatteryBucket(
-        kLocationSettingsAcceptBatteryMetric);
     ResetLocationSettingsBackOff(is_default_search);
   } else {
     LogLocationSettingsMetric(kLocationSettingsDenyMetricBase,
                               is_default_search,
                               LocationSettingsBackOffLevel(is_default_search));
-    PermissionUmaUtil::RecordWithBatteryBucket(
-        kLocationSettingsDenyBatteryMetric);
     UpdateLocationSettingsBackOff(is_default_search);
     content_setting = CONTENT_SETTING_BLOCK;
     persist = false;
diff --git a/components/permissions/permission_uma_util.cc b/components/permissions/permission_uma_util.cc
index 4fd0e68..fc01fd7 100644
--- a/components/permissions/permission_uma_util.cc
+++ b/components/permissions/permission_uma_util.cc
@@ -30,7 +30,6 @@
 
 #if BUILDFLAG(IS_ANDROID)
 #include "base/android/jni_string.h"
-#include "components/permissions/android/jni_headers/PermissionUmaUtil_jni.h"
 #endif
 
 namespace permissions {
@@ -577,13 +576,6 @@
     RecordPermissionPromptPriorCount(
         permission, priorIgnorePrefix,
         autoblocker->GetIgnoreCount(requesting_origin, permission));
-#if BUILDFLAG(IS_ANDROID)
-    if (permission == ContentSettingsType::GEOLOCATION &&
-        permission_action != PermissionAction::IGNORED) {
-      RecordWithBatteryBucket("Permissions.BatteryLevel." + action_string +
-                              ".Geolocation");
-    }
-#endif
   }
 
   base::UmaHistogramEnumeration("Permissions.Action.WithDisposition." +
@@ -658,14 +650,6 @@
       ->Add(count);
 }
 
-#if BUILDFLAG(IS_ANDROID)
-void PermissionUmaUtil::RecordWithBatteryBucket(const std::string& histogram) {
-  JNIEnv* env = base::android::AttachCurrentThread();
-  Java_PermissionUmaUtil_recordWithBatteryBucket(
-      env, base::android::ConvertUTF8ToJavaString(env, histogram));
-}
-#endif
-
 void PermissionUmaUtil::RecordInfobarDetailsExpanded(bool expanded) {
   base::UmaHistogramBoolean("Permissions.Prompt.Infobar.DetailsExpanded",
                             expanded);
diff --git a/components/permissions/permission_uma_util.h b/components/permissions/permission_uma_util.h
index eb95d1fd..de200b8 100644
--- a/components/permissions/permission_uma_util.h
+++ b/components/permissions/permission_uma_util.h
@@ -323,8 +323,6 @@
       bool did_click_manage,
       bool did_click_learn_more);
 
-  static void RecordWithBatteryBucket(const std::string& histogram);
-
   static void RecordInfobarDetailsExpanded(bool expanded);
 
   static void RecordCrowdDenyDelayedPushNotification(base::TimeDelta delay);
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index d5b2027..25ef26b 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -22016,6 +22016,8 @@
 
        If you leave it unset or set to an empty list, users can select all supported input methods.
 
+       Starting with version M106 allowed input methods are automatically enabled in kiosk session.
+
       Note: If the current input method is unsupported, it switches to the hardware keyboard layout (if allowed) or the first valid entry in this list. Invalid or unsupported methods are ignored.'''
     },
     {
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 795ba7e..cbcf695 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Standardsymbole für sichere Verbindungen verwenden</translation>
 <translation id="1107538157073168076">Erweiterung „Insights“ deaktivieren</translation>
 <translation id="1110426799149444997"><ph name="GOOGLE_LENS_PRODUCT_NAME" />-Ausschnittsuche deaktivieren.</translation>
-<translation id="1111781754511998498">Projector</translation>
 <translation id="1117535567637097036">Die über diese Richtlinie festgelegten Protokoll-Handler werden bei der Verarbeitung von Android-Intents nicht verwendet.</translation>
 <translation id="1118093128235245168">Websites dürfen den Nutzer um Zugriff auf ein angeschlossenes USB-Gerät bitten</translation>
 <translation id="111910763555783249">Benachrichtigungseinstellungen</translation>
@@ -951,7 +950,6 @@
 <translation id="1962864958436828230">Mindestgrößenbeschränkung zur Zwischenablagenbeschränkung für die Verhinderung von Datenlecks festlegen</translation>
 <translation id="1964634611280150550">Inkognitomodus deaktiviert</translation>
 <translation id="1964802606569741174">Diese Richtlinie hat keine Auswirkungen auf die Android YouTube App. Wenn der Sicherheitsmodus in YouTube erzwungen werden soll, darf das Installieren der Android YouTube App nicht zugelassen werden.</translation>
-<translation id="1967334955994230472">Projector deaktivieren</translation>
 <translation id="1969212217917526199">Überschreibt Richtlinien auf Fehlerbehebungs-Builds des Hosts für den Remotezugriff
 
           Der Wert wird als JSON-Wörterbuch für die Verknüpfung zwischen Richtliniennamen und Richtlinienwerten geparst.</translation>
@@ -2276,7 +2274,6 @@
 <translation id="328347261792478720">Der Browser zeigt standardmäßig für den Nutzer personalisierte Empfehlungen zu Medien an. Wenn diese Richtlinie deaktiviert ist, sind diese Empfehlungen für den Nutzer nicht sichtbar. Wenn sie aktiviert oder nicht konfiguriert ist, werden dem Nutzer die Empfehlungen zu Medien angezeigt.</translation>
 <translation id="3284094172359247914">Verwendung der WebUSB API steuern</translation>
 <translation id="3288595667065905535">Release-Kanal</translation>
-<translation id="3291318845269544294">Projector aktivieren</translation>
 <translation id="3294430356898755483">Mit dieser Richtlinie können Administratoren eine Liste von Druckern für die Nutzer festlegen. Die Druckerauswahl wird angezeigt, wenn die Nutzer zum ersten Mal einen Druckauftrag ausführen.
 
       So kannst du die Richtlinie verwenden:
@@ -2349,7 +2346,6 @@
           Der Wert für die Richtlinie muss in Millisekunden angegeben werden. Werte müssen kleiner oder gleich dem Wert für die Inaktivitätsverzögerung sein.
 
           Die Warnung wird nur eingeblendet, wenn infolge der Inaktivität der Nutzer abgemeldet oder das Gerät heruntergefahren wird.</translation>
-<translation id="3360280740977649313">Hiermit werden Richtlinien für Projector gesteuert.</translation>
 <translation id="3360490004791301756">Erlauben, dass Nutzer Angebote über die <ph name="PRODUCT_OS_NAME" />-Registrierung einlösen</translation>
 <translation id="3363360928811201045">Einschränkungen für verwaltete Konten hinzufügen</translation>
 <translation id="3373381043600809954">"<ph name="PRODUCT_NAME" />" aktivieren</translation>
@@ -2548,7 +2544,6 @@
 <translation id="3628480121685794414">Simplexdruck aktivieren</translation>
 <translation id="3634125384445314047">Zulassen, dass Fotos und Videos, die kürzlich mit dem Smartphone aufgenommen wurden, über Phone Hub abgerufen werden können.</translation>
 <translation id="3643284063603988867">Funktion zum Speichern des Passworts aktivieren</translation>
-<translation id="3644278943784332493">Projector-Dogfood für Family Link-Nutzer aktivieren</translation>
 <translation id="3644735978203799620">Aktiviert die automatische Auswahl für Aufnahmen auf mehreren Bildschirmen</translation>
 <translation id="3646859102161347133">Lupentyp festlegen</translation>
 <translation id="3647212518036289905">Wenn diese Richtlinie konfiguriert ist, wird festgelegt, welche GSSAPI-Bibliothek für die HTTP-Authentifizierung verwendet werden soll. Gib entweder nur den Namen einer Bibliothek oder einen vollständigen Pfad an.
@@ -4961,12 +4956,6 @@
       Ist sie deaktiviert, ist die WPAD-Optimierung deaktiviert, sodass <ph name="PRODUCT_NAME" /> länger auf DNS-basierte WPAD-Server warten muss.
 
       Unabhängig davon, ob die Richtlinie konfiguriert ist, kann die WPAD-Optimierung nicht von Nutzern geändert werden.</translation>
-<translation id="6365249741643189510">Diese Richtlinie berechtigt Projector dazu, für Unternehmensnutzer Bildschirmaufzeichnungen zu erstellen, zu transkribieren und in Drive hochzuladen.
-      Sie wirkt sich nicht auf Family Link-Nutzer aus.
-      Darüber hinaus hat sie keine Auswirkungen auf die Richtlinie <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> für Family Link-Nutzer.
-
-      Wenn die Richtlinie nicht konfiguriert oder aktiviert ist, ist Projector aktiviert.
-      Ist sie deaktiviert, ist Projector deaktiviert.</translation>
 <translation id="6366574325767783825">Wenn die Richtlinie auf "True" gesetzt oder nicht konfiguriert ist, werden von <ph name="PRODUCT_NAME" /> Webinhalte akzeptiert, die als Signed HTTP Exchanges implementiert sind.
 
       Wenn die Richtlinie auf "False" gesetzt ist, werden die Signed HTTP Exchanges nicht geladen.</translation>
@@ -5507,13 +5496,6 @@
       Aktuell werden die folgenden Sprachen unterstützt: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="6926703471186170050">Duplexdruck (lange Kante) aktivieren</translation>
 <translation id="6929746927224321095">„Automatisches Ausfüllen“ deaktivieren</translation>
-<translation id="6930459178825296156">Diese Richtlinie ermöglicht Family Link-Nutzern die Nutzung der Projector-Funktion und gibt ihr die Berechtigung, Bildschirmaufzeichnungen zu erstellen, zu transkribieren und in Drive hochzuladen.
-      Sie wirkt sich nicht auf andere Nutzertypen aus.
-      Die Richtlinie hat auch keine Auswirkungen auf die Richtlinie <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> für Unternehmensnutzer.
-
-      Wenn die Richtlinie aktiviert ist, ist Projector-Dogfood für Family Link-Nutzer aktiviert.
-      Ist sie deaktiviert, ist Projector-Dogfood für Family Link-Nutzer deaktiviert.
-      Wenn die Richtlinie nicht konfiguriert ist, ist Projector-Dogfood automatisch für Family Link-Nutzer deaktiviert.</translation>
 <translation id="6931242315485576290">Synchronisierung der Daten mit Google deaktivieren</translation>
 <translation id="6940243892299228102">Nutzer dürfen keine Desktopvorlagen verwenden</translation>
 <translation id="6943577887654905793">Bevorzugter Mac-/Linux-Name:</translation>
@@ -6392,7 +6374,6 @@
       Bestimmt die ID der Erweiterung, die als Bildschirmschoner auf der Anmeldeseite verwendet werden soll. Die Erweiterung muss Teil des App-Pakets sein, das in der DeviceAppPack-Richtlinie für diese Domain konfiguriert wurde.</translation>
 <translation id="7882890448959833986">Warnung für nicht unterstützte Betriebssysteme unterdrücken</translation>
 <translation id="788480874436328004">Speichern von Passwörtern im Passwortmanager deaktivieren</translation>
-<translation id="7885255514815321350">Projector-Dogfood für Family Link-Nutzer deaktivieren</translation>
 <translation id="7887379840451099426">Einstellungen für die Energieverwaltung, die nur im Akkubetrieb gelten</translation>
 <translation id="7891884447851425349">Wenn "<ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />" aktiviert ist, gibt "<ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" />" die URL der Standardsuchmaschine an. Die URL sollte den String <ph name="SEARCH_TERM_MARKER" /> enthalten, der während des Suchvorgangs durch die Suchbegriffe des Nutzers ersetzt wird.
 
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index de9596d..fc92eca 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Usar los íconos predeterminados para conexiones seguras</translation>
 <translation id="1107538157073168076">Inhabilitar la extensión de estadísticas</translation>
 <translation id="1110426799149444997">Inhabilitar la búsqueda parcial de <ph name="GOOGLE_LENS_PRODUCT_NAME" /></translation>
-<translation id="1111781754511998498">Projector</translation>
 <translation id="1117535567637097036">Los controladores de protocolo establecidos mediante esta política no se usan cuando se controlan intents en Android.</translation>
 <translation id="1118093128235245168">Permite que los sitios soliciten al usuario que otorgue acceso a un dispositivo USB conectado</translation>
 <translation id="111910763555783249">Configuración de notificaciones</translation>
@@ -962,7 +961,6 @@
 <translation id="1962864958436828230">Establecer el límite de tamaño mínimo para los datos del portapapeles mediante la restricción destinada a evitar la filtración de datos</translation>
 <translation id="1964634611280150550">Modo incógnito inhabilitado</translation>
 <translation id="1964802606569741174">Esta política no tiene efecto en la app de YouTube de Android. Si se debe aplicar el modo de seguridad en YouTube, se debe inhabilitar la instalación de la app de YouTube de Android.</translation>
-<translation id="1967334955994230472">Inhabilitar Projector</translation>
 <translation id="1969212217917526199">Anula las políticas en compilaciones de depuración del host de acceso remoto.
 
           El valor se analiza como un diccionario JSON de asignaciones de nombre de política a valor de política.</translation>
@@ -2300,7 +2298,6 @@
 <translation id="328347261792478720">De forma predeterminada, el navegador mostrará recomendaciones de contenido multimedia personalizadas para el usuario. Si inhabilitas esta política, el usuario no verá estas recomendaciones. Si la habilitas o no la estableces, el usuario verá las recomendaciones de contenido multimedia.</translation>
 <translation id="3284094172359247914">Controla el uso de la API de WebUSB</translation>
 <translation id="3288595667065905535">Canal de versión</translation>
-<translation id="3291318845269544294">Habilitar Projector</translation>
 <translation id="3294430356898755483">Si estableces la política, los administradores podrán configurar una lista de impresoras para sus usuarios. Los usuarios eligen la impresora la primera vez que realizan una impresión.
 
       Esta política permite hacer lo siguiente:
@@ -2373,7 +2370,6 @@
           El valor de la política debe especificarse en milisegundos. Los valores deben ser menores o iguales que la demora de inactividad.
 
           Solo se muestra el mensaje de advertencia si la acción de inactividad es salir de la cuenta o apagar el dispositivo.</translation>
-<translation id="3360280740977649313">Controla las políticas para Projector.</translation>
 <translation id="3360490004791301756">Permitir a los usuarios canjear ofertas a través del Registro de <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3363360928811201045">Agregar restricciones en cuentas administradas</translation>
 <translation id="3373381043600809954">Habilita <ph name="PRODUCT_NAME" /></translation>
@@ -2569,7 +2565,6 @@
 <translation id="3628480121685794414">Permitir impresión simple</translation>
 <translation id="3634125384445314047">Permitir el acceso a las fotos y los videos tomados recientemente del teléfono mediante Phone Hub</translation>
 <translation id="3643284063603988867">Habilita la función "Recordar contraseña"</translation>
-<translation id="3644278943784332493">Habilitar la prueba interna de Projector para los usuarios de Family Link</translation>
 <translation id="3644735978203799620">Habilitar la selección automática para capturas de pantallas múltiples</translation>
 <translation id="3646859102161347133">Establece el tipo de lupa.</translation>
 <translation id="3647212518036289905">Si estableces la política, esta especificará qué biblioteca GSSAPI se debe usar para la autenticación HTTP. Puedes establecerla asignándole un nombre de biblioteca o una ruta completa.
@@ -5031,12 +5026,6 @@
       Si la habilitas, se desactivará la optimización de WPAD. Esto hará que <ph name="PRODUCT_NAME" /> espere más tiempo en los servidores de WPAD basados en DNS.
 
       Más allá de que establezcas o no esta política, los usuarios no podrán cambiar la configuración de la optimización de WPAD.</translation>
-<translation id="6365249741643189510">Esta política le da a Projector permiso para crear y transcribir grabaciones de pantalla y subirlas a Drive para usuarios empresariales.
-      Esta política no afecta a los usuarios de Family Link.
-      Esta política no afecta la política <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> para los usuarios de Family Link.
-
-      Si no estableces ni habilitas la política, se habilitará Projector.
-      Si inhabilitas la política, se desactivará Projector.</translation>
 <translation id="6366574325767783825">Si estableces la política como verdadera o no la estableces, <ph name="PRODUCT_NAME" /> aceptará contenidos web que se presenten como intercambios HTTP firmados.
 
       Si estableces la política como falsa, no se cargarán los intercambios HTTP firmados.</translation>
@@ -5578,13 +5567,6 @@
       Actualmente, los idiomas compatibles son los siguientes: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="6926703471186170050">Habilitar la impresión doble con bordes largos</translation>
 <translation id="6929746927224321095">Inhabilitar Autocompletar</translation>
-<translation id="6930459178825296156">Esta política habilita la función Projector para los usuarios de Family Link y le permite crear y transcribir grabaciones de pantalla para luego subirlas a Drive.
-      Esta política no afecta a otros tipos de usuarios.
-      Esta política no afecta la política <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> para los usuarios empresariales.
-
-      Si habilitas la política, se habilitará la prueba interna de Projector para los usuarios de Family Link.
-      Si inhabilitas la política, se inhabilitará la prueba interna de Projector para los usuarios de Family Link.
-      Si no estableces la política, se inhabilitará la prueba interna de Projector para los usuarios de Family Link según la configuración predeterminada.</translation>
 <translation id="6931242315485576290">Inhabilitar la sincronización de datos con Google</translation>
 <translation id="6940243892299228102">No permitir que los usuarios utilicen plantillas de escritorio</translation>
 <translation id="6943577887654905793">Nombre de preferencia de Mac/Linux:</translation>
@@ -6465,7 +6447,6 @@
       Determina la ID de la extensión que se debe utilizar como protector de pantalla en la página de acceso. La extensión debe formar parte del AppPack configurado para este dominio a través de la política DeviceAppPack.</translation>
 <translation id="7882890448959833986">Eliminar la advertencia de SO incompatible</translation>
 <translation id="788480874436328004">Inhabilitar el guardado de contraseñas en el administrador de contraseñas</translation>
-<translation id="7885255514815321350">Inhabilitar la prueba interna de Projector para los usuarios de Family Link</translation>
 <translation id="7887379840451099426">Solo se puede aplicar la configuración de administración de la energía cuando el dispositivo esté funcionando con batería.</translation>
 <translation id="7891884447851425349">Si activas <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />, establecer <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> especificará la URL del motor de búsqueda utilizado en una búsqueda predeterminada. La URL debe incluir la string <ph name="SEARCH_TERM_MARKER" />, que se reemplazará en la búsqueda por los términos del usuario.
 
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 5bffcbf0..6754c3a 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Usar iconos predeterminados en el caso de las conexiones seguras</translation>
 <translation id="1107538157073168076">Inhabilitar extensión de estadísticas</translation>
 <translation id="1110426799149444997">Inhabilitar la búsqueda por sección de <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
-<translation id="1111781754511998498">Proyector</translation>
 <translation id="1117535567637097036">Los controladores de protocolo configurados a través de esta política no se utilizan al procesar los intents de Android.</translation>
 <translation id="1118093128235245168">Permitir que los sitios pidan permiso al usuario para acceder a un dispositivo USB conectado</translation>
 <translation id="111910763555783249">Ajustes de notificaciones</translation>
@@ -963,7 +962,6 @@
 <translation id="1962864958436828230">Establecer un límite de tamaño mínimo para la restricción del portapapeles que previene la filtración de datos</translation>
 <translation id="1964634611280150550">Modo Incógnito inhabilitado</translation>
 <translation id="1964802606569741174">Esta política no influye en la aplicación YouTube para Android. Si se debe aplicar el modo Seguro en YouTube, deberás inhabilitar la descarga de la aplicación YouTube para Android.</translation>
-<translation id="1967334955994230472">Inhabilitar Proyector</translation>
 <translation id="1969212217917526199">Anula las políticas de compilaciones de depuración del host de acceso remoto.
 
           El valor se analiza como un diccionario JSON del nombre de política para las asignaciones de valores de la política.</translation>
@@ -2305,7 +2303,6 @@
 <translation id="328347261792478720">De forma predeterminada, el navegador mostrará recomendaciones de contenido multimedia personalizadas al usuario. Si se inhabilita esta política, no se mostrarán estas recomendaciones al usuario. Si se habilita esta política o no se establece, se mostrarán recomendaciones de contenido multimedia al usuario.</translation>
 <translation id="3284094172359247914">Controlar el uso de la API WebUSB</translation>
 <translation id="3288595667065905535">Canal de lanzamiento</translation>
-<translation id="3291318845269544294">Habilitar Proyector</translation>
 <translation id="3294430356898755483">Si se le asigna un valor a esta política, los administradores podrán establecer una lista de impresoras para los usuarios. La impresora se selecciona la primera vez que los usuarios intentan imprimir.
 
       La política funciona de la siguiente manera:
@@ -2378,7 +2375,6 @@
           El valor de esta política debe especificarse en milisegundos. Los valores deben ser inferiores o iguales al retraso de inactividad.
 
           El mensaje de advertencia solo se muestra si el modo de inactividad cierra la sesión o apaga el equipo.</translation>
-<translation id="3360280740977649313">Controla las políticas de Proyector.</translation>
 <translation id="3360490004791301756">Permitir que los usuarios canjeen ofertas a través del registro de <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3363360928811201045">Añadir restricciones a las cuentas gestionadas</translation>
 <translation id="3373381043600809954">Habilitar <ph name="PRODUCT_NAME" /></translation>
@@ -2579,7 +2575,6 @@
 <translation id="3628480121685794414">Habilitar impresión por una cara</translation>
 <translation id="3634125384445314047">Permite acceder a través de la función Mi teléfono a fotos y vídeos recientes hechos con el teléfono.</translation>
 <translation id="3643284063603988867">Habilitar la función "Recordar contraseña"</translation>
-<translation id="3644278943784332493">Habilitar dogfood de Projector para usuarios de Family Link</translation>
 <translation id="3644735978203799620">Habilita la selección automática para capturas de multipantalla</translation>
 <translation id="3646859102161347133">Establecer el tipo de lupa</translation>
 <translation id="3647212518036289905">Si se define esta política, especificará qué biblioteca GSSAPI se debe usar para la autenticación HTTP. Puedes definirla como un nombre de biblioteca o una ruta completa.
@@ -5039,12 +5034,6 @@
       Si se inhabilita la política, se inhabilitará la optimización de WPAD, lo que hará que <ph name="PRODUCT_NAME" /> tenga que esperar más tiempo la respuesta de los servidores WPAD basados en DNS.
 
       Independientemente de si se establece o no esta política, los usuarios no podrán cambiar la opción de configuración de WPAD.</translation>
-<translation id="6365249741643189510">Esta política concede permiso a Projector para crear y transcribir grabaciones de pantalla y subirlas a Drive para los usuarios de empresa.
-      Esta política no afecta a los usuarios de Family Link.
-      Esta política no afecta a la política <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> para los usuarios de Family Link.
-
-      Si se habilita esta política o no se establece, se habilitará Projector.
-      Si se inhabilita esta política, se inhabilitará Projector.</translation>
 <translation id="6366574325767783825">Si se le asigna el valor "Habilitada" a esta política o no se le asigna ninguno, <ph name="PRODUCT_NAME" /> aceptará contenidos web de tipo Signed HTTP Exchanges.
 
       Si se le asigna el valor "Inhabilitada", los Signed HTTP Exchanges no se podrán cargar.</translation>
@@ -5586,13 +5575,6 @@
       Estos son los idiomas que se admiten actualmente: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk y vi.</translation>
 <translation id="6926703471186170050">Habilitar impresión de borde largo por las dos caras</translation>
 <translation id="6929746927224321095">Inhabilitar Autocompletar</translation>
-<translation id="6930459178825296156">Esta política habilita la función Projector para usuarios de Family Link y le da permiso para crear y transcribir grabaciones de pantalla, así como para subir archivos a Drive.
-      Esta política no afecta a otros tipos de usuarios.
-      Esta política no afecta a la política <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> para usuarios de empresa.
-
-      Si la política se habilita, la versión dogfood de Projector se habilitará para usuarios de Family Link.
-      Si la política se inhabilita, la versión dogfood de Projector se inhabilitará para usuarios de Family Link.
-      Si no se establece la política, la versión dogfood de Projector se inhabilitará de forma predeterminada para usuarios de Family Link.</translation>
 <translation id="6931242315485576290">Inhabilitar sincronización de datos con Google</translation>
 <translation id="6940243892299228102">No permitir que los usuarios usen plantillas de escritorio</translation>
 <translation id="6943577887654905793">Nombre de preferencia en Mac/Linux:</translation>
@@ -6479,7 +6461,6 @@
       Permite determinar el ID de la extensión que se debe utilizar como salvapantallas en la pantalla de inicio de sesión. La extensión debe formar parte del paquete AppPack configurado para ese dominio a través de la política DeviceAppPack.</translation>
 <translation id="7882890448959833986">Eliminar la advertencia de SO no admitido</translation>
 <translation id="788480874436328004">Inhabilitar el almacenamiento de contraseñas con el gestor de contraseñas</translation>
-<translation id="7885255514815321350">Inhabilitar dogfood de Projector para usuarios de Family Link</translation>
 <translation id="7887379840451099426">Configuración de gestión de energía aplicable únicamente cuando el dispositivo funcione con la batería</translation>
 <translation id="7891884447851425349">Si <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> está activada y se asigna un valor a <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" />, se especificará la URL del buscador usada durante una búsqueda predeterminada. La URL debe incluir la cadena <ph name="SEARCH_TERM_MARKER" />, que en la consulta se sustituirá por los términos de búsqueda del usuario.
 
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index aab756c1..40a13fe 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Utiliser les icônes par défaut pour les connexions sécurisées</translation>
 <translation id="1107538157073168076">Désactiver l'extension des insights</translation>
 <translation id="1110426799149444997">Désactiver la recherche par zone <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
-<translation id="1111781754511998498">Projector</translation>
 <translation id="1117535567637097036">Les gestionnaires de protocoles définis par cette règle ne sont pas utilisés pour gérer les intents Android.</translation>
 <translation id="1118093128235245168">Autoriser les sites à demander à l'utilisateur d'accorder l'accès à un appareil USB connecté</translation>
 <translation id="111910763555783249">Paramètres de notification</translation>
@@ -957,7 +956,6 @@
 <translation id="1962864958436828230">Définir la taille minimale liée à la restriction du presse-papiers pour prévenir les fuites de données</translation>
 <translation id="1964634611280150550">Mode navigation privée désactivé</translation>
 <translation id="1964802606569741174">Cette règle n'a aucun effet sur l'application YouTube pour Android. Vous ne devez pas autoriser son installation si le mode sécurisé de YouTube doit être appliqué.</translation>
-<translation id="1967334955994230472">Désactiver Projector</translation>
 <translation id="1969212217917526199">Remplace des règles sur les versions de débogage de l'hôte d'accès à distance.
 
           La valeur est analysée sous la forme d'un dictionnaire JSON de correspondances nom de règle/valeur de règle.</translation>
@@ -2297,7 +2295,6 @@
 <translation id="328347261792478720">Par défaut, le navigateur propose à l'utilisateur des recommandations personnalisées de contenus multimédias. Si cette règle est désactivée, l'utilisateur ne bénéficie pas de ces recommandations. Si cette règle est activée ou qu'elle n'est pas configurée, l'utilisateur peut voir ces recommandations.</translation>
 <translation id="3284094172359247914">Contrôler l'utilisation de l'API WebUSB</translation>
 <translation id="3288595667065905535">Version disponible</translation>
-<translation id="3291318845269544294">Activer Projector</translation>
 <translation id="3294430356898755483">Cette règle permet aux administrateurs de configurer une liste d'imprimantes pour leurs utilisateurs. La sélection de l'imprimante est effectuée la première fois que l'utilisateur lance une impression.
 
       Vous pouvez utiliser cette règle pour effectuer les opérations suivantes :
@@ -2366,7 +2363,6 @@
           La valeur de la règle doit être indiquée en millisecondes. Elle doit également être inférieure ou égale au délai d'inactivité.
 
           Le message d'avertissement ne s'affiche que si le dépassement du délai d'inactivité entraîne une déconnexion ou l'arrêt de l'appareil.</translation>
-<translation id="3360280740977649313">Contrôle les règles liées à Projector.</translation>
 <translation id="3360490004791301756">Autoriser les utilisateurs à profiter de leurs offres via le service d'enregistrement <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3363360928811201045">Ajouter des restrictions aux comptes gérés</translation>
 <translation id="3373381043600809954">Activer <ph name="PRODUCT_NAME" />.</translation>
@@ -2565,7 +2561,6 @@
 <translation id="3628480121685794414">Activer l'impression recto</translation>
 <translation id="3634125384445314047">Autoriser l'accès aux photos et vidéos récentes prises sur le téléphone via Phone Hub.</translation>
 <translation id="3643284063603988867">Activer la fonctionnalité "Mémoriser le mot de passe"</translation>
-<translation id="3644278943784332493">Active la version dogfood de Projector pour les utilisateurs de Family Link</translation>
 <translation id="3644735978203799620">Activer la sélection automatique de captures d'écran multiples</translation>
 <translation id="3646859102161347133">Définir le type de loupe</translation>
 <translation id="3647212518036289905">Permet de spécifier la bibliothèque GSSAPI à utiliser pour l'authentification HTTP. Vous pouvez indiquer le nom de la bibliothèque ou son chemin d'accès complet.
@@ -4984,12 +4979,6 @@
       Si cette règle est désactivée, l'optimisation WPAD l'est également, et le temps de réponse des serveurs WPAD basés sur le DNS est alors plus long dans <ph name="PRODUCT_NAME" />.
 
       Que cette règle soit configurée ou non, les utilisateurs ne peuvent pas modifier le paramètre d'optimisation WPAD.</translation>
-<translation id="6365249741643189510">Cette règle autorise Projector à créer et transcrire un enregistrement d'écran et à l'importer dans Drive pour les utilisateurs gérés par une entreprise.
-      Cette règle n'affecte pas les utilisateurs de Family Link.
-      Cette règle n'affecte pas la règle <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> pour les utilisateurs de Family Link.
-
-      Si elle n'est pas configurée ou si elle est activée, Projector sera activé.
-      Si elle est désactivée, Projector sera désactivé.</translation>
 <translation id="6366574325767783825">Si cette règle est définie sur "True" ou si elle n'est pas configurée, <ph name="PRODUCT_NAME" /> accepte la diffusion de contenus Web en tant que Signed HTTP Exchanges.
 
       Si cette règle est définie sur "False", les Signed HTTP Exchanges ne peuvent pas être chargés.</translation>
@@ -5530,13 +5519,6 @@
       Actuellement, les langues compatibles sont les suivantes : af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk et vi.</translation>
 <translation id="6926703471186170050">Activer l'impression recto verso bord long</translation>
 <translation id="6929746927224321095">Désactiver la saisie automatique</translation>
-<translation id="6930459178825296156">Cette règle active la fonctionnalité Projector pour les utilisateurs de Family Link et lui permet de créer et transcrire un enregistrement d'écran, puis de l'importer dans Drive.
-      Cette règle n'affecte pas les autres types d'utilisateurs.
-      Cette règle n'affecte pas la règle <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> pour les utilisateurs gérés par une entreprise.
-
-      Si cette règle est activée, la version dogfood de Projector sera activée pour les utilisateurs de Family Link.
-      Si cette règle est désactivée, la version dogfood de Projector sera désactivée pour les utilisateurs de Family Link.
-      Si cette règle n'est pas définie, la version dogfood de Projector sera désactivée par défaut pour les utilisateurs de Family Link.</translation>
 <translation id="6931242315485576290">Désactiver la synchronisation des données avec Google</translation>
 <translation id="6940243892299228102">Ne pas autoriser les utilisateurs à se servir de modèles de bureau</translation>
 <translation id="6943577887654905793">Nom de préférence Mac/Linux :</translation>
@@ -6422,7 +6404,6 @@
        Détermine l'identifiant de l'extension à utiliser comme économiseur d'écran sur l'écran de connexion. L'extension doit faire partie de l'AppPack configuré pour ce domaine via la règle DeviceAppPack.</translation>
 <translation id="7882890448959833986">Supprimer l'avertissement relatif au système d'exploitation non compatible</translation>
 <translation id="788480874436328004">Désactiver l'enregistrement des mots de passe avec le Gestionnaire de mots de passe</translation>
-<translation id="7885255514815321350">Désactiver la version dogfood de Projector pour les utilisateurs de Family Link</translation>
 <translation id="7887379840451099426">Paramètres de gestion de l'alimentation applicables uniquement si l'appareil fonctionne sur batterie.</translation>
 <translation id="7891884447851425349">Si la règle <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> est activée, la règle <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> vous permet de spécifier l'URL du moteur de recherche utilisé lors d'une recherche par défaut. L'URL doit inclure la chaîne <ph name="SEARCH_TERM_MARKER" />, qui sera remplacée dans la requête par les termes de recherche de l'utilisateur.
 
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index d16eb38..232a617c 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Gunakan ikon default untuk koneksi aman</translation>
 <translation id="1107538157073168076">Nonaktifkan ekstensi insight</translation>
 <translation id="1110426799149444997">Nonaktifkan penelusuran region <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
-<translation id="1111781754511998498">Projector</translation>
 <translation id="1117535567637097036">Penanganan protokol yang disetel melalui kebijakan ini tidak digunakan ketika menangani maksud Android.</translation>
 <translation id="1118093128235245168">Izinkan situs meminta pengguna memberikan akses ke perangkat USB yang terhubung</translation>
 <translation id="111910763555783249">Setelan notifikasi</translation>
@@ -964,7 +963,6 @@
 <translation id="1962864958436828230">Menyetel batas ukuran minimal untuk batasan papan klip pencegahan kebocoran data</translation>
 <translation id="1964634611280150550">Mode samaran dinonaktifkan</translation>
 <translation id="1964802606569741174">Kebijakan ini tidak memengaruhi aplikasi YouTube Android. Jika Mode Perlindungan di YouTube harus diterapkan, pemasangan aplikasi YouTube Android harus dilarang.</translation>
-<translation id="1967334955994230472">Nonaktifkan Projector</translation>
 <translation id="1969212217917526199">Menggantikan kebijakan pada versi Debug untuk host akses jarak jauh.
 
           Nilainya diuraikan dalam bentuk kamus nama kebijakan JSON untuk pemetaan nilai kebijakan.</translation>
@@ -2304,7 +2302,6 @@
 <translation id="328347261792478720">Secara default, browser akan menampilkan rekomendasi media yang dipersonalisasi kepada pengguna. Jika kebijakan ini disetel ke Nonaktif, rekomendasi ini akan disembunyikan dari pengguna. Jika kebijakan ini disetel ke Aktif atau tidak disetel, rekomendasi media akan ditampilkan kepada pengguna.</translation>
 <translation id="3284094172359247914">Penggunaan kontrol WebUSB API</translation>
 <translation id="3288595667065905535">Saluran rilis</translation>
-<translation id="3291318845269544294">Aktifkan Projector</translation>
 <translation id="3294430356898755483">Jike kebijakan disetel, administrator dapat menyiapkan daftar printer bagi pengguna mereka. Pemilihan printer dilakukan pada saat pengguna mencoba mencetak untuk pertama kalinya.
 
       Menggunakan kebijakan:
@@ -2377,7 +2374,6 @@
           Nilai kebijakan harus ditentukan dalam milidetik. Nilai dikunci ke kurang dari atau sama dengan penundaan waktu tidak ada aktivitas.
 
           Pesan peringatan hanya ditampilkan jika tindakan tidak ada aktivitas adalah logout atau matikan.</translation>
-<translation id="3360280740977649313">Mengontrol kebijakan untuk Projector.</translation>
 <translation id="3360490004791301756">Izinkan pengguna menukarkan penawaran melalui Pendaftaran <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3363360928811201045">Menambahkan batasan di akun terkelola</translation>
 <translation id="3373381043600809954">Mengaktifkan <ph name="PRODUCT_NAME" /></translation>
@@ -2576,7 +2572,6 @@
 <translation id="3628480121685794414">Aktifkan pencetakan simpleks</translation>
 <translation id="3634125384445314047">Mengizinkan foto dan video yang terakhir diambil di ponsel untuk diakses melalui Phone Hub.</translation>
 <translation id="3643284063603988867">Aktifkan fitur 'Ingat sandi'</translation>
-<translation id="3644278943784332493">Aktifkan dogfood Projector untuk pengguna Family Link</translation>
 <translation id="3644735978203799620">Mengaktifkan pemilihan otomatis untuk multi-screenshot</translation>
 <translation id="3646859102161347133">Menyetel jenis lup</translation>
 <translation id="3647212518036289905">Menyetel kebijakan akan menentukan library GSSAPI mana yang akan digunakan untuk autentikasi HTTP. Setel kebijakan ke nama library atau jalur lengkap.
@@ -5039,12 +5034,6 @@
       Jika kebijakan disetel ke Nonaktif, pengoptimalan WPAD akan dinonaktifkan, yang menyebabkan <ph name="PRODUCT_NAME" /> menunggu lebih lama untuk server WPAD berbasis DNS.
 
       Tanpa mempertimbangkan apakah kebijakan ini disetel atau tidak disetel, pengguna tidak dapat mengubah setelan pengoptimalan WPAD.</translation>
-<translation id="6365249741643189510">Kebijakan ini memberi Projector izin untuk membuat dan mentranskripsikan rekaman layar dan mengupload ke Drive bagi pengguna versi bisnis.
-      Kebijakan ini tidak memengaruhi pengguna Family Link.
-      Kebijakan ini tidak memengaruhi kebijakan <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> bagi pengguna Family Link.
-
-      Jika kebijakan ini disetel ke aktif atau tidak disetel, Projector akan diaktifkan.
-      Jika kebijakan ini disetel ke nonaktif, Projector akan dinonaktifkan.</translation>
 <translation id="6366574325767783825">Jika kebijakan disetel ke True (Benar) atau tidak disetel, <ph name="PRODUCT_NAME" /> akan menerima konten web yang ditayangkan sebagai Signed HTTP Exchange.
 
       Jika kebijakan disetel ke Salah (False), Signed HTTP Exchange tidak akan dimuat.</translation>
@@ -5586,13 +5575,6 @@
       Bahasa yang didukung saat ini adalah: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="6926703471186170050">Aktifkan pencetakan dupleks tepi panjang</translation>
 <translation id="6929746927224321095">Nonaktifkan Isi Otomatis</translation>
-<translation id="6930459178825296156">Kebijakan ini mengaktifkan fitur Projector bagi pengguna Family Link dan memberi Projector izin untuk membuat dan mentranskripsikan rekaman layar serta mengupload ke Drive.
-      Kebijakan ini tidak memengaruhi jenis pengguna lain.
-      Kebijakan ini tidak memengaruhi kebijakan <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> bagi pengguna versi bisnis.
-
-      Jika kebijakan ini disetel ke aktif, dogfood Projector akan diaktifkan untuk pengguna Family Link.
-      Jika kebijakan ini disetel ke nonaktif, dogfood Projector akan dinonaktifkan untuk pengguna Family Link.
-      Jika kebijakan ini tidak disetel, dogfood Projector akan dinonaktifkan secara default untuk pengguna Family Link.</translation>
 <translation id="6931242315485576290">Nonaktifkan sinkronisasi data dengan Google</translation>
 <translation id="6940243892299228102">Jangan izinkan pengguna menggunakan template desktop</translation>
 <translation id="6943577887654905793">Nama preferensi Mac/Linux:</translation>
@@ -6475,7 +6457,6 @@
       Menentukan id ekstensi untuk digunakan sebagai tirai layar pada layar masuk. Ekstensi haruslah bagian dari AppPack yang dikonfigurasi untuk domain ini melalui kebijakan DeviceAppPack.</translation>
 <translation id="7882890448959833986">Sembunyikan peringatan OS tidak didukung</translation>
 <translation id="788480874436328004">Nonaktifkan penyimpanan sandi menggunakan pengelola sandi</translation>
-<translation id="7885255514815321350">Nonaktifkan dogfood Projector untuk pengguna Family Link</translation>
 <translation id="7887379840451099426">Setelan pengelolaan daya hanya berlaku saat menggunakan daya baterai.</translation>
 <translation id="7891884447851425349">Jika <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> aktif, menyetel <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> akan menentukan URL mesin telusur yang digunakan saat penelusuran default. URL harus menyertakan string <ph name="SEARCH_TERM_MARKER" />, yang diganti di kueri dengan istilah penelusuran pengguna.
 
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 95e25ab..451539b 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -104,7 +104,6 @@
 <translation id="1105572260329131950">Vengono usate icone predefinite per le connessioni sicure</translation>
 <translation id="1107538157073168076">Disattiva estensione Insights</translation>
 <translation id="1110426799149444997">Disattiva la ricerca per sezione di <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
-<translation id="1111781754511998498">Proiettore</translation>
 <translation id="1117535567637097036">I gestori di protocollo impostati tramite questa norma non sono utilizzati durante la gestione degli intent di Android.</translation>
 <translation id="1118093128235245168">Consenti ai siti di chiedere all'utente di concedere l'accesso a un dispositivo USB collegato</translation>
 <translation id="111910763555783249">Impostazioni di notifica</translation>
@@ -959,7 +958,6 @@
 <translation id="1962864958436828230">Imposta le dimensioni minime dei dati per la limitazione relativa agli appunti, al fine di impedire la fuga di dati</translation>
 <translation id="1964634611280150550">Modalità di navigazione in incognito non attiva</translation>
 <translation id="1964802606569741174">Questa norma non ha effetto sull'app YouTube per Android. Se è necessario applicare la modalità di protezione di YouTube, l'installazione dell'app YouTube per Android non deve essere consentita.</translation>
-<translation id="1967334955994230472">Disattiva Proiettore</translation>
 <translation id="1969212217917526199">Sostituisce le build di debug dell'host di accesso remoto.
 
           Il valore viene analizzato come un dizionario JSON di associazioni tra nomi e valori di norme.</translation>
@@ -2298,7 +2296,6 @@
 <translation id="328347261792478720">Per impostazione predefinita, nel browser vengono mostrati consigli di contenuti multimediali personalizzati in base agli interessi dell'utente. Se questo criterio viene impostato su Disattivato, questi consigli vengono nascosti all'utente. Se il criterio viene impostato su Attivato o se non viene configurato, i consigli di contenuti multimediali vengono mostrati all'utente.</translation>
 <translation id="3284094172359247914">Controlla l'utilizzo dell'API WebUSB</translation>
 <translation id="3288595667065905535">Canale di rilascio</translation>
-<translation id="3291318845269544294">Attiva Proiettore</translation>
 <translation id="3294430356898755483">La configurazione del criterio consente agli amministratori di impostare un elenco di stampanti per i loro utenti. La selezione della stampante viene effettuata la prima volta che gli utenti provano a stampare.
 
       Se viene usato il criterio:
@@ -2368,7 +2365,6 @@
           Il valore del criterio deve essere specificato in millisecondi. I valori devono essere inferiori o uguali al ritardo di inattività.
 
           L'avviso viene mostrato solo se l'azione stabilita in caso di inattività è la disconnessione o lo spegnimento.</translation>
-<translation id="3360280740977649313">Consente di controllare i criteri relativi a Proiettore.</translation>
 <translation id="3360490004791301756">Consenti agli utenti di utilizzare le offerte tramite la registrazione a <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3363360928811201045">Aggiungi limitazioni agli account gestiti</translation>
 <translation id="3373381043600809954">Attiva <ph name="PRODUCT_NAME" /></translation>
@@ -2567,7 +2563,6 @@
 <translation id="3628480121685794414">Attiva stampa su un lato</translation>
 <translation id="3634125384445314047">Consenti l'accesso tramite Phone Hub a foto e video recenti acquisiti sul telefono.</translation>
 <translation id="3643284063603988867">Attiva la funzionalità "Ricorda password"</translation>
-<translation id="3644278943784332493">Attiva versione sperimentale di Proiettore per gli utenti di Family Link</translation>
 <translation id="3644735978203799620">Consente di attivare la selezione automatica per le acquisizioni multischermo</translation>
 <translation id="3646859102161347133">Impostazione tipo di ingrandimento dello schermo</translation>
 <translation id="3647212518036289905">La configurazione del criterio consente di specificare quale libreria GSSAPI utilizzare per l'autenticazione HTTP. Imposta il criterio sul nome di una libreria o su un percorso completo.
@@ -5001,12 +4996,6 @@
       Se viene impostato su Disattivato, l'ottimizzazione WPAD viene disattivata, aumentando così i tempi di attesa da parte di <ph name="PRODUCT_NAME" /> dei server WPAD basati su DNS.
 
       Gli utenti non possono modificare l'impostazione dell'ottimizzazione WPAD, a prescindere dalla configurazione del criterio.</translation>
-<translation id="6365249741643189510">Questo criterio consente di autorizzare Proiettore a creare e trascrivere la registrazione dello schermo e a caricarla su Drive per gli utenti aziendali.
-      Questo criterio non influisce sugli utenti di Family Link.
-      Questo criterio non influisce sul criterio <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> per gli utenti di Family Link.
-
-      Se il criterio non viene configurato o se viene attivato, Proiettore verrà attivato.
-      Se il criterio viene disattivato, Proiettore verrà disattivato.</translation>
 <translation id="6366574325767783825">Se il criterio viene impostato su True o non viene impostato, <ph name="PRODUCT_NAME" /> accetterà i contenuti web pubblicati con la tecnologia Signed HTTP Exchange.
 
       Se il criterio viene impostato su False, i contenuti pubblicati con la tecnologia Signed HTTP Exchange non vengono caricati.</translation>
@@ -5549,13 +5538,6 @@
       Le lingue attualmente supportate sono: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="6926703471186170050">Attiva la stampa fronte/retro su lato lungo</translation>
 <translation id="6929746927224321095">Disattiva la compilazione automatica</translation>
-<translation id="6930459178825296156">Questo criterio attiva la funzionalità Proiettore per gli utenti di Family Link e la autorizza a creare e trascrivere la registrazione dello schermo e a caricarla su Drive.
-      Questo criterio non influisce su altri tipi di utenti.
-      Questo criterio non influisce sul criterio <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> per gli utenti aziendali.
-
-      Se il criterio viene attivato, la versione sperimentale di Proiettore viene attivata per gli utenti di Family Link.
-      Se viene disattivato, la versione sperimentale di Proiettore viene disattivata per gli utenti di Family Link.
-      Se non viene configurato, la versione sperimentale di Proiettore viene disattivata per gli utenti di Family Link per impostazione predefinita.</translation>
 <translation id="6931242315485576290">Disattiva la sincronizzazione dei dati con Google</translation>
 <translation id="6940243892299228102">Gli utenti non possono usare i modelli di scrivanie</translation>
 <translation id="6943577887654905793">Nome di preferenza per Mac/Linux:</translation>
@@ -6439,7 +6421,6 @@
       Consente di stabilire l'ID dell'estensione da utilizzare come salvaschermo nella schermata di accesso. L'estensione deve far parte dell'AppPack configurato per il dominio tramite la norma DeviceAppPack.</translation>
 <translation id="7882890448959833986">Elimina l'avviso di sistema operativo non supportato</translation>
 <translation id="788480874436328004">Disattiva il salvataggio delle password utilizzando Gestore delle password</translation>
-<translation id="7885255514815321350">Disattiva versione sperimentale di Proiettore per gli utenti di Family Link</translation>
 <translation id="7887379840451099426">Le impostazioni di gestione dell'alimentazione applicabili soltanto quando viene usata la batteria.</translation>
 <translation id="7891884447851425349">Se il criterio <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> è attivo, l'assegnazione di un valore al criterio <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> consente di specificare l'URL del motore di ricerca utilizzato durante una ricerca predefinita. L'URL dovrebbe includere la stringa <ph name="SEARCH_TERM_MARKER" />, sostituita nella query dai termini di ricerca degli utenti.
 
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 280e537..a78ce13 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -99,7 +99,6 @@
 <translation id="1105572260329131950">安全な接続にデフォルトのアイコンを使用する</translation>
 <translation id="1107538157073168076">分析情報の拡張機能を無効にする</translation>
 <translation id="1110426799149444997"><ph name="GOOGLE_LENS_PRODUCT_NAME" /> の地域検索を無効にする。</translation>
-<translation id="1111781754511998498">プロジェクター</translation>
 <translation id="1117535567637097036">このポリシーで設定したプロトコル ハンドラは、Android インテントの処理には使用されません。</translation>
 <translation id="1118093128235245168">接続されている USB デバイスへのアクセスを求めるメッセージをユーザーに表示することをサイトに許可する</translation>
 <translation id="111910763555783249">通知設定</translation>
@@ -895,7 +894,6 @@
 <translation id="1962864958436828230">データ漏洩防止のクリップボード制限の最小サイズを設定する</translation>
 <translation id="1964634611280150550">シークレット モードを無効にする</translation>
 <translation id="1964802606569741174">このポリシーは Android YouTube アプリには適用されません。YouTube でセーフモードを有効にする場合は、Android YouTube アプリのインストールを禁止する必要があります。</translation>
-<translation id="1967334955994230472">プロジェクターを無効にする</translation>
 <translation id="1969212217917526199">リモート アクセス ホストの Debug ビルドでポリシーをオーバーライドします。
 
           この値は、ポリシー値のマッピングに対するポリシー名の JSON 辞書として解析されます。</translation>
@@ -2160,7 +2158,6 @@
 <translation id="328347261792478720">デフォルトでは、ブラウザはユーザーに合わせてパーソナライズされたおすすめメディアを表示します。このポリシーを無効に設定すると、ユーザーに対するおすすめは表示されません。このポリシーを有効にするか、未設定のままにすると、おすすめメディアがユーザーに表示されます。</translation>
 <translation id="3284094172359247914">WebUSB API の使用を管理する</translation>
 <translation id="3288595667065905535">リリース チャンネル</translation>
-<translation id="3291318845269544294">プロジェクターを有効にする</translation>
 <translation id="3294430356898755483">このポリシーを設定した場合、管理者はユーザー用のプリンタのリストを設定できます。プリンタの選択は、ユーザーが初めて印刷しようとしたときに行われます。
 
       このポリシーの使用方法:
@@ -2230,7 +2227,6 @@
           このポリシーの値はミリ秒単位とし、アイドル待ちの時間と同じかそれより短い時間を指定できます。
 
           警告メッセージは、アイドル時の操作がログアウトかシャットダウンの場合にのみ表示されます。</translation>
-<translation id="3360280740977649313">プロジェクターのポリシーを設定します。</translation>
 <translation id="3360490004791301756">ユーザーに対して <ph name="PRODUCT_OS_NAME" /> の登録特典の利用を許可する</translation>
 <translation id="3363360928811201045">管理対象アカウントに制限を追加する</translation>
 <translation id="3373381043600809954"><ph name="PRODUCT_NAME" /> を有効にする</translation>
@@ -2428,7 +2424,6 @@
 <translation id="3628480121685794414">片面印刷を有効にする</translation>
 <translation id="3634125384445314047">スマートフォンで最近撮影した写真や動画にスマートフォン ハブ経由でアクセスすることを許可します。</translation>
 <translation id="3643284063603988867">「パスワードを保存する」機能を有効にする</translation>
-<translation id="3644278943784332493">ファミリー リンクのユーザーに対して Projector dogfood を有効にする</translation>
 <translation id="3644735978203799620">マルチ スクリーン キャプチャの自動選択を有効にする</translation>
 <translation id="3646859102161347133">画面拡大鏡のタイプを設定する</translation>
 <translation id="3647212518036289905">このポリシーでは、HTTP 認証で使用する GSSAPI ライブラリを指定できます。ポリシーには、ライブラリ名またはフルパスのいずれかを指定します。
@@ -4746,8 +4741,6 @@
       このポリシーを無効に設定した場合、WPAD の最適化は無効になり、DNS ベースの WPAD サーバーに対する <ph name="PRODUCT_NAME" /> の待機間隔が長くなります。
 
       このポリシーを設定したかどうかに関係なく、ユーザーは WPAD の最適化設定を変更できません。</translation>
-<translation id="6365249741643189510">このポリシーは、企業ユーザーの場合、画面録画の文字起こしの作成と Google ドライブへのアップロードの権限を Projector に付与します。このポリシーは、ファミリー リンクのユーザーには影響しません。このポリシーは、ファミリー リンクのユーザー向けの <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> ポリシーには影響しません。ポリシーを未設定のままにするか有効にすると、Projector が有効になります。
-      ポリシーを無効にした場合、Projector は無効になります。</translation>
 <translation id="6366574325767783825">このポリシーを True に設定するか未設定のままにした場合、<ph name="PRODUCT_NAME" /> では Signed HTTP Exchange として配信されるウェブ コンテンツが許可されます。
 
       このポリシーを False に設定した場合、Signed HTTP Exchange は読み込まれません。</translation>
@@ -5251,7 +5244,6 @@
       現在サポートされている言語は、af、bg、ca、cs、da、de、el、en-AU、en-CA、en-GB、en-US、es、es-419、es-AR、es-ES、es-MX、es-US、et、fa、fo、fr、he、hi、hr、hu、id、it、ko、lt、lv、nb、nl、pl、pt-BR、pt-PT、ro、ru、sh、sk、sl、sq、sr、sv、ta、tg、tr、uk、vi です。</translation>
 <translation id="6926703471186170050">長辺とじの両面印刷を有効にする</translation>
 <translation id="6929746927224321095">自動入力を無効にする</translation>
-<translation id="6930459178825296156">このポリシーは、ファミリー リンクのユーザーの場合は Projector の機能を有効にし、画面記録の文字起こしと Google ドライブへのアップロードの権限を Projector に付与します。このポリシーは、他のタイプのユーザーには影響しません。このポリシーは、企業ユーザーに対する <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> ポリシーには影響しません。このポリシーを有効にした場合、ファミリー リンクのユーザーに対して Projector dogfood が有効になります。このポリシーを無効にした場合、ファミリー リンクのユーザーに対して Projector dogfood が無効になります。このポリシーを設定しない場合、デフォルトではファミリー リンクのユーザーに対して Projector dogfood が無効になります。</translation>
 <translation id="6931242315485576290">Google とのデータの同期を無効にする</translation>
 <translation id="6940243892299228102">デスク テンプレートの使用をユーザーに許可しない</translation>
 <translation id="6943577887654905793">Mac/Linux 設定名:</translation>
@@ -6097,7 +6089,6 @@
       ログイン画面のスクリーンセーバーとして使用する拡張機能の ID を指定します。拡張機能は、DeviceAppPack ポリシーを使用してこのドメインに設定されている AppPack のものである必要があります。</translation>
 <translation id="7882890448959833986">サポート外の OS の警告を表示しない</translation>
 <translation id="788480874436328004">パスワード マネージャーを使用したパスワードの保存を無効にする</translation>
-<translation id="7885255514815321350">ファミリー リンクのユーザーに対して Projector dogfood を無効にする</translation>
 <translation id="7887379840451099426">バッテリーでの使用中にのみ適用する電源管理設定</translation>
 <translation id="7891884447851425349"><ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> がオンの場合に、<ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> では、デフォルトの検索に使用する検索エンジンの URL を指定できます。この URL には <ph name="SEARCH_TERM_MARKER" /> という文字列を含めます。この文字列は、クエリの送信時にユーザーが指定した検索キーワードに置き換えられます。
 
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 7dfdd2b..528f269 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">보안 연결일 경우 기본 아이콘 표시</translation>
 <translation id="1107538157073168076">통계 확장 프로그램 사용 안함</translation>
 <translation id="1110426799149444997"><ph name="GOOGLE_LENS_PRODUCT_NAME" /> 영역 검색을 사용 중지합니다.</translation>
-<translation id="1111781754511998498">Projector</translation>
 <translation id="1117535567637097036">Android 인텐트를 처리할 때 이 정책을 통해 설정된 프로토콜 핸들러는 사용되지 않습니다.</translation>
 <translation id="1118093128235245168">사이트에서 사용자에게 연결된 USB 기기의 액세스 권한을 부여할지 묻도록 허용합니다.</translation>
 <translation id="111910763555783249">알림 설정</translation>
@@ -962,7 +961,6 @@
 <translation id="1962864958436828230">데이터 유출 방지를 위한 클립보드 제한용 최소 크기 한도 설정</translation>
 <translation id="1964634611280150550">시크릿 모드 사용이 중지됨</translation>
 <translation id="1964802606569741174">이 정책은 Android YouTube 앱에 아무런 영향도 미치지 않습니다. YouTube의 안전 모드를 실행해야 하는 경우 Android YouTube 앱 설치를 허용하지 않아야 합니다.</translation>
-<translation id="1967334955994230472">Projector 사용 중지</translation>
 <translation id="1969212217917526199">원격 액세스 호스트의 디버그 빌드 관련 정책을 재정의합니다.
 
           정책 값을 매핑하기 위해 값이 정책 이름의 JSON 사전으로 파싱됩니다.</translation>
@@ -2302,7 +2300,6 @@
 <translation id="328347261792478720">브라우저에서 기본적으로 사용자에게 맞춤설정된 미디어 추천을 표시합니다. 정책을 사용 중지하면 사용자에게 이러한 추천이 표시되지 않습니다. 정책을 사용 설정하거나 설정하지 않으면 사용자에게 미디어 추천이 표시됩니다.</translation>
 <translation id="3284094172359247914">WebUSB API 사용 조정</translation>
 <translation id="3288595667065905535">배포 채널</translation>
-<translation id="3291318845269544294">Projector 사용 설정</translation>
 <translation id="3294430356898755483">정책을 설정하면 관리자가 사용자의 프린터 목록을 설정할 수 있습니다. 사용자가 처음 인쇄를 시도할 때 프린터를 선택하게 됩니다.
 
       정책 사용:
@@ -2371,7 +2368,6 @@
           정책 값은 밀리초로 지정되어야 합니다. 유휴 지연 시간보다 작거나 같게 값이 잘립니다.
 
           유휴 작업이 로그아웃 또는 종료인 경우에만 경고 메시지가 표시됩니다.</translation>
-<translation id="3360280740977649313">Projector의 정책을 제어합니다.</translation>
 <translation id="3360490004791301756">사용자가 <ph name="PRODUCT_OS_NAME" /> 등록을 통해 쿠폰을 사용할 수 있게 허용</translation>
 <translation id="3363360928811201045">관리 계정에 제한사항 추가</translation>
 <translation id="3373381043600809954"><ph name="PRODUCT_NAME" /> 사용</translation>
@@ -2573,7 +2569,6 @@
 <translation id="3628480121685794414">단면 인쇄 사용 설정</translation>
 <translation id="3634125384445314047">휴대전화에서 최근 촬영한 사진 및 동영상을 휴대전화 허브에서 액세스하도록 허용합니다.</translation>
 <translation id="3643284063603988867">'비밀번호 기억' 기능 사용 설정</translation>
-<translation id="3644278943784332493">Family Link 사용자용 Projector dogfood 사용 설정</translation>
 <translation id="3644735978203799620">다중 화면 캡처를 위한 자동 선택 사용</translation>
 <translation id="3646859102161347133">화면 돋보기 유형 설정</translation>
 <translation id="3647212518036289905">정책을 설정하면 HTTP 인증에 사용할 GSSAPI 라이브러리가 지정됩니다. 정책을 라이브러리 이름 또는 전체 경로 중 하나로 설정합니다.
@@ -5018,12 +5013,6 @@
       사용 중지하면 WPAD 최적화가 사용 중지되어 <ph name="PRODUCT_NAME" /> 제품이 DNS 기반 WPAD 서버를 더 오래 기다리게 됩니다.
 
       정책의 설정 여부와 관계없이 사용자는 WPAD 최적화 설정을 변경할 수 없습니다.</translation>
-<translation id="6365249741643189510">이 정책은 화면 녹화 파일을 만들고, 스크립트를 작성하고, 이러한 항목을 Drive에 업로드하는 Projector 권한을 기업 사용자에게 부여합니다.
-      이 정책은 Family Link 사용자에게 영향을 주지 않습니다.
-      이 정책은 Family Link 사용자를 위한 <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> 정책에 영향을 주지 않습니다.
-
-      정책을 설정하지 않거나 사용 설정하면 Projector가 사용 설정됩니다.
-      정책을 사용 중지하면 Projector가 사용 중지됩니다.</translation>
 <translation id="6366574325767783825">정책을 True로 설정하거나 설정하지 않으면 <ph name="PRODUCT_NAME" />에서 서명된 HTTP 교환(SXG)으로 제공된 웹 콘텐츠를 허용합니다.
 
       정책을 False로 설정하면 서명된 HTTP 교환(SXG)이 로드되지 않습니다.</translation>
@@ -5565,13 +5554,6 @@
       현재 지원되는 언어는 af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi입니다.</translation>
 <translation id="6926703471186170050">긴 쪽 양면 인쇄 사용 설정</translation>
 <translation id="6929746927224321095">자동 완성 사용 안함</translation>
-<translation id="6930459178825296156">이 정책은 Family Link 사용자가 Projector 기능을 사용하도록 설정하고, Projector에 화면 녹화 파일을 만들고, 스크립트를 작성하고, 이러한 항목을 Drive에 업로드하는 권한을 부여합니다.
-      이 정책은 다른 유형의 사용자에게 영향을 주지 않습니다.
-      이 정책은 기업 사용자를 위한 <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> 정책에 영향을 주지 않습니다.
-
-      정책을 사용 설정하면 Family Link 사용자에 대해 Projector dogfood가 사용 설정됩니다.
-      정책을 사용 중지하면 Family Link 사용자에 대해 Projector dogfood가 사용 중지됩니다.
-      정책을 설정하지 않으면 Family Link 사용자에 대해 Projector dogfood가 기본적으로 사용 중지됩니다.</translation>
 <translation id="6931242315485576290">Google과 데이터 동기화 사용 중지</translation>
 <translation id="6940243892299228102">사용자가 데스크 템플릿을 사용하도록 허용하지 않음</translation>
 <translation id="6943577887654905793">Mac 및 Linux 환경설정 이름:</translation>
@@ -6457,7 +6439,6 @@
       로그인 화면에서 화면 보호기로 사용되는 확장 프로그램의 ID를 결정합니다. 확장 프로그램은 DeviceAppPack 정책을 통해 이 도메인에 구성된 AppPack의 일부여야 합니다.</translation>
 <translation id="7882890448959833986">지원되지 않는 OS 경고 무시</translation>
 <translation id="788480874436328004">비밀번호 관리자를 통한 비밀번호 저장 기능 사용 안함</translation>
-<translation id="7885255514815321350">Family Link 사용자용 Projector dogfood 사용 중지</translation>
 <translation id="7887379840451099426">배터리 전원으로 구동될 때만 적용되는 전원 관리 설정입니다.</translation>
 <translation id="7891884447851425349"><ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />가 사용 설정되어 있는 경우 <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" />을 설정하여 기본 검색에서 사용되는 검색엔진의 URL을 지정합니다. URL은 <ph name="SEARCH_TERM_MARKER" /> 문자열을 포함해야 하며, 이 문자열은 쿼리 시 사용자의 검색어로 대체됩니다.
 
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index fef6705..76f72da 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Standaardiconen gebruiken voor beveiligde verbindingen</translation>
 <translation id="1107538157073168076">Extensie voor inzichten uitzetten</translation>
 <translation id="1110426799149444997">Regio doorzoeken uitzetten voor <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
-<translation id="1111781754511998498">Projector</translation>
 <translation id="1117535567637097036">De protocolhandlers die via dit beleid zijn ingesteld, worden niet gebruikt bij de verwerking van Android-intenties.</translation>
 <translation id="1118093128235245168">Toestaan dat sites de gebruiker vragen om toegang te verlenen tot een aangesloten USB-apparaat</translation>
 <translation id="111910763555783249">Instellingen voor meldingen</translation>
@@ -936,7 +935,6 @@
 <translation id="1962864958436828230">Minimale groottelimiet instellen voor klembordbeperking ter voorkoming van datalekken</translation>
 <translation id="1964634611280150550">Incognitomodus staat uit</translation>
 <translation id="1964802606569741174">Dit beleid is niet van invloed op de YouTube-app voor Android. Als de veiligheidsmodus voor YouTube moet worden afgedwongen, moet je installatie van de YouTube-app voor Android niet toestaan.</translation>
-<translation id="1967334955994230472">Projector uitzetten</translation>
 <translation id="1969212217917526199">Hiermee worden beleidsregels overgeschreven op Debug-builds van de host voor externe toegang.
 
           De waarde wordt geparseerd als een JSON-woordenboek van beleidsnaam tot beleidswaardelocaties.</translation>
@@ -2261,7 +2259,6 @@
 <translation id="328347261792478720">De browser toont standaard media-aanbevelingen die zijn gepersonaliseerd voor de gebruiker. Als je dit beleid niet toepast, ziet de gebruiker deze aanbevelingen niet. Als je dit beleid toepast of niet instelt, ziet de gebruiker de media-aanbevelingen.</translation>
 <translation id="3284094172359247914">Gebruik van de WebUSB API beheren</translation>
 <translation id="3288595667065905535">Releasekanaal</translation>
-<translation id="3291318845269544294">Projector aanzetten</translation>
 <translation id="3294430356898755483">Als je dit beleid instelt, kunnen beheerders een lijst met printers instellen voor hun gebruikers. Als gebruikers voor het eerst iets afdrukken, moeten ze een printer selecteren.
 
       Met het beleid:
@@ -2327,7 +2324,6 @@
           De beleidswaarde moet worden gespecificeerd in milliseconden. De opgegeven waarden moeten kleiner dan of gelijk zijn aan de inactieve vertraging.
 
           Het waarschuwingsbericht wordt alleen getoond als de inactieve actie 'uitloggen' of 'afsluiten' is.</translation>
-<translation id="3360280740977649313">Bepaalt het beleid voor Projector.</translation>
 <translation id="3360490004791301756">Gebruikers toestaan aanbiedingen in te wisselen via <ph name="PRODUCT_OS_NAME" />-registratie</translation>
 <translation id="3363360928811201045">Beperkingen op beheerde accounts beheren</translation>
 <translation id="3373381043600809954"><ph name="PRODUCT_NAME" /> aanzetten</translation>
@@ -2526,7 +2522,6 @@
 <translation id="3628480121685794414">Enkelzijdig afdrukken aanzetten</translation>
 <translation id="3634125384445314047">Recente foto's en video's die op de telefoon zijn gemaakt, toegankelijk maken via Telefoonhub.</translation>
 <translation id="3643284063603988867">Functie 'Wachtwoord onthouden' aanzetten</translation>
-<translation id="3644278943784332493">Dogfood-versie van Projector aanzetten voor gebruikers van Family Link</translation>
 <translation id="3644735978203799620">Zet automatisch selecteren aan voor opnamen van meerdere schermen</translation>
 <translation id="3646859102161347133">Het type vergrootglas instellen</translation>
 <translation id="3647212518036289905">Als je het beleid instelt, geef je aan welke GSSAPI-bibliotheek moet worden gebruikt voor HTTP-verificatie. Stel het beleid in op een bibliotheeknaam of een volledig pad.
@@ -4935,12 +4930,6 @@
       Als je het beleid niet toepast, staat WPAD-optimalisatie uit, waardoor <ph name="PRODUCT_NAME" /> langer moet wachten op DNS-gebaseerde WPAD-servers.
 
       Ongeacht of dit beleid is ingesteld, kan de gebruiker de instelling voor WPAD-optimalisatie niet wijzigen.</translation>
-<translation id="6365249741643189510">Dit beleid geeft Projector toestemming om schermopnamen te maken, er een transcript van te maken en ze te uploaden naar Drive voor zakelijke gebruikers.
-      Dit beleid is niet van toepassing voor gebruikers van Family Link.
-      Dit beleid heeft geen invloed op het <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" />-beleid voor gebruikers van Family Link.
-
-      Als je het beleid toepast of niet instelt, staat Projector aan.
-      Als je het beleid niet toepast, staat Projector uit.</translation>
 <translation id="6366574325767783825">Als je het beleid instelt op True of niet instelt, accepteert <ph name="PRODUCT_NAME" /> webcontent die wordt getoond als Signed HTTP Exchange.
 
       Als je het beleid instelt op False, worden Signed HTTP Exchanges niet geladen.</translation>
@@ -5479,13 +5468,6 @@
       De volgende talen worden momenteel ondersteund: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="6926703471186170050">Dubbelzijdig afdrukken over lange zijde aanzetten</translation>
 <translation id="6929746927224321095">Automatisch invullen uitzetten</translation>
-<translation id="6930459178825296156">Met dit beleid kunnen gebruikers van Family Link gebruikmaken van de functie Projector om schermopnamen te maken, hiervan transcripties te maken en te uploaden naar Drive.
-      Dit beleid is niet van toepassing voor andere gebruikerstypen.
-      Dit beleid heeft geen invloed op het <ph name="PROJECTOR_ENABLED_POLICY_NAME" />-beleid voor zakelijke gebruikers.
-
-      Als je het beleid toepast, wordt de dogfood-versie van Projector aangezet voor gebruikers van Family Link.
-      Als je het beleid niet toepast, wordt de dogfood-versie van Projector uitgezet voor gebruikers van Family Link.
-      Als je het beleid niet instelt, staat de dogfood-versie van Projector standaard uit voor gebruikers van Family Link.</translation>
 <translation id="6931242315485576290">Synchronisatie van gegevens met Google uitzetten</translation>
 <translation id="6940243892299228102">Niet toestaan dat gebruikers bureautemplates gebruiken</translation>
 <translation id="6943577887654905793">Voorkeursnaam voor Mac/Linux:</translation>
@@ -6368,7 +6350,6 @@
       Hiermee bepaal je de ID van de extensie die moet worden gebruikt als schermbeveiliging voor het inlogvenster. De extensie moet onderdeel zijn van het AppPack dat is geconfigureerd voor dit domein via het beleid DeviceAppPack.</translation>
 <translation id="7882890448959833986">De waarschuwing voor een niet-ondersteund besturingssysteem negeren</translation>
 <translation id="788480874436328004">Opslag van wachtwoorden met de Wachtwoordmanager uitzetten</translation>
-<translation id="7885255514815321350">Dogfood-versie van Projector uitzetten voor gebruikers van Family Link</translation>
 <translation id="7887379840451099426">Instellingen voor energiebeheer die alleen van toepassing zijn als er op de batterij wordt gewerkt</translation>
 <translation id="7891884447851425349">Als <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> is aangezet en je <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> instelt, wordt de URL gespecificeerd van de zoekmachine die tijdens een standaard zoekopdracht wordt gebruikt. De URL moet de tekenreeks <ph name="SEARCH_TERM_MARKER" /> bevatten. Deze tekenreeks wordt tijdens de zoekopdracht vervangen door de zoektermen van de gebruiker.
 
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index ffe386fb..b151195c 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Usar os ícones padrão em conexões seguras</translation>
 <translation id="1107538157073168076">Desativar extensão de insights</translation>
 <translation id="1110426799149444997">Desativar a pesquisa por região do <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
-<translation id="1111781754511998498">Projector</translation>
 <translation id="1117535567637097036">Os gerenciadores de protocolo definidos por esta política não são usados na manipulação de intents do Android.</translation>
 <translation id="1118093128235245168">Permitir que os sites peçam ao usuário para conceder acesso a um dispositivo USB conectado</translation>
 <translation id="111910763555783249">Configurações de notificação</translation>
@@ -957,7 +956,6 @@
 <translation id="1962864958436828230">Definir o limite mínimo para a prevenção contra vazamento de dados de acordo com a restrição da área de transferência</translation>
 <translation id="1964634611280150550">Modo de navegação anônima desativado</translation>
 <translation id="1964802606569741174">Esta política não tem nenhum efeito sobre o app YouTube para Android. Se o modo de segurança do YouTube precisar ser aplicado, a instalação desse app será bloqueada.</translation>
-<translation id="1967334955994230472">Desativar Projector</translation>
 <translation id="1969212217917526199">Modifica as políticas sobre versões de depuração do host de acesso remoto.
 
           O valor é analisado como um dicionário JSON de nome de política para mapeamentos de valor de política.</translation>
@@ -2297,7 +2295,6 @@
 <translation id="328347261792478720">Por padrão, o navegador mostrará recomendações de mídia personalizadas para o usuário. Se esta política for definida como "Desativada", essas recomendações ficarão ocultas para o usuário. Se esta política for definida como "Ativada" ou não for definida, as recomendações de mídia serão mostradas para o usuário.</translation>
 <translation id="3284094172359247914">Controla o uso da API WebUSB</translation>
 <translation id="3288595667065905535">Liberar canal</translation>
-<translation id="3291318845269544294">Ativar Projector</translation>
 <translation id="3294430356898755483">A definição da política permite aos administradores configurar uma lista de impressoras para os usuários. A seleção da impressora ocorre na primeira vez que os usuários tentam imprimir.
 
       Ao usar a política:
@@ -2366,7 +2363,6 @@
           O valor da política precisa ser especificado em milissegundos. Os valores são ajustados para serem menores ou iguais ao intervalo de inatividade.
 
           A mensagem de aviso só será mostrada se a ação de inatividade for para sair ou encerrar.</translation>
-<translation id="3360280740977649313">Controla as políticas do Projector.</translation>
 <translation id="3360490004791301756">Permitir que os usuários resgatem ofertas pelo Registro do <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3363360928811201045">Adicionar restrições em contas gerenciadas</translation>
 <translation id="3373381043600809954">Ativar "<ph name="PRODUCT_NAME" />".</translation>
@@ -2563,7 +2559,6 @@
 <translation id="3628480121685794414">Ativar impressão simplex</translation>
 <translation id="3634125384445314047">Permitir que fotos e vídeos recentes capturados no smartphone sejam acessados usando o recurso Seu smartphone.</translation>
 <translation id="3643284063603988867">Ativar o recurso "Lembrar senha"</translation>
-<translation id="3644278943784332493">Ativa o dogfood do Projector para usuários do Family Link</translation>
 <translation id="3644735978203799620">Permite a seleção automática de várias capturas de tela</translation>
 <translation id="3646859102161347133">Definir tipo de lupa</translation>
 <translation id="3647212518036289905">Definir a política especifica qual biblioteca GSSAPI será usada para a autenticação HTTP. Defina a política como um nome de biblioteca ou um caminho completo.
@@ -3195,6 +3190,13 @@
 <translation id="4347908978527632940">Se essa política for definida como "true", e o usuário for um usuário supervisionado, outros apps do Android poderão consultar restrições da Web do usuário por meio de um provedor de conteúdo.
 
           Se for definida como "false" ou não for definida, o provedor de conteúdo não retornará nenhuma informação.</translation>
+<translation id="4357587374229381015">Especifica um nome de parâmetro de URL que vai ser usado na página de login do IdP SAML para preencher automaticamente o campo de nome de usuário.
+
+      O e-mail do usuário associado ao perfil do <ph name="PRODUCT_OS_NAME" /> vai ser usado como um valor para o parâmetro de URL. Por isso, essa configuração vai precisar ser desativada se os usuários tiverem que usar e-mails diferentes com o IdP SAML.
+
+      Se essa configuração não estiver definida, o nome de usuário vai precisar ser informado manualmente na página de login do IdP SAML.
+
+      Essa política afeta a autenticação on-line em telas de login e de bloqueio.</translation>
 <translation id="4363057787588706121">Permitir a mescla de políticas de lista de diferentes fontes</translation>
 <translation id="4363101430102811068">Ativa a detecção de vazamento para credenciais digitadas</translation>
 <translation id="436581050240847513">Relatar interfaces de redes de dispositivos</translation>
@@ -5015,12 +5017,6 @@
       Se a política for definida como "Desativada", a otimização da WPAD será desativada e o <ph name="PRODUCT_NAME" /> precisará esperar mais por servidores de WPAD baseados em DNS.
 
       Em qualquer um dos casos, não será possível mudar a configuração de otimização da WPAD.</translation>
-<translation id="6365249741643189510">Esta política concede ao Projector permissão para criar, transcrever e fazer upload de gravações de tela para o Drive para usuários corporativos.
-      Esta política não afeta usuários do Family Link.
-      Esta política não afeta a política <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> para usuários do Family Link.
-
-      Se ela não for definida, o Projector vai ser ativado.
-      Se ela for desativada, o Projector vai ser desativado.</translation>
 <translation id="6366574325767783825">Se a política for definida como verdadeira ou não for definida, o <ph name="PRODUCT_NAME" /> aceitará conteúdos da Web exibidos como Signed HTTP Exchanges.
 
       Se ela for definida como falsa, conteúdos Signed HTTP Exchanges não serão carregados.</translation>
@@ -5560,13 +5556,6 @@
       Os idiomas compatíveis no momento são: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="6926703471186170050">Ativar impressão duplex de borda longa</translation>
 <translation id="6929746927224321095">Desativar o preenchimento automático</translation>
-<translation id="6930459178825296156">Esta política ativa o recurso do Projector para usuários do Family Link e permite criar e transcrever gravações da tela e fazer upload delas no Drive.
-      Esta política não afeta outros tipos de usuários.
-      Esta política não afeta a política <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> para usuários corporativos.
-
-      Se ela estiver ativada, o dogfood do Projector será ativado para usuários do Family Link.
-      Se ela estiver desativada, o dogfood do Projector vai ficar desativado para esses usuários.
-      Se ela não for definida, o dogfood do Projector será desativado por padrão para esses usuários.</translation>
 <translation id="6931242315485576290">Desativar a sincronização de dados com o Google</translation>
 <translation id="6940243892299228102">Não permitir que os usuários usem modelos de espaço de trabalho</translation>
 <translation id="6943577887654905793">Nome de preferência Mac/Linux:</translation>
@@ -6449,7 +6438,6 @@
       Determina a identificação da extensão a ser usada como protetor de tela na tela de login. A extensão deve ser parte do AppPack configurado para este domínio por meio da política DeviceAppPack.</translation>
 <translation id="7882890448959833986">Remover o aviso de SO não compatível</translation>
 <translation id="788480874436328004">Desativar o salvamento de senhas no gerenciador de senhas</translation>
-<translation id="7885255514815321350">Desativa o dogfood do Projector para usuários do Family Link</translation>
 <translation id="7887379840451099426">Configurações de gerenciamento de energia aplicáveis apenas quando em funcionamento com energia da bateria.</translation>
 <translation id="7891884447851425349">Se a <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> estiver ativada, definir <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> especificará o URL do mecanismo de pesquisa usado na pesquisa padrão. O URL precisa incluir a string <ph name="SEARCH_TERM_MARKER" />, que é substituída na consulta pelos termos de pesquisa do usuário.
 
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 5ba7a11..17b9370 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Использовать для безопасных соединений значок по умолчанию</translation>
 <translation id="1107538157073168076">Отключить расширение статистики</translation>
 <translation id="1110426799149444997">Отключить поиск по области изображения в сервисе "<ph name="GOOGLE_LENS_PRODUCT_NAME" />"</translation>
-<translation id="1111781754511998498">Проектор</translation>
 <translation id="1117535567637097036">Обработчики протоколов, настроенные с помощью этого правила, не используются при обработке намерений Android.</translation>
 <translation id="1118093128235245168">Разрешить сайтам запрашивать доступ к подключенному USB-устройству</translation>
 <translation id="111910763555783249">Настройки уведомлений</translation>
@@ -961,7 +960,6 @@
 <translation id="1962864958436828230">Установить минимально допустимый объем данных для ограничения CLIPBOARD, связанного с предотвращением утечки данных</translation>
 <translation id="1964634611280150550">Режим инкогнито отключен</translation>
 <translation id="1964802606569741174">Правило не влияет на приложение YouTube для Android. Чтобы принудительно включить режим Безопасного просмотра на YouTube, необходимо запретить установку приложения YouTube для Android.</translation>
-<translation id="1967334955994230472">Отключить проектор</translation>
 <translation id="1969212217917526199">Позволяет изменить правила сборок для отладки хоста удаленного доступа.
 
           Значение анализируется как словарь JSON, где проверяется соответствие названия правила его значению.</translation>
@@ -2288,7 +2286,6 @@
 <translation id="328347261792478720">По умолчанию в браузере показываются персональные рекомендации для пользователя. Если правило отключено, персональные рекомендации скрыты от пользователя. Если правило включено или не настроено, пользователь видит советы о том, что посмотреть.</translation>
 <translation id="3284094172359247914">Контроль использования WebUSB API</translation>
 <translation id="3288595667065905535">Канал обновления</translation>
-<translation id="3291318845269544294">Включить проектор</translation>
 <translation id="3294430356898755483">С помощью этого правила администраторы могут настраивать принтеры для пользователей. Пользователи могут выбрать принтер при первом запуске печати.
 
       Перед применением правила обратите внимание на информацию ниже.
@@ -2361,7 +2358,6 @@
           Значение указывается в миллисекундах и не должно превышать время задержки при переходе в режим бездействия.
 
           Предупреждение будет появляться только в том случае, если в режиме бездействия происходит выход из аккаунта или отключение устройства.</translation>
-<translation id="3360280740977649313">Управление правилами для проектора.</translation>
 <translation id="3360490004791301756">Разрешить активацию бонусов при регистрации <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3363360928811201045">Добавление ограничений для управляемых аккаунтов</translation>
 <translation id="3373381043600809954">Включить функцию "<ph name="PRODUCT_NAME" />"</translation>
@@ -2560,7 +2556,6 @@
 <translation id="3628480121685794414">Включить одностороннюю печать</translation>
 <translation id="3634125384445314047">Разрешить доступ с помощью функции "Управление телефоном" к недавним фото и видео, хранящимся на телефоне</translation>
 <translation id="3643284063603988867">Включить функцию "Запомнить пароль"</translation>
-<translation id="3644278943784332493">Включить тестовую версию проектора для пользователей Family Link</translation>
 <translation id="3644735978203799620">Включает автоматический выбор для записи изображения с нескольких экранов</translation>
 <translation id="3646859102161347133">Настройка типа экранной лупы</translation>
 <translation id="3647212518036289905">Правило определяет, какую библиотеку GSSAPI использовать для HTTP-аутентификации. В правиле нужно указать название библиотеки или полный путь к ней.
@@ -5010,12 +5005,6 @@
       Если правило отключено, оптимизация WPAD не будет работать. В результате в <ph name="PRODUCT_NAME" /> будет увеличено время ожидания для WPAD-серверов на базе DNS.
 
       Пользователи не могут изменить этот параметр независимо от того, настроено правило или нет.</translation>
-<translation id="6365249741643189510">Это правило разрешает проектору записывать видео с экрана, расшифровывать и загружать его на Диск в корпоративных аккаунтах.
-      Правило не влияет на пользователей Family Link
-      и на правило <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> для них.
-
-      Если правило включено или не настроено, проектор будет работать.
-      Если правило отключено, проектор не будет работать.</translation>
 <translation id="6366574325767783825">Если правило не настроено или задано значение True, <ph name="PRODUCT_NAME" /> загружает веб-контент, для показа которого используется технология Signed HTTP Exchange.
 
       Если задано значение False, такой контент не загружается.</translation>
@@ -5557,13 +5546,6 @@
       Поддерживаются следующие языки: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="6926703471186170050">Включить переплет по длинному краю при двусторонней печати</translation>
 <translation id="6929746927224321095">Отключить автозаполнение</translation>
-<translation id="6930459178825296156">Правило включает проектор для пользователей Family Link и разрешает этой функции записывать видео с экрана, расшифровывать и загружать его на Диск в корпоративных аккаунтах.
-      Правило не влияет на прочих пользователей
-      и на правило <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> для корпоративных пользователей.
-
-      Если правило включено, тестовая версия проектора будет работать для пользователей Family Link,
-      при отключенном правиле – не будет.
-      Если правило не настроено, тестовая версия проектора будет по умолчанию отключена для пользователей Family Link.</translation>
 <translation id="6931242315485576290">Отключить синхронизацию данных с Google</translation>
 <translation id="6940243892299228102">Запретить пользователям применять шаблоны для рабочего стола</translation>
 <translation id="6943577887654905793">Предпочтительное название для Mac и Linux:</translation>
@@ -6445,7 +6427,6 @@
       Определяет идентификатор расширения для использования в качестве заставки на экране входа. Расширение должно входить в состав пакета приложений для данного домена, заданного в правиле DeviceAppPack.</translation>
 <translation id="7882890448959833986">Скрывает предупреждения о неподдерживаемой ОС</translation>
 <translation id="788480874436328004">Отключить сохранение паролей с помощью диспетчера</translation>
-<translation id="7885255514815321350">Выключить тестовую версию проектора для пользователей Family Link</translation>
 <translation id="7887379840451099426">Настройки управления питанием, применимые только при работе от батареи.</translation>
 <translation id="7891884447851425349">Если правило <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> включено, то настройка <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> содержит URL поисковой системы, используемой по умолчанию. В URL должна быть строка <ph name="SEARCH_TERM_MARKER" />, которая во время отправки запроса заменяется на текст пользователя.
 
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 46d591f7..b8f5f744 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">ใช้ไอคอนเริ่มต้นสำหรับการเชื่อมต่อที่ปลอดภัย</translation>
 <translation id="1107538157073168076">ปิดใช้ส่วนขยายข้อมูลเชิงลึก</translation>
 <translation id="1110426799149444997">ปิดใช้การค้นหาภูมิภาคของ <ph name="GOOGLE_LENS_PRODUCT_NAME" /></translation>
-<translation id="1111781754511998498">โปรเจ็กเตอร์</translation>
 <translation id="1117535567637097036">ไม่มีการใช้เครื่องจัดการโปรโตคอลที่ตั้งค่าผ่านนโยบายนี้ระหว่างการจัดการ Intent ของ Android</translation>
 <translation id="1118093128235245168">อนุญาตให้เว็บไซต์ขอสิทธิ์จากผู้ใช้เพื่อเข้าถึงอุปกรณ์ USB ที่เชื่อมต่ออยู่</translation>
 <translation id="111910763555783249">การตั้งค่าการแจ้งเตือน</translation>
@@ -934,7 +933,6 @@
 <translation id="1962864958436828230">ตั้งขีดจำกัดข้อมูลขนาดเล็กสำหรับข้อจำกัดของคลิปบอร์ดเพื่อป้องกันข้อมูลรั่วไหล</translation>
 <translation id="1964634611280150550">ปิดใช้งานโหมดไม่ระบุตัวตน</translation>
 <translation id="1964802606569741174">นโยบายนี้ไม่มีผลสำหรับแอป YouTube ของ Android หากมีการใช้โหมดปลอดภัยใน YouTube ควรยกเลิกการอนุญาตการติดตั้งแอป YouTube ใน Android</translation>
-<translation id="1967334955994230472">ปิดใช้โปรเจ็กเตอร์</translation>
 <translation id="1969212217917526199">ลบล้างนโยบายในเวอร์ชันการแก้ปัญหาของโฮสต์การเข้าถึงระยะไกล
 
           ค่านี้จะได้รับการแยกวิเคราะห์เป็นพจนานุกรม JSON ของชื่อนโยบายไปยังการจับคู่ค่านโยบาย</translation>
@@ -2262,7 +2260,6 @@
 <translation id="328347261792478720">โดยค่าเริ่มต้น เบราว์เซอร์จะแสดงคำแนะนำสื่อที่มีการปรับเปลี่ยนในแบบของผู้ใช้ การตั้งค่านโยบายนี้เป็น "ปิดใช้" จะทำให้ระบบซ่อนคำแนะนำเหล่านี้ไม่ให้ผู้ใช้เห็น การตั้งค่านโยบายนี้เป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้ระบบแสดงคำแนะนำสื่อต่อผู้ใช้</translation>
 <translation id="3284094172359247914">ควบคุมการใช้ WebUSB API</translation>
 <translation id="3288595667065905535">ช่องเผยแพร่</translation>
-<translation id="3291318845269544294">เปิดใช้โปรเจ็กเตอร์</translation>
 <translation id="3294430356898755483">การตั้งค่านโยบายนี้จะทำให้ผู้ดูแลระบบตั้งค่ารายการเครื่องพิมพ์สำหรับผู้ใช้ได้ การเลือกเครื่องพิมพ์เกิดขึ้นในครั้งแรกที่ผู้ใช้พยายามจะสั่งพิมพ์
 
       นโยบายนี้ใช้ในการดำเนินการต่อไปนี้
@@ -2328,7 +2325,6 @@
           ควรระบุค่าของนโยบายเป็นมิลลิวินาที ค่าจะถูกบีบให้เหลือน้อยกว่าหรือเท่ากับระยะหน่วงเวลาของการไม่มีความเคลื่อนไหว
 
           ข้อความเตือนจะแสดงต่อเมื่อการทำงานสำหรับการไม่มีความเคลื่อนไหวคือการออกจากระบบหรือการปิดเครื่อง</translation>
-<translation id="3360280740977649313">นโยบายการควบคุมโปรเจ็กเตอร์</translation>
 <translation id="3360490004791301756">อนุญาตให้ผู้ใช้แลกรับข้อเสนอผ่านการลงทะเบียน <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3363360928811201045">เพิ่มข้อจำกัดในบัญชีที่จัดการ</translation>
 <translation id="3373381043600809954">เปิดใช้ <ph name="PRODUCT_NAME" /></translation>
@@ -2526,7 +2522,6 @@
 <translation id="3628480121685794414">เปิดใช้การพิมพ์แบบด้านเดียว</translation>
 <translation id="3634125384445314047">อนุญาตให้เข้าถึงรูปภาพและวิดีโอล่าสุดที่ถ่ายในโทรศัพท์ผ่านฮับโทรศัพท์</translation>
 <translation id="3643284063603988867">เปิดใช้ฟีเจอร์ "จำรหัสผ่าน"</translation>
-<translation id="3644278943784332493">เปิดการลองใช้โปรเจ็กเตอร์สำหรับผู้ใช้ Family Link</translation>
 <translation id="3644735978203799620">เปิดใช้การเลือกอัตโนมัติสำหรับการจับภาพหลายหน้าจอ</translation>
 <translation id="3646859102161347133">ตั้งค่าประเภทของแว่นขยายหน้าจอ</translation>
 <translation id="3647212518036289905">การตั้งค่านโยบายจะระบุไลบรารี GSSAPI ที่จะใช้สำหรับการตรวจสอบสิทธิ์ HTTP จะตั้งค่านโยบายเป็นชื่อไลบรารีหรือเส้นทางแบบเต็มก็ได้
@@ -4934,12 +4929,6 @@
       การตั้งค่านโยบายเป็น "ปิดใช้" จะปิดการเพิ่มประสิทธิภาพ WPAD ซึ่งทำให้ <ph name="PRODUCT_NAME" /> ต้องรอเซิร์ฟเวอร์ WPAD แบบใช้ DNS เป็นเวลานานขึ้น
 
       ไม่ว่าจะมีการตั้งค่านโยบายนี้หรือไม่ ผู้ใช้จะเปลี่ยนการตั้งค่าการเพิ่มประสิทธิภาพ WPAD ไม่ได้</translation>
-<translation id="6365249741643189510">นโยบายนี้ให้สิทธิ์โปรเจ็กเตอร์ในการสร้างและถอดเสียงการบันทึกหน้าจอ รวมถึงอัปโหลดไปที่ไดรฟ์สำหรับผู้ใช้ระดับองค์กร
-      นโยบายนี้ไม่มีผลต่อผู้ใช้ Family Link
-      นโยบายนี้ไม่มีผลต่อนโยบาย <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> สำหรับผู้ใช้ Family Link
-
-      หากไม่ได้ตั้งค่านโยบายหรือเปิดใช้ไว้ ระบบจะเปิดใช้โปรเจ็กเตอร์
-      หากปิดใช้นโยบาย ระบบจะปิดใช้โปรเจ็กเตอร์</translation>
 <translation id="6366574325767783825">การตั้งค่านโยบายเป็น "จริง" หรือไม่ได้ตั้งค่าหมายความว่า <ph name="PRODUCT_NAME" /> จะยอมรับเนื้อหาเว็บที่แสดงเป็น Signed HTTP Exchange
 
       การตั้งค่านโยบายเป็น "เท็จ" จะป้องกันไม่ให้ Signed HTTP Exchange โหลด</translation>
@@ -5480,13 +5469,6 @@
       ภาษาที่รองรับในขณะนี้ ได้แก่ af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi</translation>
 <translation id="6926703471186170050">เปิดใช้การพิมพ์ 2 ด้านตามขอบด้านยาว</translation>
 <translation id="6929746927224321095">ปิดใช้การป้อนข้อความอัตโนมัติ</translation>
-<translation id="6930459178825296156">นโยบายนี้เปิดใช้ฟีเจอร์โปรเจ็กเตอร์สำหรับผู้ใช้ Family Link และให้สิทธิ์ในการสร้างและถอดเสียงการบันทึกหน้าจอและอัปโหลดไปยังไดรฟ์
-      นโยบายนี้ไม่มีผลต่อผู้ใช้ประเภทอื่นๆ
-      นโยบายนี้ไม่มีผลต่อนโยบาย <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> สำหรับผู้ใช้ระดับองค์กร
-
-      หากเปิดใช้นโยบาย ระบบจะเปิดการลองใช้โปรเจ็กเตอร์สำหรับผู้ใช้ Family Link
-      หากปิดใช้นโยบาย ระบบจะปิดการลองใช้โปรเจ็กเตอร์สำหรับผู้ใช้ Family Link
-      หากไม่ได้ตั้งค่านโยบาย การลองใช้โปรเจ็กเตอร์จะปิดโดยค่าเริ่มต้นสำหรับผู้ใช้ Family Link</translation>
 <translation id="6931242315485576290">ปิดใช้งานการซิงค์ข้อมูลกับ Google</translation>
 <translation id="6940243892299228102">ไม่อนุญาตให้ผู้ใช้ใช้เทมเพลตเดสก์</translation>
 <translation id="6943577887654905793">ชื่อค่ากำหนด Mac/Linux:</translation>
@@ -6368,7 +6350,6 @@
       กำหนด ID ของส่วนขยายที่จะใช้เป็นโปรแกรมรักษาหน้าจอบนหน้าจอลงชื่อเข้าใช้ ส่วนขยายนี้ต้องเป็นส่วนหนึ่งของ AppPack ซึ่งได้รับการกำหนดค่าสำหรับโดเมนนี้ผ่านทางนโยบาย DeviceAppPack</translation>
 <translation id="7882890448959833986">ระงับคำเตือนระบบปฏิบัติการที่ไม่ได้รับการสนับสนุน</translation>
 <translation id="788480874436328004">ปิดใช้การบันทึกรหัสผ่านด้วยเครื่องมือจัดการรหัสผ่าน</translation>
-<translation id="7885255514815321350">ปิดการลองใช้โปรเจ็กเตอร์สำหรับผู้ใช้ Family Link</translation>
 <translation id="7887379840451099426">การตั้งค่าการจัดการพลังงานจะมีผลต่อเมื่ออุปกรณ์ทำงานโดยใช้แบตเตอรี่เท่านั้น</translation>
 <translation id="7891884447851425349">หาก <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> เปิดอยู่ การตั้งค่า <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> จะระบุ URL ของเครื่องมือค้นหาที่ใช้ระหว่างการค้นหาที่เป็นค่าเริ่มต้น URL ดังกล่าวควรมีสตริง <ph name="SEARCH_TERM_MARKER" /> ซึ่งข้อความค้นหาของผู้ใช้จะมาแทนที่ในการค้นหา
 
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index 4b5acd8..d195798 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Güvenli bağlantılar için varsayılan simgeler kullanın</translation>
 <translation id="1107538157073168076">Analizler uzantısını devre dışı bırak</translation>
 <translation id="1110426799149444997"><ph name="GOOGLE_LENS_PRODUCT_NAME" /> bölge aramayı devre dışı bırakın.</translation>
-<translation id="1111781754511998498">Projektör</translation>
 <translation id="1117535567637097036">Bu politika aracılığıyla ayarlanan protokol işleyicileri, Android amaçları işlenirken kullanılmaz.</translation>
 <translation id="1118093128235245168">Sitelerin, bağlı bir USB cihazına erişmek için kullanıcıdan izin istemesine izin ver</translation>
 <translation id="111910763555783249">Bildirim ayarları</translation>
@@ -948,7 +947,6 @@
 <translation id="1962864958436828230">Veri sızıntısını önleme amaçlı pano kısıtlaması için minimum boyut sınırını belirleyin</translation>
 <translation id="1964634611280150550">Gizli mod devre dışı</translation>
 <translation id="1964802606569741174">Bu politikanın Android YouTube uygulaması üzerinde hiçbir etkisi yoktur. YouTube'da Güvenlik Modu uygulanacaksa Android YouTube uygulamasının yüklenmesine izin verilmemelidir.</translation>
-<translation id="1967334955994230472">Projektörü devre dışı bırak</translation>
 <translation id="1969212217917526199">Uzaktan erişim ana makinesinin Hata Ayıklama yapılarındaki politikaları geçersiz kılar.
 
           Değer, politika adı ile politika değeri eşleşmelerinin olduğu bir JSON sözlüğü olarak ayrıştırılır.</translation>
@@ -2276,7 +2274,6 @@
 <translation id="328347261792478720">Varsayılan olarak tarayıcı, kullanıcıya göre kişiselleştirilmiş medya önerileri gösterir. Bu politika Devre Dışı değerine ayarlanırsa bu öneriler kullanıcıdan gizlenir. Bu politika Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa kullanıcıya medya önerileri gösterilir.</translation>
 <translation id="3284094172359247914">WebUSB API'sinin kullanımını kontrol et</translation>
 <translation id="3288595667065905535">Yeni sürüm kanalı</translation>
-<translation id="3291318845269544294">Projektörü etkinleştir</translation>
 <translation id="3294430356898755483">Politika ayarlanırsa yöneticiler kullanıcıları için bir yazıcı listesi oluşturur. Yazıcı seçimi, kullanıcılar ilk kez yazdırmaya çalıştığında yapılır.
 
       Politikayı kullanarak:
@@ -2346,7 +2343,6 @@
           Politika değeri milisaniye olarak belirtilmelidir. Değerler boşta kalma gecikmesinin altında veya o gecikmeye eşit olacak şekilde ayarlanır.
 
           Uyarı mesajı yalnızca boşta kalma işlemi, çıkış yapma veya cihazı kapatma olduğunda gösterilir.</translation>
-<translation id="3360280740977649313">Projektör politikalarını kontrol eder.</translation>
 <translation id="3360490004791301756">Kullanıcıların <ph name="PRODUCT_OS_NAME" /> kaydı üzerinden teklif kullanmasına izin ver</translation>
 <translation id="3363360928811201045">Yönetilen hesaplara kısıtlama ekleme</translation>
 <translation id="3373381043600809954"><ph name="PRODUCT_NAME" /> özelliğini etkinleştir</translation>
@@ -2546,7 +2542,6 @@
 <translation id="3628480121685794414">Tek yönlü yazdırmayı etkinleştir</translation>
 <translation id="3634125384445314047">Telefonda çekilen son fotoğraflara ve videolara Telefon Merkezi aracılığıyla erişime izin ver.</translation>
 <translation id="3643284063603988867">"Şifreyi hatırla" özelliğini etkinleştir</translation>
-<translation id="3644278943784332493">Family Link kullanıcıları için Projector test sürümünü etkinleştir</translation>
 <translation id="3644735978203799620">Çoklu ekran görüntüleri için otomatik seçimi etkinleştirir</translation>
 <translation id="3646859102161347133">Ekran büyüteci türünü ayarla</translation>
 <translation id="3647212518036289905">Politikanın ayarlanması, HTTP kimlik doğrulaması için hangi GSSAPI kitaplığının kullanılacağını belirtir. Politikayı bir kitaplık adı veya tam yol olarak ayarlayın.
@@ -3178,6 +3173,13 @@
 <translation id="4347908978527632940">Doğru seçeneğine ayarlanırsa ve kullanıcı denetlenen bir kullanıcıysa, diğer Android uygulamaları kullanıcının web kısıtlamalarını bir içerik sağlayıcısı aracılığıyla sorgulayabilir.
 
           Yanlış seçeneğine ayarlanırsa veya ayarlanmadan bırakılırsa içerik sağlayıcısı herhangi bir bilgi sağlamaz.</translation>
+<translation id="4357587374229381015">Kullanıcı adı alanını otomatik olarak doldurmak için SAML IdP giriş sayfasında kullanılacak bir URL parametresi adı belirtir.
+
+      URL parametresinin değeri olarak kullanıcının <ph name="PRODUCT_OS_NAME" /> profiliyle ilişkilendirilmiş e-posta adresi kullanılır. Bu nedenle, SAML IdP ile farklı e-posta adresleri kullanmayı düşünen kullanıcılar için bu ayar devre dışı bırakılmalıdır.
+
+      Bu ayar ayarlanmadan bırakılırsa kullanıcıların, SAML IdP giriş sayfasında kullanıcı adlarını manuel olarak girmeleri gerekir.
+
+      Bu politika, oturum açma ve kilit ekranlarında online kimlik doğrulamayı etkiler.</translation>
 <translation id="4363057787588706121">Farklı kaynaklara ait liste politikalarını birleştirmeye izin ver</translation>
 <translation id="4363101430102811068">Girilen kimlik bilgileri için sızıntı algılamayı etkinleştir</translation>
 <translation id="436581050240847513">Cihaz ağ arayüzlerini rapor etme</translation>
@@ -4983,12 +4985,6 @@
       Politika, Devre Dışı değerine ayarlanırsa WPAD optimizasyonu devre dışı bırakılarak <ph name="PRODUCT_NAME" /> ürününün DNS tabanlı WPAD sunucularını daha fazla beklemesine neden olur.
 
       Bu politika ayarlansa da ayarlanmasa da kullanıcılar WPAD optimizasyonu ayarını değiştiremez.</translation>
-<translation id="6365249741643189510">Bu politika, kurumsal kullanıcılar için Projector uygulamasının ekran kaydı oluşturup metne dönüştürmesine ve bunları Drive'a yüklemesine izin verir.
-      Bu politika Family Link kullanıcılarını etkilemez.
-      Bu politika Family Link kullanıcıları için <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> politikasını etkilemez.
-
-      Politika ayarlanmazsa veya etkinleştirilirse Projector etkinleştirilir.
-      Politika devre dışı bırakılırsa Projector da devre dışı bırakılır.</translation>
 <translation id="6366574325767783825">Politika True (Doğru) değerine ayarlanır veya ayarlanmadan bırakılırsa <ph name="PRODUCT_NAME" />, İmzalanmış HTTP Takası olarak yayınlanan web içeriklerini kabul eder.
 
       Politikanın False (Yanlış) değerine ayarlanması, İmzalanmış HTTP Takası içeriğinin yüklenmesini önler.</translation>
@@ -5530,13 +5526,6 @@
       Şu anda desteklenen diller şunlardır: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="6926703471186170050">Uzun kenar dupleks yazdırmayı etkinleştir</translation>
 <translation id="6929746927224321095">Otomatik Doldurmayı Devre Dışı Bırak</translation>
-<translation id="6930459178825296156">Bu politika, Family Link kullanıcıları için Projector özelliğini etkinleştirir ve bu özelliğin ekran kaydı oluşturup metne dönüştürmesine, ayrıca bunları Drive'a yüklemesine izin verir.
-      Bu politika diğer kullanıcı türlerini etkilemez.
-      Bu politika kurumsal kullanıcılar için <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> politikasını etkilemez.
-
-      Bu politika etkinleştirilirse Family Link kullanıcıları için Projector test sürümü etkinleştirilir.
-      Politika devre dışı bırakılırsa Family Link kullanıcıları için Projector test sürümü devre dışı kalır.
-      Politika ayarlanmazsa Family Link kullanıcıları için Projector test sürümü varsayılan olarak devre dışı olur.</translation>
 <translation id="6931242315485576290">Google ile veri senkronizasyonunu devre dışı bırak</translation>
 <translation id="6940243892299228102">Kullanıcıların masa şablonları kullanmalarına izin verme</translation>
 <translation id="6943577887654905793">Mac/Linux tercih adı:</translation>
@@ -6423,7 +6412,6 @@
       Oturum açma ekranında ekran koruyucu olarak kullanılacak uzantının kimliğini belirler. Uzantı, DeviceAppPack politikası kullanılarak bu alan adı için yapılandırılmış AppPack'in bir parçası olmalıdır.</translation>
 <translation id="7882890448959833986">Desteklenmeyen OS uyarısını gizle</translation>
 <translation id="788480874436328004">Şifre yöneticisini kullanarak şifre kaydetmeyi devre dışı bırak</translation>
-<translation id="7885255514815321350">Family Link kullanıcıları için Projector test sürümünü devre dışı bırak</translation>
 <translation id="7887379840451099426">Yalnızca pil gücüyle çalışırken geçerli olan güç yönetimi ayarları</translation>
 <translation id="7891884447851425349"><ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> açıksa <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> politikasının ayarlanması, varsayılan arama sırasında kullanılan arama motorunu belirtir. URL, sorguda kullanıcının arama terimi ile değiştirilen <ph name="SEARCH_TERM_MARKER" /> dizesini içermelidir.
 
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index c796e351..8ae4a2c 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Використовувати для надійних з’єднань значки за умовчанням</translation>
 <translation id="1107538157073168076">Вимкнути розширення статистики</translation>
 <translation id="1110426799149444997">Вимкнути пошук за областю зображення в сервісі <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
-<translation id="1111781754511998498">Projector</translation>
 <translation id="1117535567637097036">Обробники протоколу, налаштовані за допомогою цього правила, не використовуються під час обробки намірів Android.</translation>
 <translation id="1118093128235245168">Дозволити сайтам запитувати в користувача доступ до підключеного пристрою USB</translation>
 <translation id="111910763555783249">Налаштування сповіщень</translation>
@@ -961,7 +960,6 @@
 <translation id="1962864958436828230">Установити мінімальний обсяг для обмеження буфера обміну, пов’язаного із запобіганням витоку даних</translation>
 <translation id="1964634611280150550">Режим анонімного перегляду вимкнено</translation>
 <translation id="1964802606569741174">Це правило не впливає на додаток YouTube на пристрої Android. Щоб для YouTube використовувався Безпечний режим, забороніть встановлення додатка YouTube на пристрої Android.</translation>
-<translation id="1967334955994230472">Вимкнути Projector</translation>
 <translation id="1969212217917526199">Замінює правила налагоджувальних складань хосту віддаленого доступу.
 
           Це значення обробляється як каталог JSON із назвою правила та зіставляється зі значеннями правила.</translation>
@@ -2300,7 +2298,6 @@
 <translation id="328347261792478720">За умовчанням веб-переглядач показуватиме рекомендації медіа, персоналізовані для користувача. Якщо це правило вимкнено, користувач не бачитиме таких рекомендацій. Якщо це правило ввімкнено або не налаштовано, користувачі бачитимуть рекомендації медіа.</translation>
 <translation id="3284094172359247914">Контролювати використання API WebUSB</translation>
 <translation id="3288595667065905535">Версія випуску</translation>
-<translation id="3291318845269544294">Увімкнути Projector</translation>
 <translation id="3294430356898755483">За допомогою цього правила адміністратори можуть налаштовувати принтери для своїх користувачів. Користувачі вибирають принтер під час першого друку.
 
       Перш ніж застосовувати це правило, зверніть увагу на інформацію нижче.
@@ -2373,7 +2370,6 @@
           Значення правила вказуються в мілісекундах. Крім того, вони не можуть перевищувати тривалість затримки через неактивність.
 
           Застереження з'являється, лише якщо потрібно вийти із системи чи завершити роботу.</translation>
-<translation id="3360280740977649313">Контролює правила, що застосовуються до Projector.</translation>
 <translation id="3360490004791301756">Дозволяти користувачам отоварювати пропозиції через реєстрацію в <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3363360928811201045">Додати обмеження для керованих облікових записів</translation>
 <translation id="3373381043600809954">Увімкнути функцію "<ph name="PRODUCT_NAME" />".</translation>
@@ -2573,7 +2569,6 @@
 <translation id="3628480121685794414">Увімкнути односторонній друк</translation>
 <translation id="3634125384445314047">Дозволити отримувати доступ до нещодавніх фото й відео, знятих на цьому телефоні, за допомогою функції "Керування телефоном".</translation>
 <translation id="3643284063603988867">Увімкнути функцію "Запам’ятати пароль"</translation>
-<translation id="3644278943784332493">Увімкнути версію Projector для внутрішнього тестування для користувачів Family Link</translation>
 <translation id="3644735978203799620">Вмикає автоматичний вибір для записів екрана на різних пристроях</translation>
 <translation id="3646859102161347133">Установити тип лупи</translation>
 <translation id="3647212518036289905">Налаштування цього правила визначають, яку бібліотеку GSSAPI використовувати для автентифікації HTTP. Для цього правила можна вказати назву бібліотеки або повний шлях.
@@ -5026,12 +5021,6 @@
       Якщо це правило вимкнено, оптимізацію WPAD буде деактивовано. Через це <ph name="PRODUCT_NAME" /> довше чекатиме на відповідь серверів WPAD на основі DNS.
 
       Незалежно від того, чи це правило налаштовано, користувачі не зможуть змінювати параметри оптимізації WPAD.</translation>
-<translation id="6365249741643189510">Для корпоративних користувачів це правило дає функції Projector дозвіл на запис відео з екрана та його перетворення на текст, а також завантаження на Диск.
-      Це правило не впливає на користувачів Family Link
-      і не стосується правила <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> для користувачів Family Link.
-
-      Якщо це правило не налаштовано або ввімкнено, Projector буде ввімкнено,
-      а якщо його вимкнути, Projector буде вимкнено.</translation>
 <translation id="6366574325767783825">Якщо для цього правила вибрано значення True або його не налаштовано, <ph name="PRODUCT_NAME" /> прийматиме веб-контент, який розміщено через технологію Signed HTTP Exchange.
 
       Якщо для цього правила вибрано значення False, такий контент не завантажуватиметься.</translation>
@@ -5572,13 +5561,6 @@
       Наразі підтримуються такі мови: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
 <translation id="6926703471186170050">Увімкнути двосторонній друк за довгим краєм</translation>
 <translation id="6929746927224321095">Вимкнути функцію автозаповнення</translation>
-<translation id="6930459178825296156">Це правило вмикає функцію Projector для користувачів Family Link і дає їй дозвіл на запис відео з екрана, його перетворення на текст, а також завантаження на Диск.
-      Це правило не впливає на інших користувачів
-      і не стосується правила <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> для корпоративних користувачів.
-
-      Якщо правило ввімкнути, версію Projector для внутрішнього тестування буде ввімкнено для користувачів Family Link.
-      Якщо вимкнути, версію Projector для внутрішнього тестування буде вимкнено для користувачів Family Link.
-      Якщо це правило не налаштувати, версію Projector для внутрішнього тестування буде за умовчанням вимкнено для користувачів Family Link.</translation>
 <translation id="6931242315485576290">Вимкнути синхронізацію даних із Google</translation>
 <translation id="6940243892299228102">Заборонити користувачам застосовувати макети робочого столу</translation>
 <translation id="6943577887654905793">Назва налаштування в Mac/Linux:</translation>
@@ -6463,7 +6445,6 @@
       Визначає ідентифікатор розширення, яке має використовуватись як заставка на екрані входу. Це розширення має входити в пакет AppPack, налаштований для цього домену за допомогою правила DeviceAppPack.</translation>
 <translation id="7882890448959833986">Блокування застереження в непідтримуваних ОС</translation>
 <translation id="788480874436328004">Вимкнути зберігання паролів у менеджері паролів</translation>
-<translation id="7885255514815321350">Вимкнути версію Projector для внутрішнього тестування для користувачів Family Link</translation>
 <translation id="7887379840451099426">Параметри керування живленням, що застосовуються лише під час роботи від акумулятора</translation>
 <translation id="7891884447851425349">Якщо правило <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> увімкнено, то параметр <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> указує URL-адресу пошукової системи за умовчанням. URL-адреса має містити сегмент <ph name="SEARCH_TERM_MARKER" />, який у запиті замінюється пошуковим терміном користувача.
 
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 9f42194..03c900b 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">Sử dụng biểu tượng mặc định cho các kết nối an toàn</translation>
 <translation id="1107538157073168076">Tắt tiện ích thông tin chi tiết</translation>
 <translation id="1110426799149444997">Tắt tính năng tìm kiếm khu vực của <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
-<translation id="1111781754511998498">Máy chiếu</translation>
 <translation id="1117535567637097036">Trình xử lý giao thức được đặt qua chính sách này không được sử dụng khi xử lý các cơ chế của Android.</translation>
 <translation id="1118093128235245168">Cho phép các trang web yêu cầu người dùng cấp quyền truy cập vào một thiết bị USB đã kết nối</translation>
 <translation id="111910763555783249">Cài đặt thông báo</translation>
@@ -965,7 +964,6 @@
 <translation id="1962864958436828230">Đặt giới hạn kích thước tối thiểu để ngăn chặn rò rỉ dữ liệu theo quy tắc hạn chế khay nhớ tạm</translation>
 <translation id="1964634611280150550">Đã tắt chế độ ẩn danh</translation>
 <translation id="1964802606569741174">Chính sách này không ảnh hưởng đến ứng dụng YouTube trên Android. Nếu bị buộc phải sử dụng Chế độ an toàn trên YouTube thì việc cài đặt ứng dụng YouTube trên Android sẽ không được cho phép.</translation>
-<translation id="1967334955994230472">Tắt Máy chiếu</translation>
 <translation id="1969212217917526199">Ghi đè chính sách trên bản dựng Gỡ lỗi của máy chủ truy cập từ xa.
 
           Giá trị được phân tích cú pháp như từ điển JSON của tên chính sách đối với các ánh xạ giá trị chính sách.</translation>
@@ -2303,7 +2301,6 @@
 <translation id="328347261792478720">Theo mặc định, trình duyệt sẽ hiển thị các mục đề xuất nội dung nghe nhìn phù hợp với người dùng. Nếu bạn đặt chính sách này thành Tắt, thì các mục đề xuất này sẽ không hiển thị với người dùng. Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì các mục đề xuất nội dung nghe nhìn sẽ hiển thị cho người dùng.</translation>
 <translation id="3284094172359247914">Kiểm soát việc sử dụng API WebUSB</translation>
 <translation id="3288595667065905535">Kênh phát hành</translation>
-<translation id="3291318845269544294">Bật Máy chiếu</translation>
 <translation id="3294430356898755483">Nếu bạn đặt chính sách này, quản trị viên có thể thiết lập một danh sách máy in cho người dùng của họ. Máy in sẽ được chọn ngay trong lần đầu tiên người dùng cố gắng in.
 
       Bạn có thể sử dụng chính sách này cho các mục đích sau:
@@ -2376,7 +2373,6 @@
           Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ tạm vắng.
 
           Thông báo cảnh báo chỉ hiển thị nếu hành động ở chế độ tạm vắng là hành động đăng xuất hoặc tắt nguồn.</translation>
-<translation id="3360280740977649313">Chính sách kiểm soát cho Máy chiếu.</translation>
 <translation id="3360490004791301756">Cho phép người dùng sử dụng ưu đãi thông qua gói Đăng ký <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3363360928811201045">Thêm các quy định hạn chế đối với tài khoản được quản lý</translation>
 <translation id="3373381043600809954">Bật <ph name="PRODUCT_NAME" /></translation>
@@ -2577,7 +2573,6 @@
 <translation id="3628480121685794414">Bật chế độ in một mặt</translation>
 <translation id="3634125384445314047">Cho phép truy cập ảnh và video mới chụp/quay trên điện thoại thông qua Trung tâm điều khiển điện thoại.</translation>
 <translation id="3643284063603988867">Bật tính năng 'Nhớ mật khẩu'</translation>
-<translation id="3644278943784332493">Bật thử nghiệm nội bộ Projector cho người dùng Family Link</translation>
 <translation id="3644735978203799620">Cho phép tự động chọn để chụp ảnh nhiều màn hình</translation>
 <translation id="3646859102161347133">Đặt loại kính lúp màn hình</translation>
 <translation id="3647212518036289905">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định thư viện GSSAPI dùng để xác thực HTTP. Hãy đặt chính sách này thành tên thư viện hoặc đường dẫn đầy đủ.
@@ -3198,6 +3193,13 @@
 <translation id="4347908978527632940">Nếu đúng và người dùng là người dùng được giám sát thì các ứng dụng Android khác có thể truy vấn các giới hạn web của người dùng thông qua nhà cung cấp nội dung.
 
           Nếu sai hoặc chưa đặt thì nhà cung cấp nội dung sẽ không trả về thông tin nào.</translation>
+<translation id="4357587374229381015">Chỉ định tên tham số URL mà hệ thống sẽ sử dụng để tự động điền vào trường tên người dùng trên trang đăng nhập SAML IdP.
+
+      Địa chỉ email được liên kết với hồ sơ <ph name="PRODUCT_OS_NAME" /> của người dùng sẽ được dùng làm giá trị cho tham số URL. Do đó, bạn nên tắt chế độ cài đặt này nếu dự kiến rằng người dùng sẽ sử dụng nhiều địa chỉ email trên trang SAML IdP.
+
+      Nếu bạn không thiết lập chế độ cài đặt này, người dùng sẽ cần tự nhập tên người dùng trên trang đăng nhập SAML IdP.
+
+      Chính sách này ảnh hưởng đến khả năng xác thực trực tuyến trên màn hình đăng nhập và màn hình khoá.</translation>
 <translation id="4363057787588706121">Cho phép hợp nhất các chính sách trong danh sách thuộc các nguồn khác nhau</translation>
 <translation id="4363101430102811068">Bật tùy chọn phát hiện rò rỉ thông tin đăng nhập đã nhập</translation>
 <translation id="436581050240847513">Báo cáo giao diện mạng thiết bị</translation>
@@ -5003,12 +5005,6 @@
       Nếu bạn đặt chính sách này thành Tắt, tính năng tối ưu hóa WPAD sẽ tắt. Điều này khiến <ph name="PRODUCT_NAME" /> phải đợi máy chủ WPAD dựa trên DNS trong khoảng thời gian lâu hơn.
 
       Cho dù bạn có đặt chính sách này hay không thì người dùng cũng không thể thay đổi tùy chọn cài đặt tối ưu hóa WPAD.</translation>
-<translation id="6365249741643189510">Chính sách này cấp quyền Projector để tạo và chép lời trên bản ghi màn hình rồi tải lên Drive cho người dùng doanh nghiệp.
-      Chính sách này không ảnh hưởng đến người dùng Family Link.
-      Chính sách này không ảnh hưởng đến chính sách <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> cho người dùng Family Link.
-
-      Nếu bạn chưa đặt hoặc đã bật chính sách này, Projector sẽ được bật.
-      Nếu bạn tắt chính sách này, Projector sẽ bị tắt.</translation>
 <translation id="6366574325767783825">Nếu bạn không đặt hoặc đặt chính sách này thành True, thì <ph name="PRODUCT_NAME" /> sẽ chấp nhận nội dung web được phân phối dưới dạng Signed HTTP Exchanges.
 
       Nếu bạn đặt chính sách này thành False, thì Signed HTTP Exchanges sẽ không tải được.</translation>
@@ -5549,13 +5545,6 @@
       Các ngôn ngữ hiện được hỗ trợ là: tiếng Afrikaans - Nam Phi, tiếng Bulgaria, tiếng Catalan, tiếng Séc, tiếng Đan Mạch, tiếng Đức, tiếng Hy Lạp, tiếng Anh - Úc, tiếng Anh - Canada, tiếng Anh - Anh, tiếng Anh - Mỹ, tiếng Tây Ban Nha, tiếng Tây Ban Nha-419, tiếng Tây Ban Nha - Argentina, tiếng Tây Ban Nha - Tây Ban Nha, tiếng Tây Ban Nha - Mexico, tiếng Tây Ban Nha - Mỹ, tiếng Estonia, tiếng Ba Tư, tiếng Faroe, tiếng Pháp, tiếng Do Thái, tiếng Hindi, tiếng Croatia, tiếng Hungary, tiếng Indonesia, tiếng Ý, tiếng Hàn, tiếng Lithuania, tiếng Latvia, tiếng Bokmål, tiếng Hà Lan, tiếng Ba Lan, tiếng Bồ Đào Nha - Brazil, tiếng Bồ Đào Nha - Bồ Đào Nha, tiếng Rumani, tiếng Nga, tiếng Serbo - Croatia, tiếng Slovak, tiếng Slovenia, tiếng Albania, tiếng Serbia, tiếng Thụy Điển, tiếng Tamil, tiếng Tajik, tiếng Thổ Nhĩ Kỳ, tiếng Ukraina, tiếng Việt.</translation>
 <translation id="6926703471186170050">Bật chế độ in hai mặt với cạnh dài</translation>
 <translation id="6929746927224321095">Tắt tính năng Tự động điền</translation>
-<translation id="6930459178825296156">Chính sách này bật tính năng Projector cho người dùng Family Link và cấp quyền tạo và chép lại bản ghi màn hình cũng như tải lên Drive.
-      Chính sách này không ảnh hưởng đến các loại người dùng khác.
-      Chính sách này không ảnh hưởng đến chính sách <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> cho người dùng doanh nghiệp.
-
-      Nếu bạn bật chính sách này, thử nghiệm nội bộ Projector sẽ được bật cho người dùng Family Link.
-      Nếu bạn tắt chính sách này, thử nghiệm nội bộ Projector sẽ bị tắt đối với người dùng Family Link.
-      Nếu bạn không thiết lập chính sách này, thì theo mặc định, thử nghiệm nội bộ Projector sẽ bị tắt đối với người dùng Family Link.</translation>
 <translation id="6931242315485576290">Tắt đồng bộ hóa dữ liệu với Google</translation>
 <translation id="6940243892299228102">Không cho phép người dùng sử dụng các mẫu không gian làm việc</translation>
 <translation id="6943577887654905793">Tên tùy chọn Mac/Linux:</translation>
@@ -6442,7 +6431,6 @@
       Xác định id của tiện ích được sử dụng làm trình bảo vệ màn hình trên màn hình đăng nhập. Tiện ích phải thuộc AppPack được định cấu hình cho miền này thông qua chính sách DeviceAppPack.</translation>
 <translation id="7882890448959833986">Ẩn cảnh báo hệ điều hành không được hỗ trợ</translation>
 <translation id="788480874436328004">Tắt tính năng lưu mật khẩu bằng trình quản lý mật khẩu</translation>
-<translation id="7885255514815321350">Tắt thử nghiệm nội bộ Projector cho người dùng Family Link</translation>
 <translation id="7887379840451099426">Các tùy chọn cài đặt quản lý nguồn điện chỉ được áp dụng khi chạy bằng pin</translation>
 <translation id="7891884447851425349">Nếu bạn bật <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />, thì thao tác đặt <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> sẽ chỉ định URL của công cụ tìm kiếm dùng để tìm kiếm mặc định. URL phải chứa chuỗi <ph name="SEARCH_TERM_MARKER" />. Chuỗi này sẽ được thay bằng cụm từ tìm kiếm của người dùng trong truy vấn.
 
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index e36de10..710066d 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">使用默认图标表示安全连接</translation>
 <translation id="1107538157073168076">停用数据洞见扩展程序</translation>
 <translation id="1110426799149444997">停用 <ph name="GOOGLE_LENS_PRODUCT_NAME" />区域搜索。</translation>
-<translation id="1111781754511998498">投影仪</translation>
 <translation id="1117535567637097036">通过此政策设置的协议处理程序不会被用于处理 Android intent。</translation>
 <translation id="1118093128235245168">允许网站请求用户授权其访问所连接的 USB 设备</translation>
 <translation id="111910763555783249">通知设置</translation>
@@ -932,7 +931,6 @@
 <translation id="1962864958436828230">设定数据大小下限以与旨在预防数据泄露的剪贴板限制规则搭配使用</translation>
 <translation id="1964634611280150550">隐身模式已停用</translation>
 <translation id="1964802606569741174">此政策对 Android 版 YouTube 应用没有任何影响。如果应在 YouTube 中强制启用安全模式,则应禁止安装 Android 版 YouTube 应用。</translation>
-<translation id="1967334955994230472">停用投影仪</translation>
 <translation id="1969212217917526199">覆盖与远程访问主机的调试版本号相关的政策。
 
           此政策的值会被解析为“政策名称-政策值”对应关系的 JSON 字典条目。</translation>
@@ -2257,7 +2255,6 @@
 <translation id="328347261792478720">默认情况下,浏览器会显示为用户量身定制的媒体推荐内容。如果此政策已停用,系统将对用户隐藏这些推荐内容。如果此政策已启用或未设置,系统则会向用户显示媒体推荐内容。</translation>
 <translation id="3284094172359247914">控制对 WebUSB API 的使用</translation>
 <translation id="3288595667065905535">发布版</translation>
-<translation id="3291318845269544294">启用投影仪</translation>
 <translation id="3294430356898755483">通过设置此政策,管理员可以为用户配置打印机列表。当用户首次尝试打印时,需要选择打印机。
 
       使用此政策可以:
@@ -2323,7 +2320,6 @@
           指定的政策值应以毫秒为单位,且不得大于闲置延迟时间。
 
           仅当闲置操作为注销或关机时,系统才会显示警告消息。</translation>
-<translation id="3360280740977649313">控制有关投影仪的政策。</translation>
 <translation id="3360490004791301756">允许用户通过注册 <ph name="PRODUCT_OS_NAME" /> 来兑换优惠</translation>
 <translation id="3363360928811201045">针对受管理的帐号添加限制</translation>
 <translation id="3373381043600809954">启用“<ph name="PRODUCT_NAME" />”。</translation>
@@ -2520,7 +2516,6 @@
 <translation id="3628480121685794414">启用单面打印</translation>
 <translation id="3634125384445314047">允许通过 Phone Hub 访问手机上近期拍摄的照片和视频。</translation>
 <translation id="3643284063603988867">启用“记住密码”功能</translation>
-<translation id="3644278943784332493">为 Family Link 用户启用投影仪 dogfood</translation>
 <translation id="3644735978203799620">允许自动选择多个屏幕截图</translation>
 <translation id="3646859102161347133">设置放大镜类型</translation>
 <translation id="3647212518036289905">通过设置此政策,您可以指定要用于 HTTP 身份验证的 GSSAPI 库。您可以将此政策设为库名称或完整路径。
@@ -4925,12 +4920,6 @@
       如果此政策已停用,系统会关闭 WPAD 优化设置,这会导致 <ph name="PRODUCT_NAME" /> 必须等待更长时间,才能收到基于 DNS 的 WPAD 服务器的响应。
 
       无论您是否设置了此政策,用户都无法更改 WPAD 优化设置。</translation>
-<translation id="6365249741643189510">此政策旨在授权投影仪为企业用户创建录屏、转录所录内容并将其上传到云端硬盘。
-      此政策不会影响 Family Link 用户。
-      此政策不会影响适用于 Family Link 用户的 <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> 政策。
-
-      如果此政策未设置或已启用,系统将启用投影仪。
-      如果此政策已停用,系统将停用投影仪。</translation>
 <translation id="6366574325767783825">如果此政策设为 True 或未设置,<ph name="PRODUCT_NAME" /> 将会接受通过 Signed HTTP Exchange (SXG) 提供的网络内容。
 
       如果此政策设为 False,系统会阻止加载 Signed HTTP Exchange (SXG) 内容。</translation>
@@ -5470,13 +5459,6 @@
       目前支持的语言包括:af、bg、ca、cs、da、de、el、en-AU、en-CA、en-GB、en-US、es、es-419、es-AR、es-ES、es-MX、es-US、et、fa、fo、fr、he、hi、hr、hu、id、it、ko、lt、lv、nb、nl、pl、pt-BR、pt-PT、ro、ru、sh、sk、sl、sq、sr、sv、ta、tg、tr、uk、vi。</translation>
 <translation id="6926703471186170050">启用长边双面打印</translation>
 <translation id="6929746927224321095">停用“自动填充”功能</translation>
-<translation id="6930459178825296156">此政策会为 Family Link 用户启用投影仪功能,并授权投影仪创建录屏、转录所录内容并将其上传到云端硬盘。
-      此政策不会影响其他类型的用户。
-      此政策不会影响适用于企业用户的 <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> 政策。
-
-      如果启用此政策,系统将为 Family Link 用户启用投影仪 dogfood。
-      如果停用此政策,系统将为 Family Link 用户停用投影仪 dogfood。
-      如果未设置此政策,则默认情况下,系统将为 Family Link 用户停用投影仪 dogfood。</translation>
 <translation id="6931242315485576290">停用与 Google 同步数据的功能</translation>
 <translation id="6940243892299228102">不允许用户使用桌面模板</translation>
 <translation id="6943577887654905793">Mac/Linux 偏好设置名称:</translation>
@@ -6359,7 +6341,6 @@
       确定在登录屏幕上用作屏幕保护程序的扩展程序的 ID。该扩展程序必须属于通过 DeviceAppPack 策略为此域配置的 AppPack。</translation>
 <translation id="7882890448959833986">禁止显示“操作系统不受支持”警告</translation>
 <translation id="788480874436328004">禁止使用密码管理器保存密码</translation>
-<translation id="7885255514815321350">为 Family Link 用户停用投影仪 dogfood</translation>
 <translation id="7887379840451099426">仅当使用电池供电时才适用的电源管理设置</translation>
 <translation id="7891884447851425349">如果 <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> 已开启,您便可通过设置 <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> 来指定在默认搜索期间使用的搜索引擎网址。该网址应包含字符串<ph name="SEARCH_TERM_MARKER" />;当用户执行查询时,系统会将此字符串替换成用户的搜索字词。
 
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index c2c87cf..e5325d77 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -103,7 +103,6 @@
 <translation id="1105572260329131950">使用預設圖示代表安全連線</translation>
 <translation id="1107538157073168076">停用深入分析擴充功能</translation>
 <translation id="1110426799149444997">停用 <ph name="GOOGLE_LENS_PRODUCT_NAME" />的區域搜尋功能。</translation>
-<translation id="1111781754511998498">Projector</translation>
 <translation id="1117535567637097036">處理 Android 意圖時,系統不會使用透過這項政策設定的通訊協定處理常式。</translation>
 <translation id="1118093128235245168">允許網站要求使用者授權存取已連線的 USB 裝置</translation>
 <translation id="111910763555783249">通知設定</translation>
@@ -941,7 +940,6 @@
 <translation id="1962864958436828230">設定防止資料外洩的剪貼簿資料大小最低限制</translation>
 <translation id="1964634611280150550">無痕模式已停用</translation>
 <translation id="1964802606569741174">這項政策對 Android YouTube 應用程式沒有影響。如要強制採用 YouTube 安全模式,則必須禁止下載 Android YouTube 應用程式。</translation>
-<translation id="1967334955994230472">停用 Projector</translation>
 <translation id="1969212217917526199">覆寫遠端存取主機的偵錯版本政策。
 
           系統會以政策名稱 JSON 字典形式剖析這個值,以對應政策值。</translation>
@@ -2259,7 +2257,6 @@
 <translation id="328347261792478720">在預設狀態下,瀏覽器會根據使用者顯示個人化的媒體推薦內容。如果將這項政策設為停用,瀏覽器會向使用者隱藏這類推薦內容。如果將這項政策設為啟用或不設定,瀏覽器會向使用者顯示媒體推薦內容。</translation>
 <translation id="3284094172359247914">控制 WebUSB API 使用權限</translation>
 <translation id="3288595667065905535">發布頻道</translation>
-<translation id="3291318845269544294">啟用 Projector</translation>
 <translation id="3294430356898755483">你可以透過這項政策,讓管理員為使用者設定印表機清單。印表機選取作業會在使用者第一次嘗試列印時啟動。
 
       這項政策的用途如下:
@@ -2325,7 +2322,6 @@
           指定政策值時需以毫秒為單位。設定值必須小於或等於閒置延遲時間。
 
           只有當閒置動作設為登出或關機時,系統才會顯示警告訊息。</translation>
-<translation id="3360280740977649313">控制 Projector 的各項政策。</translation>
 <translation id="3360490004791301756">允許使用者透過 <ph name="PRODUCT_OS_NAME" /> 註冊機制兌換優惠</translation>
 <translation id="3363360928811201045">對受管理帳戶設定限制</translation>
 <translation id="3373381043600809954">啟用「<ph name="PRODUCT_NAME" />」</translation>
@@ -2522,7 +2518,6 @@
 <translation id="3628480121685794414">啟用單面列印</translation>
 <translation id="3634125384445314047">允許他人透過 Phone Hub 存取手機上最近拍攝的相片和影片。</translation>
 <translation id="3643284063603988867">啟用「記住密碼」功能</translation>
-<translation id="3644278943784332493">為 Family Link 使用者啟用 Projector Dogfood 測試</translation>
 <translation id="3644735978203799620">擷取多個螢幕畫面時啟用自動選取功能</translation>
 <translation id="3646859102161347133">設定螢幕放大鏡類型</translation>
 <translation id="3647212518036289905">你可以透過這項政策指定要用於 HTTP 驗證的 GSSAPI 程式庫。請將這項政策設為程式庫名稱或完整路徑。
@@ -4916,13 +4911,6 @@
       如果將這項政策設為停用,系統會關閉 WPAD 最佳化功能,導致 <ph name="PRODUCT_NAME" /> 等待 DNS WPAD 伺服器的時間增加。
 
       無論這項政策是否有設定,使用者都無法變更 WPAD 最佳化設定。</translation>
-<translation id="6365249741643189510">這項政策會授予 Projector 權限,讓企業版使用者能建立及轉錄螢幕畫面錄製內容,並上傳至雲端硬碟。
-
-      這項政策不適用於 Family Link 使用者。
-      這項政策不會影響 Family Link 使用者的 <ph name="PROJECTOR_DOGFOOD_FOR_FAMILY_LINK_ENABLED_POLICY_NAME" /> 政策。
-
-      如果啟用這項政策或不設定,系統會啟用 Projector。
-      如果停用這項政策,Projector 也會隨之停用。</translation>
 <translation id="6366574325767783825">如果將這項政策設為 True 或不設定,<ph name="PRODUCT_NAME" /> 將接受透過 Signed HTTP Exchange 提供的網路內容。
 
       如果將這項政策設為 False,系統將無法載入 Signed HTTP Exchange。</translation>
@@ -5460,13 +5448,6 @@
       拼字檢查功能目前支援的語言如下:af、bg、ca、cs、da、de、el、en-AU、en-CA、en-GB、en-US、es、es-419、es-AR、es-ES、es-MX、es-US、et、fa、fo、fr、he、hi、hr、hu、id、it、ko、lt、lv、nb、nl、pl、pt-BR、pt-PT、ro、ru、sh、sk、sl、sq、sr、sv、ta、tg、tr、uk、vi。</translation>
 <translation id="6926703471186170050">啟用長邊雙面列印</translation>
 <translation id="6929746927224321095">停用自動填入功能</translation>
-<translation id="6930459178825296156">這項政策會為 Family Link 使用者啟用 Projector 功能,並授予這項功能權限,讓 Projector 能建立及轉錄螢幕畫面錄製內容,並上傳至雲端硬碟。
-      這項政策不適用於其他類型的使用者。
-      這項政策不會影響企業版使用者的 <ph name="PROJECTOR_ENABLED_POLICY_NAME" /> 政策。
-
-      如果啟用這項政策,系統會為 Family Link 使用者啟用 Projector Dogfood 測試。
-      如果停用這項政策,系統會為 Family Link 使用者停用 Projector Dogfood 測試。
-      如果不設定這項政策,系統預設會為 Family Link 使用者停用 Projector Dogfood 測試。</translation>
 <translation id="6931242315485576290">停用 Google 資料同步處理功能</translation>
 <translation id="6940243892299228102">禁止使用者使用桌面範本</translation>
 <translation id="6943577887654905793">Mac/Linux 偏好設定名稱:</translation>
@@ -6342,7 +6323,6 @@
       決定使用擴充程式 ID 當做登入畫面的螢幕保護程式。該擴充功能必須屬於你透過 DeviceAppPack 政策為這個網域設定的 AppPack。</translation>
 <translation id="7882890448959833986">偵測到不支援的作業系統時不顯示警告</translation>
 <translation id="788480874436328004">禁止使用密碼管理員儲存密碼</translation>
-<translation id="7885255514815321350">為 Family Link 使用者停用 Projector Dogfood 測試</translation>
 <translation id="7887379840451099426">只有在裝置使用電池供電時才適用的電源管理設定</translation>
 <translation id="7891884447851425349">如果已啟用 <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> 政策,你可以設定 <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> 政策來指定在進行預設搜尋時所使用的搜尋引擎網址。網址應包含字串 <ph name="SEARCH_TERM_MARKER" />,系統會在查詢中將其替換為使用者的搜尋字詞。
 
diff --git a/components/privacy_sandbox/privacy_sandbox_settings.cc b/components/privacy_sandbox/privacy_sandbox_settings.cc
index 02e2b76..5e4effc 100644
--- a/components/privacy_sandbox/privacy_sandbox_settings.cc
+++ b/components/privacy_sandbox/privacy_sandbox_settings.cc
@@ -420,8 +420,9 @@
 
   // Third party cookies must also be available for this context. An empty site
   // for cookies is provided so the context is always treated as a third party.
-  return cookie_settings_->IsFullCookieAccessAllowed(url, net::SiteForCookies(),
-                                                     top_frame_origin);
+  return cookie_settings_->IsFullCookieAccessAllowed(
+      url, net::SiteForCookies(), top_frame_origin,
+      content_settings::CookieSettings::QueryReason::kPrivacySandbox);
 }
 
 void PrivacySandboxSettings::SetTopicsDataAccessibleFromNow() const {
diff --git a/components/reporting/proto/synced/record_constants.proto b/components/reporting/proto/synced/record_constants.proto
index c5c56e6..b5a30a1 100644
--- a/components/reporting/proto/synced/record_constants.proto
+++ b/components/reporting/proto/synced/record_constants.proto
@@ -75,6 +75,9 @@
   // is detected by the security daemon.
   SUSPICIOUS_EVENTS = 20;
 
+  // |LOCK_UNLOCK_EVENTS| is for lock/unlock events.
+  LOCK_UNLOCK_EVENTS = 21;
+
   reserved 8;
 }
 
diff --git a/components/sessions/core/session_service_commands.cc b/components/sessions/core/session_service_commands.cc
index a22dc77a..3df37e57 100644
--- a/components/sessions/core/session_service_commands.cc
+++ b/components/sessions/core/session_service_commands.cc
@@ -173,8 +173,8 @@
 // Assert to ensure PersistedWindowShowState is updated if ui::WindowShowState
 // is changed.
 static_assert(ui::SHOW_STATE_END ==
-                  (static_cast<ui::WindowShowState>(PERSISTED_SHOW_STATE_END) -
-                   2),
+                  static_cast<ui::WindowShowState>(PERSISTED_SHOW_STATE_END -
+                                                   2),
               "SHOW_STATE_END must equal PERSISTED_SHOW_STATE_END minus the "
               "deprecated entries");
 // Returns the show state to store to disk based |state|.
diff --git a/components/signin/core/browser/cookie_settings_util.cc b/components/signin/core/browser/cookie_settings_util.cc
index 9bfe742..58e2182 100644
--- a/components/signin/core/browser/cookie_settings_util.cc
+++ b/components/signin/core/browser/cookie_settings_util.cc
@@ -15,8 +15,12 @@
   GURL gaia_url = GaiaUrls::GetInstance()->gaia_url();
   GURL google_url = GaiaUrls::GetInstance()->google_url();
   return cookie_settings &&
-         cookie_settings->IsFullCookieAccessAllowed(gaia_url, gaia_url) &&
-         cookie_settings->IsFullCookieAccessAllowed(google_url, google_url);
+         cookie_settings->IsFullCookieAccessAllowed(
+             gaia_url, gaia_url,
+             content_settings::CookieSettings::QueryReason::kCookies) &&
+         cookie_settings->IsFullCookieAccessAllowed(
+             google_url, google_url,
+             content_settings::CookieSettings::QueryReason::kCookies);
 }
 
 bool SettingsDeleteSigninCookiesOnExit(
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index 29dc567..6ed4fe7 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -1228,6 +1228,7 @@
 <translation id="4305666528087210886">Kon nie toegang tot jou lêer kry nie</translation>
 <translation id="4306529830550717874">Stoor adres?</translation>
 <translation id="4306812610847412719">knipbord</translation>
+<translation id="4308567447483056043">Hierdie beleid word geïgnoreer omdat die gebruiker nie geaffilieer is nie. Vir hierdie beleid om toegepas te word, moet die Chrome-blaaier en -profiel deur die Adminkonsole bestuur word deur dieselfde organisasie.</translation>
 <translation id="4310070645992025887">Deursoek jou Reise</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Blokkeer (verstek)</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb
index 50acb73d..0f7c86f8 100644
--- a/components/strings/components_strings_cy.xtb
+++ b/components/strings/components_strings_cy.xtb
@@ -1228,6 +1228,7 @@
 <translation id="4305666528087210886">Ni ellid cyrchu'ch ffeil</translation>
 <translation id="4306529830550717874">Cadw'r cyfeiriad?</translation>
 <translation id="4306812610847412719">clipfwrdd</translation>
+<translation id="4308567447483056043">Mae'r polisi hwn yn cael ei anwybyddu oherwydd bod y defnyddiwr yn anghysylltiedig. Er mwyn i'r polisi hwn gael ei gymhwyso, rhaid i'r un sefydliad reoli porwr a phroffil Chrome drwy'r consol Gweinyddol.</translation>
 <translation id="4310070645992025887">Chwilio eich Teithiau</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Rhwystro (diofyn)</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index c43e7f6..758aa00 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -1228,6 +1228,7 @@
 <translation id="4305666528087210886">Din fil kunne ikke tilgås</translation>
 <translation id="4306529830550717874">Vil du gemme adressen?</translation>
 <translation id="4306812610847412719">udklipsholder</translation>
+<translation id="4308567447483056043">Denne politik ignoreres, fordi brugeren ikke er tilknyttet organisationen. Chrome-browseren og -profilen skal administreres via Administrationskonsol af den samme organisation, før denne politik kan anvendes.</translation>
 <translation id="4310070645992025887">Søg i dine søgeforløb</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Bloker (standardindstilling)</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index f9b882ac..ffdf4fcd 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -1226,6 +1226,7 @@
 <translation id="4305666528087210886">Zugriff auf die Datei nicht möglich</translation>
 <translation id="4306529830550717874">Adresse speichern?</translation>
 <translation id="4306812610847412719">Zwischenablage</translation>
+<translation id="4308567447483056043">Diese Richtlinie wird ignoriert, da der Nutzer kein verknüpfter Nutzer ist. Damit sie angewendet wird, müssen der Chrome-Browser und das Profil in der Admin-Konsole von derselben Organisation verwaltet werden.</translation>
 <translation id="4310070645992025887">In Onlinerecherchen stöbern</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Blockieren (Standard)</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 15aa776a..f37f18c7 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -1230,6 +1230,7 @@
 <translation id="4305666528087210886">Δεν ήταν δυνατή η πρόσβαση στο αρχείο σας</translation>
 <translation id="4306529830550717874">Αποθήκευση διεύθυνσης;</translation>
 <translation id="4306812610847412719">πρόχειρο</translation>
+<translation id="4308567447483056043">Αυτή η πολιτική παραβλέπεται, επειδή ο χρήστης δεν είναι συνδεδεμένος. Για την εφαρμογή αυτής της πολιτικής, η διαχείριση του προγράμματος περιήγησης Chrome και του προφίλ πρέπει να γίνεται μέσω της Κονσόλας διαχειριστή από τον ίδιο οργανισμό.</translation>
 <translation id="4310070645992025887">Αναζήτηση διαδρομών σας</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Αποκλεισμός (προεπιλογή)</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 9a9cac2..b61a34b 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -1071,6 +1071,7 @@
 <translation id="3835233591525155343">Your device use</translation>
 <translation id="3848487483475744267"><ph name="CREATE_GOOGLE_DOC_FOCUSED_FRIENDLY_MATCH_TEXT" />: press Tab then Enter to create a new Google Doc quickly</translation>
 <translation id="385051799172605136">Back</translation>
+<translation id="3853684360927654006">Password strength calculator</translation>
 <translation id="3858027520442213535">Update date and time</translation>
 <translation id="3858860766373142691">Name</translation>
 <translation id="3872834068356954457">Science</translation>
@@ -1681,6 +1682,7 @@
 <translation id="5518670652865028077">Arts and entertainment</translation>
 <translation id="5519516356611866228">With your changes</translation>
 <translation id="5523118979700054094">Policy name</translation>
+<translation id="5525755241743357906">File is copied or moved</translation>
 <translation id="5526617258931667850"><ph name="MANAGE_CHROMEOS_ACCESSIBILITY_FOCUSED_FRIENDLY_MATCH_TEXT" />; press tab and then Enter to personalise your accessibility tools in Chrome OS settings</translation>
 <translation id="5528532273234423708">Home automation</translation>
 <translation id="55293785478302737">Edge stitch</translation>
@@ -2933,6 +2935,7 @@
 <translation id="9096425087209440047"><ph name="SET_CHROME_AS_DEFAULT_BROWSER_FOCUSED_FRIENDLY_MATCH_TEXT" />, press Tab and then Enter to set Chrome as the system's default browser in iOS settings</translation>
 <translation id="9096679202588811390">TV shows and programmes</translation>
 <translation id="9101630580131696064">Tray 1</translation>
+<translation id="9102081333385212048">Files that you copy or move are sent to Google Cloud or third parties for analysis. For example, they might be scanned for sensitive data or malware.</translation>
 <translation id="9103537084693478942">Video software</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> normally uses encryption to protect your information. When Chromium tried to connect to <ph name="SITE" /> this time, the website sent back unusual and incorrect credentials. This may happen when an attacker is trying to pretend to be <ph name="SITE" />, or a Wi-Fi sign-in screen has interrupted the connection. Your information is still secure because Chromium stopped the connection before any data was exchanged.</translation>
 <translation id="9106062320799175032">Add Billing Address</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index b5f6af99..3d5af97c 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -1228,6 +1228,7 @@
 <translation id="4305666528087210886">Impossible d'accéder à votre fichier</translation>
 <translation id="4306529830550717874">Enregistrer l'adresse?</translation>
 <translation id="4306812610847412719">Presse-papiers</translation>
+<translation id="4308567447483056043">Cette politique est ignorée du fait que l'utilisateur n'est pas affilié. Pour que cette politique soit appliquée, le navigateur et le profil Chrome doivent être gérés au moyen de la console d'administration par la même organisation.</translation>
 <translation id="4310070645992025887">Recherchez vos explorations</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Bloquer (par défaut)</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 65814dfa..44f70dd9 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -1228,6 +1228,7 @@
 <translation id="4305666528087210886">તમારી ફાઇલ ઍક્સેસ કરી શકાઈ નથી</translation>
 <translation id="4306529830550717874">સરનામું સાચવીએ?</translation>
 <translation id="4306812610847412719">ક્લિપબોર્ડ</translation>
+<translation id="4308567447483056043">આ પૉલિસીને અવગણવામાં આવે છે કારણ કે વપરાશકર્તા સંકળાયેલા નથી. આ પૉલિસી લાગુ થાય તે માટે, એ જ સંસ્થા દ્વારા Chrome બ્રાઉઝર અને પ્રોફાઇલ ઍડમિન કન્સોલ મારફતે મેનેજ થવા આવશ્યક છે.</translation>
 <translation id="4310070645992025887">તમારા પ્રવાસ શોધો</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">અવરોધિત કરો (ડિફૉલ્ટ)</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index fc628c5..0cffc4f 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -1228,6 +1228,7 @@
 <translation id="4305666528087210886">आपकी फ़ाइल ऐक्सेस नहीं की जा सकी</translation>
 <translation id="4306529830550717874">क्या आप पता सेव करना चाहते हैं?</translation>
 <translation id="4306812610847412719">क्लिपबोर्ड</translation>
+<translation id="4308567447483056043">उपयोगकर्ता का खाता संगठन के डोमेन से नहीं जुड़ा है. इसलिए, यह नीति लागू नहीं हो सकती. इस नीति को लागू करने के लिए, यह ज़रूरी है कि Chrome ब्राउज़र और प्रोफ़ाइल को Admin console की मदद से, एक ही संगठन से मैनेज किया जाए.</translation>
 <translation id="4310070645992025887">'Chrome इतिहास' में अपनी गतिविधियां खोजें</translation>
 <translation id="4312613361423056926">बी2</translation>
 <translation id="4312866146174492540">ब्लॉक करें (डिफ़ॉल्ट)</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index 53bf702..13f18980 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -1227,6 +1227,7 @@
 <translation id="4305666528087210886">Файлға кіру мүмкін болмады</translation>
 <translation id="4306529830550717874">Мекенжайды сақтау керек пе?</translation>
 <translation id="4306812610847412719">буфер</translation>
+<translation id="4308567447483056043">Пайдаланушы үлестес тұлға болмағандықтан, бұл саясат еленбейді. Бұл саясат қолданылуы үшін, Chrome браузері мен профилі сол ұйымдағы әкімші консолі арқылы басқарылуы қажет.</translation>
 <translation id="4310070645992025887">Саяхаттарыңызды іздеңіз</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Бөгеу (әдепкі)</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index fb26a17..3c4a5fe2 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -1224,6 +1224,7 @@
 <translation id="4305666528087210886">ನಿಮ್ಮ ಫೈಲ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="4306529830550717874">ವಿಳಾಸವನ್ನು ಉಳಿಸಬೇಕೆ?</translation>
 <translation id="4306812610847412719">ಕ್ಲಿಪ್‌ಬೋರ್ಡ್</translation>
+<translation id="4308567447483056043">ಬಳಕೆದಾರರು ಸಂಯೋಜಿತವಾಗಿರದ ಕಾರಣ ಈ ನೀತಿಯನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗಿದೆ. ಈ ನೀತಿಯನ್ನು ಅನ್ವಯಿಸಲು, Chrome ಬ್ರೌಸರ್ ಮತ್ತು ಪ್ರೊಫೈಲ್ ಅನ್ನು ಅದೇ ಸಂಸ್ಥೆಯ ಮೂಲಕ ನಿರ್ವಾಹಕ ಕನ್ಸೋಲ್ ಮೂಲಕ ನಿರ್ವಹಿಸಬೇಕು.</translation>
 <translation id="4310070645992025887">ನಿಮ್ಮ ಪ್ರಯಾಣಗಳನ್ನು ಹುಡುಕಿ</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">ನಿರ್ಬಂಧಿಸು (ಡಿಫಾಲ್ಟ್)</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index 18f6de7..dd3cc05 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -1229,6 +1229,7 @@
 <translation id="4305666528087210886">Nepavyko pasiekti failo</translation>
 <translation id="4306529830550717874">Išsaugoti adresą?</translation>
 <translation id="4306812610847412719">iškarpinė</translation>
+<translation id="4308567447483056043">Šios politikos nepaisoma, nes naudotojas nesusietas. Kad būtų taikoma ši politika, „Chrome“ naršyklę ir profilį turi tvarkyti ta pati organizacija per administratoriaus pultą.</translation>
 <translation id="4310070645992025887">Ieškoti naudotojo atliekamų veiksmų</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Užblokuoti (numatytoji parinktis)</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index fcf585c..fa93187 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -1227,6 +1227,7 @@
 <translation id="4305666528087210886">നിങ്ങളുടെ ഫയൽ ആക്‌സസ് ചെയ്യാനായില്ല</translation>
 <translation id="4306529830550717874">വിലാസം സംരക്ഷിക്കണോ?</translation>
 <translation id="4306812610847412719">ക്ലിപ്പ്ബോർഡ്</translation>
+<translation id="4308567447483056043">അഫിലിയേറ്റ് ചെയ്യാത്ത ഉപയോക്താവായതിനാൽ, ഈ നയം അവഗണിച്ചു. ഈ നയം ബാധകമാക്കാൻ, Chrome ബ്രൗസറും പ്രൊഫൈലും ഒരേ സ്ഥാപനത്തിന്റെ അഡ്‌മിൻ കൺസോൾ വഴി മാനേജ് ചെയ്തിരിക്കണം.</translation>
 <translation id="4310070645992025887">നിങ്ങളുടെ യാത്രകൾ തിരയുക</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">ബ്ലോക്ക് ചെയ്യുക (ഡിഫോൾട്ട്)</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index 0ceb1d4..b44ea6f 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -1227,6 +1227,7 @@
 <translation id="4305666528087210886">तुमची फाइल अ‍ॅक्सेस करता आली नाही</translation>
 <translation id="4306529830550717874">पत्ता सेव्ह करायचा आहे का?</translation>
 <translation id="4306812610847412719">क्लिपबोर्ड</translation>
+<translation id="4308567447483056043">हे धोरण दुर्लक्षित केले आहे, कारण वापरकर्ता अनुषंगिक नाही. हे धोरण लागू केले जाण्यासाठी, एकाच संस्थेने Chrome ब्राउझर आणि प्रोफाइल ॲडमिन कन्सोलद्वारे व्यवस्थापित करणे आवश्यक आहे.</translation>
 <translation id="4310070645992025887">तुमचे प्रवास शोधा</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">ब्लॉक करा (डीफॉल्ट)</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index 99ab29d..cabc70b 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -1225,6 +1225,7 @@
 <translation id="4305666528087210886">तपाईंको फाइल हेर्न र प्रयोग गर्न सकिएन</translation>
 <translation id="4306529830550717874">ठेगाना सेभ गर्ने हो?</translation>
 <translation id="4306812610847412719">क्लिपबोर्ड</translation>
+<translation id="4308567447483056043">यी प्रयोगकर्ता असम्बद्ध भएकाले यो नीति लागू गरिएन। एउटै सङ्गठनले Chrome ब्राउजर र प्रोफाइल एड्मिन कन्सोलमार्फत व्यवस्थापन गरेका अवस्थामा मात्र यो नीति लागू गरिन्छ।</translation>
 <translation id="4310070645992025887">Journeys खोज्नुहोस्</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">रोक लगाउनुहोस् (डिफल्ट मान)</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb
index 6c7304a..246391c 100644
--- a/components/strings/components_strings_pa.xtb
+++ b/components/strings/components_strings_pa.xtb
@@ -1225,6 +1225,7 @@
 <translation id="4305666528087210886">ਤੁਹਾਡੀ ਫ਼ਾਈਲ 'ਤੇ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ</translation>
 <translation id="4306529830550717874">ਕੀ ਤੁਸੀਂ ਪਤਾ ਰੱਖਿਅਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?</translation>
 <translation id="4306812610847412719">ਕਲਿੱਪਬੋਰਡ</translation>
+<translation id="4308567447483056043">ਇਸ ਨੀਤੀ ਨੂੰ ਇਸ ਲਈ ਅਣਡਿੱਠ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਕਿਉਂਕਿ ਵਰਤੋਂਕਾਰ ਸੰਬੰਧਿਤ ਨਹੀਂ ਹੈ। ਇਸ ਨੀਤੀ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ, Chrome ਬ੍ਰਾਊਜ਼ਰ ਅਤੇ ਪ੍ਰੋਫਾਈਲ ਦਾ ਉਸੇ ਸੰਸਥਾ ਦੇ ਪ੍ਰਸ਼ਾਸਕ ਕੰਸੋਲ ਰਾਹੀਂ ਪ੍ਰਬੰਧਨ ਕਰਨਾ ਲਾਜ਼ਮੀ ਹੈ।</translation>
 <translation id="4310070645992025887">ਆਪਣੇ ਖੋਜ ਸਫ਼ਰਾਂ ਲਈ ਖੋਜ ਕਰੋ</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">ਬਲਾਕ ਕਰੋ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index 2c8ea50..89590a2 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -1224,6 +1224,7 @@
 <translation id="4305666528087210886">Súbor sa nepodarilo otvoriť</translation>
 <translation id="4306529830550717874">Chcete adresu uložiť?</translation>
 <translation id="4306812610847412719">schránka</translation>
+<translation id="4308567447483056043">Toto pravidlo je ignorované, pretože používateľ nie je pridružený. Ak chcete, aby bolo toto pravidlo použité, prehliadač Chrome a profil musí spravovať v správcovskej konzole rovnaká organizácia.</translation>
 <translation id="4310070645992025887">Vyhľadávajte cesty</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Blokovať (predvolené)</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb
index 198d422..1e35a43e 100644
--- a/components/strings/components_strings_sq.xtb
+++ b/components/strings/components_strings_sq.xtb
@@ -1228,6 +1228,7 @@
 <translation id="4305666528087210886">Qasja te skedari ishte e pamundur</translation>
 <translation id="4306529830550717874">Të ruhet adresa?</translation>
 <translation id="4306812610847412719">kujtesa e fragmenteve</translation>
+<translation id="4308567447483056043">Kjo politikë është shpërfillur sepse përdoruesi nuk është i lidhur. Që kjo politikë të zbatohet, shfletuesi dhe profili i Chrome duhet të menaxhohen nëpërmjet "Panelit të administratorit" nga e njëjta organizatë.</translation>
 <translation id="4310070645992025887">Kërko për udhëtime</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Blloko (parazgjedhja)</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index fad89d2..af7136f 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -2264,6 +2264,7 @@
 <translation id="7238585580608191973">SHA-256 விரல்அச்சு</translation>
 <translation id="7240120331469437312">சான்றிதழ் பொருள் மாற்றுப் பெயர்</translation>
 <translation id="7243010569062352439"><ph name="PASSWORDS" />; <ph name="SIGNIN_DATA" /></translation>
+<translation id="7244465398154211886">{NUM_MATCHES,plural, =1{# பொருத்தம்}other{# பொருத்தங்கள்}}</translation>
 <translation id="724691107663265825">தளத்தில் மால்வேர் உள்ளது</translation>
 <translation id="724975217298816891">கார்டு விவரங்களைப் புதுப்பிக்க, <ph name="CREDIT_CARD" /> இன் காலாவதி தேதியையும் CVC எண்ணையும் உள்ளிடவும். உறுதிசெய்த பின்னர், உங்கள் கார்டு விவரங்கள் இந்தத் தளத்திற்குப் பகிரப்படும்.</translation>
 <translation id="7251437084390964440">நெட்வொர்க் உள்ளமைவானது ONC தரத்துடன் இணங்கவில்லை. உள்ளமைவின் பகுதிகள் இறக்குமதியாகாமல் போகக்கூடும்.
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index f52b5967..e55e9d4 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -1230,6 +1230,7 @@
 <translation id="4305666528087210886">మీ ఫైల్‌ను యాక్సెస్ చేయడం సాధ్యపడలేదు</translation>
 <translation id="4306529830550717874">అడ్రస్‌ను సేవ్ చేయాలా?</translation>
 <translation id="4306812610847412719">క్లిప్‌బోర్డ్</translation>
+<translation id="4308567447483056043">యూజర్ అనుబంధంగా లేనందున, ఈ పాలసీ విస్మరించబడింది. ఈ పాలసీని వర్తింపజేయాలంటే, Chrome బ్రౌజర్‌ను, అలాగే ప్రొఫైల్‌ను అడ్మిన్ కన్సోల్ ద్వారా తప్పనిసరిగా ఒకే సంస్థ మేనేజ్ చేయాలి.</translation>
 <translation id="4310070645992025887">మీ బ్రౌజింగ్ జర్నీలను సెర్చ్ చేయండి</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">బ్లాక్ చేయండి (డిఫాల్ట్)</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 055a4d5..59aebf5 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -1228,6 +1228,7 @@
 <translation id="4305666528087210886">Dosyanıza erişilemedi</translation>
 <translation id="4306529830550717874">Adres kaydedilsin mi?</translation>
 <translation id="4306812610847412719">pano</translation>
+<translation id="4308567447483056043">Kullanıcı bağlı olmadığından bu politika yoksayılır. Bu politikanın uygulanması için Chrome tarayıcıyı ve profilini, Yönetici Konsolu üzerinden aynı kuruluş yönetmelidir.</translation>
 <translation id="4310070645992025887">Arama yolculuklarınızı arayın</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Engelle (varsayılan)</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index 7a51975..42779cc 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -1228,6 +1228,7 @@
 <translation id="4305666528087210886">Không thể truy cập vào tệp của bạn</translation>
 <translation id="4306529830550717874">Lưu địa chỉ?</translation>
 <translation id="4306812610847412719">bảng nhớ tạm</translation>
+<translation id="4308567447483056043">Chính sách này bị bỏ qua vì người dùng chưa được liên kết. Để chính sách này được áp dụng, trình duyệt và hồ sơ Chrome phải do cùng một tổ chức quản lý thông qua Bảng điều khiển dành cho quản trị viên.</translation>
 <translation id="4310070645992025887">Tìm kiếm trong Hành trình</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Chặn (mặc định)</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb
index bdb6f31..17db02d7 100644
--- a/components/strings/components_strings_zh-HK.xtb
+++ b/components/strings/components_strings_zh-HK.xtb
@@ -1680,6 +1680,7 @@
 <translation id="5518670652865028077">藝術和娛樂</translation>
 <translation id="5519516356611866228">包括您所作的變更</translation>
 <translation id="5523118979700054094">政策名稱</translation>
+<translation id="5525755241743357906">檔案已複製或移動</translation>
 <translation id="5526617258931667850"><ph name="MANAGE_CHROMEOS_ACCESSIBILITY_FOCUSED_FRIENDLY_MATCH_TEXT" />,㩒一下 Tab 鍵,然後㩒一下 Enter 鍵就可以喺 Chrome OS 設定度個人化您嘅無障礙工具</translation>
 <translation id="5528532273234423708">家居自動化</translation>
 <translation id="55293785478302737">邊緣釘裝</translation>
@@ -2932,6 +2933,7 @@
 <translation id="9096425087209440047"><ph name="SET_CHROME_AS_DEFAULT_BROWSER_FOCUSED_FRIENDLY_MATCH_TEXT" />,㩒一下 Tab 鍵,然後㩒一下 Enter 鍵就可以喺 iOS 設定度將 Chrome 設定做系統嘅預設瀏覽器</translation>
 <translation id="9096679202588811390">電視表演和節目</translation>
 <translation id="9101630580131696064">紙匣 1</translation>
+<translation id="9102081333385212048">您複製或移動的檔案會傳送至 Google Cloud 或第三方進行分析。例如,檔案可能會被掃瞄,以查看當中是否含有敏感資料或惡意軟件。</translation>
 <translation id="9103537084693478942">影片軟件</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> 通常會透過加密方式保護您的資料。Chromium 這次嘗試連線至 <ph name="SITE" /> 時,該網站傳回異常且錯誤的憑證。這可能是因為有攻擊者試圖偽裝成 <ph name="SITE" />,或 Wi-Fi 登入畫面導致連線中斷。請放心,Chromium 未有交換任何資料並已終止連線,所以您的資料仍然安全。</translation>
 <translation id="9106062320799175032">新增帳單地址</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 9e9f29d5..1e7902c 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -1228,6 +1228,7 @@
 <translation id="4305666528087210886">無法存取你的檔案</translation>
 <translation id="4306529830550717874">要儲存地址嗎?</translation>
 <translation id="4306812610847412719">剪貼簿</translation>
+<translation id="4308567447483056043">由於使用者無任何聯盟關係,因此系統已忽略這項政策。如要套用這項政策,必須由同一機構透過管理控制台管理 Chrome 瀏覽器和設定檔。</translation>
 <translation id="4310070645992025887">搜尋瀏覽歷程</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">封鎖 (預設)</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb
index 6ea4c990..4ff70130 100644
--- a/components/strings/components_strings_zu.xtb
+++ b/components/strings/components_strings_zu.xtb
@@ -1225,6 +1225,7 @@
 <translation id="4305666528087210886">Ifayela lakho alikwazanga ukufinyelelwa</translation>
 <translation id="4306529830550717874">Londoloza ikheli?</translation>
 <translation id="4306812610847412719">ibhodi yokunamathisela</translation>
+<translation id="4308567447483056043">Le nqubomgomo izitshiwe ngoba umsebenzisi akalona ilungu. Ukuze le nqubomgomo isetshenziswe, ibhrawuza nephrofayela ye-Chrome kufanele ziphathwe ngekhonsoli yomqondisi yinhlangano efanayo.</translation>
 <translation id="4310070645992025887">Sesha Amahambo Akho</translation>
 <translation id="4312613361423056926">B2</translation>
 <translation id="4312866146174492540">Vimba (ngokuzenzakalela)</translation>
diff --git a/components/sync/base/features.h b/components/sync/base/features.h
index 500454c..5231e4a9 100644
--- a/components/sync/base/features.h
+++ b/components/sync/base/features.h
@@ -131,7 +131,8 @@
 // Triggers another device registration attempt if the device was registered
 // before this feature was introduced.
 inline constexpr base::Feature kSyncTrustedVaultRedoDeviceRegistration{
-    "SyncTrustedVaultRedoDeviceRegistration", base::FEATURE_ENABLED_BY_DEFAULT};
+    "SyncTrustedVaultRedoDeviceRegistration",
+    base::FEATURE_DISABLED_BY_DEFAULT};
 
 // If enabled, the device will register with FCM and listen to new
 // invalidations. Also, FCM token will be set in DeviceInfo, which signals to
diff --git a/components/sync_device_info/device_info.cc b/components/sync_device_info/device_info.cc
index 4209b22..647bf096 100644
--- a/components/sync_device_info/device_info.cc
+++ b/components/sync_device_info/device_info.cc
@@ -7,7 +7,7 @@
 // device_info.h's size can impact build time. Try not to raise this limit
 // unless absolutely necessary. See
 // https://chromium.googlesource.com/chromium/src/+/HEAD/docs/wmax_tokens.md
-#pragma clang max_tokens_here 610000
+#pragma clang max_tokens_here 611000
 
 #include <utility>
 
diff --git a/components/test/data/autofill/heuristics/output/016_misc_phones.out b/components/test/data/autofill/heuristics/output/016_misc_phones.out
index a3c2f42..be6c546 100644
--- a/components/test/data/autofill/heuristics/output/016_misc_phones.out
+++ b/components/test/data/autofill/heuristics/output/016_misc_phones.out
@@ -8,20 +8,20 @@
 PHONE_HOME_CITY_CODE | areacode1 | Area Code: |  | firstname_1-default
 PHONE_HOME_NUMBER | phone1 | Phone: |  | firstname_1-default
 PHONE_HOME_CITY_CODE | hphone1 | Phone: |  | firstname_1-default
-PHONE_HOME_NUMBER | hphone2 |  |  | firstname_1-default
-PHONE_HOME_NUMBER | hphone3 |  |  | firstname_1-default
+PHONE_HOME_NUMBER_PREFIX | hphone2 |  |  | firstname_1-default
+PHONE_HOME_NUMBER_SUFFIX | hphone3 |  |  | firstname_1-default
 PHONE_HOME_EXTENSION | hphone4 | ext.: |  | firstname_1-default
 PHONE_HOME_CITY_CODE | hphone1a | Phone:        ( |  | firstname_1-default
-PHONE_HOME_NUMBER | hphone2a |  |  | firstname_1-default
-PHONE_HOME_NUMBER | hphone3a |  |  | firstname_1-default
+PHONE_HOME_NUMBER_PREFIX | hphone2a |  |  | firstname_1-default
+PHONE_HOME_NUMBER_SUFFIX | hphone3a |  |  | firstname_1-default
 PHONE_HOME_EXTENSION | hphone4a | ext.: |  | firstname_1-default
 PHONE_HOME_COUNTRY_CODE | hphone1b | Phone: |  | firstname_1-default
 PHONE_HOME_CITY_CODE | hphone1b |  |  | firstname_1-default
-PHONE_HOME_NUMBER | hphone2b |  |  | firstname_1-default
-PHONE_HOME_NUMBER | hphone3b |  |  | firstname_1-default
+PHONE_HOME_NUMBER_PREFIX | hphone2b |  |  | firstname_1-default
+PHONE_HOME_NUMBER_SUFFIX | hphone3b |  |  | firstname_1-default
 PHONE_HOME_EXTENSION | hphone4b | ext.: |  | firstname_1-default
 PHONE_HOME_COUNTRY_CODE | hphone1c | Phone: |  | firstname_1-default
 PHONE_HOME_CITY_CODE | hphone1c |  |  | firstname_1-default
-PHONE_HOME_NUMBER | hphone2c |  |  | firstname_1-default
-PHONE_HOME_NUMBER | hphone3c |  |  | firstname_1-default
+PHONE_HOME_NUMBER_PREFIX | hphone2c |  |  | firstname_1-default
+PHONE_HOME_NUMBER_SUFFIX | hphone3c |  |  | firstname_1-default
 PHONE_HOME_EXTENSION | hphone4c | ext.: |  | firstname_1-default
diff --git a/components/test/data/autofill/heuristics/output/017_checkout_advanceautoparts.com.out b/components/test/data/autofill/heuristics/output/017_checkout_advanceautoparts.com.out
index 9acf5aca..09e1491 100644
--- a/components/test/data/autofill/heuristics/output/017_checkout_advanceautoparts.com.out
+++ b/components/test/data/autofill/heuristics/output/017_checkout_advanceautoparts.com.out
@@ -10,8 +10,8 @@
 ADDRESS_HOME_STATE | billState | *State: | AL | billingShippingSame_1-default
 ADDRESS_HOME_ZIP | billZipCode | *Zip Code: |  | billingShippingSame_1-default
 PHONE_HOME_CITY_CODE | billDayPhonePart1 | *Day Phone: |  | billingShippingSame_1-default
-PHONE_HOME_NUMBER | billDayPhonePart2 | *Day Phone: |  | billingShippingSame_1-default
-PHONE_HOME_NUMBER | billDayPhonePart3 | *Day Phone: |  | billingShippingSame_1-default
+PHONE_HOME_NUMBER_PREFIX | billDayPhonePart2 | *Day Phone: |  | billingShippingSame_1-default
+PHONE_HOME_NUMBER_SUFFIX | billDayPhonePart3 | *Day Phone: |  | billingShippingSame_1-default
 EMAIL_ADDRESS | billEmail | *Email Address: |  | billingShippingSame_1-default
 UNKNOWN_TYPE | sendMeEmail | Yes, please send me emails about news, special offers, exclusives and promotions from Advance Auto Parts. See our | checked | billingShippingSame_1-default
 UNKNOWN_TYPE | billPassword | Password: |  | billingShippingSame_1-default
@@ -24,9 +24,9 @@
 ADDRESS_HOME_STATE | shipState | *State: | AL | shipFirstName_2-default
 ADDRESS_HOME_ZIP | shipZipCode | *Zip Code: |  | shipFirstName_2-default
 PHONE_HOME_CITY_CODE | shipDayPhonePart1 | *Day Phone: |  | shipFirstName_2-default
-PHONE_HOME_NUMBER | shipDayPhonePart2 | *Day Phone: |  | shipFirstName_2-default
-PHONE_HOME_NUMBER | shipDayPhonePart3 | *Day Phone: |  | shipFirstName_2-default
+PHONE_HOME_NUMBER_PREFIX | shipDayPhonePart2 | *Day Phone: |  | shipFirstName_2-default
+PHONE_HOME_NUMBER_SUFFIX | shipDayPhonePart3 | *Day Phone: |  | shipFirstName_2-default
 PHONE_HOME_CITY_CODE | shipNightPhonePart1 | Night Phone: |  | shipFirstName_2-default
-PHONE_HOME_NUMBER | shipNightPhonePart2 | Night Phone: |  | shipFirstName_2-default
-PHONE_HOME_NUMBER | shipNightPhonePart3 | Night Phone: |  | shipFirstName_2-default
+PHONE_HOME_NUMBER_PREFIX | shipNightPhonePart2 | Night Phone: |  | shipFirstName_2-default
+PHONE_HOME_NUMBER_SUFFIX | shipNightPhonePart3 | Night Phone: |  | shipFirstName_2-default
 UNKNOWN_TYPE | zipCode |  |  | zipCode_1-default
diff --git a/components/test/data/autofill/heuristics/output/019_checkout_bedbathandbeyond.com.out b/components/test/data/autofill/heuristics/output/019_checkout_bedbathandbeyond.com.out
index 4c3f829..e90b5838 100644
--- a/components/test/data/autofill/heuristics/output/019_checkout_bedbathandbeyond.com.out
+++ b/components/test/data/autofill/heuristics/output/019_checkout_bedbathandbeyond.com.out
@@ -8,14 +8,14 @@
 ADDRESS_HOME_STATE | addr_state | *State |  | first_nm_1-default
 ADDRESS_HOME_ZIP | zip | *Zip Code |  | first_nm_1-default
 PHONE_HOME_CITY_CODE | day_phone_part1 | *Day phone |  | first_nm_1-default
-PHONE_HOME_NUMBER | day_phone_part2 | *Day phone |  | first_nm_1-default
-PHONE_HOME_NUMBER | day_phone_part3 | *Day phone |  | first_nm_1-default
+PHONE_HOME_NUMBER_PREFIX | day_phone_part2 | *Day phone |  | first_nm_1-default
+PHONE_HOME_NUMBER_SUFFIX | day_phone_part3 | *Day phone |  | first_nm_1-default
 PHONE_HOME_CITY_CODE | eve_phone_part1 | Evening phone |  | first_nm_1-default
-PHONE_HOME_NUMBER | eve_phone_part2 | Evening phone |  | first_nm_1-default
-PHONE_HOME_NUMBER | eve_phone_part3 | Evening phone |  | first_nm_1-default
+PHONE_HOME_NUMBER_PREFIX | eve_phone_part2 | Evening phone |  | first_nm_1-default
+PHONE_HOME_NUMBER_SUFFIX | eve_phone_part3 | Evening phone |  | first_nm_1-default
 PHONE_HOME_CITY_CODE | mob_phone_part1 | Mobile phone |  | first_nm_1-default
-PHONE_HOME_NUMBER | mob_phone_part2 | Mobile phone |  | first_nm_1-default
-PHONE_HOME_NUMBER | mob_phone_part3 | Mobile phone |  | first_nm_1-default
+PHONE_HOME_NUMBER_PREFIX | mob_phone_part2 | Mobile phone |  | first_nm_1-default
+PHONE_HOME_NUMBER_SUFFIX | mob_phone_part3 | Mobile phone |  | first_nm_1-default
 EMAIL_ADDRESS | email_addr | *Email |  | first_nm_1-default
 EMAIL_ADDRESS | retype_email_addr | *Re-type email |  | first_nm_1-default
 UNKNOWN_TYPE | promo_email_flag | Receive information on special offers and new arrivals at Bed Bath & Beyond. | Y | first_nm_1-default
@@ -31,9 +31,9 @@
 ADDRESS_HOME_STATE | ship_addr_state | *State |  | ship_first_nm_2-default
 ADDRESS_HOME_ZIP | ship_zip | *Zip Code |  | ship_first_nm_2-default
 PHONE_HOME_CITY_CODE | ship_day_phone_part1 | *Day phone |  | ship_first_nm_2-default
-PHONE_HOME_NUMBER | ship_day_phone_part2 | *Day phone |  | ship_first_nm_2-default
-PHONE_HOME_NUMBER | ship_day_phone_part3 | *Day phone |  | ship_first_nm_2-default
+PHONE_HOME_NUMBER_PREFIX | ship_day_phone_part2 | *Day phone |  | ship_first_nm_2-default
+PHONE_HOME_NUMBER_SUFFIX | ship_day_phone_part3 | *Day phone |  | ship_first_nm_2-default
 PHONE_HOME_CITY_CODE | ship_eve_phone_part1 | Evening phone |  | ship_first_nm_2-default
-PHONE_HOME_NUMBER | ship_eve_phone_part2 | Evening phone |  | ship_first_nm_2-default
-PHONE_HOME_NUMBER | ship_eve_phone_part3 | Evening phone |  | ship_first_nm_2-default
+PHONE_HOME_NUMBER_PREFIX | ship_eve_phone_part2 | Evening phone |  | ship_first_nm_2-default
+PHONE_HOME_NUMBER_SUFFIX | ship_eve_phone_part3 | Evening phone |  | ship_first_nm_2-default
 UNKNOWN_TYPE | email | Privacy policy - Your Privacy Rights | enter your email address | email_1-default
diff --git a/components/test/data/autofill/heuristics/output/024_checkout_homedepot.com.out b/components/test/data/autofill/heuristics/output/024_checkout_homedepot.com.out
index acf5c80..daf844c1 100644
--- a/components/test/data/autofill/heuristics/output/024_checkout_homedepot.com.out
+++ b/components/test/data/autofill/heuristics/output/024_checkout_homedepot.com.out
@@ -6,10 +6,10 @@
 ADDRESS_HOME_STATE | state_1 | *State: |  | firstName_1_1-default
 ADDRESS_HOME_ZIP | zipCode_1 | *ZIP Code: |  | firstName_1_1-default
 PHONE_HOME_CITY_CODE | fieldphone1_1 | *Phone Number on Record: |  | firstName_1_1-default
-PHONE_HOME_NUMBER | fieldphone2_1 | *Phone Number on Record: |  | firstName_1_1-default
-PHONE_HOME_NUMBER | fieldphone3_1 | *Phone Number on Record: |  | firstName_1_1-default
+PHONE_HOME_NUMBER_PREFIX | fieldphone2_1 | *Phone Number on Record: |  | firstName_1_1-default
+PHONE_HOME_NUMBER_SUFFIX | fieldphone3_1 | *Phone Number on Record: |  | firstName_1_1-default
 PHONE_HOME_CITY_CODE | altfieldphone1_1 | Alternate Phone: |  | firstName_1_1-default
-PHONE_HOME_NUMBER | altfieldphone2_1 | Alternate Phone: |  | firstName_1_1-default
-PHONE_HOME_NUMBER | altfieldphone3_1 | Alternate Phone: |  | firstName_1_1-default
+PHONE_HOME_NUMBER_PREFIX | altfieldphone2_1 | Alternate Phone: |  | firstName_1_1-default
+PHONE_HOME_NUMBER_SUFFIX | altfieldphone3_1 | Alternate Phone: |  | firstName_1_1-default
 UNKNOWN_TYPE | isBillingAddress_1 | Check here if the above shipping address is | on | firstName_1_1-default
 UNKNOWN_TYPE | emailInput | Add Shipping Addresses | Enter Email Address | emailInput_1-default
diff --git a/components/test/data/autofill/heuristics/output/030_checkout_lowes.com.out b/components/test/data/autofill/heuristics/output/030_checkout_lowes.com.out
index 4a4597a..8fa89c4 100644
--- a/components/test/data/autofill/heuristics/output/030_checkout_lowes.com.out
+++ b/components/test/data/autofill/heuristics/output/030_checkout_lowes.com.out
@@ -14,7 +14,7 @@
 UNKNOWN_TYPE | billingAddress | This is also my billing address. | on | taxGeoCode_3-default
 EMAIL_ADDRESS | email1 | E-mail Address: |  | taxGeoCode_3-default
 PHONE_HOME_CITY_CODE | billphone1 | Contact Phone: |  | taxGeoCode_3-default
-PHONE_HOME_NUMBER | billphone2 | Contact Phone: |  | taxGeoCode_3-default
-PHONE_HOME_NUMBER | billphone3 | Contact Phone: |  | taxGeoCode_3-default
+PHONE_HOME_NUMBER_PREFIX | billphone2 | Contact Phone: |  | taxGeoCode_3-default
+PHONE_HOME_NUMBER_SUFFIX | billphone3 | Contact Phone: |  | taxGeoCode_3-default
 EMAIL_ADDRESS | selfAddress | Please enter the phone number and e-mail address associated with this billing address.E-mail Address: Contact Phone: | 0 | selfAddress_4-default
 UNKNOWN_TYPE | save-address | on | on | selfAddress_4-default
diff --git a/components/test/data/autofill/heuristics/output/035_checkout_petco.com.out b/components/test/data/autofill/heuristics/output/035_checkout_petco.com.out
index fa05429..056d06e 100644
--- a/components/test/data/autofill/heuristics/output/035_checkout_petco.com.out
+++ b/components/test/data/autofill/heuristics/output/035_checkout_petco.com.out
@@ -8,8 +8,8 @@
 ADDRESS_HOME_STATE | ctl00$ctl00$cphBody$cphBody$ddlSA_State | State * |  | ctl00$ctl00$cphBody$cphBody$txtSA_FirstName_1-default
 ADDRESS_HOME_ZIP | ctl00$ctl00$cphBody$cphBody$txtSA_Zip | ZIP Code * |  | ctl00$ctl00$cphBody$cphBody$txtSA_FirstName_1-default
 PHONE_HOME_CITY_CODE | ctl00$ctl00$cphBody$cphBody$txtSA_Phone1 | Phone Number * |  | ctl00$ctl00$cphBody$cphBody$txtSA_FirstName_1-default
-PHONE_HOME_NUMBER | ctl00$ctl00$cphBody$cphBody$txtSA_Phone2 | ZIP Code * |  | ctl00$ctl00$cphBody$cphBody$txtSA_FirstName_1-default
-PHONE_HOME_NUMBER | ctl00$ctl00$cphBody$cphBody$txtSA_Phone3 | ZIP Code * |  | ctl00$ctl00$cphBody$cphBody$txtSA_FirstName_1-default
+PHONE_HOME_NUMBER_PREFIX | ctl00$ctl00$cphBody$cphBody$txtSA_Phone2 | ZIP Code * |  | ctl00$ctl00$cphBody$cphBody$txtSA_FirstName_1-default
+PHONE_HOME_NUMBER_SUFFIX | ctl00$ctl00$cphBody$cphBody$txtSA_Phone3 | ZIP Code * |  | ctl00$ctl00$cphBody$cphBody$txtSA_FirstName_1-default
 PHONE_HOME_EXTENSION | ctl00$ctl00$cphBody$cphBody$txtSA_PhoneExt | Ext. |  | ctl00$ctl00$cphBody$cphBody$txtSA_FirstName_1-default
 UNKNOWN_TYPE | ctl00$ctl00$cphBody$cphBody$cbSA_MatchBilling | This is also my billing address | on | ctl00$ctl00$cphBody$cphBody$txtSA_FirstName_1-default
 UNKNOWN_TYPE | ctl00$ctl00$cphBody$cphBody$cbSA_EmailSignup | Send me newsletters with exclusive online discounts, special announcements and health and behavior tips for my pet. | on | ctl00$ctl00$cphBody$cphBody$txtSA_FirstName_1-default
diff --git a/components/test/data/autofill/heuristics/output/049_register_ebay.com.out b/components/test/data/autofill/heuristics/output/049_register_ebay.com.out
index bb316672..3e6c849d 100644
--- a/components/test/data/autofill/heuristics/output/049_register_ebay.com.out
+++ b/components/test/data/autofill/heuristics/output/049_register_ebay.com.out
@@ -7,8 +7,8 @@
 ADDRESS_HOME_ZIP | zip | ZIP / Postal code |  | firstname_1-default
 ADDRESS_HOME_COUNTRY | countryId | Country or region | 1 | firstname_1-default
 PHONE_HOME_CITY_CODE | dayphone1 | Primary telephone number |  | firstname_1-default
-PHONE_HOME_NUMBER | dayphone2 | Primary telephone number |  | firstname_1-default
-PHONE_HOME_NUMBER | dayphone3 | Primary telephone number |  | firstname_1-default
+PHONE_HOME_NUMBER_PREFIX | dayphone2 | Primary telephone number |  | firstname_1-default
+PHONE_HOME_NUMBER_SUFFIX | dayphone3 | Primary telephone number |  | firstname_1-default
 PHONE_HOME_EXTENSION | dayphone4 | ext.: |  | firstname_1-default
 EMAIL_ADDRESS | email | Email address |  | firstname_1-default
 EMAIL_ADDRESS | retype_email | Re-enter email address |  | firstname_1-default
@@ -22,8 +22,8 @@
 ADDRESS_HOME_ZIP | zip | ZIP / Postal code |  | firstname_2-default
 ADDRESS_HOME_COUNTRY | countryId | Country or region | 1 | firstname_2-default
 PHONE_HOME_CITY_CODE | dayphone1 | Primary telephone number |  | firstname_2-default
-PHONE_HOME_NUMBER | dayphone2 | Primary telephone number |  | firstname_2-default
-PHONE_HOME_NUMBER | dayphone3 | Primary telephone number |  | firstname_2-default
+PHONE_HOME_NUMBER_PREFIX | dayphone2 | Primary telephone number |  | firstname_2-default
+PHONE_HOME_NUMBER_SUFFIX | dayphone3 | Primary telephone number |  | firstname_2-default
 PHONE_HOME_EXTENSION | dayphone4 | ext.: |  | firstname_2-default
 EMAIL_ADDRESS | email | Email address |  | firstname_2-default
 EMAIL_ADDRESS | retype_email | Re-enter email address |  | firstname_2-default
@@ -56,8 +56,8 @@
 ADDRESS_HOME_ZIP | zip | ZIP / Postal code |  | firstname_3-default
 ADDRESS_HOME_COUNTRY | countryId | Country or region | 1 | firstname_3-default
 PHONE_HOME_CITY_CODE | dayphone1 | Primary telephone number |  | firstname_3-default
-PHONE_HOME_NUMBER | dayphone2 | Primary telephone number |  | firstname_3-default
-PHONE_HOME_NUMBER | dayphone3 | Primary telephone number |  | firstname_3-default
+PHONE_HOME_NUMBER_PREFIX | dayphone2 | Primary telephone number |  | firstname_3-default
+PHONE_HOME_NUMBER_SUFFIX | dayphone3 | Primary telephone number |  | firstname_3-default
 PHONE_HOME_EXTENSION | dayphone4 | ext.: |  | firstname_3-default
 EMAIL_ADDRESS | email | Email address |  | firstname_3-default
 EMAIL_ADDRESS | retype_email | Re-enter email address |  | firstname_3-default
diff --git a/components/test/data/autofill/heuristics/output/062_register_newegg.com.out b/components/test/data/autofill/heuristics/output/062_register_newegg.com.out
index 32eb404..b67a9840 100644
--- a/components/test/data/autofill/heuristics/output/062_register_newegg.com.out
+++ b/components/test/data/autofill/heuristics/output/062_register_newegg.com.out
@@ -13,12 +13,12 @@
 ADDRESS_HOME_STATE | BState | State* | AK | LoginName_1-default
 ADDRESS_HOME_ZIP | BZip | Zip Code* |  | LoginName_1-default
 PHONE_HOME_CITY_CODE | BNightPhone_tel1 | Shipping Phone* |  | LoginName_1-default
-PHONE_HOME_NUMBER | BNightPhone_tel2 | Exchange |  | LoginName_1-default
-PHONE_HOME_NUMBER | BNightPhone_tel3 | Last four digits |  | LoginName_1-default
+PHONE_HOME_NUMBER_PREFIX | BNightPhone_tel2 | Exchange |  | LoginName_1-default
+PHONE_HOME_NUMBER_SUFFIX | BNightPhone_tel3 | Last four digits |  | LoginName_1-default
 PHONE_HOME_EXTENSION | BNightPhone_ext1 | Ext |  | LoginName_1-default
 PHONE_HOME_CITY_CODE | BDayPhone_tel1 | Daytime Phone |  | LoginName_1-default
-PHONE_HOME_NUMBER | BDayPhone_tel2 | Exchange |  | LoginName_1-default
-PHONE_HOME_NUMBER | BDayPhone_tel3 | Last four digits |  | LoginName_1-default
+PHONE_HOME_NUMBER_PREFIX | BDayPhone_tel2 | Exchange |  | LoginName_1-default
+PHONE_HOME_NUMBER_SUFFIX | BDayPhone_tel3 | Last four digits |  | LoginName_1-default
 PHONE_HOME_EXTENSION | BDayPhone_ext1 | Ext |  | LoginName_1-default
 UNKNOWN_TYPE | same | Yes | 1 | LoginName_1-default
 UNKNOWN_TYPE | same | No | 0 | LoginName_1-default
@@ -32,8 +32,8 @@
 ADDRESS_HOME_STATE | SState | State* | AK | SFirstName_2-default
 ADDRESS_HOME_ZIP | SZip | Zip Code* |  | SFirstName_2-default
 PHONE_HOME_CITY_CODE | ShippingPhone_tel1 | Shipping Phone* |  | SFirstName_2-default
-PHONE_HOME_NUMBER | ShippingPhone_tel2 |  |  | SFirstName_2-default
-PHONE_HOME_NUMBER | ShippingPhone_tel3 |  |  | SFirstName_2-default
+PHONE_HOME_NUMBER_PREFIX | ShippingPhone_tel2 |  |  | SFirstName_2-default
+PHONE_HOME_NUMBER_SUFFIX | ShippingPhone_tel3 |  |  | SFirstName_2-default
 PHONE_HOME_EXTENSION | ShippingPhone_ext1 | Ext |  | SFirstName_2-default
 UNKNOWN_TYPE | custtype | Is this purchase for personal or business use? | 200 | LoginName_1-default
 UNKNOWN_TYPE | Age | Age |  | LoginName_1-default
diff --git a/components/test/data/autofill/heuristics/output/063_register_officedepot.com.out b/components/test/data/autofill/heuristics/output/063_register_officedepot.com.out
index c6e3bbba9..3057f07 100644
--- a/components/test/data/autofill/heuristics/output/063_register_officedepot.com.out
+++ b/components/test/data/autofill/heuristics/output/063_register_officedepot.com.out
@@ -9,8 +9,8 @@
 ADDRESS_HOME_STATE | addrsForm[0].state | *State | {blank} | addrsForm[0].firstName_1-default
 ADDRESS_HOME_ZIP | addrsForm[0].postalCode1 | *Zip Code |  | addrsForm[0].firstName_1-default
 PHONE_HOME_CITY_CODE | addrsForm[0].phoneNumber1 | *Phone Number: |  | addrsForm[0].firstName_1-default
-PHONE_HOME_NUMBER | addrsForm[0].phoneNumber2 | *Phone Number: |  | addrsForm[0].firstName_1-default
-PHONE_HOME_NUMBER | addrsForm[0].phoneNumber3 | *Phone Number: |  | addrsForm[0].firstName_1-default
+PHONE_HOME_NUMBER_PREFIX | addrsForm[0].phoneNumber2 | *Phone Number: |  | addrsForm[0].firstName_1-default
+PHONE_HOME_NUMBER_SUFFIX | addrsForm[0].phoneNumber3 | *Phone Number: |  | addrsForm[0].firstName_1-default
 PHONE_HOME_EXTENSION | addrsForm[0].phoneNumber4 | ext. |  | addrsForm[0].firstName_1-default
 UNKNOWN_TYPE | addrsForm[0].faxNumber1 | Fax: |  | addrsForm[0].firstName_1-default
 UNKNOWN_TYPE | addrsForm[0].faxNumber2 | Fax: |  | addrsForm[0].firstName_1-default
@@ -32,8 +32,8 @@
 ADDRESS_HOME_STATE | addrsForm[2].state | *State | {blank} | addrsForm[2].firstName_3-default
 ADDRESS_HOME_ZIP | addrsForm[2].postalCode1 | *Zip Code |  | addrsForm[2].firstName_3-default
 PHONE_HOME_CITY_CODE | addrsForm[2].phoneNumber1 | *Phone Number: |  | addrsForm[2].firstName_3-default
-PHONE_HOME_NUMBER | addrsForm[2].phoneNumber2 | *Phone Number: |  | addrsForm[2].firstName_3-default
-PHONE_HOME_NUMBER | addrsForm[2].phoneNumber3 | *Phone Number: |  | addrsForm[2].firstName_3-default
+PHONE_HOME_NUMBER_PREFIX | addrsForm[2].phoneNumber2 | *Phone Number: |  | addrsForm[2].firstName_3-default
+PHONE_HOME_NUMBER_SUFFIX | addrsForm[2].phoneNumber3 | *Phone Number: |  | addrsForm[2].firstName_3-default
 PHONE_HOME_EXTENSION | addrsForm[2].phoneNumber4 | ext. |  | addrsForm[2].firstName_3-default
 EMAIL_ADDRESS | addrsForm[2].email | *Email Address: |  | addrsForm[2].firstName_3-default
 UNKNOWN_TYPE | loginForm.loginName | *Login Name: |  | addrsForm[2].firstName_3-default
diff --git a/components/test/data/autofill/heuristics/output/086_crbug_98269.out b/components/test/data/autofill/heuristics/output/086_crbug_98269.out
index 57313a6..4a386721 100644
--- a/components/test/data/autofill/heuristics/output/086_crbug_98269.out
+++ b/components/test/data/autofill/heuristics/output/086_crbug_98269.out
@@ -1,7 +1,7 @@
 UNKNOWN_TYPE | PaymentMethod | BL | BL | PaymentMethod_1-default
 PHONE_HOME_CITY_CODE | txtHomePhone1 | * Home Phone: |  | PaymentMethod_1-default
-PHONE_HOME_NUMBER | txtHomePhone2 | * Home Phone: |  | PaymentMethod_1-default
-PHONE_HOME_NUMBER | txtHomePhone3 | * Home Phone: |  | PaymentMethod_1-default
+PHONE_HOME_NUMBER_PREFIX | txtHomePhone2 | * Home Phone: |  | PaymentMethod_1-default
+PHONE_HOME_NUMBER_SUFFIX | txtHomePhone3 | * Home Phone: |  | PaymentMethod_1-default
 EMAIL_ADDRESS | txtEmail | * Email Address: |  | PaymentMethod_1-default
 UNKNOWN_TYPE | txtSSN | XXX-XX- |  | PaymentMethod_1-default
 UNKNOWN_TYPE | selBirthMonth | * Date of Birth: | Month | PaymentMethod_1-default
diff --git a/components/test/data/autofill/heuristics/output/103_checkout_peapod.com.out b/components/test/data/autofill/heuristics/output/103_checkout_peapod.com.out
index 8142df9..92d5b85 100644
--- a/components/test/data/autofill/heuristics/output/103_checkout_peapod.com.out
+++ b/components/test/data/autofill/heuristics/output/103_checkout_peapod.com.out
@@ -8,8 +8,8 @@
 ADDRESS_HOME_STATE | billState | MA | MA | _1-default
 ADDRESS_HOME_ZIP | billZip | Zip Code: | 01001 | _1-default
 PHONE_HOME_CITY_CODE | HomeArea | Contact Phone: | 310 | _1-default
-PHONE_HOME_NUMBER | HomePrefix | Contact Phone: | 555 | _1-default
-PHONE_HOME_NUMBER | HomeSuffix | Contact Phone: | 1212 | _1-default
+PHONE_HOME_NUMBER_PREFIX | HomePrefix | Contact Phone: | 555 | _1-default
+PHONE_HOME_NUMBER_SUFFIX | HomeSuffix | Contact Phone: | 1212 | _1-default
 CREDIT_CARD_TYPE | /peapod/handler/iditarod/CheckoutRegistrationHandler.creditCardType | Card Type: |  | credit-card-cc
 CREDIT_CARD_NUMBER | cardNum |  |  | credit-card-cc
 CREDIT_CARD_VERIFICATION_CODE | cid |  |  | credit-card-cc
diff --git a/components/test/data/autofill/heuristics/output/113_guest_checkout_peapod.com.out b/components/test/data/autofill/heuristics/output/113_guest_checkout_peapod.com.out
index 812d0622..57aaada1 100644
--- a/components/test/data/autofill/heuristics/output/113_guest_checkout_peapod.com.out
+++ b/components/test/data/autofill/heuristics/output/113_guest_checkout_peapod.com.out
@@ -8,11 +8,11 @@
 ADDRESS_HOME_STATE | delivState | NY | NY | delivTitle_1-default
 ADDRESS_HOME_ZIP | delivZipCode | Zip Code: | 10011 | delivTitle_1-default
 PHONE_HOME_CITY_CODE | HomeArea |  |  | delivTitle_1-default
-PHONE_HOME_NUMBER | HomePrefix |  |  | delivTitle_1-default
-PHONE_HOME_NUMBER | HomeSuffix |  |  | delivTitle_1-default
+PHONE_HOME_NUMBER_PREFIX | HomePrefix |  |  | delivTitle_1-default
+PHONE_HOME_NUMBER_SUFFIX | HomeSuffix |  |  | delivTitle_1-default
 PHONE_HOME_CITY_CODE | WorkArea |  |  | delivTitle_1-default
-PHONE_HOME_NUMBER | WorkPrefix |  |  | delivTitle_1-default
-PHONE_HOME_NUMBER | WorkSuffix |  |  | delivTitle_1-default
+PHONE_HOME_NUMBER_PREFIX | WorkPrefix |  |  | delivTitle_1-default
+PHONE_HOME_NUMBER_SUFFIX | WorkSuffix |  |  | delivTitle_1-default
 PHONE_HOME_EXTENSION | delivWorkPhoneExt | Ext: |  | delivTitle_1-default
 UNKNOWN_TYPE | dlv_isct_tx | Closest Major Intersection: |  | delivTitle_1-default
 UNKNOWN_TYPE | instructions |  |  | delivTitle_1-default
diff --git a/components/test/data/payments/show_twice.js b/components/test/data/payments/show_twice.js
index 321a94a6..d64bf8db 100644
--- a/components/test/data/payments/show_twice.js
+++ b/components/test/data/payments/show_twice.js
@@ -9,7 +9,7 @@
  */
 function showFirst() { // eslint-disable-line no-unused-vars
   const request1 = new PaymentRequest(
-      [{supportedMethods: 'basic-card', data: {supportedNetworks: ['visa']}}],
+      [{supportedMethods: 'https://bobpay.com'}, {supportedMethods: 'https://alicepay.com'}],
       {total: {label: 'Total', amount: {currency: 'USD', value: '5.00'}}});
   request1.show();
 }
@@ -20,7 +20,7 @@
  */
 async function showSecond() { // eslint-disable-line no-unused-vars
   const request2 = new PaymentRequest(
-      [{supportedMethods: 'basic-card', data: {supportedNetworks: ['visa']}}],
+      [{supportedMethods: 'https://bobpay.com'}],
       {total: {label: 'Total', amount: {currency: 'USD', value: '5.00'}}});
   // We already have a PaymentRequest showing, so this should fail.
   try {
diff --git a/components/variations/service/variations_service_unittest.cc b/components/variations/service/variations_service_unittest.cc
index 4f2eb10..86da918 100644
--- a/components/variations/service/variations_service_unittest.cc
+++ b/components/variations/service/variations_service_unittest.cc
@@ -301,12 +301,12 @@
   return serialized_seed;
 }
 
-// Converts |value| to a string, to make it easier for debugging.
-std::string ValueToString(const base::Value& value) {
+// Converts |list| to a string, to make it easier for debugging.
+std::string ListToString(const base::Value::List& list) {
   std::string json;
   JSONStringValueSerializer serializer(&json);
   serializer.set_pretty_print(true);
-  serializer.Serialize(value);
+  serializer.Serialize(list);
   return json;
 }
 
@@ -811,15 +811,15 @@
         << test.permanent_consistency_country_before << ", " << test.version
         << ", " << test.latest_country_code;
 
-    base::Value expected_list_value{base::Value::Type::LIST};
+    base::Value::List expected_list;
     for (const std::string& component :
          base::SplitString(test.permanent_consistency_country_after, ",",
                            base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) {
-      expected_list_value.Append(component);
+      expected_list.Append(component);
     }
-    const base::Value* pref_value =
-        prefs_.GetList(prefs::kVariationsPermanentConsistencyCountry);
-    EXPECT_EQ(ValueToString(expected_list_value), ValueToString(*pref_value))
+    const base::Value::List& pref_list =
+        prefs_.GetValueList(prefs::kVariationsPermanentConsistencyCountry);
+    EXPECT_EQ(ListToString(expected_list), ListToString(pref_list))
         << test.permanent_consistency_country_before << ", " << test.version
         << ", " << test.latest_country_code;
 
diff --git a/components/viz/common/resources/resource_format_utils.cc b/components/viz/common/resources/resource_format_utils.cc
index 7d554183..f31da5e 100644
--- a/components/viz/common/resources/resource_format_utils.cc
+++ b/components/viz/common/resources/resource_format_utils.cc
@@ -46,6 +46,12 @@
     case ETC1:
       return kRGB_888x_SkColorType;
     case P010:
+#if BUILDFLAG(IS_MAC)
+      // TODO(https://crbug.com/1155760): Until individual planes can be bound
+      // as their own textures, P010 buffers are copied to F16 textures for
+      // sampling.
+      return kRGBA_F16_SkColorType;
+#endif
     case RGBA_1010102:
       return kRGBA_1010102_SkColorType;
     case BGRA_1010102:
@@ -398,6 +404,12 @@
     case ETC1:
       return GL_ETC1_RGB8_OES;
     case P010:
+#if BUILDFLAG(IS_MAC)
+      // TODO(https://crbug.com/1155760): Until individual planes can be bound
+      // as their own textures, P010 buffers are copied to F16 textures for
+      // sampling.
+      return GL_RGBA16F_EXT;
+#endif
     case RGBA_1010102:
     case BGRA_1010102:
       return GL_RGB10_A2_EXT;
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 917b7f696..25691dd2 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -1393,10 +1393,14 @@
     "portal/portal.h",
     "portal/portal_navigation_throttle.cc",
     "portal/portal_navigation_throttle.h",
+    "preloading/prefetch/prefetch_canary_checker.cc",
+    "preloading/prefetch/prefetch_canary_checker.h",
     "preloading/prefetch/prefetch_container.cc",
     "preloading/prefetch/prefetch_container.h",
     "preloading/prefetch/prefetch_cookie_listener.cc",
     "preloading/prefetch/prefetch_cookie_listener.h",
+    "preloading/prefetch/prefetch_dns_prober.cc",
+    "preloading/prefetch/prefetch_dns_prober.h",
     "preloading/prefetch/prefetch_document_manager.cc",
     "preloading/prefetch/prefetch_document_manager.h",
     "preloading/prefetch/prefetch_features.cc",
@@ -1407,8 +1411,12 @@
     "preloading/prefetch/prefetch_network_context.h",
     "preloading/prefetch/prefetch_network_context_client.cc",
     "preloading/prefetch/prefetch_network_context_client.h",
+    "preloading/prefetch/prefetch_origin_prober.cc",
+    "preloading/prefetch/prefetch_origin_prober.h",
     "preloading/prefetch/prefetch_params.cc",
     "preloading/prefetch/prefetch_params.h",
+    "preloading/prefetch/prefetch_probe_result.cc",
+    "preloading/prefetch/prefetch_probe_result.h",
     "preloading/prefetch/prefetch_proxy_configurator.cc",
     "preloading/prefetch/prefetch_proxy_configurator.h",
     "preloading/prefetch/prefetch_service.cc",
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc
index b4a480a..91a03759 100644
--- a/content/browser/accessibility/browser_accessibility.cc
+++ b/content/browser/accessibility/browser_accessibility.cc
@@ -1087,6 +1087,11 @@
 }
 
 ax::mojom::Role BrowserAccessibility::GetRole() const {
+  // Getting the role is generally the result of an accessibility API call, so
+  // we should reset the auto-disable accessibility code.
+  content::BrowserAccessibilityStateImpl::GetInstance()
+      ->OnAccessibilityApiUsage();
+
   // TODO(accessibility): Why is role checked after this object has been
   // destructed causing a dangling pointer bug?
   return node() ? node()->GetRole() : ax::mojom::Role::kUnknown;
diff --git a/content/browser/accessibility/browser_accessibility_android_unittest.cc b/content/browser/accessibility/browser_accessibility_android_unittest.cc
index 6bb67f8c..009dea7 100644
--- a/content/browser/accessibility/browser_accessibility_android_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_android_unittest.cc
@@ -6,11 +6,11 @@
 
 #include <memory>
 
-#include "base/test/task_environment.h"
 #include "build/build_config.h"
 #include "content/browser/accessibility/browser_accessibility_manager.h"
 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
 #include "content/browser/accessibility/test_browser_accessibility_delegate.h"
+#include "content/public/test/browser_task_environment.h"
 #include "content/test/test_content_client.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/strings/grit/blink_accessibility_strings.h"
@@ -60,9 +60,12 @@
 
  private:
   void SetUp() override;
-  base::test::TaskEnvironment task_environment_;
   MockContentClient client_;
   ui::testing::ScopedAxModeSetter ax_mode_setter_;
+
+  // This is needed to prevent a DCHECK failure when OnAccessibilityApiUsage
+  // is called in BrowserAccessibility::GetRole.
+  content::BrowserTaskEnvironment task_environment_;
 };
 
 BrowserAccessibilityAndroidTest::BrowserAccessibilityAndroidTest()
diff --git a/content/browser/accessibility/browser_accessibility_auralinux.cc b/content/browser/accessibility/browser_accessibility_auralinux.cc
index d107fb14..32cbd5d 100644
--- a/content/browser/accessibility/browser_accessibility_auralinux.cc
+++ b/content/browser/accessibility/browser_accessibility_auralinux.cc
@@ -31,24 +31,25 @@
     BrowserAccessibilityManager* manager,
     ui::AXNode* node)
     : BrowserAccessibility(manager, node) {
-  node_ = static_cast<ui::AXPlatformNodeAuraLinux*>(
+  platform_node_ = static_cast<ui::AXPlatformNodeAuraLinux*>(
       ui::AXPlatformNode::Create(this));
 }
 
 BrowserAccessibilityAuraLinux::~BrowserAccessibilityAuraLinux() {
-  DCHECK(node_);
-  node_->Destroy();
-  node_ = nullptr;
+  DCHECK(platform_node_);
+  // Clear platform_node_ and return another raw_ptr instance
+  // that is allowed to dangle.
+  platform_node_.ExtractAsDangling()->Destroy();
 }
 
 ui::AXPlatformNodeAuraLinux* BrowserAccessibilityAuraLinux::GetNode() const {
-  return node_;
+  return platform_node_;
 }
 
 gfx::NativeViewAccessible
 BrowserAccessibilityAuraLinux::GetNativeViewAccessible() {
-  DCHECK(node_);
-  return node_->GetNativeViewAccessible();
+  DCHECK(platform_node_);
+  return platform_node_->GetNativeViewAccessible();
 }
 
 void BrowserAccessibilityAuraLinux::UpdatePlatformAttributes() {
@@ -57,8 +58,8 @@
 
 void BrowserAccessibilityAuraLinux::OnDataChanged() {
   BrowserAccessibility::OnDataChanged();
-  DCHECK(node_);
-  node_->EnsureAtkObjectIsValid();
+  DCHECK(platform_node_);
+  platform_node_->EnsureAtkObjectIsValid();
 }
 
 ui::AXPlatformNode* BrowserAccessibilityAuraLinux::GetAXPlatformNode() const {
diff --git a/content/browser/accessibility/browser_accessibility_auralinux.h b/content/browser/accessibility/browser_accessibility_auralinux.h
index cb0d475..787ebd7 100644
--- a/content/browser/accessibility/browser_accessibility_auralinux.h
+++ b/content/browser/accessibility/browser_accessibility_auralinux.h
@@ -43,8 +43,8 @@
   ui::TextAttributeList ComputeTextAttributes() const override;
 
  private:
-  // TODO(nektar): Rename to platform_node_ to avoid confusion with ui::AXNode.
-  raw_ptr<ui::AXPlatformNodeAuraLinux, DanglingUntriaged> node_;
+  // TODO: use a unique_ptr since the node is owned by this class.
+  raw_ptr<ui::AXPlatformNodeAuraLinux> platform_node_;
 };
 
 CONTENT_EXPORT BrowserAccessibilityAuraLinux* ToBrowserAccessibilityAuraLinux(
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index af193dde..09af9f4 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -1209,9 +1209,6 @@
   return [self role];
 }
 - (NSString*)role {
-  content::BrowserAccessibilityStateImpl::GetInstance()
-      ->OnAccessibilityApiUsage();
-
   if (![self instanceActive]) {
     TRACE_EVENT0("accessibility", "BrowserAccessibilityCocoa::role nil");
     return nil;
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index 84a1e91..0346e65 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -620,12 +620,13 @@
   std::vector<ui::AXEventGenerator::TargetedEvent> deferred_events;
   for (const auto& targeted_event : event_generator()) {
     BrowserAccessibility* event_target = GetFromID(targeted_event.node_id);
-    if (!event_target)
-      continue;
+    DCHECK(event_target) << "No event target for " << targeted_event.node_id;
 
     event_target = RetargetForEvents(
         event_target, RetargetEventType::RetargetEventTypeGenerated);
-    if (!event_target || !event_target->CanFireEvents())
+    DCHECK(event_target) << "No retargeted event target for "
+                         << targeted_event.node_id;
+    if (!event_target->CanFireEvents())
       continue;
 
     // IsDescendantOf() also returns true in the case of equality.
@@ -650,12 +651,13 @@
   // Now fire all of the rest of the generated events we previously deferred.
   for (const auto& targeted_event : deferred_events) {
     BrowserAccessibility* event_target = GetFromID(targeted_event.node_id);
-    if (!event_target)
-      continue;
+    DCHECK(event_target) << "No event target for " << targeted_event.node_id;
 
     event_target = RetargetForEvents(
         event_target, RetargetEventType::RetargetEventTypeGenerated);
-    if (!event_target || !event_target->CanFireEvents())
+    DCHECK(event_target) << "No retargeted event target for "
+                         << targeted_event.node_id;
+    if (!event_target->CanFireEvents())
       continue;
 
     FireGeneratedEvent(targeted_event.event_params.event, event_target);
@@ -666,14 +668,16 @@
   for (const ui::AXEvent& event : details.events) {
     // Fire the native event.
     BrowserAccessibility* event_target = GetFromID(event.id);
-    if (!event_target)
-      continue;
+    DCHECK(event_target) << "No event target for " << event.id
+                         << " with event type " << event.event_type;
     RetargetEventType type =
         event.event_type == ax::mojom::Event::kHover
             ? RetargetEventType::RetargetEventTypeBlinkHover
             : RetargetEventType::RetargetEventTypeBlinkGeneral;
     BrowserAccessibility* retargeted = RetargetForEvents(event_target, type);
-    if (!retargeted || !retargeted->CanFireEvents())
+    DCHECK(retargeted) << "No retargeted event target for " << event.id
+                       << " with event type " << event.event_type;
+    if (!retargeted->CanFireEvents())
       continue;
 
     if (event.event_type == ax::mojom::Event::kHover)
diff --git a/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc
index e452260..6d62fe22 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win_unittest.cc
@@ -7,6 +7,7 @@
 #include "content/browser/accessibility/browser_accessibility.h"
 #include "content/browser/accessibility/browser_accessibility_manager.h"
 #include "content/browser/accessibility/test_browser_accessibility_delegate.h"
+#include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/accessibility/accessibility_switches.h"
 #include "ui/accessibility/platform/ax_fragment_root_delegate_win.h"
@@ -53,6 +54,10 @@
 
  private:
   void SetUp() override;
+
+  // This is needed to prevent a DCHECK failure when OnAccessibilityApiUsage
+  // is called in BrowserAccessibility::GetRole.
+  content::BrowserTaskEnvironment task_environment_;
 };
 
 void BrowserAccessibilityManagerWinTest::SetUp() {
diff --git a/content/browser/accessibility/browser_accessibility_state_impl_unittest.cc b/content/browser/accessibility/browser_accessibility_state_impl_unittest.cc
index 703b3ea..7fca3727e 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_state_impl_unittest.cc
@@ -7,6 +7,8 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
+#include "content/browser/accessibility/browser_accessibility_manager.h"
+#include "content/browser/accessibility/test_browser_accessibility_delegate.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/accessibility/accessibility_features.h"
@@ -36,6 +38,8 @@
   base::SimpleTestTickClock clock_;
   raw_ptr<BrowserAccessibilityStateImpl> state_;
   BrowserTaskEnvironment task_environment_;
+  std::unique_ptr<TestBrowserAccessibilityDelegate>
+      test_browser_accessibility_delegate_;
 };
 
 TEST_F(BrowserAccessibilityStateImplTest,
@@ -139,4 +143,39 @@
   EXPECT_EQ(ui::AXPlatformNode::GetAccessibilityMode(), ui::kAXModeComplete);
 }
 
+TEST_F(BrowserAccessibilityStateImplTest,
+       GetRolePreventsAutoDisableAccessibility) {
+  // Create a bare-minimum accessibility tree so we can call GetRole().
+  ui::AXNodeData root;
+  root.id = 1;
+  root.role = ax::mojom::Role::kRootWebArea;
+  std::unique_ptr<BrowserAccessibilityManager> browser_accessibility_manager(
+      BrowserAccessibilityManager::Create(
+          MakeAXTreeUpdate(root), test_browser_accessibility_delegate_.get()));
+
+  BrowserAccessibility* ax_root = browser_accessibility_manager->GetRoot();
+  ASSERT_NE(nullptr, ax_root);
+
+  // Initially, accessibility should be disabled.
+  EXPECT_FALSE(state_->IsAccessibleBrowser());
+  EXPECT_EQ(ui::AXPlatformNode::GetAccessibilityMode(), ui::AXMode());
+
+  // Enable accessibility.
+  state_->OnScreenReaderDetected();
+  EXPECT_TRUE(state_->IsAccessibleBrowser());
+  EXPECT_EQ(ui::AXPlatformNode::GetAccessibilityMode(), ui::kAXModeComplete);
+
+  // Send user input, wait 31 seconds, then send another user input event after
+  // checking the role, which should register accessibility API usage.
+  state_->OnUserInputEvent();
+  state_->OnUserInputEvent();
+  clock_.Advance(base::Seconds(31));
+  ax_root->GetRole();
+  state_->OnUserInputEvent();
+
+  // Accessibility should still be enabled due to GetRole() being called.
+  EXPECT_TRUE(state_->IsAccessibleBrowser());
+  EXPECT_EQ(ui::AXPlatformNode::GetAccessibilityMode(), ui::kAXModeComplete);
+}
+
 }  // namespace content
diff --git a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
index 3380ecf..1edfb710 100644
--- a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
+++ b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
@@ -825,32 +825,136 @@
   ASSERT_NE(select, nullptr);
   EXPECT_EQ(ax::mojom::Role::kPopUpButton, select->GetRole());
 
+  {
+    // Get popup via InternalGetChild so that hidden nodes are included.
+    const BrowserAccessibility* popup = select->InternalGetChild(0);
+    ASSERT_NE(popup, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListPopup, popup->GetRole());
+
+    // Get "Option 1" via InternalGetChild so that hidden nodes are included.
+    const BrowserAccessibility* option_1 = popup->InternalGetChild(0);
+    ASSERT_NE(option_1, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListOption, option_1->GetRole());
+    EXPECT_EQ("Option 1",
+              option_1->GetStringAttribute(ax::mojom::StringAttribute::kName));
+    // Invisible because select is collapsed.
+    EXPECT_TRUE(option_1->HasState(ax::mojom::State::kInvisible));
+
+    // Get "Option 2" via InternalGetChild so that hidden nodes are included.
+    const BrowserAccessibility* option_2 = popup->InternalGetChild(1);
+    ASSERT_NE(option_2, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListOption, option_2->GetRole());
+    EXPECT_EQ("Option 2",
+              option_2->GetStringAttribute(ax::mojom::StringAttribute::kName));
+    // Visible because it's selected and shown inside the collapsed select.
+    EXPECT_FALSE(option_2->HasState(ax::mojom::State::kInvisible));
+  }
+
   // Open popup.
   AccessibilityNotificationWaiter waiter(shell()->web_contents(),
                                          ui::kAXModeComplete,
                                          ax::mojom::Event::kChildrenChanged);
-  ui::AXActionData action_data;
-  action_data.action = ax::mojom::Action::kDoDefault;
-  select->AccessibilityPerformAction(action_data);
-  ASSERT_TRUE(waiter.WaitForNotification());
+  {
+    ui::AXActionData action_data;
+    action_data.action = ax::mojom::Action::kDoDefault;
+    select->AccessibilityPerformAction(action_data);
+    ASSERT_TRUE(waiter.WaitForNotification());
+  }
 
-  // Get popup.
-  const BrowserAccessibility* popup = select->PlatformGetChild(0);
-  ASSERT_NE(popup, nullptr);
-  EXPECT_EQ(ax::mojom::Role::kMenuListPopup, popup->GetRole());
+  {
+    // Get popup.
+    const BrowserAccessibility* popup = select->PlatformGetChild(0);
+    ASSERT_NE(popup, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListPopup, popup->GetRole());
 
-  // Get "Option 2".
-  const BrowserAccessibility* option_2 = popup->PlatformGetChild(1);
-  ASSERT_NE(option_2, nullptr);
-  EXPECT_EQ(ax::mojom::Role::kMenuListOption, option_2->GetRole());
-  EXPECT_EQ("Option 2",
-            option_2->GetStringAttribute(ax::mojom::StringAttribute::kName));
+    // Get "Option 1".
+    const BrowserAccessibility* option_1 = popup->PlatformGetChild(0);
+    ASSERT_NE(option_1, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListOption, option_1->GetRole());
+    EXPECT_EQ("Option 1",
+              option_1->GetStringAttribute(ax::mojom::StringAttribute::kName));
+    // Visible because select is expanded.
+    EXPECT_FALSE(option_1->HasState(ax::mojom::State::kInvisible));
 
-  // Ensure active descendant is "Option 2"
-  int active_descendant_id = -1;
-  EXPECT_TRUE(popup->GetIntAttribute(
-      ax::mojom::IntAttribute::kActivedescendantId, &active_descendant_id));
-  EXPECT_EQ(active_descendant_id, option_2->GetId());
+    // Get "Option 2".
+    const BrowserAccessibility* option_2 = popup->PlatformGetChild(1);
+    ASSERT_NE(option_2, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListOption, option_2->GetRole());
+    EXPECT_EQ("Option 2",
+              option_2->GetStringAttribute(ax::mojom::StringAttribute::kName));
+    EXPECT_FALSE(option_2->HasState(ax::mojom::State::kInvisible));
+
+    // Ensure active descendant is "Option 2"
+    int active_descendant_id = -1;
+    EXPECT_TRUE(popup->GetIntAttribute(
+        ax::mojom::IntAttribute::kActivedescendantId, &active_descendant_id));
+    EXPECT_EQ(active_descendant_id, option_2->GetId());
+  }
+
+  // Close the popup.
+  {
+    ui::AXActionData action_data;
+    action_data.action = ax::mojom::Action::kDoDefault;
+    select->AccessibilityPerformAction(action_data);
+    ASSERT_TRUE(waiter.WaitForNotification());
+  }
+
+  {
+    // Get popup via InternalGetChild so that hidden nodes are included.
+    const BrowserAccessibility* popup = select->InternalGetChild(0);
+    ASSERT_NE(popup, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListPopup, popup->GetRole());
+
+    // Get "Option 1" via InternalGetChild so that hidden nodes are included.
+    const BrowserAccessibility* option_1 = popup->InternalGetChild(0);
+    ASSERT_NE(option_1, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListOption, option_1->GetRole());
+    EXPECT_EQ("Option 1",
+              option_1->GetStringAttribute(ax::mojom::StringAttribute::kName));
+    // Invisible because select is collapsed.
+    EXPECT_TRUE(option_1->HasState(ax::mojom::State::kInvisible));
+
+    // Get "Option 2" via InternalGetChild so that hidden nodes are included.
+    const BrowserAccessibility* option_2 = popup->InternalGetChild(1);
+    ASSERT_NE(option_2, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListOption, option_2->GetRole());
+    EXPECT_EQ("Option 2",
+              option_2->GetStringAttribute(ax::mojom::StringAttribute::kName));
+    // Visible because it's selected and shown inside the collapsed select.
+    EXPECT_FALSE(option_2->HasState(ax::mojom::State::kInvisible));
+  }
+
+  AccessibilityNotificationWaiter active_descendant_waiter(
+      shell()->web_contents(), ui::kAXModeComplete,
+      ax::mojom::Event::kActiveDescendantChanged);
+
+  // Select the first option.
+  ExecuteScript("document.getElementById('select_node').selectedIndex = 0;");
+  ASSERT_TRUE(active_descendant_waiter.WaitForNotification());
+  {
+    // Get popup via InternalGetChild so that hidden nodes are included.
+    const BrowserAccessibility* popup = select->InternalGetChild(0);
+    ASSERT_NE(popup, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListPopup, popup->GetRole());
+
+    // Get "Option 1" via InternalGetChild so that hidden nodes are included.
+    const BrowserAccessibility* option_1 = popup->InternalGetChild(0);
+    ASSERT_NE(option_1, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListOption, option_1->GetRole());
+    EXPECT_EQ("Option 1",
+              option_1->GetStringAttribute(ax::mojom::StringAttribute::kName));
+    // Visible because it's selected and shown inside the collapsed select.
+    EXPECT_FALSE(option_1->HasState(ax::mojom::State::kInvisible));
+
+    // Get "Option 2" via InternalGetChild so that hidden nodes are included.
+    const BrowserAccessibility* option_2 = popup->InternalGetChild(1);
+    ASSERT_NE(option_2, nullptr);
+    EXPECT_EQ(ax::mojom::Role::kMenuListOption, option_2->GetRole());
+    EXPECT_EQ("Option 2",
+              option_2->GetStringAttribute(ax::mojom::StringAttribute::kName));
+    // Invisible because select is collapsed.
+    EXPECT_TRUE(option_2->HasState(ax::mojom::State::kInvisible));
+  }
 }
 #endif  // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_MAC)
 
diff --git a/content/browser/accessibility/touch_passthrough_manager_unittest.cc b/content/browser/accessibility/touch_passthrough_manager_unittest.cc
index 18e4e03b..278d63e 100644
--- a/content/browser/accessibility/touch_passthrough_manager_unittest.cc
+++ b/content/browser/accessibility/touch_passthrough_manager_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/time/time.h"
 #include "content/browser/accessibility/browser_accessibility.h"
 #include "content/browser/accessibility/browser_accessibility_manager.h"
+#include "content/public/test/browser_task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/accessibility/ax_node_data.h"
@@ -53,6 +54,10 @@
   base::TimeTicks previous_time_;
   bool button_down_ = false;
 
+  // This is needed to prevent a DCHECK failure when OnAccessibilityApiUsage
+  // is called in BrowserAccessibility::GetRole.
+  content::BrowserTaskEnvironment task_environment_;
+
   void SendHitTest(
       const gfx::Point& point_in_frame_pixels,
       base::OnceCallback<void(BrowserAccessibilityManager* hit_manager,
diff --git a/content/browser/bluetooth/bluetooth_blocklist.cc b/content/browser/bluetooth/bluetooth_blocklist.cc
index 8ec7c15..332483e 100644
--- a/content/browser/bluetooth/bluetooth_blocklist.cc
+++ b/content/browser/bluetooth/bluetooth_blocklist.cc
@@ -7,11 +7,14 @@
 #include "base/check.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_split.h"
+#include "content/browser/bluetooth/bluetooth_util.h"
 #include "content/public/browser/content_browser_client.h"
 #include "content/public/common/content_client.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom.h"
 
 using device::BluetoothUUID;
+using ManufacturerId = device::BluetoothDevice::ManufacturerId;
 
 namespace {
 
@@ -40,6 +43,8 @@
   }
 }
 
+// TODO(crbug.com/1348063): Support |blocklist_string| for manufacturer data
+// prefix.
 void BluetoothBlocklist::Add(base::StringPiece blocklist_string) {
   if (blocklist_string.empty())
     return;
@@ -66,6 +71,18 @@
   }
 }
 
+void BluetoothBlocklist::Add(
+    const device::BluetoothDevice::ManufacturerId& company_identifier,
+    const std::vector<blink::mojom::WebBluetoothDataFilter>& prefix) {
+  DataPrefix data_prefix;
+  for (const auto& byte : prefix) {
+    data_prefix.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(byte.data, byte.mask));
+  }
+  blocklisted_manufacturer_data_prefix_[company_identifier].push_back(
+      std::move(data_prefix));
+}
+
 bool BluetoothBlocklist::IsExcluded(const BluetoothUUID& uuid) const {
   CHECK(uuid.IsValid());
   const auto& it = blocklisted_uuids_.find(uuid);
@@ -75,14 +92,80 @@
 }
 
 bool BluetoothBlocklist::IsExcluded(
-    const std::vector<blink::mojom::WebBluetoothLeScanFilterPtr>& filters) {
-  for (const blink::mojom::WebBluetoothLeScanFilterPtr& filter : filters) {
-    if (!filter->services) {
+    const blink::mojom::WebBluetoothCompanyPtr& company_identifier,
+    const std::vector<blink::mojom::WebBluetoothDataFilterPtr>& filter_data)
+    const {
+  auto it = blocklisted_manufacturer_data_prefix_.find(company_identifier->id);
+  if (it == blocklisted_manufacturer_data_prefix_.end()) {
+    return false;
+  }
+  // Check if |filter_data| is a strict subset of any blocked record in
+  // |blocklisted_manufacturer_data_prefix_| in order to provide developers
+  // with feedback if they request data they will not be allowed to receive.
+  //
+  // We don't want to exclude |filter_data| if it only has a non-empty
+  // intersection with the blocked data as the filter might also match other
+  // unblocked data. This means that filters which match blocked data will be
+  // allowed in a call to requestDevice(). The blocked data will still be
+  // filtered out when constructing the BluetoothAdvertisementEvent.
+  for (const auto& blocked_data_prefix : it->second) {
+    // If |filter_data| length is shorter, it can't be subset of
+    // |blocked_data_prefix|. For example:
+    // - blocked_data_prefix = {{0x01, 0xff}, {0x00, 0x00}}
+    // - filter_data = {{0x01, 0xff}}
+    // data like {0x1} is matched by |filter_data| but not by
+    // |blocked_data_prefix|.
+    if (blocked_data_prefix.size() > filter_data.size()) {
       continue;
     }
-    for (const BluetoothUUID& service : filter->services.value()) {
-      if (IsExcluded(service)) {
-        return true;
+    size_t i = 0;
+    for (const auto& byte : blocked_data_prefix) {
+      if ((byte->mask & filter_data.at(i)->mask) != byte->mask) {
+        break;
+      }
+      if ((byte->data & byte->mask) != (filter_data.at(i)->data & byte->mask)) {
+        break;
+      }
+      i += 1;
+    }
+    if (i == blocked_data_prefix.size()) {
+      return true;
+    }
+  }
+  return false;
+}
+
+bool BluetoothBlocklist::IsExcluded(
+    const device::BluetoothDevice::ManufacturerId& company_identifier,
+    const device::BluetoothDevice::ManufacturerData& manufacturer_data) const {
+  auto it = blocklisted_manufacturer_data_prefix_.find(company_identifier);
+  if (it == blocklisted_manufacturer_data_prefix_.end()) {
+    return false;
+  }
+
+  for (const auto& blocked_data_prefix : it->second) {
+    if (MatchesBluetoothDataFilter(blocked_data_prefix, manufacturer_data))
+      return true;
+  }
+  return false;
+}
+
+bool BluetoothBlocklist::IsExcluded(
+    const std::vector<blink::mojom::WebBluetoothLeScanFilterPtr>& filters) {
+  for (const blink::mojom::WebBluetoothLeScanFilterPtr& filter : filters) {
+    if (filter->services) {
+      for (const BluetoothUUID& service : filter->services.value()) {
+        if (IsExcluded(service)) {
+          return true;
+        }
+      }
+    }
+    if (filter->manufacturer_data) {
+      for (const auto& [company_id, data_filter] :
+           filter->manufacturer_data.value()) {
+        if (IsExcluded(company_id, data_filter)) {
+          return true;
+        }
       }
     }
   }
@@ -118,6 +201,7 @@
 
 void BluetoothBlocklist::ResetToDefaultValuesForTest() {
   blocklisted_uuids_.clear();
+  blocklisted_manufacturer_data_prefix_.clear();
   PopulateWithDefaultValues();
   PopulateWithServerProvidedValues();
 }
@@ -173,6 +257,14 @@
   Add(BluetoothUUID("bad2ddcf-60db-45cd-bef9-fd72b153cf7c"), Value::EXCLUDE);
   Add(BluetoothUUID("bad3ec61-3cc3-4954-9702-7977df514114"),
       Value::EXCLUDE_READS);
+
+  // TODO(crbug.com/1163207): To fill below when manufacturer blocklist spec
+  // patch is done.
+  // Blocklist manufacturer data prefix updated [TBD date] from: [TBD
+  // blocklist link].
+  // iBeacon's proximity UUID might reveal user's location information. See
+  // https://en.wikipedia.org/wiki/IBeacon for detail.
+  Add(0x4c, {{0x02, 0xff}});
 }
 
 void BluetoothBlocklist::PopulateWithServerProvidedValues() {
diff --git a/content/browser/bluetooth/bluetooth_blocklist.h b/content/browser/bluetooth/bluetooth_blocklist.h
index ee89910f..b15ecba1 100644
--- a/content/browser/bluetooth/bluetooth_blocklist.h
+++ b/content/browser/bluetooth/bluetooth_blocklist.h
@@ -11,6 +11,7 @@
 #include "base/lazy_instance.h"
 #include "base/strings/string_piece.h"
 #include "content/common/content_export.h"
+#include "device/bluetooth/bluetooth_device.h"
 #include "device/bluetooth/public/cpp/bluetooth_uuid.h"
 #include "third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom.h"
 
@@ -34,6 +35,11 @@
     EXCLUDE_WRITES  // Excluded from write operations.
   };
 
+  using DataPrefix = std::vector<blink::mojom::WebBluetoothDataFilterPtr>;
+  using BlocklistedManufacturerDataMap =
+      std::map<device::BluetoothDevice::ManufacturerId,
+               std::vector<DataPrefix>>;
+
   BluetoothBlocklist(const BluetoothBlocklist&) = delete;
   BluetoothBlocklist& operator=(const BluetoothBlocklist&) = delete;
 
@@ -61,9 +67,29 @@
   // exclusion values. Duplicate UUIDs follow Add()'s merging rule.
   void Add(base::StringPiece blocklist_string);
 
+  // Adds a manufacturer data prefix to |blocklisted_manufacturer_data_prefix_|
+  // so that any manufacturer data in the device's advertisement matched
+  // |prefix| will be excluded from device's advertisements.
+  void Add(const device::BluetoothDevice::ManufacturerId& company_identifier,
+           const std::vector<blink::mojom::WebBluetoothDataFilter>& prefix);
+
   // Returns if a UUID is excluded from all operations. UUID must be valid.
   bool IsExcluded(const device::BluetoothUUID&) const;
 
+  // Returns if the filter of |company_identifier| and |data_filter| pair
+  // is a strict subset of any blocked records in
+  // |blocklisted_manufacturer_data_prefix_| hence should be excluded.
+  bool IsExcluded(
+      const blink::mojom::WebBluetoothCompanyPtr& company_identifier,
+      const std::vector<blink::mojom::WebBluetoothDataFilterPtr>& data_filter)
+      const;
+
+  // Return if the |company_identifier| and |manufacturer_data| should be
+  // excluded according to |blocklisted_manufacturer_data_prefix_|
+  bool IsExcluded(
+      const device::BluetoothDevice::ManufacturerId& company_identifier,
+      const device::BluetoothDevice::ManufacturerData& manufacturer_data) const;
+
   // Returns if any UUID in a set of filters is excluded from all operations.
   // UUID must be valid.
   bool IsExcluded(
@@ -99,6 +125,8 @@
 
   // Map of UUID to blocklisted value.
   std::map<device::BluetoothUUID, Value> blocklisted_uuids_;
+
+  BlocklistedManufacturerDataMap blocklisted_manufacturer_data_prefix_;
 };
 
 }  // namespace content
diff --git a/content/browser/bluetooth/bluetooth_blocklist_unittest.cc b/content/browser/bluetooth/bluetooth_blocklist_unittest.cc
index 629df0943..ef8d76f 100644
--- a/content/browser/bluetooth/bluetooth_blocklist_unittest.cc
+++ b/content/browser/bluetooth/bluetooth_blocklist_unittest.cc
@@ -4,10 +4,14 @@
 
 #include "content/browser/bluetooth/bluetooth_blocklist.h"
 
+#include "device/bluetooth/bluetooth_device.h"
 #include "device/bluetooth/public/cpp/bluetooth_uuid.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom.h"
 
 using device::BluetoothUUID;
+using DataPrefix = content::BluetoothBlocklist::DataPrefix;
+using ManufacturerId = device::BluetoothDevice::ManufacturerId;
 
 namespace content {
 
@@ -523,4 +527,196 @@
       BluetoothUUID("bad3ec61-3cc3-4954-9702-7977df514114")));
 }
 
+TEST_F(BluetoothBlocklistTest, NonExcludedManufacturerDataFilter) {
+  list_.Add(/*company_identifier=*/0x1,
+            /*prefix=*/{{0x01, 0x3f}, {0x00, 0x00}});
+
+  // filter is not a strict subset, data different.
+  {
+    blink::mojom::WebBluetoothCompanyPtr company_identifier =
+        blink::mojom::WebBluetoothCompany::New(0x1);
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr>
+        manufacturer_data_filter;
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x02, 0x3f));
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x02, 0xff));
+    EXPECT_FALSE(
+        list_.IsExcluded(company_identifier, manufacturer_data_filter));
+  }
+
+  // filter is not a strict subset, filter length is shorter.
+  {
+    blink::mojom::WebBluetoothCompanyPtr company_identifier =
+        blink::mojom::WebBluetoothCompany::New(0x1);
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr>
+        manufacturer_data_filter;
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x01, 0x3f));
+    EXPECT_FALSE(
+        list_.IsExcluded(company_identifier, manufacturer_data_filter));
+  }
+
+  // filter is not a strict subset, filter mask is not a subset of blocked data
+  // mask.
+  {
+    blink::mojom::WebBluetoothCompanyPtr company_identifier =
+        blink::mojom::WebBluetoothCompany::New(0x1);
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr>
+        manufacturer_data_filter;
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x01, 0x0f));
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x02, 0xff));
+    EXPECT_FALSE(
+        list_.IsExcluded(company_identifier, manufacturer_data_filter));
+  }
+
+  // filter is not a strict subset, filter length is longer but filter mask is
+  // not a subset of blocked data mask.
+  {
+    blink::mojom::WebBluetoothCompanyPtr company_identifier =
+        blink::mojom::WebBluetoothCompany::New(0x1);
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr>
+        manufacturer_data_filter;
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x01, 0x0f));
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x02, 0xff));
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x03, 0xff));
+    EXPECT_FALSE(
+        list_.IsExcluded(company_identifier, manufacturer_data_filter));
+  }
+
+  // Different company_identifier
+  {
+    blink::mojom::WebBluetoothCompanyPtr company_identifier =
+        blink::mojom::WebBluetoothCompany::New(0x2);
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr>
+        manufacturer_data_filter;
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x01, 0xff));
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x02, 0xff));
+    EXPECT_FALSE(
+        list_.IsExcluded(company_identifier, manufacturer_data_filter));
+  }
+}
+
+TEST_F(BluetoothBlocklistTest, ExcludedManufacturerDataFilter) {
+  list_.Add(/*company_identifier=*/0x1,
+            /*prefix=*/{{0x01, 0x3f}, {0x00, 0x00}});
+
+  // filter is a strict subset, filter length is the same.
+  {
+    blink::mojom::WebBluetoothCompanyPtr company_identifier =
+        blink::mojom::WebBluetoothCompany::New(0x1);
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr>
+        manufacturer_data_filter;
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x01, 0x3f));
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x02, 0xff));
+    EXPECT_TRUE(list_.IsExcluded(company_identifier, manufacturer_data_filter));
+  }
+
+  // filter is a strict subset, filter length is longer.
+  {
+    blink::mojom::WebBluetoothCompanyPtr company_identifier =
+        blink::mojom::WebBluetoothCompany::New(0x1);
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr>
+        manufacturer_data_filter;
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x01, 0x3f));
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x02, 0xff));
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x03, 0xff));
+    EXPECT_TRUE(list_.IsExcluded(company_identifier, manufacturer_data_filter));
+  }
+
+  // filter is a strict subset, filter mask is subset of blocked data mask.
+  {
+    blink::mojom::WebBluetoothCompanyPtr company_identifier =
+        blink::mojom::WebBluetoothCompany::New(0x1);
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr>
+        manufacturer_data_filter;
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x01, 0xff));
+    manufacturer_data_filter.push_back(
+        blink::mojom::WebBluetoothDataFilter::New(0x02, 0xff));
+    EXPECT_TRUE(list_.IsExcluded(company_identifier, manufacturer_data_filter));
+  }
+}
+
+TEST_F(BluetoothBlocklistTest, ExcludedManufacturerData) {
+  list_.Add(/*company_identifier=*/0x1,
+            /*prefix=*/{{0x01, 0x0f}});
+
+  // Data prefix matches.
+  {
+    device::BluetoothDevice::ManufacturerId manufacturer_id = 0x1;
+    device::BluetoothDevice::ManufacturerData manufacturer_data = {
+        0x1,
+        0x39,
+    };
+    EXPECT_TRUE(list_.IsExcluded(manufacturer_id, manufacturer_data));
+  }
+
+  // Data pattern matches.
+  list_.ResetToDefaultValuesForTest();
+  list_.Add(/*company_identifier=*/0x1,
+            /*prefix=*/{{0x01, 0x0f}, {0x00, 0x00}});
+  {
+    device::BluetoothDevice::ManufacturerId manufacturer_id = 0x1;
+    device::BluetoothDevice::ManufacturerData manufacturer_data = {
+        0x1,
+        0x39,
+    };
+    EXPECT_TRUE(list_.IsExcluded(manufacturer_id, manufacturer_data));
+  }
+}
+
+TEST_F(BluetoothBlocklistTest, NonExcludedManufacturerData) {
+  list_.Add(/*company_identifier=*/0x1,
+            /*prefix=*/{{0x01, 0x0f}, {0x00, 0x00}});
+
+  // Data prefix not doesn't match.
+  {
+    device::BluetoothDevice::ManufacturerId manufacturer_id = 0x1;
+    device::BluetoothDevice::ManufacturerData manufacturer_data = {
+        0x2,
+        0x47,
+    };
+    EXPECT_FALSE(list_.IsExcluded(manufacturer_id, manufacturer_data));
+  }
+
+  // Manufacturer data is shorter.
+  {
+    device::BluetoothDevice::ManufacturerId manufacturer_id = 0x1;
+    device::BluetoothDevice::ManufacturerData manufacturer_data = {
+        0x1,
+    };
+    EXPECT_FALSE(list_.IsExcluded(manufacturer_id, manufacturer_data));
+  }
+
+  // Empty manufacturer data.
+  {
+    device::BluetoothDevice::ManufacturerId manufacturer_id = 0x1;
+    device::BluetoothDevice::ManufacturerData manufacturer_data;
+    EXPECT_FALSE(list_.IsExcluded(manufacturer_id, manufacturer_data));
+  }
+
+  // Different manufacturer id.
+  {
+    device::BluetoothDevice::ManufacturerId manufacturer_id = 0x2;
+    device::BluetoothDevice::ManufacturerData manufacturer_data = {
+        0x1,
+        0x47,
+    };
+    EXPECT_FALSE(list_.IsExcluded(manufacturer_id, manufacturer_data));
+  }
+}
+
 }  // namespace content
diff --git a/content/browser/bluetooth/bluetooth_device_chooser_controller.cc b/content/browser/bluetooth/bluetooth_device_chooser_controller.cc
index 358dce9..ab70d85 100644
--- a/content/browser/bluetooth/bluetooth_device_chooser_controller.cc
+++ b/content/browser/bluetooth/bluetooth_device_chooser_controller.cc
@@ -18,6 +18,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "content/browser/bluetooth/bluetooth_blocklist.h"
 #include "content/browser/bluetooth/bluetooth_metrics.h"
+#include "content/browser/bluetooth/bluetooth_util.h"
 #include "content/browser/bluetooth/web_bluetooth_service_impl.h"
 #include "content/public/browser/bluetooth_delegate.h"
 #include "content/public/browser/browser_thread.h"
@@ -178,17 +179,8 @@
         return false;
       // Check data filter size is less than device manufacturer data size.
       const auto& device_data = it->second;
-      if (filter_data.second.size() > device_data.size())
+      if (!MatchesBluetoothDataFilter(filter_data.second, device_data))
         return false;
-      // For each bit in mask, check the corresponding bit in device
-      // manufacturer data is equal to the corresponding bit in expected data.
-      size_t i = 0;
-      for (const auto& filter_byte : filter_data.second) {
-        if ((filter_byte->mask & filter_byte->data) !=
-            (filter_byte->mask & device_data.at(i++))) {
-          return false;
-        }
-      }
     }
   }
 
@@ -262,7 +254,9 @@
   // Check blocklist to reject invalid filters and adjust optional_services.
   if (options_->filters &&
       BluetoothBlocklist::Get().IsExcluded(options_->filters.value())) {
-    PostErrorCallback(WebBluetoothResult::REQUEST_DEVICE_WITH_BLOCKLISTED_UUID);
+    PostErrorCallback(
+        WebBluetoothResult::
+            REQUEST_DEVICE_WITH_BLOCKLISTED_UUID_OR_MANUFACTURER_DATA);
     return;
   }
   BluetoothBlocklist::Get().RemoveExcludedUUIDs(options_.get());
diff --git a/content/browser/bluetooth/bluetooth_util.cc b/content/browser/bluetooth/bluetooth_util.cc
index 4f768c4..d283253e 100644
--- a/content/browser/bluetooth/bluetooth_util.cc
+++ b/content/browser/bluetooth/bluetooth_util.cc
@@ -45,4 +45,20 @@
   return true;
 }
 
+bool MatchesBluetoothDataFilter(
+    const std::vector<blink::mojom::WebBluetoothDataFilterPtr>& prefix,
+    const device::BluetoothDevice::ManufacturerData& data) {
+  if (prefix.size() > data.size())
+    return false;
+  // For each bit in mask, check the corresponding bit in device
+  // manufacturer data is equal to the corresponding bit in expected data.
+  size_t i = 0;
+  for (const auto& byte : prefix) {
+    if ((byte->mask & byte->data) != (byte->mask & data.at(i++))) {
+      return false;
+    }
+  }
+  return true;
+}
+
 }  // namespace content
diff --git a/content/browser/bluetooth/bluetooth_util.h b/content/browser/bluetooth/bluetooth_util.h
index 50154ebf..3e13c3f 100644
--- a/content/browser/bluetooth/bluetooth_util.h
+++ b/content/browser/bluetooth/bluetooth_util.h
@@ -6,6 +6,7 @@
 #define CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_UTIL_H_
 
 #include "content/common/content_export.h"
+#include "device/bluetooth/bluetooth_device.h"
 #include "third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom.h"
 
 namespace content {
@@ -14,6 +15,11 @@
     const blink::mojom::WebBluetoothLeScanFilter& filter_1,
     const blink::mojom::WebBluetoothLeScanFilter& filter_2);
 
+// Return true if |data| can be matched by |prefix|.
+CONTENT_EXPORT bool MatchesBluetoothDataFilter(
+    const std::vector<blink::mojom::WebBluetoothDataFilterPtr>& prefix,
+    const device::BluetoothDevice::ManufacturerData& data);
+
 }  // namespace content
 
 #endif  // CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_UTIL_H_
diff --git a/content/browser/bluetooth/bluetooth_util_unittest.cc b/content/browser/bluetooth/bluetooth_util_unittest.cc
index 05c13dbcd..02dbfe4a 100644
--- a/content/browser/bluetooth/bluetooth_util_unittest.cc
+++ b/content/browser/bluetooth/bluetooth_util_unittest.cc
@@ -337,4 +337,77 @@
   EXPECT_FALSE(AreScanFiltersSame(*filter_1, *filter_2));
 }
 
+TEST_F(BluetoothUtilTest, MatchesBluetoothDataFilterMatch) {
+  // Same data full mask.
+  {
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr> filter;
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x1, 0xff));
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x2, 0xff));
+    EXPECT_TRUE(MatchesBluetoothDataFilter(filter, {0x1, 0x2}));
+  }
+
+  // Same data partial mask.
+  {
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr> filter;
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x1, 0x01));
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x2, 0x02));
+    EXPECT_TRUE(MatchesBluetoothDataFilter(filter, {0x1, 0x2}));
+  }
+
+  // Prefix matches.
+  {
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr> filter;
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x1, 0xff));
+    EXPECT_TRUE(MatchesBluetoothDataFilter(filter, {0x1, 0x2}));
+  }
+
+  // Empty filter matches anything.
+  {
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr> filter;
+    EXPECT_TRUE(MatchesBluetoothDataFilter(filter, {0x1, 0x2}));
+    EXPECT_TRUE(MatchesBluetoothDataFilter(filter, {}));
+  }
+}
+
+TEST_F(BluetoothUtilTest, MatchesBluetoothDataFilterNotMatch) {
+  // Different data full mask.
+  {
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr> filter;
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x1, 0xff));
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x2, 0xff));
+    EXPECT_FALSE(MatchesBluetoothDataFilter(filter, {0x2, 0x2}));
+  }
+
+  // Same data partial mask.
+  {
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr> filter;
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x1, 0x01));
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x2, 0x02));
+    EXPECT_FALSE(MatchesBluetoothDataFilter(filter, {0x2, 0x2}));
+  }
+
+  // Prefix doesn't match.
+  {
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr> filter;
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x2, 0xff));
+    EXPECT_FALSE(MatchesBluetoothDataFilter(filter, {0x1, 0x2}));
+  }
+
+  // Filter is longer than data.
+  {
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr> filter;
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x1, 0xff));
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x2, 0xff));
+    EXPECT_FALSE(MatchesBluetoothDataFilter(filter, {0x1}));
+  }
+
+  // Filter expect there is second byte.
+  {
+    std::vector<blink::mojom::WebBluetoothDataFilterPtr> filter;
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x1, 0xff));
+    filter.push_back(blink::mojom::WebBluetoothDataFilter::New(0x0, 0x00));
+    EXPECT_FALSE(MatchesBluetoothDataFilter(filter, {0x1}));
+  }
+}
+
 }  // namespace content
diff --git a/content/browser/bluetooth/web_bluetooth_service_impl.cc b/content/browser/bluetooth/web_bluetooth_service_impl.cc
index 64f43b7..63cb447 100644
--- a/content/browser/bluetooth/web_bluetooth_service_impl.cc
+++ b/content/browser/bluetooth/web_bluetooth_service_impl.cc
@@ -311,7 +311,9 @@
         filtered_event->manufacturer_data,
         [this](const std::pair<uint16_t, std::vector<uint8_t>>& entry) {
           return !service_->IsAllowedToAccessManufacturerData(device_id_,
-                                                              entry.first);
+                                                              entry.first) ||
+                 BluetoothBlocklist::Get().IsExcluded(entry.first,
+                                                      entry.second);
         });
     client_->AdvertisingEvent(std::move(filtered_event));
   }
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc
index 5d5ee78..75dfee1 100644
--- a/content/browser/browser_interface_binders.cc
+++ b/content/browser/browser_interface_binders.cc
@@ -1278,6 +1278,8 @@
       &RenderProcessHostImpl::CreateLockManager, host));
   map->Add<blink::mojom::QuotaManagerHost>(BindWorkerReceiverForStorageKey(
       &RenderProcessHostImpl::BindQuotaManagerHost, host));
+  map->Add<blink::mojom::BucketManagerHost>(BindWorkerReceiverForStorageKey(
+      &RenderProcessHostImpl::BindBucketManagerHostForWorker, host));
 }
 
 void PopulateBinderMapWithContext(
@@ -1288,8 +1290,6 @@
       &RenderProcessHostImpl::CreatePaymentManagerForOrigin, host));
   map->Add<blink::mojom::PermissionService>(BindWorkerReceiverForOrigin(
       &RenderProcessHostImpl::CreatePermissionService, host));
-  map->Add<blink::mojom::BucketManagerHost>(BindWorkerReceiverForOrigin(
-      &RenderProcessHostImpl::BindBucketManagerHostForWorker, host));
 
   // RenderProcessHost binders taking a frame id and an origin
   map->Add<blink::mojom::NotificationService>(
@@ -1370,6 +1370,8 @@
       &RenderProcessHostImpl::CreateLockManager, host));
   map->Add<blink::mojom::QuotaManagerHost>(BindWorkerReceiverForStorageKey(
       &RenderProcessHostImpl::BindQuotaManagerHost, host));
+  map->Add<blink::mojom::BucketManagerHost>(BindWorkerReceiverForStorageKey(
+      &RenderProcessHostImpl::BindBucketManagerHostForWorker, host));
 }
 
 void PopulateBinderMapWithContext(
@@ -1380,8 +1382,6 @@
       &RenderProcessHostImpl::CreatePaymentManagerForOrigin, host));
   map->Add<blink::mojom::PermissionService>(BindWorkerReceiverForOrigin(
       &RenderProcessHostImpl::CreatePermissionService, host));
-  map->Add<blink::mojom::BucketManagerHost>(BindWorkerReceiverForOrigin(
-      &RenderProcessHostImpl::BindBucketManagerHostForWorker, host));
 
   // RenderProcessHost binders taking a frame id and an origin
   map->Add<blink::mojom::NotificationService>(
@@ -1476,8 +1476,6 @@
       BindServiceWorkerReceiverForStorageKey(
           &RenderProcessHostImpl::BindRestrictedCookieManagerForServiceWorker,
           host));
-  map->Add<blink::mojom::BucketManagerHost>(BindServiceWorkerReceiverForOrigin(
-      &RenderProcessHostImpl::BindBucketManagerHostForWorker, host));
   map->Add<blink::mojom::OneShotBackgroundSyncService>(
       BindServiceWorkerReceiverForOrigin(
           &RenderProcessHostImpl::CreateOneShotSyncService, host));
@@ -1501,6 +1499,9 @@
   map->Add<blink::mojom::QuotaManagerHost>(
       BindServiceWorkerReceiverForStorageKey(
           &RenderProcessHostImpl::BindQuotaManagerHost, host));
+  map->Add<blink::mojom::BucketManagerHost>(
+      BindServiceWorkerReceiverForStorageKey(
+          &RenderProcessHostImpl::BindBucketManagerHostForWorker, host));
 
   // RenderProcessHost binders taking a frame id and an origin
   map->Add<blink::mojom::NotificationService>(
diff --git a/content/browser/buckets/bucket_context.cc b/content/browser/buckets/bucket_context.cc
index 63f6f0a0..f4c4e4b0 100644
--- a/content/browser/buckets/bucket_context.cc
+++ b/content/browser/buckets/bucket_context.cc
@@ -13,34 +13,18 @@
 namespace content {
 
 BucketContext::BucketContext(
-    const GlobalRenderFrameHostId& render_frame_host_id,
-    const url::Origin& origin)
-    : id_(render_frame_host_id), origin_(origin) {}
+    const GlobalRenderFrameHostId& render_frame_host_id)
+    : id_(render_frame_host_id) {}
 
-BucketContext::BucketContext(int render_process_id, const url::Origin& origin)
-    : id_(render_process_id), origin_(origin) {}
+BucketContext::BucketContext(int render_process_id) : id_(render_process_id) {}
 
 BucketContext::BucketContext(const BucketContext& other) = default;
 
 BucketContext::~BucketContext() = default;
 
-StoragePartitionImpl* BucketContext::GetStoragePartition() const {
-  if (absl::holds_alternative<int>(id_)) {
-    RenderProcessHost* rph = RenderProcessHost::FromID(absl::get<int>(id_));
-    if (!rph)
-      return nullptr;
-    return static_cast<StoragePartitionImpl*>(rph->GetStoragePartition());
-  }
-
-  RenderFrameHost* rfh =
-      RenderFrameHost::FromID(absl::get<GlobalRenderFrameHostId>(id_));
-  if (!rfh)
-    return nullptr;
-  return static_cast<StoragePartitionImpl*>(rfh->GetStoragePartition());
-}
-
 blink::mojom::PermissionStatus BucketContext::GetPermissionStatus(
-    blink::PermissionType permission_type) const {
+    blink::PermissionType permission_type,
+    const url::Origin& origin) const {
   if (permission_status_for_test_)
     return *permission_status_for_test_;
 
@@ -50,7 +34,7 @@
       return blink::mojom::PermissionStatus::DENIED;
     return rph->GetBrowserContext()
         ->GetPermissionController()
-        ->GetPermissionStatusForWorker(permission_type, rph, origin_);
+        ->GetPermissionStatusForWorker(permission_type, rph, origin);
   }
 
   RenderFrameHost* rfh =
diff --git a/content/browser/buckets/bucket_context.h b/content/browser/buckets/bucket_context.h
index bddc626..2a6eae3 100644
--- a/content/browser/buckets/bucket_context.h
+++ b/content/browser/buckets/bucket_context.h
@@ -15,23 +15,19 @@
 
 namespace content {
 
-class StoragePartitionImpl;
-
 // This class encapsulates logic and data relevant to a particular bucket. There
 // is one created for each bucket that a renderer creates.
 class CONTENT_EXPORT BucketContext {
  public:
-  BucketContext(const GlobalRenderFrameHostId& render_frame_host_id,
-                const url::Origin& origin);
-  BucketContext(int render_process_id, const url::Origin& origin);
+  explicit BucketContext(const GlobalRenderFrameHostId& render_frame_host_id);
+  explicit BucketContext(int render_process_id);
   BucketContext(const BucketContext& other);
   BucketContext operator=(const BucketContext& other) = delete;
   ~BucketContext();
 
-  const url::Origin& origin() const { return origin_; }
-  StoragePartitionImpl* GetStoragePartition() const;
   blink::mojom::PermissionStatus GetPermissionStatus(
-      blink::PermissionType permission_type) const;
+      blink::PermissionType permission_type,
+      const url::Origin& origin) const;
 
   void set_permission_status_for_test(blink::mojom::PermissionStatus status) {
     permission_status_for_test_ = status;
@@ -39,7 +35,6 @@
 
  private:
   absl::variant<int, GlobalRenderFrameHostId> id_;
-  url::Origin origin_;
   absl::optional<blink::mojom::PermissionStatus> permission_status_for_test_;
 };
 
diff --git a/content/browser/buckets/bucket_host.cc b/content/browser/buckets/bucket_host.cc
index 7083575..1036501 100644
--- a/content/browser/buckets/bucket_host.cc
+++ b/content/browser/buckets/bucket_host.cc
@@ -38,7 +38,8 @@
   }
 
   if (receivers_.current_context().GetPermissionStatus(
-          blink::PermissionType::DURABLE_STORAGE) ==
+          blink::PermissionType::DURABLE_STORAGE,
+          bucket_info_.storage_key.origin()) ==
       blink::mojom::PermissionStatus::GRANTED) {
     GetQuotaManagerProxy()->UpdateBucketPersistence(
         bucket_info_.id, /*persistent=*/true,
@@ -82,15 +83,11 @@
 
 void BucketHost::GetIdbFactory(
     mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) {
-  StoragePartitionImpl* partition =
-      receivers_.current_context().GetStoragePartition();
-  if (!partition)
-    return;
-
   // TODO(crbug.com/1338303): this just accesses the default bucket for now, but
   // it should return a non-default bucket.
-  partition->GetIndexedDBControl().BindIndexedDB(bucket_info_.storage_key,
-                                                 std::move(receiver));
+  bucket_manager_host_->GetStoragePartition()
+      ->GetIndexedDBControl()
+      .BindIndexedDB(bucket_info_.storage_key, std::move(receiver));
 }
 
 void BucketHost::OnReceiverDisconnected() {
diff --git a/content/browser/buckets/bucket_manager.cc b/content/browser/buckets/bucket_manager.cc
index 8b01ae5..a92b501 100644
--- a/content/browser/buckets/bucket_manager.cc
+++ b/content/browser/buckets/bucket_manager.cc
@@ -11,53 +11,52 @@
 
 namespace content {
 
-BucketManager::BucketManager(
-    scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy)
-    : quota_manager_proxy_(std::move(quota_manager_proxy)) {}
+BucketManager::BucketManager(StoragePartitionImpl* storage_partition)
+    : storage_partition_(storage_partition) {}
 
 BucketManager::~BucketManager() = default;
 
 void BucketManager::BindReceiverForRenderFrame(
     const GlobalRenderFrameHostId& render_frame_host_id,
+    const blink::StorageKey& storage_key,
     mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver,
     mojo::ReportBadMessageCallback bad_message_callback) {
   RenderFrameHost* rfh = RenderFrameHost::FromID(render_frame_host_id);
   DCHECK(rfh);
-  DoBindReceiver(
-      BucketContext(render_frame_host_id, rfh->GetLastCommittedOrigin()),
-      std::move(receiver), std::move(bad_message_callback));
+  DoBindReceiver(storage_key, BucketContext(render_frame_host_id),
+                 std::move(receiver), std::move(bad_message_callback));
 }
 
 void BucketManager::BindReceiverForWorker(
     int render_process_id,
-    const url::Origin& origin,
+    const blink::StorageKey& storage_key,
     mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver,
     mojo::ReportBadMessageCallback bad_message_callback) {
-  DoBindReceiver(BucketContext(render_process_id, origin), std::move(receiver),
-                 std::move(bad_message_callback));
+  DoBindReceiver(storage_key, BucketContext(render_process_id),
+                 std::move(receiver), std::move(bad_message_callback));
 }
 
 void BucketManager::DoBindReceiver(
+    const blink::StorageKey& storage_key,
     const BucketContext& context,
     mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver,
     mojo::ReportBadMessageCallback bad_message_callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  auto it = hosts_.find(context.origin());
+  auto it = hosts_.find(storage_key);
   if (it != hosts_.end()) {
     it->second->BindReceiver(std::move(receiver), context);
     return;
   }
 
-  if (!network::IsOriginPotentiallyTrustworthy(context.origin())) {
+  if (!network::IsOriginPotentiallyTrustworthy(storage_key.origin())) {
     std::move(bad_message_callback)
         .Run("Called Buckets from an insecure context");
     return;
   }
 
-  auto [insert_it, insert_succeeded] =
-      hosts_.insert({context.origin(), std::make_unique<BucketManagerHost>(
-                                           this, context.origin())});
+  auto [insert_it, insert_succeeded] = hosts_.insert(
+      {storage_key, std::make_unique<BucketManagerHost>(this, storage_key)});
   DCHECK(insert_succeeded);
   insert_it->second->BindReceiver(std::move(receiver), context);
 }
@@ -66,13 +65,13 @@
                                              base::PassKey<BucketManagerHost>) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(host != nullptr);
-  DCHECK_GT(hosts_.count(host->origin()), 0u);
-  DCHECK_EQ(hosts_[host->origin()].get(), host);
+  DCHECK_GT(hosts_.count(host->storage_key()), 0u);
+  DCHECK_EQ(hosts_[host->storage_key()].get(), host);
 
   if (host->has_connected_receivers())
     return;
 
-  hosts_.erase(host->origin());
+  hosts_.erase(host->storage_key());
 }
 
 }  // namespace content
diff --git a/content/browser/buckets/bucket_manager.h b/content/browser/buckets/bucket_manager.h
index 0f3c9bc5..38ff07cf 100644
--- a/content/browser/buckets/bucket_manager.h
+++ b/content/browser/buckets/bucket_manager.h
@@ -23,6 +23,7 @@
 namespace content {
 
 class BucketContext;
+class StoragePartitionImpl;
 
 // One instance of BucketManager exists per StoragePartition, and is created and
 // owned by the `RenderProcessHostImpl`. This class creates and destroys
@@ -31,25 +32,26 @@
 // deleted, and have them mark their Bucket instance as closed.
 class CONTENT_EXPORT BucketManager {
  public:
-  explicit BucketManager(
-      scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy);
+  explicit BucketManager(StoragePartitionImpl* storage_partition);
   ~BucketManager();
 
   BucketManager(const BucketManager&) = delete;
   BucketManager& operator=(const BucketManager&) = delete;
 
-  // Binds `receiver` to the BucketManagerHost for the last committed origin in
-  // the RenderFrameHost referenced by  `render_frame_host_id`.
   void BindReceiverForRenderFrame(
-      const content::GlobalRenderFrameHostId& render_frame_host_id,
+      const GlobalRenderFrameHostId& render_frame_host_id,
+      const blink::StorageKey& storage_key,
       mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver,
       mojo::ReportBadMessageCallback bad_message_callback);
 
-  // Binds `receiver` to the BucketManagerHost for `origin`. `render_process_id`
-  // represents the service worker that is connecting to the bucket service.
   void BindReceiverForWorker(
       int render_process_id,
-      const url::Origin& origin,
+      const blink::StorageKey& storage_key,
+      mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver,
+      mojo::ReportBadMessageCallback bad_message_callback);
+
+  void BindReceiver(
+      const blink::StorageKey& storage_key,
       mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver,
       mojo::ReportBadMessageCallback bad_message_callback);
 
@@ -57,9 +59,7 @@
   void OnHostReceiverDisconnect(BucketManagerHost* host,
                                 base::PassKey<BucketManagerHost>);
 
-  const scoped_refptr<storage::QuotaManagerProxy>& quota_manager_proxy() const {
-    return quota_manager_proxy_;
-  }
+  StoragePartitionImpl* storage_partition() { return storage_partition_; }
 
  private:
   friend class BucketManagerHostTest;
@@ -69,15 +69,16 @@
   SEQUENCE_CHECKER(sequence_checker_);
 
   void DoBindReceiver(
+      const blink::StorageKey& storage_key,
       const BucketContext& bucket_context,
       mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver,
       mojo::ReportBadMessageCallback bad_message_callback);
 
   // Owns all instances of BucketManagerHost associated with a StoragePartition.
-  std::map<url::Origin, std::unique_ptr<BucketManagerHost>> hosts_
+  std::map<blink::StorageKey, std::unique_ptr<BucketManagerHost>> hosts_
       GUARDED_BY_CONTEXT(sequence_checker_);
 
-  const scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy_;
+  StoragePartitionImpl* storage_partition_;
 };
 
 }  // namespace content
diff --git a/content/browser/buckets/bucket_manager_host.cc b/content/browser/buckets/bucket_manager_host.cc
index 5494f585..184b1eb 100644
--- a/content/browser/buckets/bucket_manager_host.cc
+++ b/content/browser/buckets/bucket_manager_host.cc
@@ -9,6 +9,7 @@
 #include "base/types/pass_key.h"
 #include "components/services/storage/public/cpp/buckets/bucket_info.h"
 #include "content/browser/buckets/bucket_manager.h"
+#include "content/browser/storage_partition_impl.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/common/storage_key/storage_key.h"
 
@@ -41,8 +42,9 @@
 
 }  // namespace
 
-BucketManagerHost::BucketManagerHost(BucketManager* manager, url::Origin origin)
-    : manager_(manager), origin_(std::move(origin)) {
+BucketManagerHost::BucketManagerHost(BucketManager* manager,
+                                     const blink::StorageKey& storage_key)
+    : manager_(manager), storage_key_(storage_key) {
   DCHECK(manager != nullptr);
 
   // base::Unretained is safe here because this BucketManagerHost owns
@@ -69,7 +71,7 @@
     return;
   }
 
-  storage::BucketInitParams params(blink::StorageKey(origin_), name);
+  storage::BucketInitParams params(storage_key_, name);
   if (policies) {
     if (policies->expires)
       params.expiration = *policies->expires;
@@ -83,14 +85,14 @@
     if (policies->has_persisted) {
       // Only grant persistence if permitted.
       if (receivers_.current_context().GetPermissionStatus(
-              blink::PermissionType::DURABLE_STORAGE) ==
+              blink::PermissionType::DURABLE_STORAGE, storage_key_.origin()) ==
           blink::mojom::PermissionStatus::GRANTED) {
         params.persistent = policies->persisted;
       }
     }
   }
 
-  manager_->quota_manager_proxy()->UpdateOrCreateBucket(
+  GetQuotaManagerProxy()->UpdateOrCreateBucket(
       params, base::SequencedTaskRunnerHandle::Get(),
       base::BindOnce(&BucketManagerHost::DidGetBucket,
                      weak_factory_.GetWeakPtr(), receivers_.current_context(),
@@ -98,8 +100,8 @@
 }
 
 void BucketManagerHost::Keys(KeysCallback callback) {
-  manager_->quota_manager_proxy()->GetBucketsForStorageKey(
-      blink::StorageKey(origin_), blink::mojom::StorageType::kTemporary,
+  GetQuotaManagerProxy()->GetBucketsForStorageKey(
+      storage_key_, blink::mojom::StorageType::kTemporary,
       /*delete_expired=*/true, base::SequencedTaskRunnerHandle::Get(),
       base::BindOnce(&BucketManagerHost::DidGetBuckets,
                      weak_factory_.GetWeakPtr(), std::move(callback)));
@@ -112,8 +114,8 @@
     return;
   }
 
-  manager_->quota_manager_proxy()->DeleteBucket(
-      blink::StorageKey(origin_), name, base::SequencedTaskRunnerHandle::Get(),
+  GetQuotaManagerProxy()->DeleteBucket(
+      storage_key_, name, base::SequencedTaskRunnerHandle::Get(),
       base::BindOnce(&BucketManagerHost::DidDeleteBucket,
                      weak_factory_.GetWeakPtr(), name, std::move(callback)));
 }
@@ -123,8 +125,12 @@
   bucket_map_.erase(bucket_name);
 }
 
+StoragePartitionImpl* BucketManagerHost::GetStoragePartition() {
+  return manager_->storage_partition();
+}
+
 storage::QuotaManagerProxy* BucketManagerHost::GetQuotaManagerProxy() {
-  return manager_->quota_manager_proxy().get();
+  return manager_->storage_partition()->GetQuotaManagerProxy();
 }
 
 void BucketManagerHost::OnReceiverDisconnect() {
diff --git a/content/browser/buckets/bucket_manager_host.h b/content/browser/buckets/bucket_manager_host.h
index b6d01835..580e1cb 100644
--- a/content/browser/buckets/bucket_manager_host.h
+++ b/content/browser/buckets/bucket_manager_host.h
@@ -18,7 +18,6 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "third_party/blink/public/mojom/buckets/bucket_manager_host.mojom.h"
 #include "third_party/blink/public/mojom/quota/quota_types.mojom-shared.h"
-#include "url/origin.h"
 
 namespace storage {
 struct BucketInfo;
@@ -28,30 +27,32 @@
 namespace content {
 
 class BucketManager;
+class StoragePartitionImpl;
 
-// Implements the Storage Buckets API for a single origin.
+// Implements the Storage Buckets API for a single StorageKey.
 //
 // BucketManager owns all BucketManagerHost instances associated with
-// a StorageParititon. A new instance is created for every origin.
+// a StorageParititon. A new instance is created for every `StorageKey`.
 // Instances are destroyed when all their corresponding mojo connection are
 // closed, or when BucketManager is destroyed.
 class BucketManagerHost : public blink::mojom::BucketManagerHost {
  public:
-  explicit BucketManagerHost(BucketManager* manager, url::Origin origin);
+  explicit BucketManagerHost(BucketManager* manager,
+                             const blink::StorageKey& storage_key);
   ~BucketManagerHost() override;
 
   BucketManagerHost(const BucketManagerHost&) = delete;
   BucketManagerHost& operator=(const BucketManagerHost&) = delete;
 
   // Binds |receiver| to the BucketManagerHost. The |receiver| must belong to
-  // the frame or worker from this host's origin. `permission_decision` is used
-  // to determine permissions for the receiver.
+  // the frame or worker from this host's `StorageKey`. `context` is used to
+  // determine permissions for the receiver.
   void BindReceiver(
       mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver,
       const BucketContext& context);
 
-  // The origin served by this host.
-  const url::Origin& origin() const { return origin_; }
+  // The `StorageKey` served by this host.
+  const blink::StorageKey& storage_key() const { return storage_key_; }
 
   // Returns true if there are no receivers connected to this host.
   //
@@ -69,6 +70,7 @@
 
   void RemoveBucketHost(const std::string& name);
 
+  StoragePartitionImpl* GetStoragePartition();
   storage::QuotaManagerProxy* GetQuotaManagerProxy();
 
  private:
@@ -93,13 +95,14 @@
   // is therefore guaranteed to outlive it.
   const raw_ptr<BucketManager> manager_;
 
-  // The origin of the frame or worker connected to this BucketManagerHost.
-  const url::Origin origin_;
+  // The `StorageKey` of the frame or worker connected to this
+  // BucketManagerHost.
+  const blink::StorageKey storage_key_;
 
-  // Map of currently open/used buckets for an origin.
+  // Map of currently open/used buckets.
   std::map<std::string, std::unique_ptr<BucketHost>> bucket_map_;
 
-  // Add receivers for frames & workers for `origin_` associated with
+  // Add receivers for frames & workers for `storage_key_` associated with
   // the StoragePartition that owns `manager_`.
   mojo::ReceiverSet<blink::mojom::BucketManagerHost, BucketContext> receivers_;
 
diff --git a/content/browser/buckets/bucket_manager_host_unittest.cc b/content/browser/buckets/bucket_manager_host_unittest.cc
index 7180baa..dea0e287 100644
--- a/content/browser/buckets/bucket_manager_host_unittest.cc
+++ b/content/browser/buckets/bucket_manager_host_unittest.cc
@@ -13,6 +13,9 @@
 #include "components/services/storage/public/cpp/quota_error_or.h"
 #include "content/browser/buckets/bucket_manager.h"
 #include "content/browser/buckets/bucket_manager_host.h"
+#include "content/browser/storage_partition_impl.h"
+#include "content/public/test/browser_task_environment.h"
+#include "content/public/test/test_browser_context.h"
 #include "mojo/public/cpp/test_support/test_utils.h"
 #include "storage/browser/test/mock_quota_manager.h"
 #include "storage/browser/test/mock_quota_manager_proxy.h"
@@ -36,7 +39,8 @@
  public:
   BucketManagerHostTest()
       : special_storage_policy_(
-            base::MakeRefCounted<storage::MockSpecialStoragePolicy>()) {}
+            base::MakeRefCounted<storage::MockSpecialStoragePolicy>()),
+        browser_context_(std::make_unique<TestBrowserContext>()) {}
   ~BucketManagerHostTest() override = default;
 
   BucketManagerHostTest(const BucketManagerHostTest&) = delete;
@@ -50,10 +54,15 @@
         base::ThreadTaskRunnerHandle::Get(), special_storage_policy_);
     quota_manager_proxy_ = base::MakeRefCounted<storage::MockQuotaManagerProxy>(
         quota_manager_.get(), base::ThreadTaskRunnerHandle::Get());
-    bucket_manager_ =
-        std::make_unique<BucketManager>(quota_manager_proxy_.get());
+
+    StoragePartitionImpl* partition = static_cast<StoragePartitionImpl*>(
+        browser_context_->GetDefaultStoragePartition());
+    partition->OverrideQuotaManagerForTesting(quota_manager_.get());
+
+    bucket_manager_ = std::make_unique<BucketManager>(partition);
     bucket_manager_->DoBindReceiver(
-        BucketContext(0, url::Origin::Create(GURL(kTestUrl))),
+        blink::StorageKey::CreateFromStringForTesting(kTestUrl),
+        BucketContext(0),
         bucket_manager_host_remote_.BindNewPipeAndPassReceiver(),
         base::DoNothing());
     EXPECT_TRUE(bucket_manager_host_remote_.is_bound());
@@ -64,10 +73,11 @@
 
   base::ScopedTempDir data_dir_;
 
-  // These tests need a full TaskEnvironment because it uses the thread pool for
-  // querying QuotaDatabase
-  base::test::TaskEnvironment task_environment_;
+  // These tests need a full TaskEnvironment because they use the thread pool
+  // for querying QuotaDatabase.
+  content::BrowserTaskEnvironment task_environment_;
 
+  std::unique_ptr<TestBrowserContext> browser_context_;
   mojo::Remote<blink::mojom::BucketManagerHost> bucket_manager_host_remote_;
   std::unique_ptr<BucketManager> bucket_manager_;
   scoped_refptr<storage::MockQuotaManager> quota_manager_;
@@ -116,8 +126,9 @@
   for (auto it = names.begin(); it < names.end(); ++it) {
     mojo::Remote<blink::mojom::BucketManagerHost> remote;
     bucket_manager_->DoBindReceiver(
-        BucketContext(0, url::Origin::Create(GURL(kTestUrl))),
-        remote.BindNewPipeAndPassReceiver(), base::DoNothing());
+        blink::StorageKey::CreateFromStringForTesting(kTestUrl),
+        BucketContext(0), remote.BindNewPipeAndPassReceiver(),
+        base::DoNothing());
     EXPECT_TRUE(remote.is_bound());
 
     if (it->first) {
@@ -183,13 +194,13 @@
                     {blink::mojom::PermissionStatus::DENIED, false}};
 
   for (auto test_case : test_cases) {
-    auto context = BucketContext(0, url::Origin::Create(GURL(kTestUrl)));
+    auto context = BucketContext(0);
     context.set_permission_status_for_test(test_case.first);
     bool persisted_respected = test_case.second;
     mojo::Remote<blink::mojom::BucketManagerHost> manager_remote;
-    bucket_manager_->DoBindReceiver(context,
-                                    manager_remote.BindNewPipeAndPassReceiver(),
-                                    base::DoNothing());
+    bucket_manager_->DoBindReceiver(
+        blink::StorageKey::CreateFromStringForTesting(kTestUrl), context,
+        manager_remote.BindNewPipeAndPassReceiver(), base::DoNothing());
     EXPECT_TRUE(manager_remote.is_bound());
 
     {
diff --git a/content/browser/code_cache/generated_code_cache.h b/content/browser/code_cache/generated_code_cache.h
index 00cf7a65..f3b4b260 100644
--- a/content/browser/code_cache/generated_code_cache.h
+++ b/content/browser/code_cache/generated_code_cache.h
@@ -68,7 +68,8 @@
   };
 
   // Used for collecting statistics about cache behaviour.
-  enum CacheEntryStatus {
+  // Since it's uploaded to UMA, its values must never change.
+  enum CacheEntryStatus : uint8_t {
     kHit,
     kMiss,
     kClear,
diff --git a/content/browser/devtools/protocol/security_handler.cc b/content/browser/devtools/protocol/security_handler.cc
index 7522551..eac260e 100644
--- a/content/browser/devtools/protocol/security_handler.cc
+++ b/content/browser/devtools/protocol/security_handler.cc
@@ -102,6 +102,11 @@
 }
 
 Response SecurityHandler::Enable() {
+  if (host_) {
+    Response response = AssureTopLevelActiveFrame();
+    if (response.IsError())
+      return response;
+  }
   enabled_ = true;
   if (host_)
     AttachToRenderFrameHost();
@@ -166,5 +171,19 @@
   return Response::Success();
 }
 
+Response SecurityHandler::AssureTopLevelActiveFrame() {
+  DCHECK(host_);
+  constexpr char kCommandIsOnlyAvailableAtTopTarget[] =
+      "Command can only be executed on top-level targets";
+  if (host_->GetParentOrOuterDocument())
+    return Response::ServerError(kCommandIsOnlyAvailableAtTopTarget);
+
+  constexpr char kErrorInactivePage[] = "Not attached to an active page";
+  if (!host_->IsActive())
+    return Response::ServerError(kErrorInactivePage);
+
+  return Response::Success();
+}
+
 }  // namespace protocol
 }  // namespace content
diff --git a/content/browser/devtools/protocol/security_handler.h b/content/browser/devtools/protocol/security_handler.h
index 05f90ab..5cf3f2e 100644
--- a/content/browser/devtools/protocol/security_handler.h
+++ b/content/browser/devtools/protocol/security_handler.h
@@ -60,6 +60,7 @@
 
   void AttachToRenderFrameHost();
   void FlushPendingCertificateErrorNotifications();
+  Response AssureTopLevelActiveFrame();
 
   // WebContentsObserver overrides
   void DidFinishNavigation(NavigationHandle* navigation_handle) override;
diff --git a/content/browser/preloading/prefetch/prefetch_canary_checker.cc b/content/browser/preloading/prefetch/prefetch_canary_checker.cc
new file mode 100644
index 0000000..9a56e751
--- /dev/null
+++ b/content/browser/preloading/prefetch/prefetch_canary_checker.cc
@@ -0,0 +1,414 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/preloading/prefetch/prefetch_canary_checker.h"
+
+#include <math.h>
+
+#include <cmath>
+
+#include "base/base64.h"
+#include "base/bind.h"
+#include "base/callback_helpers.h"
+#include "base/guid.h"
+#include "base/metrics/histogram.h"
+#include "base/metrics/histogram_functions.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/stringprintf.h"
+#include "base/task/thread_pool.h"
+#include "build/build_config.h"
+#include "content/browser/preloading/prefetch/prefetch_dns_prober.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/network_service_instance.h"
+#include "content/public/browser/storage_partition.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
+#include "net/base/load_flags.h"
+#include "net/base/net_errors.h"
+#include "services/network/public/cpp/resource_request.h"
+#include "services/network/public/mojom/network_context.mojom.h"
+#include "services/network/public/mojom/url_response_head.mojom.h"
+
+#if BUILDFLAG(IS_ANDROID)
+#include "net/android/network_library.h"
+#include "net/base/network_interfaces.h"
+#endif
+
+namespace content {
+namespace {
+
+// The maximum number of canary checks to cache. Each entry corresponds to
+// a network the user was on during a single Chrome session, and cache misses
+// are cheap so there's no reason to use a large value.
+const size_t kMaxCacheSize = 4;
+
+const char kFinalResultHistogram[] = "PrefetchProxy.CanaryChecker.FinalState";
+const char kTimeUntilSuccess[] = "PrefetchProxy.CanaryChecker.TimeUntilSuccess";
+const char kTimeUntilFailure[] = "PrefetchProxy.CanaryChecker.TimeUntilFailure";
+const char kAttemptsBeforeSuccessHistogram[] =
+    "PrefetchProxy.CanaryChecker.NumAttemptsBeforeSuccess";
+const char kNetErrorHistogram[] = "PrefetchProxy.CanaryChecker.NetError";
+const char kCacheEntryAgeHistogram[] =
+    "PrefetchProxy.CanaryChecker.CacheEntryAge";
+const char kCacheLookupResult[] =
+    "PrefetchProxy.CanaryChecker.CacheLookupResult";
+
+// These values are persisted to UMA logs. Entries should not be renumbered and
+// numeric values should never be reused.
+enum class CanaryCheckLookupResult {
+  kSuccess = 0,
+  kFailure = 1,
+  kCacheMiss = 2,
+  kMaxValue = kCacheMiss,
+};
+
+// Please keep this up to date with logged histogram suffix
+// |PrefetchProxy.CanaryChecker.Clients| in
+// //tools/metrics/histograms/metadata/prefetch/histograms.xml.
+std::string NameForClient(PrefetchCanaryChecker::CheckType name) {
+  switch (name) {
+    case PrefetchCanaryChecker::CheckType::kTLS:
+      return "TLS";
+    case PrefetchCanaryChecker::CheckType::kDNS:
+      return "DNS";
+    default:
+      NOTREACHED() << static_cast<int>(name);
+      return std::string();
+  }
+  NOTREACHED();
+  return std::string();
+}
+
+std::string GenerateNetworkID(
+    network::NetworkConnectionTracker* network_connection_tracker) {
+  network::mojom::ConnectionType connection_type =
+      network::mojom::ConnectionType::CONNECTION_UNKNOWN;
+  if (network_connection_tracker) {
+    network_connection_tracker->GetConnectionType(&connection_type,
+                                                  base::DoNothing());
+  }
+
+  std::string id = base::NumberToString(static_cast<int>(connection_type));
+  bool is_cellular =
+      network::NetworkConnectionTracker::IsConnectionCellular(connection_type);
+  if (is_cellular) {
+    // Don't care about cell connection type.
+    id = "cell";
+  }
+
+// Further identify WiFi and cell connections. These calls are only supported
+// for Android devices.
+#if BUILDFLAG(IS_ANDROID)
+  if (connection_type == network::mojom::ConnectionType::CONNECTION_WIFI) {
+    return base::StringPrintf("%s,%s", id.c_str(), net::GetWifiSSID().c_str());
+  }
+
+  if (is_cellular) {
+    return base::StringPrintf(
+        "%s,%s", id.c_str(),
+        net::android::GetTelephonyNetworkOperator().c_str());
+  }
+#endif
+
+  return id;
+}
+
+}  // namespace
+
+PrefetchCanaryChecker::RetryPolicy::RetryPolicy() = default;
+PrefetchCanaryChecker::RetryPolicy::~RetryPolicy() = default;
+PrefetchCanaryChecker::RetryPolicy::RetryPolicy(
+    PrefetchCanaryChecker::RetryPolicy const&) = default;
+
+// static
+std::unique_ptr<PrefetchCanaryChecker>
+PrefetchCanaryChecker::MakePrefetchCanaryChecker(
+    BrowserContext* browser_context,
+    CheckType name,
+    const GURL& url,
+    const RetryPolicy& retry_policy,
+    const base::TimeDelta check_timeout,
+    base::TimeDelta revalidate_cache_after) {
+  if (!url.is_valid())
+    return nullptr;
+  return std::make_unique<PrefetchCanaryChecker>(browser_context, name, url,
+                                                 retry_policy, check_timeout,
+                                                 revalidate_cache_after);
+}
+
+PrefetchCanaryChecker::PrefetchCanaryChecker(
+    BrowserContext* browser_context,
+    CheckType name,
+    const GURL& url,
+    const RetryPolicy& retry_policy,
+    const base::TimeDelta check_timeout,
+    base::TimeDelta revalidate_cache_after)
+    : browser_context_(browser_context),
+      name_(NameForClient(name)),
+      url_(url),
+      retry_policy_(retry_policy),
+      backoff_entry_(&retry_policy_.backoff_policy),
+      check_timeout_(check_timeout),
+      revalidate_cache_after_(revalidate_cache_after),
+      cache_(kMaxCacheSize) {
+  // The NetworkConnectionTracker can only be used directly on the UI thread.
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  network_connection_tracker_ = GetNetworkConnectionTracker();
+  DCHECK(network_connection_tracker_);
+}
+
+PrefetchCanaryChecker::~PrefetchCanaryChecker() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+}
+
+base::WeakPtr<PrefetchCanaryChecker> PrefetchCanaryChecker::GetWeakPtr() const {
+  return weak_factory_.GetWeakPtr();
+}
+
+void PrefetchCanaryChecker::UpdateCacheEntry(
+    PrefetchCanaryChecker::CacheEntry entry,
+    std::string key) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  latest_cache_key_ = key;
+  cache_.Put(key, entry);
+}
+
+void PrefetchCanaryChecker::UpdateCacheKey(std::string key) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  latest_cache_key_ = key;
+}
+
+void PrefetchCanaryChecker::OnCheckEnd(bool success) {
+  PrefetchCanaryChecker::CacheEntry entry;
+  entry.success = success;
+  entry.last_modified = base::Time::Now();
+
+  // We have the check result and we need to store it in the cache, keyed on
+  // the current network key. Getting the network key on Android can be slow
+  // so we do this asynchronously. Note that this is fundamentally racy: the
+  // network might have changed since we completed the check. Fortunately, the
+  // impact of using the wrong key is limited: we might simply filter probe when
+  // we don't have to or fail to filter probe when we should.
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, base::BindOnce(GenerateNetworkID, network_connection_tracker_),
+      base::BindOnce(&PrefetchCanaryChecker::UpdateCacheEntry, GetWeakPtr(),
+                     entry));
+
+  DCHECK(time_when_set_active_.has_value());
+  base::TimeDelta active_time =
+      base::Time::Now() - time_when_set_active_.value();
+  if (success) {
+    base::Histogram::FactoryTimeGet(
+        AppendNameToHistogram(kTimeUntilSuccess),
+        base::Milliseconds(0) /* minimum */,
+        base::Milliseconds(30000) /* maximum */, 50 /* bucket_count */,
+        base::HistogramBase::kUmaTargetedHistogramFlag)
+        ->Add(active_time.InMilliseconds());
+  } else {
+    base::Histogram::FactoryTimeGet(
+        AppendNameToHistogram(kTimeUntilFailure),
+        base::Milliseconds(0) /* minimum */,
+        base::Milliseconds(60000) /* maximum */, 50 /* bucket_count */,
+        base::HistogramBase::kUmaTargetedHistogramFlag)
+        ->Add(active_time.InMilliseconds());
+  }
+  base::BooleanHistogram::FactoryGet(
+      AppendNameToHistogram(kFinalResultHistogram),
+      base::HistogramBase::kUmaTargetedHistogramFlag)
+      ->Add(success);
+
+  ResetState();
+}
+
+void PrefetchCanaryChecker::ResetState() {
+  time_when_set_active_ = absl::nullopt;
+  resolver_control_handle_.reset();
+  retry_timer_.reset();
+  timeout_timer_.reset();
+  backoff_entry_.Reset();
+}
+
+void PrefetchCanaryChecker::SendNowIfInactive() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  if (time_when_set_active_.has_value()) {
+    // We already have an active check.
+    return;
+  }
+  time_when_set_active_ = base::Time::Now();
+
+  StartDNSResolution(url_);
+}
+
+void PrefetchCanaryChecker::ProcessTimeout() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  // Cancel the pending resolving job. This will do nothing if resolving has
+  // already completed. Otherwise, the callback we registered (OnDNSResolved)
+  // will be called with the error code we pass here (net::ERR_TIMED_OUT).
+  resolver_control_handle_->Cancel(net::ERR_TIMED_OUT);
+}
+
+void PrefetchCanaryChecker::ProcessFailure(int net_error) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(!retry_timer_ || !retry_timer_->IsRunning());
+  DCHECK(!timeout_timer_ || !timeout_timer_->IsRunning());
+  DCHECK(time_when_set_active_.has_value());
+
+  backoff_entry_.InformOfRequest(false);
+
+  base::UmaHistogramSparse(AppendNameToHistogram(kNetErrorHistogram),
+                           std::abs(net_error));
+
+  if (retry_policy_.max_retries >=
+      static_cast<size_t>(backoff_entry_.failure_count())) {
+    base::TimeDelta interval = backoff_entry_.GetTimeUntilRelease();
+
+    retry_timer_ = std::make_unique<base::OneShotTimer>();
+    // base::Unretained is safe because |retry_timer_| is owned by this.
+    retry_timer_->Start(
+        FROM_HERE, interval,
+        base::BindOnce(&PrefetchCanaryChecker::StartDNSResolution,
+                       base::Unretained(this), url_));
+    return;
+  }
+
+  OnCheckEnd(false);
+}
+
+void PrefetchCanaryChecker::ProcessSuccess() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(!retry_timer_ || !retry_timer_->IsRunning());
+  DCHECK(!timeout_timer_ || !timeout_timer_->IsRunning());
+  DCHECK(time_when_set_active_.has_value());
+
+  base::LinearHistogram::FactoryGet(
+      AppendNameToHistogram(kAttemptsBeforeSuccessHistogram), 1 /* minimum */,
+      25 /* maximum */, 25 /* bucket_count */,
+      base::HistogramBase::kUmaTargetedHistogramFlag)
+      // |failure_count| is zero when the first attempt is successful.
+      // Increase by one for more intuitive metrics.
+      ->Add(backoff_entry_.failure_count() + 1);
+
+  OnCheckEnd(true);
+}
+
+absl::optional<bool> PrefetchCanaryChecker::CanaryCheckSuccessful() {
+  absl::optional<bool> result = LookupAndRunChecksIfNeeded();
+  CanaryCheckLookupResult result_enum;
+  if (!result.has_value()) {
+    result_enum = CanaryCheckLookupResult::kCacheMiss;
+  } else if (result.value()) {
+    result_enum = CanaryCheckLookupResult::kSuccess;
+  } else {
+    result_enum = CanaryCheckLookupResult::kFailure;
+  }
+
+  base::UmaHistogramEnumeration(AppendNameToHistogram(kCacheLookupResult),
+                                result_enum);
+  return result;
+}
+
+// RunChecksIfNeeded is the public version of LookupAndRunChecksIfNeeded that
+// doesn't return the lookup value, to force clients to use
+// CanaryCheckSuccessful (which reports UMA) for lookups.
+void PrefetchCanaryChecker::RunChecksIfNeeded() {
+  LookupAndRunChecksIfNeeded();
+}
+
+absl::optional<bool> PrefetchCanaryChecker::LookupAndRunChecksIfNeeded() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  // Asynchronously update the network cache key. On Android, getting the
+  // network cache key can be very slow, so we don't want to block the main
+  // thread.
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, base::BindOnce(GenerateNetworkID, network_connection_tracker_),
+      base::BindOnce(&PrefetchCanaryChecker::UpdateCacheKey, GetWeakPtr()));
+  // Assume the cache key has not changed since last time we checked it. Note
+  // that if we have never set latest_cache_key_, |it| will be cache_.end().
+  auto it = cache_.Get(latest_cache_key_);
+  if (it == cache_.end()) {
+    SendNowIfInactive();
+    return absl::optional<bool>();
+  }
+
+  const PrefetchCanaryChecker::CacheEntry& entry = it->second;
+  base::TimeDelta cache_entry_age = base::Time::Now() - entry.last_modified;
+
+  base::LinearHistogram::FactoryTimeGet(
+      AppendNameToHistogram(kCacheEntryAgeHistogram),
+      base::Hours(0) /* minimum */, base::Hours(72) /* maximum */,
+      50 /* bucket_count */, base::HistogramBase::kUmaTargetedHistogramFlag)
+      ->Add(cache_entry_age.InHours());
+
+  // Check if the cache entry should be revalidated because it has expired or
+  // cache_entry_age is negative because the clock was moved back.
+  if (cache_entry_age >= revalidate_cache_after_ ||
+      cache_entry_age.is_negative()) {
+    SendNowIfInactive();
+  }
+
+  return entry.success;
+}
+
+std::string PrefetchCanaryChecker::AppendNameToHistogram(
+    const std::string& histogram) const {
+  return base::StringPrintf("%s.%s", histogram.c_str(), name_.c_str());
+}
+
+void PrefetchCanaryChecker::StartDNSResolution(const GURL& url) {
+  net::NetworkIsolationKey nik =
+      net::IsolationInfo::CreateForInternalRequest(url::Origin::Create(url))
+          .network_isolation_key();
+
+  network::mojom::ResolveHostParametersPtr resolve_host_parameters =
+      network::mojom::ResolveHostParameters::New();
+  resolve_host_parameters->initial_priority = net::RequestPriority::IDLE;
+  // Don't use DNS results cached at the user's device.
+  resolve_host_parameters->cache_usage =
+      network::mojom::ResolveHostParameters::CacheUsage::DISALLOWED;
+
+  // Allow cancelling the request.
+  resolver_control_handle_ = mojo::Remote<network::mojom::ResolveHostHandle>();
+  resolve_host_parameters->control_handle =
+      resolver_control_handle_.BindNewPipeAndPassReceiver();
+
+  mojo::PendingRemote<network::mojom::ResolveHostClient> client_remote;
+  mojo::MakeSelfOwnedReceiver(
+      std::make_unique<PrefetchDNSProber>(
+          base::BindOnce(&PrefetchCanaryChecker::OnDNSResolved, GetWeakPtr())),
+      client_remote.InitWithNewPipeAndPassReceiver());
+
+  browser_context_->GetDefaultStoragePartition()
+      ->GetNetworkContext()
+      ->ResolveHost(net::HostPortPair::FromURL(url), nik,
+                    std::move(resolve_host_parameters),
+                    std::move(client_remote));
+
+  timeout_timer_ = std::make_unique<base::OneShotTimer>();
+  // base::Unretained is safe because |timeout_timer_| is owned by this.
+  timeout_timer_->Start(FROM_HERE, check_timeout_,
+                        base::BindOnce(&PrefetchCanaryChecker::ProcessTimeout,
+                                       base::Unretained(this)));
+}
+
+void PrefetchCanaryChecker::OnDNSResolved(
+    int net_error,
+    const absl::optional<net::AddressList>& resolved_addresses) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  timeout_timer_.reset();
+  resolver_control_handle_.reset();
+  bool successful = net_error == net::OK && resolved_addresses &&
+                    !resolved_addresses->empty();
+  if (successful) {
+    ProcessSuccess();
+  } else {
+    ProcessFailure(net_error);
+  }
+}
+
+}  // namespace content
diff --git a/content/browser/preloading/prefetch/prefetch_canary_checker.h b/content/browser/preloading/prefetch/prefetch_canary_checker.h
new file mode 100644
index 0000000..b72958c96
--- /dev/null
+++ b/content/browser/preloading/prefetch/prefetch_canary_checker.h
@@ -0,0 +1,220 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_CANARY_CHECKER_H_
+#define CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_CANARY_CHECKER_H_
+
+#include "base/callback.h"
+#include "base/containers/lru_cache.h"
+#include "base/memory/raw_ptr.h"
+#include "base/memory/scoped_refptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/sequence_checker.h"
+#include "base/time/time.h"
+#include "base/timer/timer.h"
+#include "base/values.h"
+#include "build/build_config.h"
+#include "content/common/content_export.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "net/base/address_list.h"
+#include "net/base/backoff_entry.h"
+#include "net/base/net_errors.h"
+#include "net/http/http_request_headers.h"
+#include "services/network/public/cpp/network_connection_tracker.h"
+#include "services/network/public/mojom/host_resolver.mojom.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "url/gurl.h"
+
+namespace network {
+class NetworkConnectionTracker;
+}  // namespace network
+
+namespace content {
+
+class BrowserContext;
+
+// This class makes DNS lookups to a specified host to verify if the user's ISP
+// would like Prefetch Proxy users to first probe the prefetched host before
+// using a prefetched resource. This allows ISP to perform filtering even if
+// a response has been fetched via an encrypted tunnel through the Prefetch
+// Proxy.
+class CONTENT_EXPORT PrefetchCanaryChecker {
+ public:
+  // Callers who wish to use this class should add a value to this enum. This
+  // enum is mapped to a string value which is then used in histograms and
+  // prefs. Be sure to update the |PrefetchProxy.CanaryChecker.Clients|
+  // histogram suffix in
+  // //tools/metrics/histograms/metadata/prefetch/histograms.xml whenever a
+  // change is made to this enum.
+  //
+  // Please add the header file of the client when new items are added.
+  enum class CheckType {
+    // content/browser/speculation_rules/prefetch/prefetch_origin_decider.h
+    kDNS = 0,
+    kTLS = 1,
+    kMaxValue = kTLS,
+  };
+
+  struct CONTENT_EXPORT RetryPolicy {
+    RetryPolicy();
+    RetryPolicy(const RetryPolicy& other);
+    ~RetryPolicy();
+
+    // The maximum number of retries (not including the original check) to
+    // attempt.
+    size_t max_retries = 0;
+
+    // Backoff policy to use to compute how long we should wait between the end
+    // of last retry and start of next retry.
+    net::BackoffEntry::Policy backoff_policy = {
+        .num_errors_to_ignore = 0,
+        .initial_delay_ms = 100,
+        .multiply_factor = 2,
+        .jitter_factor = 0.2,
+        // No maximum backoff.
+        .maximum_backoff_ms = -1,
+        .entry_lifetime_ms = -1,
+        .always_use_initial_delay = false,
+    };
+  };
+
+  // Cache entry representing a canary check result.
+  struct CacheEntry {
+    bool success;
+    base::Time last_modified;
+  };
+
+  // Creates an instance of |PrefetchCanaryChecker| when given a valid |url|. If
+  // |url| is invalid then nullptr is returned.
+  static std::unique_ptr<PrefetchCanaryChecker> MakePrefetchCanaryChecker(
+      BrowserContext* browser_context,
+      CheckType,
+      const GURL& url,
+      const RetryPolicy& retry_policy,
+      const base::TimeDelta check_timeout,
+      base::TimeDelta revalidate_cache_after);
+
+  PrefetchCanaryChecker(BrowserContext* browser_context,
+                        CheckType name,
+                        const GURL& url,
+                        const RetryPolicy& retry_policy,
+                        const base::TimeDelta check_timeout,
+                        base::TimeDelta revalidate_cache_after);
+  ~PrefetchCanaryChecker();
+
+  PrefetchCanaryChecker(const PrefetchCanaryChecker&) = delete;
+  PrefetchCanaryChecker& operator=(const PrefetchCanaryChecker) = delete;
+
+  base::WeakPtr<PrefetchCanaryChecker> GetWeakPtr() const;
+
+  // Returns the successfulness of the last canary check, if there was one. If
+  // the last status was not cached or was cached and needs to be revalidated,
+  // this may trigger new checks. This updates the
+  // PrefetchProxy.CanaryChecker.CacheLookupStatus histogram, so avoid calling
+  // this method repeatedly when its result can be reused.
+  absl::optional<bool> CanaryCheckSuccessful();
+
+  // Triggers new canary checks if there is no cached status or if the cached
+  // status is stale. Use this method over CanaryCheckSuccessful if you only
+  // want to freshen the cache (as opposed to look up the cached value), as the
+  // CanaryCheckSuccessful method updates the CacheLookupStatus histogram, but
+  // RunChecksIfNeeded does not.
+  void RunChecksIfNeeded();
+
+  // True if checks are being attempted, including retries.
+  bool IsActive() const { return time_when_set_active_.has_value(); }
+
+ private:
+  void ResetState();
+  void StartDNSResolution(const GURL& url);
+  void OnDNSResolved(
+      int net_error,
+      const absl::optional<net::AddressList>& resolved_addresses);
+  void ProcessTimeout();
+  void ProcessFailure(int net_error);
+  void ProcessSuccess();
+  void RecordResult(bool success);
+  std::string AppendNameToHistogram(const std::string& histogram) const;
+  absl::optional<bool> LookupAndRunChecksIfNeeded();
+  // Sends a check now if the checker is currently inactive. If the check is
+  // active (i.e.: there are DNS resolutions in flight), this is a no-op.
+  void SendNowIfInactive();
+
+  // This is called whenever the canary check is done. This is caused whenever
+  // the check succeeds, fails and there are no more retries, or the delegate
+  // stops the probing.
+  void OnCheckEnd(bool success);
+
+  // Updates the cache with the given entry and key. The arguments are in an
+  // unusual order to make BindOnce calls easier, as this method is used as a
+  // callback since generating the cache key happens asynchronously.
+  void UpdateCacheEntry(PrefetchCanaryChecker::CacheEntry entry,
+                        std::string key);
+
+  // Simply sets |latest_cache_key_| to |key|. This method is used as a
+  // callback since generating the cache key happens asynchronously.
+  void UpdateCacheKey(std::string key);
+
+  // The current browser context, not owned.
+  raw_ptr<BrowserContext> browser_context_;
+
+  // Pipe to allow cancelling an ongoing DNS resolution request. This is set
+  // when we fire off a DNS request to the network service. We send the
+  // receiving end to the network service as part of the parameters of the
+  // ResolveHost call. The network service then listens to this pipe to
+  // potentially cancel the request. The pipe is reset as when the request
+  // completes (success or failure).
+  mojo::Remote<network::mojom::ResolveHostHandle> resolver_control_handle_;
+
+  // The name given to this checker instance. Used in metrics.
+  const std::string name_;
+
+  // The URL that will be DNS resolved.
+  const GURL url_;
+
+  // The retry policy to use in this checker.
+  const RetryPolicy retry_policy_;
+
+  // The exponential backoff state for retries. This gets reset at the end of
+  // each check.
+  net::BackoffEntry backoff_entry_;
+
+  // How long before we should timeout a DNS check and retry.
+  const base::TimeDelta check_timeout_;
+
+  // How long to allow a cached entry to be valid until it is revalidated in the
+  // background.
+  const base::TimeDelta revalidate_cache_after_;
+
+  // If a retry is being attempted, this will be running until the next attempt.
+  std::unique_ptr<base::OneShotTimer> retry_timer_;
+
+  // If a check is being attempted, this will be running until the TTL.
+  std::unique_ptr<base::OneShotTimer> timeout_timer_;
+
+  // Remembers the last time the checker became active.
+  absl::optional<base::Time> time_when_set_active_;
+
+  // This reference is kept around for unregistering |this| as an observer on
+  // any thread.
+  raw_ptr<network::NetworkConnectionTracker> network_connection_tracker_;
+
+  // Small LRU cache holding the result of canary checks made for different
+  // networks. This cache is not persisted across browser restarts.
+  base::LRUCache<std::string, PrefetchCanaryChecker::CacheEntry> cache_;
+
+  // Keeps track of that latest key used to cache the canary checks. This key
+  // changes if the user's network changes. Evaluating the cache key requires
+  // an OS lookup which is slow on android, so we store the latest cache key
+  // evaluation (and use this stale cache keys for lookups).
+  std::string latest_cache_key_;
+
+  SEQUENCE_CHECKER(sequence_checker_);
+
+  base::WeakPtrFactory<PrefetchCanaryChecker> weak_factory_{this};
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_CANARY_CHECKER_H_
diff --git a/content/browser/preloading/prefetch/prefetch_canary_checker_unittest.cc b/content/browser/preloading/prefetch/prefetch_canary_checker_unittest.cc
new file mode 100644
index 0000000..c07cc864
--- /dev/null
+++ b/content/browser/preloading/prefetch/prefetch_canary_checker_unittest.cc
@@ -0,0 +1,479 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/preloading/prefetch/prefetch_canary_checker.h"
+
+#include "base/memory/raw_ptr.h"
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/simple_test_clock.h"
+#include "base/test/simple_test_tick_clock.h"
+#include "base/time/time.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/storage_partition.h"
+#include "content/public/test/browser_task_environment.h"
+#include "content/public/test/test_renderer_host.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "net/base/address_list.h"
+#include "net/base/host_port_pair.h"
+#include "net/base/net_errors.h"
+#include "net/dns/public/resolve_error_info.h"
+#include "services/network/public/mojom/host_resolver.mojom.h"
+#include "services/network/test/test_network_connection_tracker.h"
+#include "services/network/test/test_network_context.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace content {
+namespace {
+
+const base::TimeDelta kCacheRevalidateAfter = base::Days(1);
+
+class FakeNetworkContext : public network::TestNetworkContext {
+ public:
+  explicit FakeNetworkContext(
+      mojo::PendingReceiver<network::mojom::NetworkContext> receiver)
+      : receiver_(this, std::move(receiver)) {}
+
+  void ResolveHost(const net::HostPortPair& host,
+                   const net::NetworkIsolationKey& network_isolation_key,
+                   network::mojom::ResolveHostParametersPtr optional_parameters,
+                   mojo::PendingRemote<network::mojom::ResolveHostClient>
+                       response_client) override {
+    EXPECT_TRUE(pending_requests_.find(host) == pending_requests_.end());
+    auto request = std::make_unique<ResolveHostRequest>(
+        this, host, std::move(response_client),
+        std::move(optional_parameters->control_handle));
+    pending_requests_.emplace(host, std::move(request));
+    num_requests_made_++;
+  }
+
+  void MakeDNSResolveSuccess(const GURL& url) {
+    const net::IPEndPoint kFakeIPAddress{
+        net::IPEndPoint(net::IPAddress::IPv4Localhost(), /*port=*/1234)};
+    absl::optional<net::AddressList> resolved_addresses =
+        net::AddressList(kFakeIPAddress);
+    auto it = pending_requests_.find(net::HostPortPair::FromURL(url));
+    // Make sure a request has actually been made.
+    EXPECT_TRUE(it != pending_requests_.end());
+    it->second->OnComplete(net::OK, resolved_addresses);
+    pending_requests_.erase(it);
+  }
+
+  void MakeDNSResolveError(const GURL& url, net::Error err) {
+    MakeDNSResolveError(net::HostPortPair::FromURL(url), err);
+  }
+
+  void MakeDNSResolveError(const net::HostPortPair& host, net::Error err) {
+    auto it = pending_requests_.find(host);
+    // Make sure a request has actually been made.
+    EXPECT_TRUE(it != pending_requests_.end());
+
+    it->second->OnComplete(err, absl::nullopt);
+    pending_requests_.erase(it);
+  }
+
+  size_t NumPendingRequests() { return pending_requests_.size(); }
+  size_t NumRequestsMade() { return num_requests_made_; }
+
+ private:
+  class ResolveHostRequest : public network::mojom::ResolveHostHandle {
+   public:
+    ResolveHostRequest(
+        FakeNetworkContext* network_context,
+        net::HostPortPair host,
+        mojo::PendingRemote<network::mojom::ResolveHostClient> response_client,
+        mojo::PendingReceiver<network::mojom::ResolveHostHandle> control_handle)
+        : network_context_(network_context),
+          host_(host),
+          response_client_(std::move(response_client)) {
+      control_handle_receiver_.Bind(std::move(control_handle));
+    }
+
+    // ResolveHostHandle override.
+    void Cancel(int error) override {
+      network_context_->MakeDNSResolveError(host_,
+                                            static_cast<net::Error>(error));
+    }
+
+    void OnComplete(net::Error err,
+                    absl::optional<net::AddressList> resolved_addresses) {
+      response_client_->OnComplete(err, net::ResolveErrorInfo(),
+                                   resolved_addresses);
+    }
+
+   private:
+    raw_ptr<FakeNetworkContext> network_context_;
+    net::HostPortPair host_;
+    mojo::Receiver<network::mojom::ResolveHostHandle> control_handle_receiver_{
+        this};
+    mojo::Remote<network::mojom::ResolveHostClient> response_client_;
+  };
+
+  mojo::Receiver<network::mojom::NetworkContext> receiver_;
+  std::map<net::HostPortPair, std::unique_ptr<ResolveHostRequest>>
+      pending_requests_;
+  size_t num_requests_made_ = 0;
+};
+
+class PrefetchCanaryCheckerTest : public RenderViewHostTestHarness {
+ public:
+  PrefetchCanaryCheckerTest()
+      : RenderViewHostTestHarness(
+            base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
+
+  void SetUp() override {
+    RenderViewHostTestHarness::SetUp();
+
+    mojo::PendingRemote<network::mojom::NetworkContext> network_context_remote;
+    network_context_ = std::make_unique<FakeNetworkContext>(
+        network_context_remote.InitWithNewPipeAndPassReceiver());
+    browser_context()
+        ->GetDefaultStoragePartition()
+        ->SetNetworkContextForTesting(std::move(network_context_remote));
+  }
+
+  void TearDown() override {
+    network_context_.reset();
+    RenderViewHostTestHarness::TearDown();
+  }
+
+  std::unique_ptr<PrefetchCanaryChecker> MakeChecker(const GURL& url) {
+    PrefetchCanaryChecker::RetryPolicy retry_policy;
+    return MakeCheckerWithRetries(url, retry_policy,
+                                  base::TimeDelta::FiniteMax());
+  }
+
+  std::unique_ptr<PrefetchCanaryChecker> MakeCheckerWithRetries(
+      const GURL& url,
+      PrefetchCanaryChecker::RetryPolicy retry_policy,
+      base::TimeDelta timeout) {
+    return std::make_unique<PrefetchCanaryChecker>(
+        browser_context(), PrefetchCanaryChecker::CheckType::kDNS, url,
+        retry_policy, timeout, kCacheRevalidateAfter);
+  }
+
+  void RunUntilIdle() { task_environment()->RunUntilIdle(); }
+
+  FakeNetworkContext* NetworkContext() { return network_context_.get(); }
+
+ private:
+  std::unique_ptr<FakeNetworkContext> network_context_;
+};
+
+TEST_F(PrefetchCanaryCheckerTest, OK) {
+  base::HistogramTester histogram_tester;
+  GURL probe_url("https://probe-url.com");
+  std::unique_ptr<PrefetchCanaryChecker> checker = MakeChecker(probe_url);
+  absl::optional<bool> result = checker->CanaryCheckSuccessful();
+  EXPECT_EQ(result, absl::nullopt);
+  // Make sure a cache miss was logged.
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.CacheLookupResult.DNS", 2, 1);
+
+  RunUntilIdle();
+  NetworkContext()->MakeDNSResolveSuccess(probe_url);
+  RunUntilIdle();
+
+  result = checker->CanaryCheckSuccessful();
+  EXPECT_TRUE(result.value());
+  EXPECT_FALSE(checker->IsActive());
+
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.FinalState.DNS", true, 1);
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.NumAttemptsBeforeSuccess.DNS", 1, 1);
+  histogram_tester.ExpectBucketCount(
+      "PrefetchProxy.CanaryChecker.CacheLookupResult.DNS", 0, 1);
+}
+
+TEST_F(PrefetchCanaryCheckerTest, MultipleStart) {
+  base::HistogramTester histogram_tester;
+  GURL probe_url("https://probe-url.com");
+  std::unique_ptr<PrefetchCanaryChecker> checker = MakeChecker(probe_url);
+  // Make sure calling RunChecksIfNeeded multiple times only results in one
+  // pending DNS lookup.
+  checker->RunChecksIfNeeded();
+  checker->RunChecksIfNeeded();
+  RunUntilIdle();
+
+  // Resolve a single DNS lookup.
+  NetworkContext()->MakeDNSResolveSuccess(probe_url);
+  // Make sure only one lookup was made.
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 0u);
+
+  // Allow the checker to process and cache the response.
+  RunUntilIdle();
+
+  absl::optional<bool> result = checker->CanaryCheckSuccessful();
+  EXPECT_TRUE(result.value());
+  EXPECT_FALSE(checker->IsActive());
+}
+
+TEST_F(PrefetchCanaryCheckerTest, CacheHit) {
+  GURL probe_url("https://probe-url.com");
+  std::unique_ptr<PrefetchCanaryChecker> checker = MakeChecker(probe_url);
+  absl::optional<bool> result = checker->CanaryCheckSuccessful();
+  EXPECT_EQ(result, absl::nullopt);
+
+  RunUntilIdle();
+  NetworkContext()->MakeDNSResolveSuccess(probe_url);
+
+  // Allow the checker to process and cache the response.
+  RunUntilIdle();
+
+  // Make sure that future calls don't cause DNS lookups since there should
+  // already be a cached result.
+  result = checker->CanaryCheckSuccessful();
+  RunUntilIdle();
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 0u);
+
+  EXPECT_TRUE(result.value());
+  EXPECT_FALSE(checker->IsActive());
+}
+
+// TODO(crbug.com/1307470): Re-enable; flaky.
+TEST_F(PrefetchCanaryCheckerTest, DISABLED_NetworkConnectionShardsCache) {
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
+      network::mojom::ConnectionType::CONNECTION_3G);
+  RunUntilIdle();
+
+  GURL probe_url("https://probe-url.com");
+  std::unique_ptr<PrefetchCanaryChecker> checker = MakeChecker(probe_url);
+  checker->RunChecksIfNeeded();
+  RunUntilIdle();
+  NetworkContext()->MakeDNSResolveSuccess(probe_url);
+  RunUntilIdle();
+
+  absl::optional<bool> result = checker->CanaryCheckSuccessful();
+  // Make sure result is cached.
+  EXPECT_TRUE(result.has_value());
+
+  // Changing the network to 4G should reuse the cache.
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
+      network::mojom::ConnectionType::CONNECTION_4G);
+  RunUntilIdle();
+  result = checker->CanaryCheckSuccessful();
+  EXPECT_TRUE(result.has_value());
+
+  // Changing the network to wifi should result in a cache miss and a new check.
+  network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
+      network::mojom::ConnectionType::CONNECTION_WIFI);
+  RunUntilIdle();
+  result = checker->CanaryCheckSuccessful();
+  EXPECT_EQ(result, absl::nullopt);
+
+  // Finish the check and make sure the result is cached.
+  RunUntilIdle();
+  NetworkContext()->MakeDNSResolveSuccess(probe_url);
+  RunUntilIdle();
+  result = checker->CanaryCheckSuccessful();
+  EXPECT_TRUE(result.value());
+}
+
+TEST_F(PrefetchCanaryCheckerTest, NetError) {
+  base::HistogramTester histogram_tester;
+  GURL probe_url("https://probe-url.com");
+  std::unique_ptr<PrefetchCanaryChecker> checker = MakeChecker(probe_url);
+  RunUntilIdle();
+  checker->RunChecksIfNeeded();
+  RunUntilIdle();
+  NetworkContext()->MakeDNSResolveError(probe_url, net::ERR_FAILED);
+  RunUntilIdle();
+
+  absl::optional<bool> result = checker->CanaryCheckSuccessful();
+  EXPECT_FALSE(result.value());
+  EXPECT_FALSE(checker->IsActive());
+
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.FinalState.DNS", false, 1);
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.NetError.DNS", std::abs(net::ERR_FAILED), 1);
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.CacheLookupResult.DNS", 1, 1);
+}
+
+TEST_F(PrefetchCanaryCheckerTest, TimeUntilSuccess) {
+  base::HistogramTester histogram_tester;
+  GURL probe_url("https://probe-url.com");
+  std::unique_ptr<PrefetchCanaryChecker> checker = MakeChecker(probe_url);
+  checker->RunChecksIfNeeded();
+  RunUntilIdle();
+
+  task_environment()->FastForwardBy(base::Milliseconds(11000));
+
+  NetworkContext()->MakeDNSResolveSuccess(probe_url);
+  RunUntilIdle();
+
+  EXPECT_TRUE(checker->CanaryCheckSuccessful().value());
+  EXPECT_FALSE(checker->IsActive());
+
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.TimeUntilSuccess.DNS", 11000, 1);
+  histogram_tester.ExpectTotalCount(
+      "PrefetchProxy.CanaryChecker.TimeUntilFailure.DNS", 0);
+}
+
+TEST_F(PrefetchCanaryCheckerTest, TimeUntilFailure) {
+  base::HistogramTester histogram_tester;
+  GURL probe_url("https://probe-url.com");
+  std::unique_ptr<PrefetchCanaryChecker> checker = MakeChecker(probe_url);
+  checker->RunChecksIfNeeded();
+  RunUntilIdle();
+
+  task_environment()->FastForwardBy(base::Milliseconds(11000));
+
+  NetworkContext()->MakeDNSResolveError(probe_url, net::ERR_FAILED);
+  RunUntilIdle();
+
+  EXPECT_FALSE(checker->CanaryCheckSuccessful().value());
+  EXPECT_FALSE(checker->IsActive());
+
+  histogram_tester.ExpectTotalCount(
+      "PrefetchProxy.CanaryChecker.TimeUntilSuccess.DNS", 0);
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.TimeUntilFailure.DNS", 11000, 1);
+}
+
+TEST_F(PrefetchCanaryCheckerTest, Retries) {
+  base::HistogramTester histogram_tester;
+  GURL probe_url("https://probe-url.com");
+
+  PrefetchCanaryChecker::RetryPolicy retry_policy;
+  retry_policy.max_retries = 2;
+  retry_policy.backoff_policy = {
+      .num_errors_to_ignore = 0,
+      .initial_delay_ms = 1000,
+      .multiply_factor = 2,
+      .jitter_factor = 0.0,
+      // No maximum backoff.
+      .maximum_backoff_ms = -1,
+      .entry_lifetime_ms = -1,
+      .always_use_initial_delay = false,
+  };
+  base::TimeDelta timeout = base::Days(1);
+  std::unique_ptr<PrefetchCanaryChecker> checker =
+      MakeCheckerWithRetries(probe_url, retry_policy, timeout);
+  checker->RunChecksIfNeeded();
+  RunUntilIdle();
+  NetworkContext()->MakeDNSResolveError(probe_url, net::ERR_FAILED);
+
+  RunUntilIdle();
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 0u);
+  // Make sure the failure was not cached: we're not done with retries.
+  EXPECT_EQ(checker->CanaryCheckSuccessful(), absl::nullopt);
+
+  task_environment()->FastForwardBy(base::Milliseconds(900));
+  // There should still be no retry attempted.
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 0u);
+  task_environment()->FastForwardBy(base::Milliseconds(100));
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 1u);
+  NetworkContext()->MakeDNSResolveError(probe_url, net::ERR_FAILED);
+  RunUntilIdle();
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 0u);
+  // Make sure the failure was not cached: we're not done with retries.
+  EXPECT_EQ(checker->CanaryCheckSuccessful(), absl::nullopt);
+
+  // Exponential backoff: the next retry should go off in 2s.
+  task_environment()->FastForwardBy(base::Milliseconds(1900));
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 0u);
+  task_environment()->FastForwardBy(base::Milliseconds(100));
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 1u);
+  NetworkContext()->MakeDNSResolveError(probe_url, net::ERR_FAILED);
+  RunUntilIdle();
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 0u);
+  // Make sure the failure was cached: we're done with retries.
+  EXPECT_FALSE(checker->CanaryCheckSuccessful().value());
+
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.FinalState.DNS", false, 1);
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.NetError.DNS", std::abs(net::ERR_FAILED), 3);
+}
+
+TEST_F(PrefetchCanaryCheckerTest, Timeout) {
+  base::HistogramTester histogram_tester;
+  GURL probe_url("https://probe-url.com");
+
+  PrefetchCanaryChecker::RetryPolicy retry_policy;
+  retry_policy.max_retries = 2;
+  retry_policy.backoff_policy = {
+      .num_errors_to_ignore = 0,
+      .initial_delay_ms = 1000,
+      .multiply_factor = 2,
+      .jitter_factor = 0.0,
+      // No maximum backoff.
+      .maximum_backoff_ms = -1,
+      .entry_lifetime_ms = -1,
+      .always_use_initial_delay = false,
+  };
+  base::TimeDelta timeout = base::Milliseconds(1500);
+  std::unique_ptr<PrefetchCanaryChecker> checker =
+      MakeCheckerWithRetries(probe_url, retry_policy, timeout);
+  checker->RunChecksIfNeeded();
+
+  task_environment()->FastForwardBy(base::Milliseconds(1400));
+  // Still one pending DNS lookup.
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 1u);
+  EXPECT_EQ(NetworkContext()->NumRequestsMade(), 1u);
+
+  task_environment()->FastForwardBy(base::Milliseconds(100));
+  // It's been 1500 ms. The first lookup should haved timed out. A new one
+  // will be sent in 1s since the initial backoff is 1s.
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 0u);
+  EXPECT_EQ(NetworkContext()->NumRequestsMade(), 1u);
+
+  task_environment()->FastForwardBy(base::Milliseconds(1000));
+  // The first retry should go out now.
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 1u);
+  EXPECT_EQ(NetworkContext()->NumRequestsMade(), 2u);
+
+  task_environment()->FastForwardBy(base::Milliseconds(1500));
+  // By now the first retry should have timed out.  The exponential backoff will
+  // delay the next retry until 2s have passed.  Make sure no new lookup has
+  // been triggered.
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 0u);
+  EXPECT_EQ(NetworkContext()->NumRequestsMade(), 2u);
+
+  task_environment()->FastForwardBy(base::Milliseconds(1900));
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 0u);
+  EXPECT_EQ(NetworkContext()->NumRequestsMade(), 2u);
+
+  task_environment()->FastForwardBy(base::Milliseconds(100));
+  // The second retry should go out now.
+  EXPECT_EQ(NetworkContext()->NumPendingRequests(), 1u);
+  EXPECT_EQ(NetworkContext()->NumRequestsMade(), 3u);
+  NetworkContext()->MakeDNSResolveSuccess(probe_url);
+  RunUntilIdle();
+  EXPECT_TRUE(checker->CanaryCheckSuccessful().value());
+
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.FinalState.DNS", true, 1);
+  histogram_tester.ExpectUniqueSample(
+      "PrefetchProxy.CanaryChecker.NumAttemptsBeforeSuccess.DNS", 3, 1);
+}
+
+TEST_F(PrefetchCanaryCheckerTest, CacheEntryAge) {
+  base::HistogramTester histogram_tester;
+  GURL probe_url("https://probe-url.com");
+
+  std::unique_ptr<PrefetchCanaryChecker> checker = MakeChecker(probe_url);
+  checker->RunChecksIfNeeded();
+  RunUntilIdle();
+  NetworkContext()->MakeDNSResolveSuccess(probe_url);
+  RunUntilIdle();
+  EXPECT_TRUE(checker->CanaryCheckSuccessful().value());
+
+  task_environment()->FastForwardBy(base::Hours(24));
+  EXPECT_TRUE(checker->CanaryCheckSuccessful().value());
+
+  histogram_tester.ExpectBucketCount(
+      "PrefetchProxy.CanaryChecker.CacheEntryAge.DNS", 0, 1);
+  histogram_tester.ExpectBucketCount(
+      "PrefetchProxy.CanaryChecker.CacheEntryAge.DNS", 24, 1);
+  histogram_tester.ExpectTotalCount(
+      "PrefetchProxy.CanaryChecker.CacheEntryAge.DNS", 2);
+}
+
+}  // namespace
+}  // namespace content
\ No newline at end of file
diff --git a/content/browser/preloading/prefetch/prefetch_dns_prober.cc b/content/browser/preloading/prefetch/prefetch_dns_prober.cc
new file mode 100644
index 0000000..02bd315c
--- /dev/null
+++ b/content/browser/preloading/prefetch/prefetch_dns_prober.cc
@@ -0,0 +1,35 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/preloading/prefetch/prefetch_dns_prober.h"
+
+#include "base/callback.h"
+#include "net/base/address_list.h"
+#include "net/dns/public/resolve_error_info.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace content {
+
+PrefetchDNSProber::PrefetchDNSProber(OnDNSResultsCallback callback)
+    : callback_(std::move(callback)) {
+  DCHECK(callback_);
+}
+
+PrefetchDNSProber::~PrefetchDNSProber() {
+  if (callback_) {
+    // Indicates some kind of mojo error. Play it safe and return no success.
+    std::move(callback_).Run(net::ERR_FAILED, absl::nullopt);
+  }
+}
+
+void PrefetchDNSProber::OnComplete(
+    int32_t error,
+    const net::ResolveErrorInfo& resolve_error_info,
+    const absl::optional<net::AddressList>& resolved_addresses) {
+  if (callback_) {
+    std::move(callback_).Run(error, resolved_addresses);
+  }
+}
+
+}  // namespace content
\ No newline at end of file
diff --git a/content/browser/preloading/prefetch/prefetch_dns_prober.h b/content/browser/preloading/prefetch/prefetch_dns_prober.h
new file mode 100644
index 0000000..85acc28
--- /dev/null
+++ b/content/browser/preloading/prefetch/prefetch_dns_prober.h
@@ -0,0 +1,43 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_DNS_PROBER_H_
+#define CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_DNS_PROBER_H_
+
+#include <vector>
+
+#include "base/callback.h"
+#include "net/base/address_list.h"
+#include "net/base/host_port_pair.h"
+#include "net/dns/public/resolve_error_info.h"
+#include "services/network/public/mojom/host_resolver.mojom.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace content {
+
+// PrefetchDNSProber is a simple ResolveHostClient implementation that
+// performs DNS resolution and invokes a callback upon completion.
+class PrefetchDNSProber : public network::mojom::ResolveHostClient {
+ public:
+  using OnDNSResultsCallback = base::OnceCallback<
+      void(int, const absl::optional<net::AddressList>& resolved_addresses)>;
+
+  explicit PrefetchDNSProber(OnDNSResultsCallback callback);
+  ~PrefetchDNSProber() override;
+
+  // network::mojom::ResolveHostClient:
+  void OnTextResults(const std::vector<std::string>&) override {}
+  void OnHostnameResults(const std::vector<net::HostPortPair>&) override {}
+  void OnComplete(
+      int32_t error,
+      const net::ResolveErrorInfo& resolve_error_info,
+      const absl::optional<net::AddressList>& resolved_addresses) override;
+
+ private:
+  OnDNSResultsCallback callback_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_DNS_PROBER_H_
\ No newline at end of file
diff --git a/content/browser/preloading/prefetch/prefetch_document_manager.h b/content/browser/preloading/prefetch/prefetch_document_manager.h
index 84d770a5..795976d 100644
--- a/content/browser/preloading/prefetch/prefetch_document_manager.h
+++ b/content/browser/preloading/prefetch/prefetch_document_manager.h
@@ -57,6 +57,12 @@
   // in |all_prefetches_|.
   std::unique_ptr<PrefetchContainer> ReleasePrefetchContainer(const GURL& url);
 
+  // Checking the canary cache can be a slow and blocking operation (see
+  // crbug.com/1266018), so we only do this for the first non-decoy prefetch we
+  // make on the page.
+  bool HaveCanaryChecksStarted() const { return have_canary_checks_started_; }
+  void OnCanaryChecksStarted() { have_canary_checks_started_ = true; }
+
   static void SetPrefetchServiceForTesting(PrefetchService* prefetch_service);
 
  private:
@@ -76,6 +82,9 @@
   // which point |PrefetchService| takes ownership.
   std::map<GURL, std::unique_ptr<PrefetchContainer>> owned_prefetches_;
 
+  // Stores whether or not canary checks have been started for this page.
+  bool have_canary_checks_started_{false};
+
   base::WeakPtrFactory<PrefetchDocumentManager> weak_method_factory_{this};
 
   DOCUMENT_USER_DATA_KEY_DECL();
diff --git a/content/browser/preloading/prefetch/prefetch_origin_prober.cc b/content/browser/preloading/prefetch/prefetch_origin_prober.cc
new file mode 100644
index 0000000..79d15d6
--- /dev/null
+++ b/content/browser/preloading/prefetch/prefetch_origin_prober.cc
@@ -0,0 +1,295 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/preloading/prefetch/prefetch_origin_prober.h"
+
+#include "base/bind.h"
+#include "base/feature_list.h"
+#include "base/strings/string_util.h"
+#include "content/browser/preloading/prefetch/prefetch_canary_checker.h"
+#include "content/browser/preloading/prefetch/prefetch_dns_prober.h"
+#include "content/browser/preloading/prefetch/prefetch_params.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/storage_partition.h"
+#include "mojo/public/cpp/bindings/callback_helpers.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
+#include "net/base/host_port_pair.h"
+#include "net/base/isolation_info.h"
+#include "net/base/network_isolation_key.h"
+#include "services/network/public/mojom/network_context.mojom.h"
+#include "services/network/public/mojom/tcp_socket.mojom.h"
+#include "services/network/public/mojom/tls_socket.mojom.h"
+#include "services/network/public/mojom/url_response_head.mojom.h"
+#include "url/origin.h"
+
+namespace content {
+namespace {
+
+net::NetworkTrafficAnnotationTag GetProbingTrafficAnnotation() {
+  return net::DefineNetworkTrafficAnnotation("speculation_rules_prefetch_probe",
+                                             R"(
+        semantics {
+          sender: "Speculation Rules Prefetch Probe"
+          description:
+            "Verifies the end to end connection between the browser and the "
+            "origin site that the user is currently navigating to. This is "
+            "done during a navigation that was previously prefetched over a "
+            "proxy to check that the site is not blocked by middleboxes. "
+            "Such prefetches will be used to fetch render-blocking "
+            "content before being navigated by the user without impacting "
+            "privacy."
+          trigger:
+            "Used only when this feature and speculation rules feature are "
+            "enabled."
+          data: "None."
+          destination: WEBSITE
+        }
+        policy {
+          cookies_allowed: NO
+          setting:
+            "Users can control this via a setting specific to each content "
+            "embedder."
+          policy_exception_justification: "Not implemented."
+      })");
+}
+
+void TLSDropHandler(base::OnceClosure ui_only_callback) {
+  GetUIThreadTaskRunner({})->PostTask(FROM_HERE, std::move(ui_only_callback));
+}
+
+class TLSProber {
+ public:
+  TLSProber(const GURL& url,
+            PrefetchOriginProber::OnProbeResultCallback callback)
+      : url_(url), callback_(std::move(callback)) {}
+  ~TLSProber() { DCHECK(!callback_); }
+
+  network::mojom::NetworkContext::CreateTCPConnectedSocketCallback
+  GetOnTCPConnectedCallback() {
+    network::mojom::NetworkContext::CreateTCPConnectedSocketCallback
+        tcp_handler = base::BindOnce(&TLSProber::OnTCPConnected,
+                                     weak_factory_.GetWeakPtr());
+
+    return mojo::WrapCallbackWithDropHandler(std::move(tcp_handler),
+                                             GetDropHandler());
+  }
+
+  mojo::PendingReceiver<network::mojom::TCPConnectedSocket>
+  GetTCPSocketReceiver() {
+    return tcp_socket_.BindNewPipeAndPassReceiver();
+  }
+
+ private:
+  void OnTCPConnected(int result,
+                      const absl::optional<net::IPEndPoint>& local_addr,
+                      const absl::optional<net::IPEndPoint>& peer_adder,
+                      mojo::ScopedDataPipeConsumerHandle receive_stream,
+                      mojo::ScopedDataPipeProducerHandle send_stream) {
+    if (result != net::OK) {
+      HandleFailure();
+      return;
+    }
+
+    network::mojom::TCPConnectedSocket::UpgradeToTLSCallback tls_handler =
+        base::BindOnce(&TLSProber::OnUpgradeToTLS, weak_factory_.GetWeakPtr());
+
+    tcp_socket_->UpgradeToTLS(
+        net::HostPortPair::FromURL(url_), /*options=*/nullptr,
+        net::MutableNetworkTrafficAnnotationTag(GetProbingTrafficAnnotation()),
+        tls_socket_.BindNewPipeAndPassReceiver(),
+        /*observer=*/mojo::NullRemote(),
+        mojo::WrapCallbackWithDropHandler(std::move(tls_handler),
+                                          GetDropHandler()));
+  }
+
+  void OnUpgradeToTLS(int result,
+                      mojo::ScopedDataPipeConsumerHandle receive_stream,
+                      mojo::ScopedDataPipeProducerHandle send_stream,
+                      const absl::optional<net::SSLInfo>& ssl_info) {
+    std::move(callback_).Run(result == net::OK
+                                 ? PrefetchProbeResult::kTLSProbeSuccess
+                                 : PrefetchProbeResult::kTLSProbeFailure);
+    delete this;
+  }
+
+  base::OnceClosure GetDropHandler() {
+    // The drop handler is not guaranteed to be run on the original thread. Use
+    // the anon method above to fix that.
+    return base::BindOnce(
+        &TLSDropHandler,
+        base::BindOnce(&TLSProber::HandleFailure, weak_factory_.GetWeakPtr()));
+  }
+
+  void HandleFailure() {
+    std::move(callback_).Run(PrefetchProbeResult::kTLSProbeFailure);
+    delete this;
+  }
+
+  // The URL of the resource being probed. Only the host:port is used.
+  const GURL url_;
+
+  // The callback to run when the probe is complete.
+  PrefetchOriginProber::OnProbeResultCallback callback_;
+
+  // Mojo sockets. We only test that both can be connected.
+  mojo::Remote<network::mojom::TCPConnectedSocket> tcp_socket_;
+  mojo::Remote<network::mojom::TLSClientSocket> tls_socket_;
+
+  base::WeakPtrFactory<TLSProber> weak_factory_{this};
+};
+
+}  // namespace
+
+PrefetchOriginProber::PrefetchOriginProber(BrowserContext* browser_context,
+                                           const GURL& dns_canary_check_url,
+                                           const GURL& tls_canary_check_url)
+    : browser_context_(browser_context) {
+  // Check if probing is enabled
+
+  PrefetchCanaryChecker::RetryPolicy retry_policy;
+  retry_policy.max_retries = PrefetchCanaryCheckRetries();
+
+  if (PrefetchTLSCanaryCheckEnabled()) {
+    tls_canary_checker_ = PrefetchCanaryChecker::MakePrefetchCanaryChecker(
+        browser_context_, PrefetchCanaryChecker::CheckType::kTLS,
+        tls_canary_check_url, retry_policy, PrefetchCanaryCheckTimeout(),
+        PrefetchCanaryCheckCacheLifetime());
+  }
+
+  dns_canary_checker_ = PrefetchCanaryChecker::MakePrefetchCanaryChecker(
+      browser_context_, PrefetchCanaryChecker::CheckType::kDNS,
+      dns_canary_check_url, retry_policy, PrefetchCanaryCheckTimeout(),
+      PrefetchCanaryCheckCacheLifetime());
+}
+
+PrefetchOriginProber::~PrefetchOriginProber() = default;
+
+void PrefetchOriginProber::RunCanaryChecksIfNeeded() const {
+  if (!PrefetchProbingEnabled() || !PrefetchCanaryCheckEnabled())
+    return;
+
+  if (dns_canary_checker_)
+    dns_canary_checker_->RunChecksIfNeeded();
+  if (tls_canary_checker_)
+    tls_canary_checker_->RunChecksIfNeeded();
+}
+
+bool PrefetchOriginProber::ShouldProbeOrigins() const {
+  if (!PrefetchProbingEnabled())
+    return false;
+  if (!PrefetchCanaryCheckEnabled() || !dns_canary_checker_)
+    return true;
+
+  // We call CanaryCheckSuccessful on all enabled canary checks to make sure
+  // their cache gets refreshed if necessary.
+  bool dns_success =
+      dns_canary_checker_->CanaryCheckSuccessful().value_or(false);
+  bool tls_success = true;
+  if (tls_canary_checker_)
+    tls_success = tls_canary_checker_->CanaryCheckSuccessful().value_or(false);
+
+  // If either check has failed or not completed in time, then probe.
+  return !dns_success || !tls_success;
+}
+
+void PrefetchOriginProber::Probe(const GURL& url,
+                                 OnProbeResultCallback callback) {
+  // If canary checks are disabled, or if the TLS canary check is enabled and
+  // failed (or did not complete), do TLS probing.
+  if (!PrefetchCanaryCheckEnabled() ||
+      (tls_canary_checker_ &&
+       !tls_canary_checker_->CanaryCheckSuccessful().value_or(false))) {
+    TLSProbe(url, std::move(callback));
+    return;
+  }
+
+  DNSProbe(url, std::move(callback));
+}
+
+void PrefetchOriginProber::DNSProbe(const GURL& url,
+                                    OnProbeResultCallback callback) {
+  StartDNSResolution(url, std::move(callback), /*also_do_tls_connect=*/false);
+}
+
+void PrefetchOriginProber::TLSProbe(const GURL& url,
+                                    OnProbeResultCallback callback) {
+  StartDNSResolution(url, std::move(callback), /*also_do_tls_connect=*/true);
+}
+
+void PrefetchOriginProber::StartDNSResolution(const GURL& url,
+                                              OnProbeResultCallback callback,
+                                              bool also_do_tls_connect) {
+  net::NetworkIsolationKey nik =
+      net::IsolationInfo::CreateForInternalRequest(url::Origin::Create(url))
+          .network_isolation_key();
+
+  network::mojom::ResolveHostParametersPtr resolve_host_parameters =
+      network::mojom::ResolveHostParameters::New();
+  // This action is navigation-blocking, so use the highest priority.
+  resolve_host_parameters->initial_priority = net::RequestPriority::HIGHEST;
+
+  mojo::PendingRemote<network::mojom::ResolveHostClient> client_remote;
+  mojo::MakeSelfOwnedReceiver(
+      std::make_unique<PrefetchDNSProber>(base::BindOnce(
+          &PrefetchOriginProber::OnDNSResolved, weak_factory_.GetWeakPtr(), url,
+          std::move(callback), also_do_tls_connect)),
+      client_remote.InitWithNewPipeAndPassReceiver());
+
+  browser_context_->GetDefaultStoragePartition()
+      ->GetNetworkContext()
+      ->ResolveHost(net::HostPortPair::FromURL(url), nik,
+                    std::move(resolve_host_parameters),
+                    std::move(client_remote));
+}
+
+void PrefetchOriginProber::OnDNSResolved(
+    const GURL& url,
+    OnProbeResultCallback callback,
+    bool also_do_tls_connect,
+    int net_error,
+    const absl::optional<net::AddressList>& resolved_addresses) {
+  bool successful = net_error == net::OK && resolved_addresses &&
+                    !resolved_addresses->empty();
+
+  // A TLS connection needs the resolved addresses, so it also fails here.
+  if (!successful) {
+    std::move(callback).Run(PrefetchProbeResult::kDNSProbeFailure);
+    return;
+  }
+
+  if (!also_do_tls_connect) {
+    std::move(callback).Run(PrefetchProbeResult::kDNSProbeSuccess);
+    return;
+  }
+
+  DoTLSProbeAfterDNSResolution(url, std::move(callback), *resolved_addresses);
+}
+
+void PrefetchOriginProber::DoTLSProbeAfterDNSResolution(
+    const GURL& url,
+    OnProbeResultCallback callback,
+    const net::AddressList& addresses) {
+  DCHECK(!addresses.empty());
+
+  std::unique_ptr<TLSProber> prober =
+      std::make_unique<TLSProber>(url, std::move(callback));
+
+  browser_context_->GetDefaultStoragePartition()
+      ->GetNetworkContext()
+      ->CreateTCPConnectedSocket(
+          /*local_addr=*/absl::nullopt, addresses,
+          /*tcp_connected_socket_options=*/nullptr,
+          net::MutableNetworkTrafficAnnotationTag(
+              GetProbingTrafficAnnotation()),
+          prober->GetTCPSocketReceiver(),
+          /*observer=*/mojo::NullRemote(), prober->GetOnTCPConnectedCallback());
+
+  // |prober| manages its own lifetime, using the mojo pipes.
+  prober.release();
+}
+
+}  // namespace content
diff --git a/content/browser/preloading/prefetch/prefetch_origin_prober.h b/content/browser/preloading/prefetch/prefetch_origin_prober.h
new file mode 100644
index 0000000..e57c7a57
--- /dev/null
+++ b/content/browser/preloading/prefetch/prefetch_origin_prober.h
@@ -0,0 +1,88 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_ORIGIN_PROBER_H_
+#define CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_ORIGIN_PROBER_H_
+
+#include "base/callback.h"
+#include "base/memory/raw_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "content/browser/preloading/prefetch/prefetch_probe_result.h"
+#include "content/common/content_export.h"
+#include "net/base/address_list.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "url/gurl.h"
+
+namespace content {
+
+class BrowserContext;
+class PrefetchCanaryChecker;
+
+// This class handles all probing and canary checks for the prefetch proxy
+// feature. Calling code should use |ShouldProbeOrigins| to determine if a probe
+// is needed before using prefetched resources and if so, call |Probe|. See
+// http://crbug.com/1109992 for more details.
+class CONTENT_EXPORT PrefetchOriginProber {
+ public:
+  explicit PrefetchOriginProber(BrowserContext* browser_context,
+                                const GURL& dns_canary_check_url,
+                                const GURL& tls_canary_check_url);
+  virtual ~PrefetchOriginProber();
+
+  PrefetchOriginProber(const PrefetchOriginProber&) = delete;
+  PrefetchOriginProber& operator=(const PrefetchOriginProber) = delete;
+
+  // Run canary checks if they are not already cached.
+  void RunCanaryChecksIfNeeded() const;
+
+  // Returns true if a probe needs to be done before using prefetched resources.
+  virtual bool ShouldProbeOrigins() const;
+
+  // Starts a probe to |url| and calls |callback| with an
+  // |PrefetchProbeResult| to indicate success.
+  using OnProbeResultCallback = base::OnceCallback<void(PrefetchProbeResult)>;
+  virtual void Probe(const GURL& url, OnProbeResultCallback callback);
+
+ private:
+  void DNSProbe(const GURL& url, OnProbeResultCallback callback);
+  void TLSProbe(const GURL& url, OnProbeResultCallback callback);
+
+  // Does a DNS resolution for a DNS or TLS probe, passing all the arguments to
+  // |OnDNSResolved|.
+  void StartDNSResolution(const GURL& url,
+                          OnProbeResultCallback callback,
+                          bool also_do_tls_connect);
+
+  // If the DNS resolution was successful, this will either run |callback| for a
+  // DNS probe, or start the TLS socket for a TLS probe. This is determined by
+  // |also_do_tls_connect|. If the DNS resolution failed, |callback| is run with
+  // failure.
+  void OnDNSResolved(
+      const GURL& url,
+      OnProbeResultCallback callback,
+      bool also_do_tls_connect,
+      int net_error,
+      const absl::optional<net::AddressList>& resolved_addresses);
+
+  // Both DNS and TLS probes need to resolve DNS. This starts the TLS probe with
+  // the |addresses| from the DNS resolution.
+  void DoTLSProbeAfterDNSResolution(const GURL& url,
+                                    OnProbeResultCallback callback,
+                                    const net::AddressList& addresses);
+
+  // The current browser context, not owned.
+  raw_ptr<BrowserContext> browser_context_;
+
+  // The TLS canary url checker.
+  std::unique_ptr<PrefetchCanaryChecker> tls_canary_checker_;
+
+  // The DNS canary url checker.
+  std::unique_ptr<PrefetchCanaryChecker> dns_canary_checker_;
+
+  base::WeakPtrFactory<PrefetchOriginProber> weak_factory_{this};
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_ORIGIN_PROBER_H_
diff --git a/content/browser/preloading/prefetch/prefetch_params.cc b/content/browser/preloading/prefetch/prefetch_params.cc
index ee5f573..f1c543b 100644
--- a/content/browser/preloading/prefetch/prefetch_params.cc
+++ b/content/browser/preloading/prefetch/prefetch_params.cc
@@ -146,4 +146,55 @@
       features::kPrefetchUseContentRefactor, "cacheable_duration", 300));
 }
 
+bool PrefetchProbingEnabled() {
+  return base::GetFieldTrialParamByFeatureAsBool(
+      features::kPrefetchUseContentRefactor, "must_probe_origin", true);
+}
+
+bool PrefetchCanaryCheckEnabled() {
+  return base::GetFieldTrialParamByFeatureAsBool(
+      features::kPrefetchUseContentRefactor, "do_canary", true);
+  ;
+}
+
+bool PrefetchTLSCanaryCheckEnabled() {
+  return base::GetFieldTrialParamByFeatureAsBool(
+      features::kPrefetchUseContentRefactor, "do_tls_canary", false);
+  ;
+}
+
+GURL PrefetchTLSCanaryCheckURL(const GURL& default_tls_canary_check_url) {
+  GURL url(base::GetFieldTrialParamValueByFeature(
+      features::kPrefetchUseContentRefactor, "tls_canary_url"));
+  if (url.is_valid())
+    return url;
+
+  return default_tls_canary_check_url;
+}
+
+GURL PrefetchDNSCanaryCheckURL(const GURL& default_dns_canary_check_url) {
+  GURL url(base::GetFieldTrialParamValueByFeature(
+      features::kPrefetchUseContentRefactor, "dns_canary_url"));
+  if (url.is_valid())
+    return url;
+
+  return default_dns_canary_check_url;
+}
+
+base::TimeDelta PrefetchCanaryCheckCacheLifetime() {
+  return base::Hours(base::GetFieldTrialParamByFeatureAsInt(
+      features::kPrefetchUseContentRefactor, "canary_cache_hours", 24));
+}
+
+base::TimeDelta PrefetchCanaryCheckTimeout() {
+  return base::Milliseconds(base::GetFieldTrialParamByFeatureAsInt(
+      features::kPrefetchUseContentRefactor, "canary_check_timeout_ms",
+      5 * 1000 /* 5 seconds */));
+}
+
+int PrefetchCanaryCheckRetries() {
+  return base::GetFieldTrialParamByFeatureAsInt(
+      features::kPrefetchUseContentRefactor, "canary_check_retries", 1);
+}
+
 }  // namespace content
diff --git a/content/browser/preloading/prefetch/prefetch_params.h b/content/browser/preloading/prefetch/prefetch_params.h
index 1494bac1..f2306fb6 100644
--- a/content/browser/preloading/prefetch/prefetch_params.h
+++ b/content/browser/preloading/prefetch/prefetch_params.h
@@ -76,6 +76,33 @@
 // The maximum time a prefetched response is servable.
 CONTENT_EXPORT base::TimeDelta PrefetchCacheableDuration();
 
+// Whether probing must be done at all.
+bool PrefetchProbingEnabled();
+
+// Whether an ISP filtering canary check should be made on browser startup.
+bool PrefetchCanaryCheckEnabled();
+
+// Whether the TLS ISP filtering canary check should enabled. Only has effect if
+// canary checks are enabled (PrefetchProxyCanaryCheckEnabled is true). When
+// false, only the DNS canary check will be performed. When true, both the DNS
+// and TLS canary checks will be enabled.
+bool PrefetchTLSCanaryCheckEnabled();
+
+// The URL to use for the TLS canary check.
+GURL PrefetchTLSCanaryCheckURL(const GURL& default_tls_canary_check_url);
+
+// The URL to use for the DNS canary check.
+GURL PrefetchDNSCanaryCheckURL(const GURL& default_dns_canary_check_url);
+
+// How long a canary check can be cached for the same network.
+base::TimeDelta PrefetchCanaryCheckCacheLifetime();
+
+// The amount of time to allow before timing out a canary check.
+base::TimeDelta PrefetchCanaryCheckTimeout();
+
+// The number of retries to allow for canary checks.
+int PrefetchCanaryCheckRetries();
+
 }  // namespace content
 
 #endif  // CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_PARAMS_H_
diff --git a/content/browser/preloading/prefetch/prefetch_probe_result.cc b/content/browser/preloading/prefetch/prefetch_probe_result.cc
new file mode 100644
index 0000000..5fd23b7
--- /dev/null
+++ b/content/browser/preloading/prefetch/prefetch_probe_result.cc
@@ -0,0 +1,25 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/preloading/prefetch/prefetch_probe_result.h"
+
+#include "base/notreached.h"
+
+namespace content {
+
+bool PrefetchProbeResultIsSuccess(PrefetchProbeResult result) {
+  switch (result) {
+    case PrefetchProbeResult::kNoProbing:
+    case PrefetchProbeResult::kDNSProbeSuccess:
+    case PrefetchProbeResult::kTLSProbeSuccess:
+      return true;
+    case PrefetchProbeResult::kTLSProbeFailure:
+    case PrefetchProbeResult::kDNSProbeFailure:
+      return false;
+  }
+  NOTREACHED();
+  return false;
+}
+
+}  // namespace content
\ No newline at end of file
diff --git a/content/browser/preloading/prefetch/prefetch_probe_result.h b/content/browser/preloading/prefetch/prefetch_probe_result.h
new file mode 100644
index 0000000..b092ddb
--- /dev/null
+++ b/content/browser/preloading/prefetch/prefetch_probe_result.h
@@ -0,0 +1,24 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROBE_RESULT_H_
+#define CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROBE_RESULT_H_
+
+namespace content {
+
+// The result of an origin probe. See PrefetchOriginProber.
+enum class PrefetchProbeResult {
+  kNoProbing = 0,
+  kDNSProbeSuccess = 1,
+  kDNSProbeFailure = 2,
+  kTLSProbeSuccess = 3,
+  kTLSProbeFailure = 4,
+};
+
+// Returns true if the probe result is not a failure.
+bool PrefetchProbeResultIsSuccess(PrefetchProbeResult result);
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_PROBE_RESULT_H_
\ No newline at end of file
diff --git a/content/browser/preloading/prefetch/prefetch_service.cc b/content/browser/preloading/prefetch/prefetch_service.cc
index 007e78b..5cfac64 100644
--- a/content/browser/preloading/prefetch/prefetch_service.cc
+++ b/content/browser/preloading/prefetch/prefetch_service.cc
@@ -17,6 +17,7 @@
 #include "content/browser/preloading/prefetch/prefetch_document_manager.h"
 #include "content/browser/preloading/prefetch/prefetch_features.h"
 #include "content/browser/preloading/prefetch/prefetch_network_context.h"
+#include "content/browser/preloading/prefetch/prefetch_origin_prober.h"
 #include "content/browser/preloading/prefetch/prefetch_params.h"
 #include "content/browser/preloading/prefetch/prefetch_proxy_configurator.h"
 #include "content/browser/preloading/prefetch/prefetched_mainframe_response_container.h"
@@ -181,7 +182,14 @@
               PrefetchProxyHost(delegate_
                                     ? delegate_->GetDefaultPrefetchProxyHost()
                                     : GURL("")),
-              delegate_ ? delegate_->GetAPIKey() : "")) {}
+              delegate_ ? delegate_->GetAPIKey() : "")),
+      origin_prober_(std::make_unique<PrefetchOriginProber>(
+          browser_context_,
+          PrefetchDNSCanaryCheckURL(
+              delegate_ ? delegate_->GetDefaultDNSCanaryCheckURL() : GURL("")),
+          PrefetchTLSCanaryCheckURL(
+              delegate_ ? delegate_->GetDefaultTLSCanaryCheckURL()
+                        : GURL("")))) {}
 
 PrefetchService::~PrefetchService() = default;
 
@@ -633,7 +641,22 @@
   prefetch_container->TakeURLLoader(std::move(loader));
   num_active_prefetches_++;
 
-  // TODO(https://crbug.com/1299059): Run canary checks if needed.
+  PrefetchDocumentManager* prefetch_document_manager =
+      prefetch_container->GetPrefetchDocumentManager();
+  if (!prefetch_container->IsDecoy() &&
+      (!prefetch_document_manager ||
+       !prefetch_document_manager->HaveCanaryChecksStarted())) {
+    // Make sure canary checks have run so we know the result by the time we
+    // want to use the prefetch. Checking the canary cache can be a slow and
+    // blocking operation (see crbug.com/1266018), so we only do this for the
+    // first non-decoy prefetch we make on the page.
+    // TODO(crbug.com/1266018): once this bug is fixed, fire off canary check
+    // regardless of whether the request is a decoy or not.
+    origin_prober_->RunCanaryChecksIfNeeded();
+
+    if (prefetch_document_manager)
+      prefetch_document_manager->OnCanaryChecksStarted();
+  }
 
   // Start a spare renderer now so that it will be ready by the time it is
   // useful to have.
diff --git a/content/browser/preloading/prefetch/prefetch_service.h b/content/browser/preloading/prefetch/prefetch_service.h
index 38476630..1eb8366 100644
--- a/content/browser/preloading/prefetch/prefetch_service.h
+++ b/content/browser/preloading/prefetch/prefetch_service.h
@@ -34,6 +34,7 @@
 namespace content {
 
 class BrowserContext;
+class PrefetchOriginProber;
 class PrefetchProxyConfigurator;
 class PrefetchServiceDelegate;
 class ServiceWorkerContext;
@@ -66,6 +67,10 @@
     return prefetch_proxy_configurator_.get();
   }
 
+  PrefetchOriginProber* GetPrefetchOriginProber() const {
+    return origin_prober_.get();
+  }
+
   virtual void PrefetchUrl(base::WeakPtr<PrefetchContainer> prefetch_container);
 
   // Called when a navigation to the URL associated with |prefetch_container| is
@@ -200,6 +205,9 @@
   // that require the proxy.
   std::unique_ptr<PrefetchProxyConfigurator> prefetch_proxy_configurator_;
 
+  // The origin prober class which manages all logic for origin probing.
+  std::unique_ptr<PrefetchOriginProber> origin_prober_;
+
   // All prefetches associated with |this| regardless of ownership.
   std::map<PrefetchContainer::Key, base::WeakPtr<PrefetchContainer>>
       all_prefetches_;
diff --git a/content/browser/preloading/prefetch/prefetch_service_unittest.cc b/content/browser/preloading/prefetch/prefetch_service_unittest.cc
index 3cb098f..2cfdc9a 100644
--- a/content/browser/preloading/prefetch/prefetch_service_unittest.cc
+++ b/content/browser/preloading/prefetch/prefetch_service_unittest.cc
@@ -83,6 +83,8 @@
   MOCK_METHOD(std::string, GetAcceptLanguageHeader, (), (override));
   MOCK_METHOD(GURL, GetDefaultPrefetchProxyHost, (), (override));
   MOCK_METHOD(std::string, GetAPIKey, (), (override));
+  MOCK_METHOD(GURL, GetDefaultDNSCanaryCheckURL, (), (override));
+  MOCK_METHOD(GURL, GetDefaultTLSCanaryCheckURL, (), (override));
   MOCK_METHOD(void,
               ReportOriginRetryAfter,
               (const GURL&, base::TimeDelta),
diff --git a/content/browser/preloading/prefetch/prefetch_url_loader_interceptor.cc b/content/browser/preloading/prefetch/prefetch_url_loader_interceptor.cc
index 8f49604..7336de0 100644
--- a/content/browser/preloading/prefetch/prefetch_url_loader_interceptor.cc
+++ b/content/browser/preloading/prefetch/prefetch_url_loader_interceptor.cc
@@ -15,14 +15,16 @@
 #include "content/browser/preloading/prefetch/prefetch_container.h"
 #include "content/browser/preloading/prefetch/prefetch_features.h"
 #include "content/browser/preloading/prefetch/prefetch_from_string_url_loader.h"
+#include "content/browser/preloading/prefetch/prefetch_origin_prober.h"
 #include "content/browser/preloading/prefetch/prefetch_params.h"
+#include "content/browser/preloading/prefetch/prefetch_probe_result.h"
 #include "content/browser/preloading/prefetch/prefetch_service.h"
 #include "content/browser/preloading/prefetch/prefetched_mainframe_response_container.h"
 #include "content/browser/renderer_host/frame_tree_node.h"
-#include "content/public/browser/browser_context.h"
 #include "content/public/browser/web_contents.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "url/gurl.h"
+#include "url/scheme_host_port.h"
 
 namespace content {
 namespace {
@@ -86,7 +88,25 @@
     return;
   }
 
-  // TODO(crbug.com/1299059): Check if we need to probe the origin
+  PrefetchOriginProber* origin_prober = GetPrefetchOriginProber();
+  if (!origin_prober) {
+    DoNotInterceptNavigation();
+    return;
+  }
+  if (origin_prober->ShouldProbeOrigins()) {
+    base::OnceClosure on_success_callback =
+        base::BindOnce(&PrefetchURLLoaderInterceptor::
+                           EnsureCookiesCopiedAndInterceptPrefetchedNavigation,
+                       weak_factory_.GetWeakPtr(), tenative_resource_request,
+                       prefetch_container);
+
+    origin_prober->Probe(
+        url::SchemeHostPort(url_).GetURL(),
+        base::BindOnce(&PrefetchURLLoaderInterceptor::OnProbeComplete,
+                       weak_factory_.GetWeakPtr(), prefetch_container,
+                       std::move(on_success_callback)));
+    return;
+  }
 
   EnsureCookiesCopiedAndInterceptPrefetchedNavigation(tenative_resource_request,
                                                       prefetch_container);
@@ -102,6 +122,33 @@
   return prefetch_service->GetPrefetchToServe(url);
 }
 
+PrefetchOriginProber* PrefetchURLLoaderInterceptor::GetPrefetchOriginProber()
+    const {
+  PrefetchService* prefetch_service =
+      PrefetchServiceFromFrameTreeNodeId(frame_tree_node_id_);
+  if (!prefetch_service)
+    return nullptr;
+
+  return prefetch_service->GetPrefetchOriginProber();
+}
+
+void PrefetchURLLoaderInterceptor::OnProbeComplete(
+    base::WeakPtr<PrefetchContainer> prefetch_container,
+    base::OnceClosure on_success_callback,
+    PrefetchProbeResult result) {
+  // TODO(https://crbug.com/1299059): Record metrics on the result of the probe.
+
+  if (PrefetchProbeResultIsSuccess(result)) {
+    std::move(on_success_callback).Run();
+    return;
+  }
+
+  if (prefetch_container)
+    prefetch_container->SetPrefetchStatus(
+        PrefetchStatus::kPrefetchNotUsedProbeFailed);
+  DoNotInterceptNavigation();
+}
+
 void PrefetchURLLoaderInterceptor::
     EnsureCookiesCopiedAndInterceptPrefetchedNavigation(
         const network::ResourceRequest& tenative_resource_request,
diff --git a/content/browser/preloading/prefetch/prefetch_url_loader_interceptor.h b/content/browser/preloading/prefetch/prefetch_url_loader_interceptor.h
index 050aea40..34a85261 100644
--- a/content/browser/preloading/prefetch/prefetch_url_loader_interceptor.h
+++ b/content/browser/preloading/prefetch/prefetch_url_loader_interceptor.h
@@ -11,6 +11,7 @@
 #include "base/sequence_checker.h"
 #include "base/time/time.h"
 #include "content/browser/loader/navigation_loader_interceptor.h"
+#include "content/browser/preloading/prefetch/prefetch_probe_result.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/global_routing_id.h"
 #include "services/network/public/cpp/resource_request.h"
@@ -20,6 +21,7 @@
 
 class BrowserContext;
 class PrefetchContainer;
+class PrefetchOriginProber;
 
 // Intercepts navigations that can use prefetched resources.
 class CONTENT_EXPORT PrefetchURLLoaderInterceptor
@@ -43,9 +45,16 @@
       NavigationLoaderInterceptor::FallbackCallback fallback_callback) override;
 
  private:
-  // Gets the prefetch associated with |url| form |PrefetchService|.
+  // Gets the prefetch associated with |url| from |PrefetchService|.
   virtual base::WeakPtr<PrefetchContainer> GetPrefetch(const GURL& url) const;
 
+  // Gets the relevant |GetPrefetchOriginProber| from |PrefetchService|.
+  virtual PrefetchOriginProber* GetPrefetchOriginProber() const;
+
+  void OnProbeComplete(base::WeakPtr<PrefetchContainer> prefetch_container,
+                       base::OnceClosure on_success_callback,
+                       PrefetchProbeResult result);
+
   // Ensures that the cookies for prefetch are copied from its isolated network
   // context to the default network context before calling
   // |InterceptPrefetchedNavigation|.
diff --git a/content/browser/preloading/prefetch/prefetch_url_loader_interceptor_unittest.cc b/content/browser/preloading/prefetch/prefetch_url_loader_interceptor_unittest.cc
index aecb6b7..a77c1ca 100644
--- a/content/browser/preloading/prefetch/prefetch_url_loader_interceptor_unittest.cc
+++ b/content/browser/preloading/prefetch/prefetch_url_loader_interceptor_unittest.cc
@@ -13,7 +13,9 @@
 #include "base/test/scoped_feature_list.h"
 #include "content/browser/preloading/prefetch/prefetch_container.h"
 #include "content/browser/preloading/prefetch/prefetch_features.h"
+#include "content/browser/preloading/prefetch/prefetch_origin_prober.h"
 #include "content/browser/preloading/prefetch/prefetch_params.h"
+#include "content/browser/preloading/prefetch/prefetch_probe_result.h"
 #include "content/browser/preloading/prefetch/prefetch_type.h"
 #include "content/browser/preloading/prefetch/prefetched_mainframe_response_container.h"
 #include "content/public/browser/browser_context.h"
@@ -43,6 +45,46 @@
 #define DISABLE_ASAN(x) x
 #endif
 
+const char kDNSCanaryCheckAddress[] = "http://testdnscanarycheck.com";
+const char kTLSCanaryCheckAddress[] = "http://testtlscanarycheck.com";
+
+class TestPrefetchOriginProber : public PrefetchOriginProber {
+ public:
+  TestPrefetchOriginProber(BrowserContext* browser_context,
+                           bool should_probe_origins_response,
+                           const GURL& probe_url,
+                           PrefetchProbeResult probe_result)
+      : PrefetchOriginProber(browser_context,
+                             GURL(kDNSCanaryCheckAddress),
+                             GURL(kTLSCanaryCheckAddress)),
+        should_probe_origins_response_(should_probe_origins_response),
+        probe_url_(probe_url),
+        probe_result_(probe_result) {}
+
+  bool ShouldProbeOrigins() const override {
+    return should_probe_origins_response_;
+  }
+
+  void Probe(const GURL& url, OnProbeResultCallback callback) override {
+    EXPECT_TRUE(should_probe_origins_response_);
+    EXPECT_EQ(url, probe_url_);
+
+    num_probes_++;
+
+    std::move(callback).Run(probe_result_);
+  }
+
+  int num_probes() const { return num_probes_; }
+
+ private:
+  bool should_probe_origins_response_;
+
+  GURL probe_url_;
+  PrefetchProbeResult probe_result_;
+
+  int num_probes_{0};
+};
+
 class TestPrefetchURLLoaderInterceptor : public PrefetchURLLoaderInterceptor {
  public:
   explicit TestPrefetchURLLoaderInterceptor(int frame_tree_node_id)
@@ -53,6 +95,13 @@
     prefetches_[prefetch_container->GetURL()] = prefetch_container;
   }
 
+  void TakePrefetchOriginProber(
+      std::unique_ptr<TestPrefetchOriginProber> origin_prober) {
+    origin_prober_ = std::move(origin_prober);
+  }
+
+  int num_probes() const { return origin_prober_->num_probes(); }
+
  private:
   base::WeakPtr<PrefetchContainer> GetPrefetch(const GURL& url) const override {
     const auto& iter = prefetches_.find(url);
@@ -61,7 +110,13 @@
     return iter->second;
   }
 
+  PrefetchOriginProber* GetPrefetchOriginProber() const override {
+    EXPECT_TRUE(origin_prober_);
+    return origin_prober_.get();
+  }
+
   std::map<GURL, base::WeakPtr<PrefetchContainer>> prefetches_;
+  std::unique_ptr<TestPrefetchOriginProber> origin_prober_;
 };
 
 class PrefetchURLLoaderInterceptorTest : public RenderViewHostTestHarness {
@@ -184,6 +239,11 @@
 
   interceptor()->AddPrefetch(prefetch_container->GetWeakPtr());
 
+  interceptor()->TakePrefetchOriginProber(
+      std::make_unique<TestPrefetchOriginProber>(
+          browser_context(), /*should_probe_origins_response=*/false, kTestUrl,
+          PrefetchProbeResult::kNoProbing));
+
   network::ResourceRequest request;
   request.url = kTestUrl;
   request.resource_type =
@@ -203,6 +263,8 @@
   histogram_tester().ExpectUniqueTimeSample(
       "PrefetchProxy.AfterClick.Mainframe.CookieWaitTime", base::TimeDelta(),
       1);
+
+  EXPECT_EQ(interceptor()->num_probes(), 0);
 }
 
 TEST_F(PrefetchURLLoaderInterceptorTest,
@@ -228,6 +290,11 @@
 
   interceptor()->AddPrefetch(prefetch_container->GetWeakPtr());
 
+  interceptor()->TakePrefetchOriginProber(
+      std::make_unique<TestPrefetchOriginProber>(
+          browser_context(), /*should_probe_origins_response=*/false, kTestUrl,
+          PrefetchProbeResult::kNoProbing));
+
   network::ResourceRequest request;
   request.url = kTestUrl;
   request.resource_type =
@@ -255,6 +322,8 @@
   histogram_tester().ExpectUniqueTimeSample(
       "PrefetchProxy.AfterClick.Mainframe.CookieWaitTime",
       base::Milliseconds(20), 1);
+
+  EXPECT_EQ(interceptor()->num_probes(), 0);
 }
 
 TEST_F(PrefetchURLLoaderInterceptorTest,
@@ -277,6 +346,11 @@
 
   interceptor()->AddPrefetch(prefetch_container->GetWeakPtr());
 
+  interceptor()->TakePrefetchOriginProber(
+      std::make_unique<TestPrefetchOriginProber>(
+          browser_context(), /*should_probe_origins_response=*/false, kTestUrl,
+          PrefetchProbeResult::kNoProbing));
+
   network::ResourceRequest request;
   request.url = kTestUrl;
   request.resource_type =
@@ -296,12 +370,19 @@
   histogram_tester().ExpectUniqueTimeSample(
       "PrefetchProxy.AfterClick.Mainframe.CookieWaitTime", base::TimeDelta(),
       1);
+
+  EXPECT_EQ(interceptor()->num_probes(), 0);
 }
 
 TEST_F(PrefetchURLLoaderInterceptorTest,
        DISABLE_ASAN(DoNotInterceptNavigationNoPrefetch)) {
   const GURL kTestUrl("https://example.com");
 
+  interceptor()->TakePrefetchOriginProber(
+      std::make_unique<TestPrefetchOriginProber>(
+          browser_context(), /*should_probe_origins_response=*/false, kTestUrl,
+          PrefetchProbeResult::kNoProbing));
+
   // With no prefetch set, the navigation shouldn't be intercepted.
 
   network::ResourceRequest request;
@@ -322,6 +403,8 @@
 
   histogram_tester().ExpectTotalCount(
       "PrefetchProxy.AfterClick.Mainframe.CookieWaitTime", 0);
+
+  EXPECT_EQ(interceptor()->num_probes(), 0);
 }
 
 TEST_F(PrefetchURLLoaderInterceptorTest,
@@ -338,6 +421,11 @@
 
   interceptor()->AddPrefetch(prefetch_container->GetWeakPtr());
 
+  interceptor()->TakePrefetchOriginProber(
+      std::make_unique<TestPrefetchOriginProber>(
+          browser_context(), /*should_probe_origins_response=*/false, kTestUrl,
+          PrefetchProbeResult::kNoProbing));
+
   // Set up ResourceRequest
   network::ResourceRequest request;
   request.url = kTestUrl;
@@ -358,6 +446,8 @@
 
   histogram_tester().ExpectTotalCount(
       "PrefetchProxy.AfterClick.Mainframe.CookieWaitTime", 0);
+
+  EXPECT_EQ(interceptor()->num_probes(), 0);
 }
 
 TEST_F(PrefetchURLLoaderInterceptorTest,
@@ -381,6 +471,11 @@
 
   interceptor()->AddPrefetch(prefetch_container->GetWeakPtr());
 
+  interceptor()->TakePrefetchOriginProber(
+      std::make_unique<TestPrefetchOriginProber>(
+          browser_context(), /*should_probe_origins_response=*/false, kTestUrl,
+          PrefetchProbeResult::kNoProbing));
+
   network::ResourceRequest request;
   request.url = kTestUrl;
   request.resource_type =
@@ -399,6 +494,8 @@
 
   histogram_tester().ExpectTotalCount(
       "PrefetchProxy.AfterClick.Mainframe.CookieWaitTime", 0);
+
+  EXPECT_EQ(interceptor()->num_probes(), 0);
 }
 
 TEST_F(PrefetchURLLoaderInterceptorTest,
@@ -424,6 +521,11 @@
 
   interceptor()->AddPrefetch(prefetch_container->GetWeakPtr());
 
+  interceptor()->TakePrefetchOriginProber(
+      std::make_unique<TestPrefetchOriginProber>(
+          browser_context(), /*should_probe_origins_response=*/false, kTestUrl,
+          PrefetchProbeResult::kNoProbing));
+
   network::ResourceRequest request;
   request.url = kTestUrl;
   request.resource_type =
@@ -442,6 +544,100 @@
 
   histogram_tester().ExpectTotalCount(
       "PrefetchProxy.AfterClick.Mainframe.CookieWaitTime", 0);
+
+  EXPECT_EQ(interceptor()->num_probes(), 0);
+}
+
+TEST_F(PrefetchURLLoaderInterceptorTest, DISABLE_ASAN(ProbeSuccess)) {
+  const GURL kTestUrl("https://example.com");
+
+  std::unique_ptr<PrefetchContainer> prefetch_container =
+      std::make_unique<PrefetchContainer>(
+          main_rfh()->GetGlobalId(), kTestUrl,
+          PrefetchType(/*use_isolated_network_context=*/true,
+                       /*use_prefetch_proxy=*/true),
+          nullptr);
+
+  prefetch_container->TakePrefetchedResponse(
+      std::make_unique<PrefetchedMainframeResponseContainer>(
+          net::IsolationInfo(), network::mojom::URLResponseHead::New(),
+          std::make_unique<std::string>("test body")));
+
+  prefetch_container->OnIsolatedCookieCopyStart();
+  prefetch_container->OnIsolatedCookieCopyComplete();
+
+  interceptor()->AddPrefetch(prefetch_container->GetWeakPtr());
+
+  // Set up |TestPrefetchOriginProber| to require a probe and simulate a
+  // successful probe.
+  interceptor()->TakePrefetchOriginProber(
+      std::make_unique<TestPrefetchOriginProber>(
+          browser_context(), /*should_probe_origins_response=*/true, kTestUrl,
+          PrefetchProbeResult::kDNSProbeSuccess));
+
+  network::ResourceRequest request;
+  request.url = kTestUrl;
+  request.resource_type =
+      static_cast<int>(blink::mojom::ResourceType::kMainFrame);
+  request.method = "GET";
+
+  interceptor()->MaybeCreateLoader(
+      request, browser_context(),
+      base::BindOnce(&PrefetchURLLoaderInterceptorTest::LoaderCallback,
+                     base::Unretained(this)),
+      base::BindOnce([](bool) { NOTREACHED(); }));
+  WaitForCallback();
+
+  EXPECT_TRUE(was_intercepted().has_value());
+  EXPECT_TRUE(was_intercepted().value());
+
+  EXPECT_EQ(interceptor()->num_probes(), 1);
+}
+
+TEST_F(PrefetchURLLoaderInterceptorTest, DISABLE_ASAN(ProbeFailure)) {
+  const GURL kTestUrl("https://example.com");
+
+  std::unique_ptr<PrefetchContainer> prefetch_container =
+      std::make_unique<PrefetchContainer>(
+          main_rfh()->GetGlobalId(), kTestUrl,
+          PrefetchType(/*use_isolated_network_context=*/true,
+                       /*use_prefetch_proxy=*/true),
+          nullptr);
+
+  prefetch_container->TakePrefetchedResponse(
+      std::make_unique<PrefetchedMainframeResponseContainer>(
+          net::IsolationInfo(), network::mojom::URLResponseHead::New(),
+          std::make_unique<std::string>("test body")));
+
+  prefetch_container->OnIsolatedCookieCopyStart();
+  prefetch_container->OnIsolatedCookieCopyComplete();
+
+  interceptor()->AddPrefetch(prefetch_container->GetWeakPtr());
+
+  // Set up |TestPrefetchOriginProber| to require a probe and simulate a
+  // successful probe.
+  interceptor()->TakePrefetchOriginProber(
+      std::make_unique<TestPrefetchOriginProber>(
+          browser_context(), /*should_probe_origins_response=*/true, kTestUrl,
+          PrefetchProbeResult::kDNSProbeFailure));
+
+  network::ResourceRequest request;
+  request.url = kTestUrl;
+  request.resource_type =
+      static_cast<int>(blink::mojom::ResourceType::kMainFrame);
+  request.method = "GET";
+
+  interceptor()->MaybeCreateLoader(
+      request, browser_context(),
+      base::BindOnce(&PrefetchURLLoaderInterceptorTest::LoaderCallback,
+                     base::Unretained(this)),
+      base::BindOnce([](bool) { NOTREACHED(); }));
+  WaitForCallback();
+
+  EXPECT_TRUE(was_intercepted().has_value());
+  EXPECT_FALSE(was_intercepted().value());
+
+  EXPECT_EQ(interceptor()->num_probes(), 1);
 }
 
 }  // namespace
diff --git a/content/browser/renderer_host/input/input_router_impl.cc b/content/browser/renderer_host/input/input_router_impl.cc
index 2ab5afb..0f301a3 100644
--- a/content/browser/renderer_host/input/input_router_impl.cc
+++ b/content/browser/renderer_host/input/input_router_impl.cc
@@ -569,11 +569,10 @@
                 info->set_trace_id(latency_info.trace_id());
                 info->set_step(ChromeLatencyInfo::STEP_SEND_INPUT_EVENT_UI);
 
-                tracing::FillFlowEvent(
-                    ctx,
-                    perfetto::protos::pbzero::
-                        TrackEvent_LegacyEvent_FlowDirection_FLOW_INOUT,
-                    latency_info.trace_id());
+                tracing::FillFlowEvent(ctx,
+                                       perfetto::protos::pbzero::TrackEvent::
+                                           LegacyEvent::FLOW_INOUT,
+                                       latency_info.trace_id());
               });
 
   output_stream_validator_.Validate(input_event);
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
index bd69b24..be7db448 100644
--- a/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -2678,16 +2678,17 @@
   // attach.
   g_media_stream_manager_tls_ptr.Pointer()->Set(this);
 
-  audio_input_device_manager_ = new AudioInputDeviceManager(audio_system_);
+  audio_input_device_manager_ =
+      base::MakeRefCounted<AudioInputDeviceManager>(audio_system_);
   audio_input_device_manager_->RegisterListener(this);
 
   // We want to be notified of IO message loop destruction to delete the thread
   // and the device managers.
   base::CurrentThread::Get()->AddDestructionObserver(this);
 
-  video_capture_manager_ =
-      new VideoCaptureManager(std::move(video_capture_provider),
-                              base::BindRepeating(&SendVideoCaptureLogMessage));
+  video_capture_manager_ = base::MakeRefCounted<VideoCaptureManager>(
+      std::move(video_capture_provider),
+      base::BindRepeating(&SendVideoCaptureLogMessage));
   video_capture_manager_->RegisterListener(this);
 
   // Using base::Unretained(this) is safe because |this| owns and therefore
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index a3d5e5b..f4d1b23 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -1923,16 +1923,18 @@
     const GlobalRenderFrameHostId& render_frame_host_id,
     mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  RenderFrameHostImpl* rfh = RenderFrameHostImpl::FromID(render_frame_host_id);
   storage_partition_impl_->GetBucketManager()->BindReceiverForRenderFrame(
-      render_frame_host_id, std::move(receiver), mojo::GetBadMessageCallback());
+      render_frame_host_id, rfh->storage_key(), std::move(receiver),
+      mojo::GetBadMessageCallback());
 }
 
 void RenderProcessHostImpl::BindBucketManagerHostForWorker(
-    const url::Origin& origin,
+    const blink::StorageKey& storage_key,
     mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   storage_partition_impl_->GetBucketManager()->BindReceiverForWorker(
-      GetID(), origin, std::move(receiver), mojo::GetBadMessageCallback());
+      GetID(), storage_key, std::move(receiver), mojo::GetBadMessageCallback());
 }
 
 void RenderProcessHostImpl::ForceCrash() {
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index 8ef17937..4de7d1ea 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -298,7 +298,7 @@
       const GlobalRenderFrameHostId& render_frame_host_id,
       mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver) override;
   void BindBucketManagerHostForWorker(
-      const url::Origin& origin,
+      const blink::StorageKey& storage_key,
       mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver) override;
   void ForceCrash() override;
   std::string GetInfoForBrowserContextDestructionCrashReporting() override;
diff --git a/content/browser/service_worker/embedded_worker_status.h b/content/browser/service_worker/embedded_worker_status.h
index f6bc13a..7bc861f5 100644
--- a/content/browser/service_worker/embedded_worker_status.h
+++ b/content/browser/service_worker/embedded_worker_status.h
@@ -7,11 +7,14 @@
 
 namespace content {
 
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
 enum class EmbeddedWorkerStatus {
-  STOPPED,
-  STARTING,
-  RUNNING,
-  STOPPING,
+  STOPPED = 0,
+  STARTING = 1,
+  RUNNING = 2,
+  STOPPING = 3,
+  kMaxValue = STOPPING,
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_metrics.cc b/content/browser/service_worker/service_worker_metrics.cc
index 985cc53..754748e 100644
--- a/content/browser/service_worker/service_worker_metrics.cc
+++ b/content/browser/service_worker/service_worker_metrics.cc
@@ -237,6 +237,19 @@
   }
 }
 
+void ServiceWorkerMetrics::RecordRunAfterStartWorkerStatus(
+    EmbeddedWorkerStatus running_status,
+    EventType purpose) {
+  UMA_HISTOGRAM_ENUMERATION("ServiceWorker.RunAfterStartWorker.RunningStatus",
+                            running_status);
+  base::UmaHistogramEnumeration(
+      base::StrCat({"ServiceWorker.RunAfterStartWorker.RunningStatusByPurpose",
+                    EventTypeToSuffix(purpose)}),
+      running_status);
+  UMA_HISTOGRAM_ENUMERATION("ServiceWorker.RunAfterStartWorker.Purpose",
+                            purpose);
+}
+
 void ServiceWorkerMetrics::RecordStartWorkerTime(base::TimeDelta time,
                                                  bool is_installed,
                                                  StartSituation start_situation,
diff --git a/content/browser/service_worker/service_worker_metrics.h b/content/browser/service_worker/service_worker_metrics.h
index a6b3bf7..6ecccade 100644
--- a/content/browser/service_worker/service_worker_metrics.h
+++ b/content/browser/service_worker/service_worker_metrics.h
@@ -8,6 +8,7 @@
 #include <stddef.h>
 
 #include "base/time/time.h"
+#include "content/browser/service_worker/embedded_worker_status.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/service_worker_context.h"
 #include "third_party/blink/public/common/service_worker/service_worker_status_code.h"
@@ -152,6 +153,12 @@
       blink::ServiceWorkerStatusCode status,
       EventType purpose);
 
+  // Records the running status of the worker to receive a task.
+  // Usually recorded for the fetch handler.
+  static void RecordRunAfterStartWorkerStatus(
+      EmbeddedWorkerStatus running_status,
+      EventType purpose);
+
   // Records the time taken to successfully start a worker. |is_installed|
   // indicates whether the version has been installed.
   //
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index 707e644a..57398a2c 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -756,6 +756,8 @@
 void ServiceWorkerVersion::RunAfterStartWorker(
     ServiceWorkerMetrics::EventType purpose,
     StatusCallback callback) {
+  ServiceWorkerMetrics::RecordRunAfterStartWorkerStatus(running_status(),
+                                                        purpose);
   if (running_status() == EmbeddedWorkerStatus::RUNNING) {
     DCHECK(start_callbacks_.empty());
     std::move(callback).Run(blink::ServiceWorkerStatusCode::kOk);
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index 0c51867..8b31164c 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -1309,7 +1309,7 @@
   // behavior when restoring the state fails.
   cookie_store_manager_->LoadAllSubscriptions(base::DoNothing());
 
-  bucket_manager_ = std::make_unique<BucketManager>(quota_manager_proxy);
+  bucket_manager_ = std::make_unique<BucketManager>(this);
 
   // The Conversion Measurement API is not available in Incognito mode.
   if (!is_in_memory() &&
@@ -1481,6 +1481,11 @@
   return quota_manager_.get();
 }
 
+storage::QuotaManagerProxy* StoragePartitionImpl::GetQuotaManagerProxy() {
+  DCHECK(initialized_);
+  return quota_manager_->proxy();
+}
+
 BackgroundSyncContextImpl* StoragePartitionImpl::GetBackgroundSyncContext() {
   DCHECK(initialized_);
   return background_sync_context_.get();
diff --git a/content/browser/storage_partition_impl.h b/content/browser/storage_partition_impl.h
index 34fd7b9..776c64a0 100644
--- a/content/browser/storage_partition_impl.h
+++ b/content/browser/storage_partition_impl.h
@@ -422,6 +422,8 @@
       const std::string& namespace_id,
       mojo::PendingReceiver<blink::mojom::StorageArea> receiver);
 
+  storage::QuotaManagerProxy* GetQuotaManagerProxy();
+
   class URLLoaderNetworkContext {
    public:
     enum class Type {
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 9e178542..1a31b155 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -214,6 +214,8 @@
     {wf::EnableDevicePosture, features::kDevicePosture},
     {wf::EnableDigitalGoodsAPI, features::kDigitalGoodsApi,
      kSetOnlyIfOverridden},
+    {wf::EnableDocumentPictureInPictureAPI,
+     features::kDocumentPictureInPictureAPI},
     {wf::EnableDocumentPolicy, features::kDocumentPolicy},
     {wf::EnableDocumentPolicyNegotiation, features::kDocumentPolicyNegotiation},
     {wf::EnableFedCm, features::kFedCm, kSetOnlyIfOverridden},
@@ -255,8 +257,6 @@
     {wf::EnablePercentBasedScrolling, features::kWindowsScrollingPersonality},
     {wf::EnablePeriodicBackgroundSync, features::kPeriodicBackgroundSync},
     {wf::EnablePictureInPicture, media::kPictureInPicture},
-    {wf::EnablePictureInPictureV2, features::kPictureInPictureV2,
-     kSetOnlyIfOverridden},
     {wf::EnablePointerLockOptions, features::kPointerLockOptions},
     {wf::EnablePortals, blink::features::kPortals, kSetOnlyIfOverridden},
     {wf::EnablePrerender2, blink::features::kPrerender2},
@@ -382,6 +382,10 @@
           {"FirstPartySets", features::kFirstPartySets},
           {"QuickIntensiveWakeUpThrottlingAfterLoading",
            blink::features::kQuickIntensiveWakeUpThrottlingAfterLoading},
+          {"ReduceUserAgentMinorVersion",
+           blink::features::kReduceUserAgentMinorVersion},
+          {"ReduceUserAgentPlatformOsCpu",
+           blink::features::kReduceUserAgentPlatformOsCpu},
           {"SanitizerAPI", blink::features::kSanitizerAPI},
           {"SanitizerAPIv0", blink::features::kSanitizerAPIv0},
           {"ScrollUpdateOptimizations",
diff --git a/content/public/browser/prefetch_service_delegate.h b/content/public/browser/prefetch_service_delegate.h
index 8f4618a..5a9056ae 100644
--- a/content/public/browser/prefetch_service_delegate.h
+++ b/content/public/browser/prefetch_service_delegate.h
@@ -36,6 +36,10 @@
   // Gets API key for making prefetching requests.
   virtual std::string GetAPIKey() = 0;
 
+  // Gets the default URLs used in the DNS and TLS canary checks.
+  virtual GURL GetDefaultDNSCanaryCheckURL() = 0;
+  virtual GURL GetDefaultTLSCanaryCheckURL() = 0;
+
   // Reports that a 503 response with a "Retry-After" header was received from
   // |url|. Indicates that we shouldn't send new prefetch requests to that
   // origin for |retry_after| amount of time.
@@ -64,4 +68,4 @@
 
 }  // namespace content
 
-#endif  // CONTENT_PUBLIC_BROWSER_PREFETCH_SERVICE_DELEGATE_H_
\ No newline at end of file
+#endif  // CONTENT_PUBLIC_BROWSER_PREFETCH_SERVICE_DELEGATE_H_
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index 99429f4..bd23b15 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -583,7 +583,7 @@
       const GlobalRenderFrameHostId& render_frame_host_id,
       mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver) = 0;
   virtual void BindBucketManagerHostForWorker(
-      const url::Origin& origin,
+      const blink::StorageKey& storage_key,
       mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver) = 0;
   virtual void BindRestrictedCookieManagerForServiceWorker(
       const blink::StorageKey& storage_key,
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index c1be9d97..1ad0b4b 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -664,14 +664,14 @@
 const base::Feature kPepperCrossOriginRedirectRestriction{
     "PepperCrossOriginRedirectRestriction", base::FEATURE_ENABLED_BY_DEFAULT};
 
-// A browser-side equivalent of the Blink feature "PictureInPictureV2". This is
-// used for sanity checks to ensure that the feature can't be enabled by a
-// compromised renderer despite the Blink flag not being enabled.
+// A browser-side equivalent of the Blink feature "DocumentPictureInPictureAPI".
+// This is used for sanity checks to ensure that the feature can't be enabled by
+// a compromised renderer despite the Blink flag not being enabled.
 //
 // Tracking bug: https://crbug.com/1269059
 // Removal bug (when no longer experimental): https://crbug.com/1285144
-const base::Feature kPictureInPictureV2{"PictureInPictureV2",
-                                        base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kDocumentPictureInPictureAPI{
+    "DocumentPictureInPictureAPI", base::FEATURE_DISABLED_BY_DEFAULT};
 
 // Enables process sharing for sites that do not require a dedicated process
 // by using a default SiteInstance. Default SiteInstances will only be used
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index e264a86a..50aaa30 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -184,7 +184,7 @@
 CONTENT_EXPORT extern const base::Feature kFeaturePolicyHeader;
 CONTENT_EXPORT extern const base::Feature kPepper3DImageChromium;
 CONTENT_EXPORT extern const base::Feature kPepperCrossOriginRedirectRestriction;
-CONTENT_EXPORT extern const base::Feature kPictureInPictureV2;
+CONTENT_EXPORT extern const base::Feature kDocumentPictureInPictureAPI;
 CONTENT_EXPORT extern const base::Feature kHighPriorityBeforeUnload;
 CONTENT_EXPORT extern const base::Feature kPreloadCookies;
 CONTENT_EXPORT extern const base::Feature kPrerender2Holdback;
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h
index 3d96bf4..d253b74 100644
--- a/content/public/test/mock_render_process_host.h
+++ b/content/public/test/mock_render_process_host.h
@@ -215,7 +215,7 @@
       mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver)
       override {}
   void BindBucketManagerHostForWorker(
-      const url::Origin& origin,
+      const blink::StorageKey& storage_key,
       mojo::PendingReceiver<blink::mojom::BucketManagerHost> receiver)
       override {}
   void BindRestrictedCookieManagerForServiceWorker(
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc
index 5b38ba4..93478814 100644
--- a/content/renderer/accessibility/render_accessibility_impl.cc
+++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -508,18 +508,6 @@
     serializer_->InvalidateSubtree(obj);
 #endif
 
-  // If a select tag is opened or closed, all the children must be updated
-  // because their visibility may have changed.
-  if (obj.Role() == ax::mojom::Role::kMenuListPopup &&
-      event.event_type == ax::mojom::Event::kChildrenChanged) {
-    WebAXObject popup_like_object = obj.ParentObject();
-    if (!popup_like_object.IsDetached()) {
-      serializer_->InvalidateSubtree(popup_like_object);
-      HandleAXEvent(ui::AXEvent(popup_like_object.AxID(),
-                                ax::mojom::Event::kChildrenChanged));
-    }
-  }
-
   // Discard duplicate accessibility events.
   for (const ui::AXEvent& pending_event : pending_events_) {
     if (pending_event.id == event.id &&
@@ -627,6 +615,7 @@
     ax::mojom::Action event_from_action,
     std::vector<ui::AXEventIntent> event_intents,
     std::list<std::unique_ptr<AXDirtyObject>>::iterator insertion_point) {
+  DCHECK(!obj.IsDetached());
   AXDirtyObject* dirty_object = new AXDirtyObject();
   dirty_object->obj = obj;
   dirty_object->event_from = event_from;
@@ -806,25 +795,6 @@
   // time to inject a stylesheet for image annotation debugging.
   bool had_load_complete_messages = false;
 
-  // Loop over each event and generate an updated event message.
-  for (ui::AXEvent& event : src_events) {
-    if (event.event_type == ax::mojom::Event::kLayoutComplete)
-      need_to_send_location_changes = true;
-
-    if (event.event_type == ax::mojom::Event::kLoadComplete)
-      had_load_complete_messages = true;
-
-    if (event.event_type == ax::mojom::Event::kEndOfTest) {
-      had_end_of_test_event = true;
-      continue;
-    }
-
-    events.push_back(event);
-
-    VLOG(1) << "Accessibility event: " << ui::ToString(event.event_type)
-            << " on node id " << event.id;
-  }
-
   // Dirty objects can be added as a result of serialization. For example,
   // as children are iterated during depth first traversal in the serializer,
   // the children sometimes need to be created. The initialization of these
@@ -899,6 +869,7 @@
     if (plugin_tree_source_)
       AddPluginTreeToUpdate(&update, invalidate_plugin_subtree);
 
+    DCHECK_GT(update.nodes.size(), 0U);
     for (auto& node : update.nodes)
       already_serialized_ids.insert(node.id);
 
@@ -907,6 +878,43 @@
     VLOG(1) << "Accessibility tree update:\n" << update.ToString();
   }
 
+  // Loop over each event and generate an updated event message.
+  for (ui::AXEvent& event : src_events) {
+    if (event.event_type == ax::mojom::Event::kEndOfTest) {
+      had_end_of_test_event = true;
+      continue;
+    }
+
+    if (already_serialized_ids.find(event.id) == already_serialized_ids.end()) {
+      // Node no longer exists or could not be serialized.
+      VLOG(1) << "Dropped AXEvent: " << event.event_type << " on "
+              << WebAXObject::FromWebDocumentByID(document, event.id)
+                     .ToString(true)
+                     .Utf8();
+      continue;
+    }
+
+#if DCHECK_IS_ON()
+    WebAXObject obj = WebAXObject::FromWebDocumentByID(document, event.id);
+    DCHECK(!obj.IsDetached())
+        << "Detached object for AXEvent: " << event.event_type << " on #"
+        << event.id;
+#endif
+
+    if (event.event_type == ax::mojom::Event::kLayoutComplete)
+      need_to_send_location_changes = true;
+
+    if (event.event_type == ax::mojom::Event::kLoadComplete)
+      had_load_complete_messages = true;
+
+    events.push_back(event);
+
+    VLOG(1) << "AXEvent: " << ui::ToString(event.event_type) << " on "
+            << WebAXObject::FromWebDocumentByID(document, event.id)
+                   .ToString(true)
+                   .Utf8();
+  }
+
   if (had_end_of_test_event) {
     ui::AXEvent end_of_test(root.AxID(), ax::mojom::Event::kEndOfTest);
     if (!WebAXObject::IsDirty(document)) {
@@ -962,6 +970,8 @@
 
     // If loaded and has some content, insert load complete at the top, so that
     // screen readers are informed a new document is ready.
+    // This is helpful in the case where the screen reader is launched after the
+    // page was already loaded.
     if (root_obj.IsLoaded() && !document.Body().IsNull() &&
         !document.Body().FirstChild().IsNull()) {
       pending_events_.insert(
@@ -1007,10 +1017,12 @@
   WebDocument popup_document = GetPopupDocument();
   if (!popup_document.IsNull()) {
     WebAXObject popup_root_obj = WebAXObject::FromWebDocument(popup_document);
-    if (!popup_root_obj.MaybeUpdateLayoutAndCheckValidity()) {
+    if (!popup_root_obj.IsNull() &&
+        !popup_root_obj.MaybeUpdateLayoutAndCheckValidity()) {
       // If a popup is open but we can't ensure its validity, return without
       // sending an update bundle, the same as we would for a node in the main
       // document.
+      // Do not perform this check unless the popup has an a11y tree.
       return;
     }
   }
@@ -1043,6 +1055,13 @@
   bool need_to_send_location_changes = SerializeUpdatesAndEvents(
       document, root, updates_and_events->events, updates_and_events->updates,
       invalidate_plugin_subtree);
+  if (updates_and_events->updates.empty()) {
+    // Do not send a serialization if there are no updates.
+    DCHECK(updates_and_events->events.empty())
+        << "If there are no updates, there also shouldn't be any events, "
+           "because events always mark an object dirty.";
+    return;
+  }
 
   if (image_annotation_debugging_)
     AddImageAnnotationDebuggingAttributes(updates_and_events->updates);
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 0a5c17cc..f106122 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -2273,6 +2273,7 @@
     "../browser/payments/payment_manager_unittest.cc",
     "../browser/permissions/permission_controller_impl_unittest.cc",
     "../browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc",
+    "../browser/preloading/prefetch/prefetch_canary_checker_unittest.cc",
     "../browser/preloading/prefetch/prefetch_container_unittest.cc",
     "../browser/preloading/prefetch/prefetch_cookie_listener_unittest.cc",
     "../browser/preloading/prefetch/prefetch_document_manager_unittest.cc",
diff --git a/device/bluetooth/bluetooth_device.h b/device/bluetooth/bluetooth_device.h
index 57b05f7..1276286 100644
--- a/device/bluetooth/bluetooth_device.h
+++ b/device/bluetooth/bluetooth_device.h
@@ -148,7 +148,8 @@
                              BluetoothUUIDHash>
       ServiceDataMap;
   typedef uint16_t ManufacturerId;
-  typedef std::unordered_map<ManufacturerId, std::vector<uint8_t>>
+  typedef std::vector<uint8_t> ManufacturerData;
+  typedef std::unordered_map<ManufacturerId, ManufacturerData>
       ManufacturerDataMap;
   typedef std::unordered_set<ManufacturerId> ManufacturerIDSet;
 
diff --git a/device/bluetooth/public/mojom/test/fake_bluetooth.mojom b/device/bluetooth/public/mojom/test/fake_bluetooth.mojom
index b2d87dd..4d4baca 100644
--- a/device/bluetooth/public/mojom/test/fake_bluetooth.mojom
+++ b/device/bluetooth/public/mojom/test/fake_bluetooth.mojom
@@ -69,7 +69,9 @@
   Appearance appearance;
   Power tx_power;
 
-  map<uint8, array<uint8>>? manufacturer_data;
+  // Key is the company identifier and the value is an array of bytes of
+  // manufacturer specific data.
+  map<uint16, array<uint8>>? manufacturer_data;
   ServiceDataMap? service_data;
 };
 
diff --git a/device/bluetooth/test/fake_central.cc b/device/bluetooth/test/fake_central.cc
index 24bd2e26..f38e2b8 100644
--- a/device/bluetooth/test/fake_central.cc
+++ b/device/bluetooth/test/fake_central.cc
@@ -35,7 +35,7 @@
 }
 
 device::BluetoothDevice::ManufacturerDataMap ToManufacturerDataMap(
-    base::flat_map<uint8_t, std::vector<uint8_t>>&& map) {
+    base::flat_map<uint16_t, std::vector<uint8_t>>&& map) {
   return device::BluetoothDevice::ManufacturerDataMap(
       std::make_move_iterator(map.begin()), std::make_move_iterator(map.end()));
 }
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index 3efc8ae3..a6c1c17 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1754,6 +1754,7 @@
   AUTOTESTPRIVATE_GETDESKCOUNT = 1691,
   METRICSPRIVATE_RECORDSPARSEVALUEWITHPERSISTENTHASH = 1692,
   METRICSPRIVATE_RECORDSPARSEVALUEWITHHASHMETRICNAME = 1693,
+  FILEMANAGERPRIVATE_SHOWDLPRESTRICTIONDETAILS = 1694,
   // Last entry: Add new entries above, then run:
   // tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/fuchsia_web/webengine/web_engine_integration_test.cc b/fuchsia_web/webengine/web_engine_integration_test.cc
index ac79dbec..7e54d06a 100644
--- a/fuchsia_web/webengine/web_engine_integration_test.cc
+++ b/fuchsia_web/webengine/web_engine_integration_test.cc
@@ -161,6 +161,9 @@
   EXPECT_TRUE(result.find(kValidUserAgentProductAndVersion) !=
               std::string::npos);
   EXPECT_EQ(result, expected);
+
+  // Verify navigator.platform is empty, see crbug.com/1348646.
+  EXPECT_EQ(ExecuteJavaScriptWithStringResult("navigator.platform;"), "");
 }
 
 TEST_F(WebEngineIntegrationUserAgentTest, InvalidProduct) {
diff --git a/gpu/command_buffer/service/shared_image/shared_image_representation.cc b/gpu/command_buffer/service/shared_image/shared_image_representation.cc
index 5e55999..55ba754 100644
--- a/gpu/command_buffer/service/shared_image/shared_image_representation.cc
+++ b/gpu/command_buffer/service/shared_image/shared_image_representation.cc
@@ -227,7 +227,8 @@
   auto color_type =
       viz::ResourceFormatToClosestSkColorType(true, representation()->format());
   auto alpha_type = representation()->alpha_type();
-  auto sk_color_space = representation()->color_space().ToSkColorSpace();
+  auto sk_color_space =
+      representation()->color_space().GetAsFullRangeRGB().ToSkColorSpace();
   return SkImage::MakeFromTexture(
       context, promise_image_texture_->backendTexture(), surface_origin,
       color_type, alpha_type, sk_color_space);
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg
index 863a919..24ad60a3 100644
--- a/infra/config/generated/luci/luci-milo.cfg
+++ b/infra/config/generated/luci/luci-milo.cfg
@@ -9949,11 +9949,6 @@
     short_name: "asn"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/Mac FYI Experimental Release (Apple M1)"
-    category: "Mac|Apple"
-    short_name: "exp"
-  }
-  builders {
     name: "buildbucket/luci.chromium.ci/Mac FYI Release (Apple M1)"
     category: "Mac|Apple"
     short_name: "rel"
@@ -9969,11 +9964,6 @@
     short_name: "dbg"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/Mac FYI Experimental Release (Intel)"
-    category: "Mac|Intel"
-    short_name: "exp"
-  }
-  builders {
     name: "buildbucket/luci.chromium.ci/Mac FYI ASAN (Intel)"
     category: "Mac|Intel"
     short_name: "asn"
diff --git a/infra/config/subprojects/chromium/ci/chromium.gpu.fyi.star b/infra/config/subprojects/chromium/ci/chromium.gpu.fyi.star
index ae244e72..81a2a8d3 100644
--- a/infra/config/subprojects/chromium/ci/chromium.gpu.fyi.star
+++ b/infra/config/subprojects/chromium/ci/chromium.gpu.fyi.star
@@ -485,20 +485,22 @@
         ),
         run_tests_serially = True,
     ),
-    console_view_entry = consoles.console_view_entry(
-        category = "Mac|Apple",
-        short_name = "exp",
-    ),
+    # Uncomment this entry when this experimental tester is actually in use.
+    # console_view_entry = consoles.console_view_entry(
+    #     category = "Mac|Apple",
+    #     short_name = "exp",
+    # ),
     list_view = "chromium.gpu.experimental",
     triggered_by = ["GPU FYI Mac arm64 Builder"],
 )
 
 ci.thin_tester(
     name = "Mac FYI Experimental Release (Intel)",
-    console_view_entry = consoles.console_view_entry(
-        category = "Mac|Intel",
-        short_name = "exp",
-    ),
+    # Uncomment this entry when this experimental tester is actually in use.
+    # console_view_entry = consoles.console_view_entry(
+    #     category = "Mac|Intel",
+    #     short_name = "exp",
+    # ),
     list_view = "chromium.gpu.experimental",
     triggered_by = ["GPU FYI Mac Builder"],
 )
diff --git a/ios/build/bots/scripts/run.py b/ios/build/bots/scripts/run.py
index 6e03d61..e85b100 100755
--- a/ios/build/bots/scripts/run.py
+++ b/ios/build/bots/scripts/run.py
@@ -464,7 +464,8 @@
     parser.add_argument(
         '-r',
         '--retries',
-        help='Number of times to retry failed test cases.',
+        help=('Number of times to retry failed test cases. Note: This will be '
+              'overwritten as 0 if test repeat argument value > 1.'),
         metavar='n',
         type=int,
     )
@@ -589,6 +590,10 @@
         parser.error('--xcode-parallelization also requires '
                      'both -p/--platform and -v/--version')
 
+      # Do not retry when repeat
+      if args.repeat and args.repeat > 1:
+        args.retries = 0
+
       args_json = json.loads(args.args_json)
       if (args.gtest_filter or args.test_cases or
           args_json.get('test_cases')) and shard_util.total_shards() > 1:
diff --git a/ios/build/bots/scripts/run_test.py b/ios/build/bots/scripts/run_test.py
index cada592d..a2a97ba 100755
--- a/ios/build/bots/scripts/run_test.py
+++ b/ios/build/bots/scripts/run_test.py
@@ -344,6 +344,52 @@
               'shards environment.', ctx.message))
       self.assertEqual(ctx.exception.code, 2)
 
+  @mock.patch('os.getenv', side_effect=[1, 0])
+  def test_no_retries_when_repeat(self, _):
+    cmd = [
+        '--app',
+        './foo-Runner.app',
+        '--xcode-path',
+        'some/Xcode.app',
+        '--test-cases',
+        'SomeClass.SomeTestCase',
+        '--isolated-script-test-repeat',
+        '20',
+
+        # Required
+        '--xcode-build-version',
+        '123abc',
+        '--out-dir',
+        'some/dir',
+    ]
+    runner = run.Runner()
+    runner.parse_args(cmd)
+    self.assertEqual(0, runner.args.retries)
+
+  @mock.patch('os.getenv', side_effect=[1, 0])
+  def test_override_retries_when_repeat(self, _):
+    cmd = [
+        '--app',
+        './foo-Runner.app',
+        '--xcode-path',
+        'some/Xcode.app',
+        '--test-cases',
+        'SomeClass.SomeTestCase',
+        '--isolated-script-test-repeat',
+        '20',
+        '--retries',
+        '3',
+
+        # Required
+        '--xcode-build-version',
+        '123abc',
+        '--out-dir',
+        'some/dir',
+    ]
+    runner = run.Runner()
+    runner.parse_args(cmd)
+    self.assertEqual(0, runner.args.retries)
+
 
 class RunnerInstallXcodeTest(test_runner_test.TestCase):
   """Tests Xcode and runtime installing logic in Runner.run()"""
diff --git a/ios/build/bots/scripts/xcodebuild_runner.py b/ios/build/bots/scripts/xcodebuild_runner.py
index 447928b5..75eea4a 100644
--- a/ios/build/bots/scripts/xcodebuild_runner.py
+++ b/ios/build/bots/scripts/xcodebuild_runner.py
@@ -255,7 +255,7 @@
       XcodeVersionNotFoundError: If the given Xcode version does not exist.
       XCTestPlugInNotFoundError: If the .xctest PlugIn does not exist.
     """
-    kwargs['retries'] = kwargs.get('retries') or 1
+    kwargs['retries'] = kwargs.get('retries') or 0
     super(SimulatorParallelTestRunner,
           self).__init__(app_path, iossim_path, platform, version, out_dir,
                          **kwargs)
diff --git a/ios/build/chrome_build.gni b/ios/build/chrome_build.gni
index 3e34718..62df9336 100644
--- a/ios/build/chrome_build.gni
+++ b/ios/build/chrome_build.gni
@@ -42,7 +42,7 @@
   ios_enable_screen_time = true
 
   # Enable background fetch mode for feed refresh.
-  ios_enable_background_mode = false
+  ios_enable_background_mode = true
 
   # Value of the encryption export compliance code. See "Cryptography and
   # U.S. Export Compliance" in "Submitting the App to App Review" in the
@@ -96,8 +96,6 @@
   is_official_release = false
 }
 
-ios_enable_background_mode = !is_official_release
-
 chromium_bundle_id = "$ios_app_bundle_id_prefix.chrome.ios.dev"
 chromium_handoff_id = "$ios_app_bundle_id_prefix.chrome.handoff"
 ios_move_tab_activity_type = "$ios_app_bundle_id_prefix.chrome.move-tab"
diff --git a/ios/chrome/app/OWNERS b/ios/chrome/app/OWNERS
index 9e2503a..07f7d2c 100644
--- a/ios/chrome/app/OWNERS
+++ b/ios/chrome/app/OWNERS
@@ -1,2 +1,4 @@
 marq@chromium.org
 rohitrao@chromium.org
+
+per-file feed_app_agent*=edchin@google.com
diff --git a/ios/chrome/app/feed_app_agent.mm b/ios/chrome/app/feed_app_agent.mm
index b223b10..d7dd7d47 100644
--- a/ios/chrome/app/feed_app_agent.mm
+++ b/ios/chrome/app/feed_app_agent.mm
@@ -167,7 +167,7 @@
   }
 }
 
-#pragma mark - Non-release only - Refresh Completion Notifications
+#pragma mark - Refresh Completion Notifications (only enabled by Experimental Settings)
 
 // Request provisional permission, which does not explicitly prompt the user for
 // permission. Instead, the OS delivers provisional notifications quietly and
@@ -195,7 +195,8 @@
   UNMutableNotificationContent* content =
       [[UNMutableNotificationContent alloc] init];
   content.title = title;
-  content.body = @"This is compiled only into non-release versions.";
+  content.body = @"This is enabled via Experimental Settings which is not "
+                 @"available in stable.";
   UNTimeIntervalNotificationTrigger* trigger =
       [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:(1)
                                                          repeats:NO];
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index c528c97..d091e841 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -733,7 +733,7 @@
         Search <ph name="SEARCH_ENGINE">$1<ex>Google</ex></ph> for This Image
       </message>
       <message name="IDS_IOS_CONTEXT_MENU_SEARCHIMAGEWITHGOOGLE" desc="Context menu text for option to search an image with Google [Length: 25em] [iOS only]">
-        Search image with Google
+        Search Image with Google
       </message>
       <message name="IDS_IOS_COPY_VERSION_HINT" desc="The accessibility hint for the label showing the Chrome version. [iOS only]">
         Double tap to copy.
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_CONTEXT_MENU_SEARCHIMAGEWITHGOOGLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_CONTEXT_MENU_SEARCHIMAGEWITHGOOGLE.png.sha1
index e2479c4..f12671f 100644
--- a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_CONTEXT_MENU_SEARCHIMAGEWITHGOOGLE.png.sha1
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_CONTEXT_MENU_SEARCHIMAGEWITHGOOGLE.png.sha1
@@ -1 +1 @@
-e10ac58380c4ca59271d9817df5caf1def5abda2
\ No newline at end of file
+aa534f0b532b17366beb16d0190fa63f29395f98
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
index 830e448..e7a065b8 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium kon nie jou wagwoorde nagaan nie. Probeer jou internetverbinding nagaan.</translation>
 <translation id="3472200483164753384">Nie gesteun in Chromium Kanarie nie</translation>
 <translation id="3567399274263440288">Meld met jou Google-rekening aan om die meeste voordeel uit Chromium te trek.</translation>
-<translation id="3619462831205197427">Meld by hierdie werf, jou Google-rekening en Chromium aan.</translation>
 <translation id="3639997914391704523">Chromium kan jou wagwoorde nagaan as jy met jou Google-rekening aanmeld.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> het Chromium gebruik en het boekmerke, wagwoorde en ander instellings op hierdie toestel gelos.</translation>
 <translation id="3805899903892079518">Chromium het nie toegang tot jou foto's of video's nie. Aktiveer toegang in iOS-instellings &gt; Privacy &gt; Photos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
index f9eadaa..e06b3b1 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
@@ -44,7 +44,6 @@
 <translation id="3344973607274501920">Chromium የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። የበይነመረብ ግንኙነትዎን ለመፈተሽ ይሞክሩ።</translation>
 <translation id="3472200483164753384">በChromium Canary ላይ አይደገፍም</translation>
 <translation id="3567399274263440288">ከChromium የበለጠ ለማግኘት በGoogle መለያዎ ወደ Chromium ይግቡ።</translation>
-<translation id="3619462831205197427">ወደዚህ ጣቢያ፣ የእርስዎ Google መለያ እና Chromium ይግቡ።</translation>
 <translation id="3639997914391704523">Chromium በእርስዎ የGoogle መለያ በሚገቡበት ጊዜ የእርስዎን የይለፍ ቃላትን ሊፈትሽ ይችላል።</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> በዚህ መሣሪያ ላይ Chromiumን እና ግራ ዕልባቶችን፣ የይለፍ ቃላትን እና ሌሎች ቅንብሮችን እየተጠቀመ ነበር።</translation>
 <translation id="3805899903892079518">Chromium የእርስዎ ፎቶዎች ወይም ቪዲዮዎች መዳረሻ የለውም። በiOS ቅንብሮች &gt; ግላዊነት &gt; ፎቶዎች ውስጥ መዳረሻን ያንቁ።</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
index 34975fd..e9ff6f30 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">‏تعذّر على متصفِّح Chromium التحقُّق من كلمات المرور. يُرجى التحقُّق من اتصال الإنترنت.</translation>
 <translation id="3472200483164753384">‏غير متاح على Chromium Canary</translation>
 <translation id="3567399274263440288">‏للاستفادة إلى أقصى حدّ من Chromium، سجِّل الدخول إلى Chromium باستخدام حسابك على Google.</translation>
-<translation id="3619462831205197427">‏يُرجى تسجيل الدخول إلى هذا الموقع الإلكتروني وحسابك على Google وChromium.</translation>
 <translation id="3639997914391704523">‏يجب تسجيل الدخول إلى حسابك على Google ليتمكّن Chromium من التحقُّق من كلمات المرور.</translation>
 <translation id="3650632991272923014">‏كان <ph name="USER_EMAIL1" /> يستخدم Chromium وتركَ إشارات مرجعية وكلمات مرور وغيرها من الإعدادات مُسجَّلة على هذا الجهاز.</translation>
 <translation id="3805899903892079518">‏لا تتوفر لدى Chromium إمكانية الدخول إلى الصور أو الفيديوهات. تستطيع تفعيل الدخول في إعدادات نظام التشغيل iOS &gt; الخصوصية &gt; الصور.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb
index cb2a4d2..144316b2 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromiumএ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰিলে। আপোনাৰ ইণ্টাৰনেট সংযোগ পৰীক্ষা কৰি চাওক।</translation>
 <translation id="3472200483164753384">Chromium Canaryত সমৰ্থিত নহয়</translation>
 <translation id="3567399274263440288">Chromium পাৰ্যমানে ব্যৱহাৰ কৰিবলৈ আপোনাৰ Google একাউণ্টটোৰ জৰিয়তে Chromiumত ছাইন ইন কৰক।</translation>
-<translation id="3619462831205197427">এইটো ছাইট, আপোনাৰ Google একাউণ্ট আৰু Chromiumত ছাইন ইন কৰক।</translation>
 <translation id="3639997914391704523">আপুনি নিজৰ Google একাউণ্টটোৰ জৰিয়তে ছাইন ইন কৰিলে Chromiumএ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব পাৰে।</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" />এ Chromium ব্যৱহাৰ কৰি আছিল আৰু এই ডিভাইচটোত বুকমাৰ্ক, পাছৱৰ্ড আৰু অন্য ছেটিং এৰি গৈছে।</translation>
 <translation id="3805899903892079518">আপোনাৰ ফট’ আৰু ভিডিঅ’সমূহত Chromiumৰ এক্সেছ নাই। iOS ছেটিং &gt; গোপনীয়তা &gt; ফট’-ত এক্সেছ সক্ষম কৰক।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
index 0107f65..be7173d1 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium parollarınızı yoxlaya bilmədi. İnternet bağlantınızı yoxlayın.</translation>
 <translation id="3472200483164753384">Chromium Canary'də dəstəklənmir</translation>
 <translation id="3567399274263440288">Chromium'dan maksimum yararlanmaq üçün Google Hesabınızla Chromium'a daxil olun.</translation>
-<translation id="3619462831205197427">Bu sayta, Google Hesabınıza və Chromium'a daxil olun.</translation>
 <translation id="3639997914391704523">Google Hesabınız ilə daxil olduqda Chromium parollarınızı yoxlaya bilər.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> bu cihazda Chromium istifadə edirdi və əlfəcinlər, parollar və digər ayarlar qalıb.</translation>
 <translation id="3805899903892079518">Chromium məhsulunun foto və videolarınıza girişi yoxdur. iOS Ayarları &gt; Məxfilik &gt; Fotolar bölməsindən girişi aktiv edin.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb
index b9d72d1..2f2cd215 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Браўзеру Chromium не ўдалося праверыць паролі. Паспрабуйце праверыць падключэнне да інтэрнэту.</translation>
 <translation id="3472200483164753384">Не падтрымліваецца ў Chromium Canary</translation>
 <translation id="3567399274263440288">Каб карыстацца ўсімі магчымасцямі браўзера Chromium, увайдзіце ў яго праз свой Уліковы запіс Google.</translation>
-<translation id="3619462831205197427">Выканайце ўваход на сайт, ва Уліковы запіс Google і ў браўзер Chromium.</translation>
 <translation id="3639997914391704523">Chromium зможа праверыць паролі толькі пасля таго, як вы ўвойдзеце ва Уліковы запіс Google.</translation>
 <translation id="3650632991272923014">Карыстальнік <ph name="USER_EMAIL1" />, папрацаваўшы ў браўзеры Chromium, пакінуў на гэтай прыладзе закладкі, паролі і іншыя налады.</translation>
 <translation id="3805899903892079518">Chromium не мае доступу да вашых фота і відэа. Даць доступ можна ў меню iOS "Налады &gt; Прыватнасць &gt; Фота".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb
index 6d316e3..38b4ac9 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium не успя да провери паролите ви. Проверете връзката си с интернет.</translation>
 <translation id="3472200483164753384">Не се поддържа от Chromium Canary</translation>
 <translation id="3567399274263440288">За да се възползвате максимално от Chromium, влезте в браузъра с профила си в Google.</translation>
-<translation id="3619462831205197427">Влезте в този сайт, профила си в Google и Chromium.</translation>
 <translation id="3639997914391704523">Chromium може да проверява паролите ви, когато влизате с профила си в Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> използва Chromium и запази на това устройство отметки, пароли и други настройки.</translation>
 <translation id="3805899903892079518">Chromium няма достъп до снимките или видеоклиповете ви. Активирайте го от „Settings“ &gt; „Privacy“ &gt; „Photos“ в iOS.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb
index 77a5e0f..5963548 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium আপনার পাসওয়ার্ড চেক করতে পারেনি। ডিভাইসের ইন্টারনেট কানেকশন চেক করে দেখুন।</translation>
 <translation id="3472200483164753384">এই সুবিধা 'Chromium ক্যানারি'তে কাজ করে না</translation>
 <translation id="3567399274263440288">Chromium থেকে সবচেয়ে বেশি সুবিধা পেতে, আপনার Google অ্যাকাউন্ট দিয়ে Chromium-এ সাইন-ইন করুন।</translation>
-<translation id="3619462831205197427">এই সাইট, আপনার Google অ্যাকাউন্ট ও Chromium-এ সাইন-ইন করুন।</translation>
 <translation id="3639997914391704523">আপনি যখন নিজের Google অ্যাকাউন্ট ব্যবহার করে সাইন-ইন করবেন, Chromium তখন আপনার পাসওয়ার্ড চেক করে দেখতে পারে।</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> Chromium ব্যবহার করছিলেন এবং এই ডিভাইসে বুকমার্ক, পাসওয়ার্ড এবং অন্যান্য সেটিংস রয়ে গেছে।</translation>
 <translation id="3805899903892079518">আপনার ফটো এবং ভিডিওগুলিতে Chromium এর অ্যাক্সেস নেই৷ iOS সেটিংস &gt; গোপনীয়তা &gt; ফটোগুলিতে অ্যাক্সেস সক্ষম করুন৷</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb
index 018ccf6..f17a323 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium nije mogao provjeriti vaše lozinke. Predlažemo da provjerite internetsku vezu.</translation>
 <translation id="3472200483164753384">Nije podržano na Chromium Canaryju</translation>
 <translation id="3567399274263440288">Da iskoristite sve prednosti Chromiuma, prijavite se na Chromium pomoću Google računa.</translation>
-<translation id="3619462831205197427">Prijavite se na ovu web lokaciju, Google račun i Chromium.</translation>
 <translation id="3639997914391704523">Chromium može provjeravati vaše lozinke kada se prijavljujete pomoću Google računa.</translation>
 <translation id="3650632991272923014">Korisnik <ph name="USER_EMAIL1" /> je koristio Chromium i ostavio je oznake, lozinke i ostale postavke na ovom uređaju.</translation>
 <translation id="3805899903892079518">Chromium nema pristup vašim fotografijama ili videozapisima. Omogućite pristup u meniju iOS postavke &gt; Privatnost &gt; Fotografije.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb
index 25d1a3b..d103a22d 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium no ha pogut comprovar les teves contrasenyes. Comprova la connexió a Internet.</translation>
 <translation id="3472200483164753384">No s'admeten a Chromium Canary</translation>
 <translation id="3567399274263440288">Per treure el màxim profit de Chromium, inicia-hi la sessió amb el teu Compte de Google.</translation>
-<translation id="3619462831205197427">Inicia la sessió en aquest lloc web, al teu Compte de Google i a Chromium.</translation>
 <translation id="3639997914391704523">Chromium pot comprovar les teves contrasenyes quan inicies la sessió amb el Compte de Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> ha utilitzat Chromium en aquest dispositiu i hi ha deixat adreces d'interès, contrasenyes i altres opcions de configuració.</translation>
 <translation id="3805899903892079518">Chromium no té accés als vostres vídeos o fotos. Permeteu-li l'accés a iOS, a Configuració &gt; Privadesa &gt; Fotos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb
index 98b43fe9..ce947c0f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb
@@ -44,7 +44,6 @@
 <translation id="3344973607274501920">Chromiu se nepodařilo zkontrolovat hesla. Zkuste zkontrolovat připojení k internetu.</translation>
 <translation id="3472200483164753384">V Chromium Canary není podporováno</translation>
 <translation id="3567399274263440288">Pokud z prohlížeče Chromium chcete získat maximum, přihlaste se do něj pomocí účtu Google.</translation>
-<translation id="3619462831205197427">Přihlaste se na tento web, k účtu Google a do Chromia.</translation>
 <translation id="3639997914391704523">Když se přihlásíte pomocí účtu Google, může vám Chromium kontrolovat hesla.</translation>
 <translation id="3650632991272923014">Uživatel <ph name="USER_EMAIL1" /> používal Chromium a ponechal v tomto zařízení záložky, hesla a další nastavení.</translation>
 <translation id="3805899903892079518">Chromium nemá přístup k vašim fotkám nebo videím. Povolte přístup v systému iOS v Nastavení &gt; Soukromí &gt; Fotky.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb
index 799cdbc..150fc61f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Ni all Chromium wirio'ch cyfrineiriau. Rhowch gynnig ar wirio'ch cysylltiad rhyngrwyd.</translation>
 <translation id="3472200483164753384">Ni chefnogir ar Chromium Canary</translation>
 <translation id="3567399274263440288">I gael y gorau o Chromium, mewngofnodwch i Chromium â'ch Cyfrif Google.</translation>
-<translation id="3619462831205197427">Mewngofnodi i'r wefan hon, eich Cyfrif Google a Chromium.</translation>
 <translation id="3639997914391704523">Gall Chromium wirio'ch cyfrineiriau pan fyddwch yn mewngofnodi gyda'ch Cyfrif Google.</translation>
 <translation id="3650632991272923014">Roedd <ph name="USER_EMAIL1" /> yn defnyddio Chromium a gadawodd nodau tudalen, cyfrineiriau, a gosodiadau eraill ar y ddyfais hon.</translation>
 <translation id="3805899903892079518">Nid oes gan Chromium fynediad at eich lluniau na'ch fideos. Galluogi mynediad yn Gosodiadau iOS &gt; Preifatrwydd &gt; Lluniau.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb
index ffd1081..2932b11 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium kunne ikke tjekke dine adgangskoder. Prøv at tjekke din internetforbindelse.</translation>
 <translation id="3472200483164753384">Understøttes ikke i Chromium Canary</translation>
 <translation id="3567399274263440288">Log ind i Chromium med din Google-konto for at få mest muligt ud af Chromium.</translation>
-<translation id="3619462831205197427">Log ind på dette website, din Google-konto og Chromium.</translation>
 <translation id="3639997914391704523">Chromium kan tjekke dine adgangskoder, når du er logget ind med din Google-konto</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> brugte Chromium og gemte bogmærker, adgangskoder og andre indstillinger på denne enhed.</translation>
 <translation id="3805899903892079518">Chromium har ikke adgang til dine billeder eller videoer. Gå til iOS Indstillinger &gt; Privatliv &gt; Billeder for at få adgang.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
index 85e3ef2..60989b7 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
@@ -44,7 +44,6 @@
 <translation id="3344973607274501920">Chromium konnte deine Passwörter nicht prüfen. Prüfe deine Internetverbindung.</translation>
 <translation id="3472200483164753384">Wird von Chromium Canary nicht unterstützt</translation>
 <translation id="3567399274263440288">Wenn du Chromium optimal nutzen möchtest, melde dich mit deinem Google-Konto in Chromium an.</translation>
-<translation id="3619462831205197427">Melde dich bei dieser Website, in deinem Google-Konto und in Chromium an.</translation>
 <translation id="3639997914391704523">Chromium kann deine Passwörter prüfen, wenn du dich mit deinem Google-Konto anmeldest.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> hat Chromium genutzt und Lesezeichen, Passwörter und andere Einstellungen auf diesem Gerät festgelegt.</translation>
 <translation id="3805899903892079518">Chromium hat keinen Zugriff auf deine Fotos und Videos. Aktiviere den Zugriff unter "iOS-Einstellungen &gt; Datenschutz &gt; Fotos".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb
index 55fa9f1..a4f05e81 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Το Chromium δεν μπόρεσε να ελέγξει τους κωδικούς πρόσβασής σας. Δοκιμάστε να ελέγξετε τη σύνδεσή σας στο διαδίκτυο.</translation>
 <translation id="3472200483164753384">Δεν υποστηρίζεται στο Chromium Canary</translation>
 <translation id="3567399274263440288">Συνδεθείτε στο Chromium με τον Λογαριασμό σας Google για να το αξιοποιήσετε στο έπακρο.</translation>
-<translation id="3619462831205197427">Συνδεθείτε σε αυτόν τον ιστότοπο, στον Λογαριασμό σας Google και στο Chromium.</translation>
 <translation id="3639997914391704523">Το Chromium μπορεί να ελέγξει τους κωδικούς πρόσβασής σας όταν συνδέεστε με τον Λογαριασμό σας Google.</translation>
 <translation id="3650632991272923014">Ο χρήστης <ph name="USER_EMAIL1" /> χρησιμοποίησε το Chrome και οι σελιδοδείκτες, οι κωδικοί πρόσβασης και άλλες ρυθμίσεις του αποθηκεύτηκαν σε αυτήν τη συσκευή.</translation>
 <translation id="3805899903892079518">Το Chromium δεν έχει πρόσβαση σε φωτογραφίες ή βίντεό σας. Ενεργ. πρόσβασης στις Ρυθμίσεις iOS &gt; Απόρρητο &gt; Φωτογραφίες.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb
index a83d6870..978d27c 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium couldn't check your passwords. Try checking your Internet connection.</translation>
 <translation id="3472200483164753384">Not supported on Chromium Canary</translation>
 <translation id="3567399274263440288">To get the most out of Chromium, sign in to Chromium with your Google Account.</translation>
-<translation id="3619462831205197427">Sign in to this site, your Google Account and Chromium.</translation>
 <translation id="3639997914391704523">Chromium can check your passwords when you sign in with your Google Account.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> was using Chromium and left bookmarks, passwords and other settings on this device.</translation>
 <translation id="3805899903892079518">Chromium does not have access to your photos or videos. Enable access in iOS Settings &gt; Privacy &gt; Photos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
index 867dac7..e6c68d7ba 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium no pudo revisar las contraseñas. Revisa la conexión a Internet.</translation>
 <translation id="3472200483164753384">No es compatible en Chromium Canary</translation>
 <translation id="3567399274263440288">Para aprovechar Chromium al maximo, accede al navegador con tu Cuenta de Google.</translation>
-<translation id="3619462831205197427">Accede a este sitio, tu Cuenta de Google y Chromium.</translation>
 <translation id="3639997914391704523">Chromium puede revisar las contraseñas cuando accedes con tu Cuenta de Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> usó Chromium y dejó favoritos, contraseñas y otros parámetros de configuración en este dispositivo.</translation>
 <translation id="3805899903892079518">Chromium no tiene acceso a tus fotos o videos. Habilita el acceso en Configuración de iOS &gt; Privacidad &gt; Fotos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb
index 7e798fa3..70c9c51 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium no ha podido comprobar tus contraseñas. Revisa tu conexión a Internet.</translation>
 <translation id="3472200483164753384">No compatible con Chromium Canary</translation>
 <translation id="3567399274263440288">Para sacarle el máximo partido a Chromium, inicia sesión en Chromium con tu cuenta de Google.</translation>
-<translation id="3619462831205197427">Inicia sesión en este sitio, en tu cuenta de Google y en Chromium.</translation>
 <translation id="3639997914391704523">Chromium puede comprobar tus contraseñas cuando inicias sesión con tu cuenta de Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> ha usado Chromium y ha dejado marcadores, contraseñas y otras configuraciones en este dispositivo.</translation>
 <translation id="3805899903892079518">Chromium no puede acceder a tus fotos y vídeos (para permitirlo, ve a Ajustes de iOS &gt; Privacidad &gt; Fotos).</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb
index 8132191c..457e065 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromiumil ei õnnestunud teie paroole kontrollida. Kontrollige internetiühendust.</translation>
 <translation id="3472200483164753384">Ei toetata versioonis Chromium Canary</translation>
 <translation id="3567399274263440288">Chromiumi kasutamiseks parimal moel logige Chromiumi sisse oma Google'i kontoga.</translation>
-<translation id="3619462831205197427">Logige sellele saidile, oma Google'i kontole ja Chromiumi sisse.</translation>
 <translation id="3639997914391704523">Chromium saab teie paroole kontrollida siis, kui logite sisse oma Google'i kontoga.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> kasutas Chromiumi ning jättis järjehoidjad, paroolid ja muud seaded sellesse seadmesse.</translation>
 <translation id="3805899903892079518">Chromiumil pole juurdepääsu fotodele ega videotele. Lubage iOS-is juurdepääs valikutega Seaded &gt; Privaatsus &gt; Fotod.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb
index b677b5f..5893948 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium-ek ezin izan ditu egiaztatu pasahitzak. Egiaztatu Internetera konektatuta zaudela.</translation>
 <translation id="3472200483164753384">Ez da bateragarria Chromium Canary-rekin</translation>
 <translation id="3567399274263440288">Chromium-i etekinik handiena ateratzeko, hasi saioa Chromium-en Google-ko kontuarekin.</translation>
-<translation id="3619462831205197427">Hasi saioa webgune honetan, Google-ko kontuan eta Chromium-en.</translation>
 <translation id="3639997914391704523">Saioa Google-ko kontu batekin hasten baduzu, Chromium-ek pasahitzak egiazta ditzake.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> Chromium-en erabiltzailea zenez, laster-markak, pasahitzak eta beste ezarpena batzuk utzi ditu gailuan.</translation>
 <translation id="3805899903892079518">Chromium-ek ez du argazki eta bideoetarako sarbiderik. Gaitu sarbidea iOS sistemako Settings &gt; Privacy &gt; Photos atalean.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb
index 5c15996..b1e4905 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">‏Chromium نمی‌تواند گذرواژه‌هایتان را بررسی کند. اتصال اینترنت را بررسی کنید.</translation>
 <translation id="3472200483164753384">‏در Chromium Canary پشتیبانی نمی‌شود</translation>
 <translation id="3567399274263440288">‏برای اینکه بیشترین بهره را از Chromium ببرید، با «حساب Google» به سیستم Chromium وارد شوید.</translation>
-<translation id="3619462831205197427">‏به سیستم این سایت، «حساب Google» خود، و Chromium وارد شوید.</translation>
 <translation id="3639997914391704523">‏Chromium زمانی می‌تواند گذرواژه‌هایتان را بررسی کند که با «حساب Google» خود به سیستم وارد شوید.</translation>
 <translation id="3650632991272923014">‏<ph name="USER_EMAIL1" /> از Chromium استفاده می‌کرده است و نشانک‌ها، گذرواژه‌ها، و تنظیمات دیگری در این دستگاه ذخیره کرده است.</translation>
 <translation id="3805899903892079518">‏Chromium به عکس‌ها یا ویدیوهای شما دسترسی ندارد. با رفتن به تنظیمات iOS &gt; حریم خصوصی &gt; عکس‌ها دسترسی را فعال کنید.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
index 98694f06..cbf7fc4 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium ei voinut tarkistaa salasanojasi. Tarkista internetyhteytesi.</translation>
 <translation id="3472200483164753384">Ei tueta Chromium Canaryssa</translation>
 <translation id="3567399274263440288">Kirjaudu sisään Chromiumiin Google-tililläsi, jotta saat parhaan hyödyn Chromiumista.</translation>
-<translation id="3619462831205197427">Kirjaudu tälle sivustolle, Google-tilillesi ja Chromiumiin.</translation>
 <translation id="3639997914391704523">Chromium voi tarkistaa salasanasi, kun kirjaudut sisään Google-tililläsi.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> käytti Chromiumia, ja hänen käyttämiä kirjanmerkkejä, salasanoja ja muita asetuksia jäi laitteelle.</translation>
 <translation id="3805899903892079518">Chromium ei voi käyttää kuviasi tai videoitasi. Anna käyttöoikeus kohdassa iOS-asetukset &gt; Tietosuoja &gt; Kuvat.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb
index 128bedf..afad9a03 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Hindi masuri ng Chromium ang iyong mga password. Subukang tingnan ang iyong koneksyon sa internet.</translation>
 <translation id="3472200483164753384">Hindi sinusuportahan sa Chromium Canary</translation>
 <translation id="3567399274263440288">Para masulit ang Chromium, mag-sign in sa Chromium gamit ang iyong Google Account.</translation>
-<translation id="3619462831205197427">Mag-sign in sa site na ito, sa iyong Google Account, at sa Chromium.</translation>
 <translation id="3639997914391704523">Masusuri ng Chromium ang iyong mga password kapag nag-sign in ka sa Google Account mo.</translation>
 <translation id="3650632991272923014">Ginamit ni <ph name="USER_EMAIL1" /> ang Chromium at nag-iwan siya ng mga bookmark, password, at iba pang mga setting sa device na ito.</translation>
 <translation id="3805899903892079518">Walang access ang Chromium sa mga larawan o video mo. I-enable ang access sa Mga Setting ng iOS &gt; Privacy &gt; Mga Larawan.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
index c1bcf08..f90523f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium n'a pas pu vérifier vos mots de passe. Essayez de vérifier votre connexion Internet.</translation>
 <translation id="3472200483164753384">Fonctionnalité non prise en charge par Chromium Canary</translation>
 <translation id="3567399274263440288">Connectez-vous à Chromium avec votre compte Google pour en tirer le meilleur parti.</translation>
-<translation id="3619462831205197427">Connectez-vous à ce site, à votre compte Google et à Chromium.</translation>
 <translation id="3639997914391704523">Chromium peut vérifier vos mots de passe lorsque vous vous connectez avec votre compte Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> utilisait Chromium et a laissé des favoris, des mots de passe et d'autres paramètres sur cet appareil.</translation>
 <translation id="3805899903892079518">Chromium n'a pas accès à vos photos ou vidéos. Activez l'accès dans Réglages iOS &gt; Confidentialité &gt; Photos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb
index 7370ca0..b8c93eb0 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium n'est pas parvenu à vérifier vos mots de passe. Vérifiez votre connexion Internet.</translation>
 <translation id="3472200483164753384">Non disponible dans Chromium Canary</translation>
 <translation id="3567399274263440288">Pour profiter pleinement de Chromium, connectez-vous avec votre compte Google.</translation>
-<translation id="3619462831205197427">Connectez-vous à ce site, à votre compte Google et à Chromium.</translation>
 <translation id="3639997914391704523">Chromium peut vérifier vos mots de passe lorsque vous vous connectez avec votre compte Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> utilisait Chromium et a laissé des favoris, des mots de passe et d'autres paramètres sur cet appareil.</translation>
 <translation id="3805899903892079518">Chromium n'a pas accès à vos photos ni à vos vidéos. Activez l'accès dans iOS via Réglages &gt; Confidentialité &gt; Photos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
index 358d6fb2d6..c895bfe5 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium non puido comprobar os teus contrasinais. Verifica a conexión a Internet.</translation>
 <translation id="3472200483164753384">Non compatible en Chromium Canary</translation>
 <translation id="3567399274263440288">Para tirarlle o máximo partido a Chromium, inicia sesión coa túa Conta de Google en Chromium.</translation>
-<translation id="3619462831205197427">Inicia sesión neste sitio, na túa Conta de Google e en Chromium.</translation>
 <translation id="3639997914391704523">Chromium pode comprobar os teus contrasinais cando inicies sesión coa túa Conta de Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> estivo usando Chromium e deixou os marcadores, os contrasinais e outras opcións de configuración neste dispositivo.</translation>
 <translation id="3805899903892079518">Chromium non ten acceso ás túas fotos nin aos teus vídeos. Activa o acceso en Configuración de iOS &gt; Privacidade &gt; Fotos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb
index 682f967..a6498129 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium તમારા પાસવર્ડ ચેક કરી શક્યું નથી. તમારું ઇન્ટરનેટ કનેક્શન ચેક કરવાનો પ્રયાસ કરો.</translation>
 <translation id="3472200483164753384">Chromium Canary પર સપોર્ટ કરવામાં આવતી નથી</translation>
 <translation id="3567399274263440288">Chromiumનો વધુમાં વધુ લાભ લેવા માટે, તમારા Google એકાઉન્ટ વડે Chromiumમાં સાઇન ઇન કરો.</translation>
-<translation id="3619462831205197427">આ સાઇટમાં, તમારા Google એકાઉન્ટમાં અને Chromiumમાં સાઇન ઇન કરો.</translation>
 <translation id="3639997914391704523">જ્યારે તમે તમારા Google એકાઉન્ટ વડે સાઇન ઇન કરો, ત્યારે Chromium તમારા પાસવર્ડ ચેક કરી શકે છે.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> Chromiumનો ઉપયોગ કરી રહ્યાં હતા અને તેઓ આ ડિવાઇસ પર બુકમાર્ક, પાસવર્ડ અને અન્ય સેટિંગ છોડી ગયા છે.</translation>
 <translation id="3805899903892079518">Chromiumને તમારા ફોટા અથવા વીડિયોનો ઍક્સેસ નથી. iOS સેટિંગ &gt; પ્રાઇવસી &gt; ફોટામાં ઍક્સેસને ચાલુ કરો.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
index 658729a7..baba6b3c 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
@@ -44,7 +44,6 @@
 <translation id="3344973607274501920">क्रोमियम आपके पासवर्ड की जांच नहीं कर सका. अपने इंटरनेट कनेक्शन की जांच करें.</translation>
 <translation id="3472200483164753384">यह सुविधा क्रोमियम के कैनरी वर्शन पर काम नहीं करती</translation>
 <translation id="3567399274263440288">Chromium का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, अपने Google खाते से Chromium में साइन इन करें.</translation>
-<translation id="3619462831205197427">इस साइट, अपने Google खाते, और Chromium में साइन इन करें.</translation>
 <translation id="3639997914391704523">जब आप Google खाते से साइन इन करते हैं, तब क्रोमियम आपके पासवर्ड की जांच कर सकता है.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> से Chromium का इस्तेमाल किया गया था और इसमें सेव किए गए बुकमार्क, पासवर्ड, और दूसरी सेटिंग को इस डिवाइस से नहीं हटाया गया.</translation>
 <translation id="3805899903892079518">Chromium के पास आपकी फ़ोटो या वीडियो का एक्सेस नहीं है. iOS सेटिंग &gt; गोपनीयता &gt; फ़ोटो में एक्सेस चालू करें.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb
index ba98bf5a..d28ee58 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium nije uspio provjeriti vaše zaporke. Provjerite internetsku vezu.</translation>
 <translation id="3472200483164753384">Nije podržano u Chromium Canaryju</translation>
 <translation id="3567399274263440288">Da biste iskoristili sve prednosti koje vam pruža Chromium, prijavite se u Chromium Google računom.</translation>
-<translation id="3619462831205197427">Prijavite se na ovu web-lokaciju, Google račun i Chromium.</translation>
 <translation id="3639997914391704523">Chromium može provjeriti vaše zaporke kad se prijavite Google računom.</translation>
 <translation id="3650632991272923014">Korisnik <ph name="USER_EMAIL1" /> upotrebljavao je Chromium i ostavio oznake, zaporke i druge postavke na ovom uređaju.</translation>
 <translation id="3805899903892079518">Chromium nema pristup fotografijama ni videozapisima. Omogućite pristup u Postavkama iOS-a &gt; Privatnost &gt; Fotografije.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb
index 588d00e..0c08f6b 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">A Chromium nem tudta ellenőrizni a jelszavakat. Ellenőrizze az internetkapcsolatot.</translation>
 <translation id="3472200483164753384">A Chromium Canary nem támogatja</translation>
 <translation id="3567399274263440288">Annak érdekében, hogy a legtöbbet hozhassa ki a Chromiumból, jelentkezzen be Google-fiókjával a Chromiumba.</translation>
-<translation id="3619462831205197427">Jelentkezzen be erre a webhelyre, a Google-fiókjába és a Chromiumba.</translation>
 <translation id="3639997914391704523">A Chromium ellenőrizni tudja a mentett jelszavakat, ha Ön bejelentkezik Google-fiókjával.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> felhasználó használta Chromiumot, és könyvjelzőket, jelszavakat, valamint egyéb beállításokat hagyott az eszközön.</translation>
 <translation id="3805899903892079518">A Chromium nem fér hozzá az Ön képeihez és videóihoz. Engedélyezés iOS-en: Beállítások &gt; Adatvédelem &gt; Fényképek.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb
index f7aed55b..a389b3cf 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium-ին չհաջողվեց ստուգել ձեր գաղտնաբառերը։ Ստուգեք ինտերնետ կապը։</translation>
 <translation id="3472200483164753384">Չի աջակցվում Chromium Canary-ում</translation>
 <translation id="3567399274263440288">Chromium-ի բոլոր գործառույթներն օգտագործելու համար մտեք ձեր Google հաշիվ։</translation>
-<translation id="3619462831205197427">Մուտք գործեք այս կայքում, ձեր Google հաշիվ և Chromium։</translation>
 <translation id="3639997914391704523">Chromium-ը կարող է ստուգել ձեր գաղտնաբառերը, երբ մտնեք Google հաշիվ։</translation>
 <translation id="3650632991272923014">Օգտատերը (<ph name="USER_EMAIL1" />) օգտագործել է Chromium-ը, և այս սարքում պահպանվել են էջանիշներ, գաղտնաբառեր և այլ կարգավորումներ։</translation>
 <translation id="3805899903892079518">Chromium-ին հասանելի չեն ձեր լուսանկարները կամ տեսանյութերը: Անցեք iOS Կարգավորումներ &gt; Գաղտնիություն &gt; Լուսանկարներ (Settings &gt; Privacy &gt; Photos) և միացրեք մուտքի թույլտվությունը:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
index b0724b17..ea366e0f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium tidak dapat memeriksa sandi Anda. Coba periksa koneksi internet Anda.</translation>
 <translation id="3472200483164753384">Tidak didukung di Chromium Canary</translation>
 <translation id="3567399274263440288">Untuk mengoptimalkan Chromium, login ke Chromium dengan Akun Google Anda.</translation>
-<translation id="3619462831205197427">Login ke situs ini, Akun Google Anda, dan Chromium.</translation>
 <translation id="3639997914391704523">Chromium dapat memeriksa sandi saat Anda login dengan Akun Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> menggunakan Chromium dan meninggalkan bookmark, sandi, serta setelan lainnya di perangkat ini.</translation>
 <translation id="3805899903892079518">Chromium tidak memiliki akses ke foto atau video Anda. Izinkan akses di iOS Settings &gt; Privacy &gt; Photos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_is.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_is.xtb
index ca0d60b..5580924 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_is.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_is.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium gat ekki athugað aðgangsorðin þín. Athugaðu nettenginguna þína.</translation>
 <translation id="3472200483164753384">Ekki stutt í Chromium Canary</translation>
 <translation id="3567399274263440288">Skráðu þig inn í Chromium með Google reikningnum þínum svo að Chromium nýtist þér sem best.</translation>
-<translation id="3619462831205197427">Skráðu þig inn á þetta vefsvæði, Google reikninginn þinn og Chromium.</translation>
 <translation id="3639997914391704523">Chromium getur athugað aðgangsorðin þín þegar þú skráir þig inn með Google reikningnum þínum</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> notaði Chromium og skildi eftir bókamerki, aðgangsorð og aðrar stillingar í þessu tæki.</translation>
 <translation id="3805899903892079518">Chromium hefur ekki aðgang að myndunum þínum eða myndskeiðum. Veittu aðgang í iOS Settings &gt; Privacy &gt; Photos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
index 415a066..8bc2d78 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium non ha potuto controllare le tue password. Verifica la tua connessione a Internet.</translation>
 <translation id="3472200483164753384">Non supportata su Chromium Canary</translation>
 <translation id="3567399274263440288">Accedi con il tuo Account Google a Chromium per usare al meglio questo browser.</translation>
-<translation id="3619462831205197427">Accedi a questo sito, al tuo Account Google e a Chromium.</translation>
 <translation id="3639997914391704523">Chromium può controllare le tue password quando accedi con il tuo Account Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> stava usando Chromium e ha lasciato preferiti, password e altre impostazioni su questo dispositivo.</translation>
 <translation id="3805899903892079518">Chromium non ha accesso alle tue foto o ai tuoi video. Attiva l'accesso in Impostazioni iOS &gt; Privacy &gt; Foto.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
index 5d515191..ec9c35e 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">‏Chromium לא הצליח לבדוק את הסיסמאות שלך. יש לבדוק את החיבור לאינטרנט.</translation>
 <translation id="3472200483164753384">‏אין תמיכה ב-Chromium Canary</translation>
 <translation id="3567399274263440288">‏אפשר להיכנס ל-Chromium באמצעות חשבון Google כדי להפיק את המרב מ-Chromium.</translation>
-<translation id="3619462831205197427">‏יש לך אפשרות להיכנס לאתר הזה, לחשבון Google ול-Chromium.</translation>
 <translation id="3639997914391704523">‏Chromium יכול לבדוק את הסיסמאות כשנכנסים באמצעות חשבון Google.</translation>
 <translation id="3650632991272923014">‏במכשיר הזה נעשה שימוש ב‑Chromium על ידי <ph name="USER_EMAIL1" /> ונשארו סימניות, סיסמאות והגדרות נוספות.</translation>
 <translation id="3805899903892079518">‏ל-Chromium אין גישה לתמונות או לסרטונים שלך. יש להפעיל את הגישה ב'הגדרות iOS' &gt; 'פרטיות' &gt; 'תמונות'.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
index 3aa4192..9b05e82 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium でパスワードを確認できませんでした。インターネット接続を確認してみてください。</translation>
 <translation id="3472200483164753384">Chromium Canary ではサポートされていません</translation>
 <translation id="3567399274263440288">Chromium を最大限に活用するには、Google アカウントで Chromium にログインしてください。</translation>
-<translation id="3619462831205197427">このサイト、Google アカウント、Chromium にログインします。</translation>
 <translation id="3639997914391704523">Google アカウントでログインすると、Chromium でパスワードを確認できるようになります。</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> は Chromium を使用しており、ブックマークやパスワードなどの設定がこのデバイスに残っています。</translation>
 <translation id="3805899903892079518">Chromium で写真または動画にアクセスできません。iOS の [設定] &gt; [プライバシー] &gt; [写真] でアクセスを有効にしてください。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb
index 3713327..2ee0bd0 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium-მა ვერ შეამოწმა თქვენი პაროლები. შეამოწმეთ კავშირი ინტერნეტთან.</translation>
 <translation id="3472200483164753384">მხარდაუჭერელია Chromium Canary-ში</translation>
 <translation id="3567399274263440288">Chromium-ის შესაძლებლობები მაქსიმალურად რომ გამოიყენოთ, შედით Chromium-ში თქვენი Google ანგარიშით.</translation>
-<translation id="3619462831205197427">შედით ამ საიტში, თქვენს Google ანგარიშსა და Chromium-ში.</translation>
 <translation id="3639997914391704523">პაროლების Chromium-ის მეშვეობით შესამოწმებლად შედით სისტემაში თქვენი Google ანგარიშით.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> იყენებდა Chromium-ს და ამ მოწყობილობაზე დატოვა სანიშნეები, პაროლები და სხვა პარამეტრები.</translation>
 <translation id="3805899903892079518">Chromium-ს არ აქვს წვდომა თქვენს ფოტოებსა და ვიდეოებზე. ჩართეთ წვდომა iOS-ის მენიუში: პარამეტრები &gt; კონფიდენციალურობა &gt; ფოტოები.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb
index b592fae8..4a7181b 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium сіздің құпия сөздеріңізді тексере алмады. Интернет байланысын тексеріп көріңіз.</translation>
 <translation id="3472200483164753384">Chromium Canary-де қолдау көрсетілмейді.</translation>
 <translation id="3567399274263440288">Chromium-ді барынша пайдалану үшін оған Google аккаунтыңызбен кіріңіз.</translation>
-<translation id="3619462831205197427">Осы сайтқа, Google аккаунтыңызға және Chromium браузеріне кіріңіз.</translation>
 <translation id="3639997914391704523">Google аккаунтыңызбен кіргенде, Chromium сіздің құпия сөздеріңізді тексере алады.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> Chromium браузерін қолданған еді, сондықтан осы құрылғыда оның бетбелгілері, құпия сөздері және басқа да параметрлері қалып қойды.</translation>
 <translation id="3805899903892079518">Chromium сурет пен бейнелерге кіре алмайды. "iOS параметрлері &gt; Құпиялылық &gt; Фотосуреттер" арқылы рұқсат беру қажет.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb
index cc0e2fc..5c1ef84 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium មិនអាចពិនិត្យ​ពាក្យសម្ងាត់របស់អ្នកបានទេ។ សូមសាកល្បងពិនិត្យ​ការតភ្ជាប់អ៊ីនធឺណិត​របស់អ្នក។</translation>
 <translation id="3472200483164753384">មិនអាចប្រើ​នៅលើ Chromium Canary បានទេ</translation>
 <translation id="3567399274263440288">ដើម្បីទទួលបាន​អត្ថប្រយោជន៍​ច្រើនបំផុត​ពី Chromium សូមចូល Chromium ដោយប្រើ​គណនី Google របស់អ្នក។</translation>
-<translation id="3619462831205197427">ចូល​គេហទំព័រ​នេះ, គណនី Google របស់អ្នក និង Chromium។</translation>
 <translation id="3639997914391704523">Chromium អាចពិនិត្យពាក្យសម្ងាត់របស់អ្នក នៅពេលអ្នកចូល​ដោយប្រើគណនី Google របស់អ្នក។</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> កំពុងប្រើ Chromium និង​ទុកចំណាំ ពាក្យសម្ងាត់ និងការកំណត់​ផ្សេងទៀត​នៅលើ​ឧបករណ៍នេះ។</translation>
 <translation id="3805899903892079518">Chromium មិនមានលទ្ធភាពចូលប្រើរូបថត និងវីដេអូរបស់អ្នកទេ។ សូមបើកដំណើរការចូលប្រើនៅក្នុងការកំណត់ iOS &gt; ភាពឯកជន &gt; រូបថត។</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
index daae8b0..e11b1233 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium ಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಕನೆಕ್ಷನ್ ಪರಿಶೀಲಿಸಿ ನೋಡಿ.</translation>
 <translation id="3472200483164753384">Chromium Canary ನಲ್ಲಿ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</translation>
 <translation id="3567399274263440288">Chromium ನಿಂದ ಹೆಚ್ಚಿನ ಪ್ರಯೋಜನ ಪಡೆದುಕೊಳ್ಳಲು, ನಿಮ್ಮ Google ಖಾತೆಯ ಮೂಲಕ Chromium ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
-<translation id="3619462831205197427">ಈ ಸೈಟ್, ನಿಮ್ಮ Google ಖಾತೆ ಮತ್ತು Chromium ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="3639997914391704523">ನೀವು Google ಖಾತೆಯ ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, Chromium ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಬಹುದು.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" />, Chromium ಅನ್ನು ಬಳಸುತ್ತಿದ್ದರು ಮತ್ತು ಈ ಸಾಧನದಲ್ಲಿ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಉಳಿಸಿದ್ದಾರೆ.</translation>
 <translation id="3805899903892079518">Chromium ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೋಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ. iOS ಸೆಟ್ಟಿಂಗ್‌ಗಳು &gt; ಗೌಪ್ಯತೆ &gt; ಫೋಟೋಗಳಲ್ಲಿ ಪ್ರವೇಶವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
index c371d0b..469e9b4 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium에서 비밀번호를 확인할 수 없습니다. 인터넷 연결 상태를 확인하세요.</translation>
 <translation id="3472200483164753384">Chromium Canary에서 지원되지 않습니다.</translation>
 <translation id="3567399274263440288">Chromium을 최대한 활용하려면 Google 계정으로 Chromium에 로그인하세요</translation>
-<translation id="3619462831205197427">이 사이트, Google 계정, Chromium에 로그인하세요.</translation>
 <translation id="3639997914391704523">Google 계정으로 로그인하면 Chromium에서 비밀번호를 확인할 수 있습니다.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> 계정이 Chromium을 사용했으며 이 기기에 북마크, 비밀번호, 기타 설정을 남겼습니다</translation>
 <translation id="3805899903892079518">Chromium에서 사진 또는 동영상에 액세스할 수 없습니다. 'iOS 설정 &gt; 개인정보 보호 &gt; 사진'에서 액세스를 허용하세요.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb
index 10b8d19..e8996e46 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium сырсөздөрүңүздү текшере алган жок. Интернет байланышын текшерип көрүңүз.</translation>
 <translation id="3472200483164753384">Chromium Canary'де колдоого алынбайт</translation>
 <translation id="3567399274263440288">Chromium'дун бардык мүмкүнчүлүктөрүн пайдалануу үчүн Google аккаунтуңуз менен Chromium'га кириңиз.</translation>
-<translation id="3619462831205197427">Бул сайтка, Google аккаунтуңузга жана Chromium'га кириңиз.</translation>
 <translation id="3639997914391704523">Google аккаунтуңуз менен киргенде Chromium сырсөздөрүңүздү текшерет.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> бул түзмөктө Chromium'ду колдонуп, кыстармаларды, сырсөздөрдү жана башка жөндөөлөрдү өчүрбөй калды.</translation>
 <translation id="3805899903892079518">Chromium сүрөттөрүңүздү же видеолоруңузду көрө албайт. Көрүү үчүн iOS Жөндөөлөрү &gt; Купуялык &gt; Сүрөттөргө өтүңүз.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
index 6f52448..c86a5fe7 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ລອງກວດເບິ່ງການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານ.</translation>
 <translation id="3472200483164753384">ບໍ່ຮອງຮັບໃນ Chromium Canary</translation>
 <translation id="3567399274263440288">ເພື່ອໃຊ້ປະໂຫຍດສູງສຸດຈາກ Chromium, ໃຫ້ເຂົ້າສູ່ລະບົບຫາ Chromium ດ້ວຍບັນຊີ Google ຂອງທ່ານ.</translation>
-<translation id="3619462831205197427">ເຂົ້າສູ່ລະບົບເວັບໄຊນີ້, ບັນຊີ Google ຂອງທ່ານ ແລະ Chromium.</translation>
 <translation id="3639997914391704523">Chromium ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານ ເມື່ອທ່ານເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ Google ຂອງທ່ານໄດ້.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> ກຳລັງໃຊ້ Chromium ຢູ່ ແລະ ເປີດບຸກມາກ, ລະຫັດຜ່ານ ແລະ ການຕັ້ງຄ່າອື່ນໆປະໄວ້ຢູ່ອຸປະກອນນີ້.</translation>
 <translation id="3805899903892079518">Chromium ບໍ່​ມີ​ການ​ເຂົ້າ​ເຖິງ​ຮູບຖ່າຍ ຫຼື ​ວິ​ດີ​ໂອ​ຂອງ​ທ່ານ. ເປີດ​ໃຊ້​ການ​ເຂົ້າເຖິງ​ຢູ່​ໃນ​ການ​ຕັ້ງ​ຄ່າ iOS &gt; Privacy &gt; Photos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb
index 71382bdd..aba7f3d 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">„Chromium“ nepavyko patikrinti jūsų slaptažodžių. Pabandykite patikrinti interneto ryšį.</translation>
 <translation id="3472200483164753384">Nepalaikoma versijoje „Chromium Canary“</translation>
 <translation id="3567399274263440288">Jei norite išnaudoti visas „Chromium“ galimybes, prisijunkite prie „Chromium“ naudodami „Google“ paskyrą.</translation>
-<translation id="3619462831205197427">Prisijunkite prie šios svetainės, „Google“ paskyros ir „Chromium“.</translation>
 <translation id="3639997914391704523">„Chromium“ gali tikrinti jūsų slaptažodžius, kai prisijungiate naudodami „Google“ paskyrą.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> naudojo „Chromium“ ir paliko žymes, slaptažodžius bei kitus nustatymus šiame įrenginyje.</translation>
 <translation id="3805899903892079518">„Chromium“ nepasiekia nuotraukų ar vaizdo įr. Įgalinkite prieigą apsil. „iOS“ nustatymai“ &gt; „Privatumas“ &gt; „Nuotraukos“.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb
index 28e826c..2c7b79b 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Pārlūkprogrammā Chromium nevarēja pārbaudīt jūsu paroles. Pārbaudiet interneta savienojumu.</translation>
 <translation id="3472200483164753384">Netiek atbalstīta pārlūkā Chromium Canary.</translation>
 <translation id="3567399274263440288">Lai pilnvērtīgi izmantotu pārlūku Chromium, pierakstieties tajā, izmantojot savu Google kontu.</translation>
-<translation id="3619462831205197427">Pierakstieties šajā vietnē, savā Google kontā un pārlūkā Chromium.</translation>
 <translation id="3639997914391704523">Pārlūkprogrammā Chromium var pārbaudīt jūsu paroles, ja esat pierakstījies savā Google kontā.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> izmantoja pārlūku Chromium un neizdzēsa grāmatzīmes, paroles un citus iestatījumus šajā ierīcē.</translation>
 <translation id="3805899903892079518">Chromium nevar piekļūt jūsu fotoattēliem un videoklipiem. Iespējojiet piekļuvi: iOS Settings &gt; Privacy &gt; Photos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb
index 3464d339..86a53de 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium не може да ги провери вашите лозинки. Проверете ја интернет-врската.</translation>
 <translation id="3472200483164753384">Не е поддржана на Chromium Canary</translation>
 <translation id="3567399274263440288">За да го извлечете максимумот од Chromium, најавете се на Chromium со вашата сметка на Google.</translation>
-<translation id="3619462831205197427">Најавете се на сајтов, на вашата сметка на Google и на Chromium.</translation>
 <translation id="3639997914391704523">Chromium може да ги проверува вашите лозинки кога ќе се најавите со вашата сметка на Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> користеше Chromium и остави обележувачи, лозинки и други поставки на уредов.</translation>
 <translation id="3805899903892079518">Chromium нема пристап до фотографиите или видеата. Овозможете пристап во Поставки на iOS &gt; Приватност &gt; Фотографии.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb
index c3e66dc7..51cb494 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനായില്ല. നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക.</translation>
 <translation id="3472200483164753384">Chromium Canary-യിൽ പിന്തുണയില്ല</translation>
 <translation id="3567399274263440288">Chromium പരമാവധി പ്രയോജനപ്പെടുത്താൻ, നിങ്ങളുടെ Google അക്കൗണ്ട് ഉപയോഗിച്ച് Chromium-ലേക്ക് സൈൻ ഇൻ ചെയ്യുക.</translation>
-<translation id="3619462831205197427">ഈ സൈറ്റിലും നിങ്ങളുടെ Google അക്കൗണ്ടിലും Chromium-ലും സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="3639997914391704523">Google അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുമ്പോൾ Chromium-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാകും.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> ആണ് Chromium ഉപയോഗിച്ചുകൊണ്ടിരുന്നത്, ഈ വ്യക്തിയുടെ ബുക്ക്‌മാർക്കുകളും പാസ്‌വേഡുകളും മറ്റ് ക്രമീകരണവും ഈ ഉപകരണത്തിലുണ്ട്.</translation>
 <translation id="3805899903892079518">Chromium-ത്തിന് നിങ്ങളുടെ ഫോട്ടോകളിലേക്കോ വീഡിയോകളിലേക്കോ ആക്‌സസ് ഇല്ല. iOS ക്രമീകരണം &gt; സ്വകാര്യത &gt; ഫോട്ടോകൾ എന്നതിൽ ആക്‌സസ് പ്രവർത്തനക്ഷമമാക്കുക.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb
index 91dbaaa..28133005 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium таны нууц үгнүүдийг шалгаж чадсангүй. Интернэт холболтоо шалгаж үзнэ үү.</translation>
 <translation id="3472200483164753384">Chromium Канар дээр дэмжихгүй</translation>
 <translation id="3567399274263440288">Chromium-г бүрэн ашиглахын тулд Chromium-д Google Бүртгэлээрээ нэвтэрнэ үү.</translation>
-<translation id="3619462831205197427">Энэ сайт, өөрийн Google Бүртгэл болон Chromium-д нэвтэрнэ үү.</translation>
 <translation id="3639997914391704523">Chromium нь таныг Google Бүртгэлээрээ нэвтрэх үед таны нууц үгнүүдийг шалгах боломжтой.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> энэ төхөөрөмж дээр Chromium-г ашиглаж байсан бөгөөд хавчуурга, нууц үг болон бусад тохиргоог үлдээсэн.</translation>
 <translation id="3805899903892079518">Chromium-д таны зураг, видеонд хандах зөвшөөрөл байхгүй байна. Хандалтыг iOS Тохиргоо &gt; Нууцлал &gt; Зураг хэсэгт идэвхжүүлээрэй.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
index 76e3d65..6038e80 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium ला तुमचे पासवर्ड तपासता आले नाहीत. तुमचे इंटरनेट कनेक्शन तपासून पहा.</translation>
 <translation id="3472200483164753384">Chromium कॅनरी वर सपोर्ट नाही</translation>
 <translation id="3567399274263440288">Chromium चा पुरेपूर वापर करण्यासाठी, तुमचे Google खाते वापरून Chromium मध्ये साइन इन करा.</translation>
-<translation id="3619462831205197427">ही साइट, तुमचे Google खाते आणि Chromium यांमध्ये साइन इन करा.</translation>
 <translation id="3639997914391704523">तुम्ही तुमचे Google खाते वापरून साइन इन करता तेव्हा, Chromium तुमचे पासवर्ड तपासू शकते.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> हा Chromium वापरत होता आणि त्याने या डिव्हाइसवर बुकमार्क, पासवर्ड आणि इतर सेटिंग्ज ठेवली आहेत.</translation>
 <translation id="3805899903892079518">Chromium ला तुमच्या फोटो किंवा व्हिडिओ ॲक्सेस नाही. iOS सेटिंग्ज&gt; गोपनीयता&gt; फोटो  ॲक्सेस सक्षम करा.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
index 97b161a..ed4f532 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium tidak dapat menyemak kata laluan anda. Cuba periksa sambungan Internet anda.</translation>
 <translation id="3472200483164753384">Tidak disokong pada Chromium Canary</translation>
 <translation id="3567399274263440288">Untuk memanfaatkan Chromium sepenuhnya, log masuk ke Chromium dengan Google Account anda.</translation>
-<translation id="3619462831205197427">Log masuk ke laman ini, Akaun Google anda dan Chromium.</translation>
 <translation id="3639997914391704523">Chromium boleh menyemak kata laluan anda apabila anda log masuk menggunakan Akaun Google anda.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> telah menggunakan Chromium dan membiarkan penanda halaman, kata laluan dan tetapan lain pada peranti ini.</translation>
 <translation id="3805899903892079518">Chromium tidak mempunyai akses kepada foto atau video anda. Dayakan akses dalam Tetapan iOS &gt; Privasi &gt; Foto.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb
index 9e728251..24e054c2 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ သင့်အင်တာနက် ချိတ်ဆက်မှုကို စစ်ဆေးပါ။</translation>
 <translation id="3472200483164753384">Chromium Canary တွင် ပံ့ပိုးမထားပါ</translation>
 <translation id="3567399274263440288">Chromium ကို အကောင်းဆုံးသုံးနိုင်ရန် သင်၏ Google Account ဖြင့် Chromium တွင် လက်မှတ်ထိုးဝင်နိုင်သည်။</translation>
-<translation id="3619462831205197427">ဤဝဘ်ဆိုက်၊ သင်၏ Google Account နှင့် Chromium သို့ လက်မှတ်ထိုးဝင်ပါ။</translation>
 <translation id="3639997914391704523">သင်၏ Google Account နှင့် လက်မှတ်ထိုးဝင်သည့်အခါ Chromium က သင့်စကားဝှက်များကို စစ်ဆေးနိုင်သည်။</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> က Chromium အသုံးပြုလျက်ရှိပြီး ဤစက်တွင် လိပ်စာ၊ စကားဝှက်နှင့် အခြားဆက်တင်များ ချန်ထားသည်။</translation>
 <translation id="3805899903892079518">Chromium သည်သင့်ဓာတ်ပုံများနှင့် ဗီဒီယိုများကို အသုံးပြုခွင့်မရှိပါ။ အသုံးပြုခွင့်ကို iOS ဆက်တင်များ &gt; ကိုယ်ရေးအချက်အလက်လုံခြုံမှု &gt; ဓာတ်ပုံများ တွင်သွားရောက်ဖွင့်နိုင်ပါသည်။</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb
index 3b44576..0a6974bf 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb
@@ -44,7 +44,6 @@
 <translation id="3344973607274501920">Chromium ले तपाईंका पासवर्डहरू जाँच्न सकेन। आफ्नो इन्टरनेट जाँच गरी हेर्नुहोस्।</translation>
 <translation id="3472200483164753384">Chromium क्यानेरीमा प्रयोग गर्न मिल्दैन</translation>
 <translation id="3567399274263440288">Chromium बाट बढीभन्दा बढी फाइदा लिन Chromium मा आफ्नो Google खातामार्फत साइन इन गर्नुहोस्।</translation>
-<translation id="3619462831205197427">यो साइट, आफ्नो Google खाता र Chromium मा साइन इन गर्नुहोस्।</translation>
 <translation id="3639997914391704523">तपाईंले आफ्नो Google खातामा साइन इन गरेपछि मात्र Chromium ले तपाईंका पासवर्डहरू जाँच्न सक्छ।</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> ले Chromium प्रयोग गर्नुभएको थियो तर यो डिभाइसबाट सेभ गरिएका बुकमार्क, पासवर्ड र अन्य सेटिङ मेटाउनुभएको थिएन।</translation>
 <translation id="3805899903892079518">Chromiumसँग तपाईंको तस्बिर वा भिडियोहरूमा पहुँच छैन। iOS सेटिङहरू &gt; गोपनीयता &gt; तस्बिरहरूमा पहुँच अन गर्नुहोस्।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb
index f0e741e..51dec71 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium kan je wachtwoorden niet checken. Check de internetverbinding.</translation>
 <translation id="3472200483164753384">Niet ondersteund in Chromium Canary</translation>
 <translation id="3567399274263440288">Log in bij Chromium met je Google-account om het maximale uit Chromium te halen.</translation>
-<translation id="3619462831205197427">Log in op deze site, op je Google-account en bij Chromium.</translation>
 <translation id="3639997914391704523">Chromium kan je wachtwoorden checken als je inlogt met je Google-account.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> heeft Chromium gebruikt en heeft bookmarks, wachtwoorden en andere instellingen op dit apparaat laten staan.</translation>
 <translation id="3805899903892079518">Chromium heeft geen toegang tot je foto's of video's. Geef in iOS toegang via Instellingen &gt; Privacy &gt; Foto's.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb
index 417be2b..3c79e29 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium kunne ikke sjekke passordene dine. Se om du er koblet til internett.</translation>
 <translation id="3472200483164753384">Støttes ikke i Chromium Canary</translation>
 <translation id="3567399274263440288">For å få mest mulig ut av Chromium, logg på Chromium med Google-kontoen din.</translation>
-<translation id="3619462831205197427">Logg på dette nettstedet, Google-kontoen din og Chromium.</translation>
 <translation id="3639997914391704523">Chromium kan sjekke passordene dine når du logger på med Google-kontoen din.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> har brukt Chromium og etterlatt seg bokmerker, passord og andre innstillinger på denne enheten.</translation>
 <translation id="3805899903892079518">Chromium har ikke tilgang til bildene eller videoene dine. Slå på tilgangen i iOS-innstillingene &gt; Personvern &gt; Bilder.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb
index ccc0a825..a48d5e2 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium ଆପଣଙ୍କ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିଲା ନାହିଁ। ଆପଣଙ୍କ ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ ଯାଞ୍ଚ କରି ଦେଖନ୍ତୁ।</translation>
 <translation id="3472200483164753384">Chromium Canaryରେ ସମର୍ଥିତ ନୁହେଁ</translation>
 <translation id="3567399274263440288">Chromiumରୁ ସବୁଠାରୁ ଅଧିକ ସୁବିଧା ପାଇବା ପାଇଁ, ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ମାଧ୍ୟମରେ Chromiumରେ ସାଇନ ଇନ କରନ୍ତୁ।</translation>
-<translation id="3619462831205197427">ଏହି ସାଇଟ, ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ଏବଂ Chromiumରେ ସାଇନ ଇନ କରନ୍ତୁ।</translation>
 <translation id="3639997914391704523">ଆପଣ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ମାଧ୍ୟମରେ ସାଇନ୍ ଇନ୍ କଲେ, Chromium ଆପଣଙ୍କର ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ।</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> ଏହି ଡିଭାଇସରେ Chromium ବ୍ୟବହାର କରି ବୁକମାର୍କ, ପାସୱାର୍ଡ ଏବଂ ଅନ୍ୟ ସେଟିଂସ ଛାଡ଼ିଛନ୍ତି।</translation>
 <translation id="3805899903892079518">ଆପଣଙ୍କର ଫଟୋ କିମ୍ୱା ଭିଡିଓଗୁଡ଼ିକୁ Chromiumର ଆକ୍ସେସ୍ ନାହିଁ। iOS ସେଟିଂସ୍ &gt; ଗୋପନୀୟତା &gt; ଫଟୋରେ ଆକ୍ସେସ୍‌ ସକ୍ଷମ କରନ୍ତୁ।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb
index d50ea16e..8a836eba 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕਿਆ। ਆਪਣੇ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰਕੇ ਦੇਖੋ।</translation>
 <translation id="3472200483164753384">Chromium Canary 'ਤੇ ਸਮਰਥਿਤ ਨਹੀਂ</translation>
 <translation id="3567399274263440288">Chromium ਦਾ ਵੱਧ ਤੋਂ ਵੱਧ ਲਾਹਾ ਲੈਣ ਲਈ, ਆਪਣੇ Google ਖਾਤੇ ਨਾਲ Chromium ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ।</translation>
-<translation id="3619462831205197427">ਇਸ ਸਾਈਟ, ਆਪਣੇ Google ਖਾਤੇ ਅਤੇ Chromium ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ।</translation>
 <translation id="3639997914391704523">ਤੁਹਾਡੇ ਵੱਲੋਂ ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਨ 'ਤੇ Chromium ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹੈ।</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> ਵੱਲੋਂ Chromium ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਗਈ ਸੀ ਅਤੇ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਬੁੱਕਮਾਰਕ, ਪਾਸਵਰਡ ਅਤੇ ਹੋਰ ਸੈਟਿੰਗਾਂ ਨੂੰ ਆਯਾਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ।</translation>
 <translation id="3805899903892079518">Chromium ਦੀ ਤੁਹਾਡੀਆਂ ਫ਼ੋਟੋਆਂ ਜਾਂ ਵੀਡੀਓ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਹੈ। iOS ਸੈਟਿੰਗਾਂ &gt; ਪਰਦੇਦਾਰੀ &gt; ਫ਼ੋਟੋਆਂ ਵਿੱਚ ਪਹੁੰਚ ਨੂੰ ਚਾਲੂ ਕਰੋ।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
index 570fcdd..553d349 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Przeglądarce Chromium nie udało się sprawdzić Twoich haseł. Sprawdź połączenie z internetem.</translation>
 <translation id="3472200483164753384">Nieobsługiwane w Chromium Canary</translation>
 <translation id="3567399274263440288">Aby w pełni wykorzystać możliwości Chromium, zaloguj się na konto Google.</translation>
-<translation id="3619462831205197427">Zaloguj się na tej stronie, na swoim koncie Google i w Chromium.</translation>
 <translation id="3639997914391704523">Chromium może sprawdzić Twoje hasła, gdy zalogujesz się na swoje konto Google.</translation>
 <translation id="3650632991272923014">Użytkownik <ph name="USER_EMAIL1" /> korzystał z Chromium i zapisał na tym urządzeniu swoje zakładki, hasła i inne ustawienia.</translation>
 <translation id="3805899903892079518">Chromium nie ma dostępu do Twoich zdjęć ani filmów. Aby włączyć dostęp w iOS, wybierz Ustawienia &gt; Prywatność &gt; Zdjęcia.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
index 7920b2b7..298b922a 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Não foi possível verificar suas senhas com o Chromium. Verifique sua conexão de Internet.</translation>
 <translation id="3472200483164753384">Indisponível no Chromium Canary</translation>
 <translation id="3567399274263440288">Para aproveitar o Chromium ao máximo, faça login na sua Conta do Google.</translation>
-<translation id="3619462831205197427">Faça login neste site, na sua Conta do Google e no Chromium.</translation>
 <translation id="3639997914391704523">O Chromium pode verificar suas senhas quando você faz login com sua Conta do Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> estava usando o Chromium e deixou favoritos, senhas e outras configurações neste dispositivo.</translation>
 <translation id="3805899903892079518">O Chromium não têm acesso às suas fotos ou seus vídeos. Permita o acesso em "Configurações do iOS" &gt; "Privacidade" &gt; "Fotos".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb
index 064d459..0881d5a3 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">O Chromium não conseguiu verificar as suas palavras-passe. Experimente verificar a sua ligação à Internet.</translation>
 <translation id="3472200483164753384">Opção não suportada no Chromium Canary.</translation>
 <translation id="3567399274263440288">Para tirar o máximo partido do Chromium, inicie sessão no mesmo com a sua Conta Google.</translation>
-<translation id="3619462831205197427">Inicie sessão neste site, na sua Conta Google e no Chromium.</translation>
 <translation id="3639997914391704523">O Chromium pode verificar as suas palavras-passe quando inicia sessão com a sua Conta Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> estava a utilizar o Chromium e deixou marcadores, palavras-passe e outras definições neste dispositivo.</translation>
 <translation id="3805899903892079518">O Chromium não tem acesso aos seus vídeos ou fotos. Ative o acesso nas Definições do iOS &gt; Privacidade &gt; Fotos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb
index d8abbf0..c5c69a2 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium nu a putut verifica parolele. Verifică-ți conexiunea la internet.</translation>
 <translation id="3472200483164753384">Nu se acceptă în Chromium Canary</translation>
 <translation id="3567399274263440288">Pentru a profita din plin de Chromium, conectează-te la Chromium folosind Contul Google.</translation>
-<translation id="3619462831205197427">Conectează-te la acest site, la Contul Google și la Chromium.</translation>
 <translation id="3639997914391704523">Chromium poate să îți verifice parolele atunci când te conectezi folosind Contul Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> folosea Chromium și marcajele, parolele și alte setări ale sale au rămas pe acest dispozitiv.</translation>
 <translation id="3805899903892079518">Chromium nu are acces la fotografii și videoclipuri. Activează accesul din Setări iOS &gt; Confidențialitate &gt; Fotografii.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
index 6a283e43..c8a5e71 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Не удается проверить пароли в браузере Chromium. Проверьте подключение к Интернету.</translation>
 <translation id="3472200483164753384">Проверка не поддерживается в Chromium Canary.</translation>
 <translation id="3567399274263440288">Чтобы пользоваться всеми возможностями браузера Chromium, войдите в аккаунт Google.</translation>
-<translation id="3619462831205197427">Войдите на этот сайт, в аккаунт Google и в Chromium.</translation>
 <translation id="3639997914391704523">Chromium сможет проверить ваши пароли, если вы войдете в аккаунт Google.</translation>
 <translation id="3650632991272923014">Пользователь <ph name="USER_EMAIL1" />, который работал с Chromium на этом устройстве, не удалил свои закладки, пароли и другие настройки</translation>
 <translation id="3805899903892079518">У Chromium нет доступа к вашим фото и видео. Чтобы предоставить его, нажмите "Настройки &gt; Конфиденциальность &gt; Фотографии".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb
index f7b72f0..8073a6b 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium හට ඔබේ මුරපද පරීක්ෂා කළ නොහැකි විය. ඔබේ අන්තර්ජාල සම්බන්ධතාව පරීක්‍ෂා කිරීමට උත්සාහ කරන්න.</translation>
 <translation id="3472200483164753384">Chromium කැනරි තුළ සහාය නොදක්වයි</translation>
 <translation id="3567399274263440288">Chromium වෙතින් උපරිම ප්‍රයෝජන ලබා ගැනීමට, ඔබගේ Google ගිණුම සමඟ Chromium වෙත පුරන්න.</translation>
-<translation id="3619462831205197427">මෙම අඩවිය, ඔබගේ Google ගිණුම සහ Chromium වෙත පුරන්න.</translation>
 <translation id="3639997914391704523">ඔබ ඔබේ Google ගිණුම සමග පුරන විට Chromium හට ඔබේ මුරපද පරීක්ෂා කළ හැකිය.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> Chromium භාවිත කරමින් සිටි අතර මෙම උපාංගයේ පිටුසන්, මුරපද සහ වෙනත් සැකසීම් තබා ඇත.</translation>
 <translation id="3805899903892079518">Chromium හට ඔබේ ඡායාරූප හෝ වීඩියෝවලට ප්‍රවේශය නැත. iOS සැකසීම් &gt; රහස්‍යතාව &gt; ඡායාරූප තුළ ප්‍රවේශය සබල කරන්න.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb
index e01a0d7..a5d27ac7 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Prehliadaču Chromium sa nepodarilo skontrolovať heslá. Skontrolujte internetové pripojenie.</translation>
 <translation id="3472200483164753384">Nepodporované vo verzii Chromium Canary</translation>
 <translation id="3567399274263440288">Ak chcete využívať Chromium naplno, prihláste sa doň svojím účtom Google.</translation>
-<translation id="3619462831205197427">Prihláste sa na tomto webe, do svojho účtu Google aj prehliadača Chromium.</translation>
 <translation id="3639997914391704523">Keď sa prihlásite účtom Google, Chromium môže skontrolovať vaše heslá.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> používal(a) Chromium a zanechal(a) záložky, heslá a ďalšie nastavenia v tomto zariadení.</translation>
 <translation id="3805899903892079518">Chromium nemá prístup k vašim fotkám ani videám. Prístup povoľte v časti Nastavenia systému iOS &gt; Súkromie &gt; Fotky.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb
index 42472013..7f998f8 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromiumu ni uspelo preveriti vaših gesel. Poskusite preveriti internetno povezavo.</translation>
 <translation id="3472200483164753384">Ni podprto v Chromiumu Canary</translation>
 <translation id="3567399274263440288">Če želite kar najbolje izkoristiti Chromium, se prijavite vanj z računom Google.</translation>
-<translation id="3619462831205197427">Prijavite se na tem spletnem mestu, v svoj račun Google in Chromium.</translation>
 <translation id="3639997914391704523">Chromium lahko preveri vaša gesla, ko se prijavite z računom Google.</translation>
 <translation id="3650632991272923014">Uporabnik <ph name="USER_EMAIL1" /> je uporabljal Chromium in pustil zaznamke, gesla in druge nastavitve v tej napravi.</translation>
 <translation id="3805899903892079518">Chromium nima dostopa do fotografij ali videoposnetkov. Omogočite dostop v sistemu iOS: Settings &gt; Privacy &gt; Photos.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
index 2614d1e..3442362 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium nuk mund t'i kontrollonte fjalëkalimet e tua. Provo të kontrollosh lidhjen e internetit.</translation>
 <translation id="3472200483164753384">Nuk mbështetet në Chromium Canary</translation>
 <translation id="3567399274263440288">Për të marrë maksimumin nga Chromium, identifikohu në Chromium me "Llogarinë tënde të Google".</translation>
-<translation id="3619462831205197427">Identifikohu në këtë sajt, "Llogarinë tënde të Google" dhe Chromium.</translation>
 <translation id="3639997914391704523">Chromium mund t'i kontrollojë fjalëkalimet e tua kur të identifikohesh me "Llogarinë tënde të Google".</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> po përdorte Chromium dhe ka lënë faqeshënues, fjalëkalime dhe cilësime të tjera në këtë pajisje.</translation>
 <translation id="3805899903892079518">Chromium nuk ka qasje te fotografitë apo videot e tua. Aktivizo qasjen te Cilësimet e iOS &gt; Privatësia &gt; Fotografitë.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb
index 204ccce7..7115de2 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium nije uspeo da vam proveri lozinke. Proverite internet vezu.</translation>
 <translation id="3472200483164753384">Nije podržano u verziji Chromium Canary</translation>
 <translation id="3567399274263440288">Da biste koristili Chromium na najbolji način, prijavite se na Chromium pomoću Google naloga.</translation>
-<translation id="3619462831205197427">Prijavite se na ovaj sajt, Google nalog i u Chromium.</translation>
 <translation id="3639997914391704523">Chromium može da vam proverava lozinke kada se prijavite pomoću Google naloga.</translation>
 <translation id="3650632991272923014">Korisnik <ph name="USER_EMAIL1" /> je koristio Chromium i ostavio obeleživače, lozinke i druga podešavanja na ovom uređaju.</translation>
 <translation id="3805899903892079518">Chromium ne može da pristupa slikama ili video snimcima. Omogućite pristup u iOS Settings (Podešavanja iOS-a) &gt; Privacy (Privatnost) &gt; Photos (Slike).</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb
index 0f54d35..48da1a7 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium није успео да вам провери лозинке. Проверите интернет везу.</translation>
 <translation id="3472200483164753384">Није подржано у верзији Chromium Canary</translation>
 <translation id="3567399274263440288">Да бисте користили Chromium на најбољи начин, пријавите се на Chromium помоћу Google налога.</translation>
-<translation id="3619462831205197427">Пријавите се на овај сајт, Google налог и у Chromium.</translation>
 <translation id="3639997914391704523">Chromium може да вам проверава лозинке када се пријавите помоћу Google налога.</translation>
 <translation id="3650632991272923014">Корисник <ph name="USER_EMAIL1" /> је користио Chromium и оставио обележиваче, лозинке и друга подешавања на овом уређају.</translation>
 <translation id="3805899903892079518">Chromium не може да приступа сликама или видео снимцима. Омогућите приступ у iOS Settings (Подешавања iOS-а) &gt; Privacy (Приватност) &gt; Photos (Слике).</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sv.xtb
index d85422ff..752dac6 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sv.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sv.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium kunde inte kontrollera dina lösenord. Testa att kontrollera internetanslutningen.</translation>
 <translation id="3472200483164753384">Stöds inte på Chromium Canary</translation>
 <translation id="3567399274263440288">Logga in i Chromium med Google-kontot så att du får ut mesta möjliga av programmet.</translation>
-<translation id="3619462831205197427">Logga in på den här webbplatsen, i ditt Google-konto och i Chromium.</translation>
 <translation id="3639997914391704523">Chromium kan kontrollera dina lösenord när du loggar in med Google-kontot.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> använde Chromium och har lämnat kvar bokmärken, lösenord och andra inställningar på enheten.</translation>
 <translation id="3805899903892079518">Chromium har inte åtkomst till dina foton eller videor. Aktivera åtkomst i iOS-inställningar &gt; Integritet &gt; Foton.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sw.xtb
index 00ec6f0..e275364a 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sw.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sw.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium imeshindwa kukagua manenosiri yako. Jaribu kuangalia muunganisho wako wa Intaneti.</translation>
 <translation id="3472200483164753384">Haitumiki kwenye Chromium Canary (toleo la jaribio)</translation>
 <translation id="3567399274263440288">Ili unufaike zaidi na Chromium, ingia kwenye Chromium ukitumia Akaunti yako ya Google.</translation>
-<translation id="3619462831205197427">Ingia katika tovuti hii, Akaunti yako ya Google na Chromium.</translation>
 <translation id="3639997914391704523">Chromium inaweza kukagua manenosiri yako unapoingia ukitumia Akaunti ya Google.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> alikuwa akitumia Chromium na akaacha alamisho, manenosiri na mipangilio mingine kwenye kifaa hiki.</translation>
 <translation id="3805899903892079518">Chromium haina uwezo wa kufikia picha au video zako. Washa uwezo wa kufikia katika Mipangilio ya iOS &gt; Faragha &gt; Picha.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
index 6e04674d..76d3694e 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium உலாவியால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை. இணைய இணைப்பைச் சரிபார்க்கவும்.</translation>
 <translation id="3472200483164753384">Chromium Canaryயில் ஆதரிக்கப்படாது</translation>
 <translation id="3567399274263440288">Chromiumமில் இருந்து அதிகப் பலன்களைப் பெற, உங்கள் Google கணக்கின் மூலம் Chromiumமில் உள்நுழையவும்.</translation>
-<translation id="3619462831205197427">இந்தத் தளம், உங்கள் Google கணக்கு, Chromium ஆகியவற்றில் உள்நுழையுங்கள்.</translation>
 <translation id="3639997914391704523">நீங்கள் Google கணக்கைக் கொண்டு உள்நுழையும்போது Chromium உலாவியால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியும்.</translation>
 <translation id="3650632991272923014">Chromiumமை <ph name="USER_EMAIL1" /> பயன்படுத்திக் கொண்டிருந்தார். அவர் பயன்படுத்திய புக்மார்க்குகள், கடவுச்சொற்கள், பிற அமைப்புகள் ஆகியவை இந்தச் சாதனத்தில் சேமிக்கப்பட்டுள்ளன.</translation>
 <translation id="3805899903892079518">Chromiumமுக்குப் படங்களையோ வீடியோக்களையோ அணுக அனுமதி இல்லை. அணுகலை 'iOS அமைப்புகள் &gt; தனியுரிமை &gt; படங்கள்' என்பதில் இயக்கவும்.</translation>
@@ -120,6 +119,7 @@
 <translation id="8586442755830160949">பதிப்புரிமை <ph name="YEAR" /> Chromium உருவாக்குநர்கள். அனைத்து உரிமைகளும் பாதுகாக்கப்பட்டவை.</translation>
 <translation id="865600487977764604">Chromiumமைப் பயன்படுத்தும்போது இது பாதுகாப்பை வழங்கும், அத்துடன் நீங்கள் பிற Google ஆப்ஸில் உள்நுழைந்திருக்கும்போது உங்கள் பாதுகாப்பை மேம்படுத்துவதற்காகவும் இதைப் பயன்படுத்தலாம்.</translation>
 <translation id="8663480472502753423">Chromiumமைச் சமீபத்திய பதிப்பில் வைத்திருக்கும்</translation>
+<translation id="8685813584220679697">இந்தத் தளத்திலும் Chromiumமிலும் உள்நுழையுங்கள்.</translation>
 <translation id="8747378496147986285">இயக்கப்பட்டிருக்கும்போது:
 <ph name="BEGIN_INDENT" />  • உங்களைப் போன்ற பயனர்களுக்காக Chromiumமை மேம்படுத்த உதவுங்கள்.<ph name="END_INDENT" />
 
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb
index 2f36240..c24f7bb 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromiumకు మీ పాస్‌వర్డ్‌లను చెక్ చేయడం సాధ్యపడలేదు. మీ ఇంటర్నెట్ కనెక్షన్‌ను చెక్ చేసి, ట్రై చేయండి.</translation>
 <translation id="3472200483164753384">Chromium కెనరీలో సపోర్ట్ చేయదు</translation>
 <translation id="3567399274263440288">Chromium నుండి అత్యంత ఎక్కువ ప్రయోజనం పొందడం కోసం, మీ Google ఖాతాతో Chromiumకు సైన్ ఇన్ చేయండి.</translation>
-<translation id="3619462831205197427">ఈ సైట్‌కు, మీ Google ఖాతాకు, Chromiumకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="3639997914391704523">మీరు మీ Google ఖాతాతో సైన్ ఇన్ చేసినప్పుడు, Chromium మీ పాస్‌వర్డ్‌లను చెక్ చేయగలదు.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> Chromiumను ఉపయోగిస్తూ, బుక్‌మార్క్‌లు, పాస్‌వర్డ్‌లు, ఇతర సెట్టింగ్‌లను ఈ పరికరంలో అలాగే ఉంచారు.</translation>
 <translation id="3805899903892079518">Chromium మీ ఫోటోలు లేదా వీడియోలకు యాక్సెస్‌ను కలిగి లేదు. iOS సెట్టింగ్‌లు &gt; గోప్యత &gt; ఫోటోల్లో యాక్సెస్‌ను ప్రారంభించండి.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
index 88c4fa9..4907bf36 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดลองตรวจสอบการเชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="3472200483164753384">ไม่รองรับใน Chromium Canary</translation>
 <translation id="3567399274263440288">ลงชื่อเข้าใช้ Chromium ด้วยบัญชี Google เพื่อรับประโยชน์สูงสุดจาก Chromium</translation>
-<translation id="3619462831205197427">ลงชื่อเข้าใช้เว็บไซต์นี้ บัญชี Google และ Chromium</translation>
 <translation id="3639997914391704523">Chromium จะตรวจสอบรหัสผ่านได้เมื่อคุณลงชื่อเข้าใช้ด้วยบัญชี Google</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> ได้ใช้ Chromium และเก็บบุ๊กมาร์ก รหัสผ่าน รวมถึงการตั้งค่าอื่นๆ ไว้ในอุปกรณ์นี้</translation>
 <translation id="3805899903892079518">Chromium ไม่มีสิทธิ์เข้าถึงรูปภาพหรือวิดีโอของคุณ เปิดใช้การเข้าถึงได้ในการตั้งค่า iOS &gt; ความเป็นส่วนตัว &gt; รูปภาพ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb
index c675726..846644a 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium, şifrelerinizi kontrol edemedi. İnternet bağlantınızı kontrol etmeyi deneyin.</translation>
 <translation id="3472200483164753384">Chromium Canary'de desteklenmiyor</translation>
 <translation id="3567399274263440288">Chromium'dan en iyi şekilde yararlanmak için Google Hesabı'nızla Chromium'da oturum açın.</translation>
-<translation id="3619462831205197427">Bu sitede, Google Hesabınızda ve Chromium'da oturum açın.</translation>
 <translation id="3639997914391704523">Chromium, Google Hesabınızla oturum açtığınızda şifrelerinizi kontrol edebilir.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" />, Chromium'u kullanıyordu, ardından yer işaretlerini, şifrelerini ve diğer ayarlarını bu cihazda bıraktı.</translation>
 <translation id="3805899903892079518">Chromium, fotoğraflarınıza veya videolarınıza erişemiyor. iOS Ayarlar &gt; Gizlilik &gt; Fotoğraflar'dan erişimi etkinleştirin.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb
index c4b5e26..76b89df1 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium не вдалося перевірити паролі. Переконайтеся, що є інтернет-з'єднання.</translation>
 <translation id="3472200483164753384">Не підтримується в Chromium Canary</translation>
 <translation id="3567399274263440288">Щоб користуватися всіма можливостями Chromium, увійдіть в обліковий запис Google у цьому веб-переглядачі.</translation>
-<translation id="3619462831205197427">Увійдіть в облікові записи цього сайту, Google і Chromium.</translation>
 <translation id="3639997914391704523">Chromium зможе перевірити ваші паролі, коли ви ввійдете в обліковий запис Google.</translation>
 <translation id="3650632991272923014">Користувач <ph name="USER_EMAIL1" /> застосовував Chromium і зберіг закладки, паролі й інші налаштування на цьому пристрої.</translation>
 <translation id="3805899903892079518">Chromium не має доступу до ваших фото чи відео. Надайте доступ у меню iOS "Параметри &gt; Конфіденційність &gt; Фото".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb
index d62d50ee..109f4a1 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">‏Chromium آپ کے پاس ورڈز چیک نہیں کر سکا۔ اپنا انٹرنیٹ کنکشن چیک کرنے کی کوشش کریں۔</translation>
 <translation id="3472200483164753384">‏Chromium Canary پر تعاون یافتہ نہیں ہے</translation>
 <translation id="3567399274263440288">‏Chromium سے بھرپور فائدہ اٹھانے کے لیے اپنے Google اکاؤنٹ کے ساتھ Chromium میں سائن ان کریں۔</translation>
-<translation id="3619462831205197427">‏اپنے Google اکاؤنٹ اور Chromium سے اس سائٹ میں سائن ان کریں۔</translation>
 <translation id="3639997914391704523">‏جب آپ اپنے Google اکاؤنٹ سے سائن ان کرتے ہیں تو Chromium آپ کے پاس ورڈز کو چیک کر سکتا ہے۔</translation>
 <translation id="3650632991272923014">‏<ph name="USER_EMAIL1" /> Chromium استعمال کر رہا تھا اور اس آلہ پر بُک مارکس، پاس ورڈز اور دیگر ترتیبات چھوڑ دی ہیں۔</translation>
 <translation id="3805899903892079518">‏Chromium کو آپ کی تصاویر یا ویڈیوز تک رسائی حاصل نہیں ہے۔ iOS ترتیبات &gt; رازداری &gt; تصاویر میں رسائی کو فعال کریں۔</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb
index 8bdeec3..6cde477 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb
@@ -44,7 +44,6 @@
 <translation id="3344973607274501920">Chromium parollaringizni tekshira olmadi. Internet aloqasini tekshiring.</translation>
 <translation id="3472200483164753384">Chromium Canary nashrida ishlamaydi</translation>
 <translation id="3567399274263440288">Chromium imkoniyatlaridan maksimal foydalanish uchun Chromiumga Google hisobingiz bilan kiring.</translation>
-<translation id="3619462831205197427">Bu sayt, Google va Chromium hisoblaringizga kiring.</translation>
 <translation id="3639997914391704523">Google hisobingizga kirsangiz, Chromium parollaringizni tekshira oladi.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> Chromium ishlatardi va bu qurilmada uning bukmarklar, parollar va boshqa sozlamalari qolgan.</translation>
 <translation id="3805899903892079518">Chromium rasm va videolaringizni ko‘ra olmayapti. “Sozlamalar &gt; Maxfiylik &gt; Rasmlar” oynasi orqali ruxsat bering.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb
index 9f018a9..831d4df 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium không thể kiểm tra mật khẩu của bạn. Hãy thử kiểm tra kết nối Internet.</translation>
 <translation id="3472200483164753384">Chưa hỗ trợ trên Chromium Canary</translation>
 <translation id="3567399274263440288">Để khai thác tối đa Chromium, hãy đăng nhập vào Chromium bằng Tài khoản Google của bạn.</translation>
-<translation id="3619462831205197427">Đăng nhập vào trang web này, Tài khoản Google của bạn và Chromium.</translation>
 <translation id="3639997914391704523">Chromium có thể kiểm tra mật khẩu khi bạn đăng nhập bằng Tài khoản Google của mình.</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> đã dùng Chromium và lưu lại dấu trang, mật khẩu cũng như các chế độ cài đặt khác trên thiết bị này.</translation>
 <translation id="3805899903892079518">Chromium không có quyền truy cập ảnh hoặc video của bạn. Hãy cho phép truy cập Cài đặt iOS &gt; Bảo mật &gt; Ảnh.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb
index 5804288..fdc7281f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium 无法检查您的密码。请尝试检查您的互联网连接。</translation>
 <translation id="3472200483164753384">在 Chromium Canary 版中不受支持</translation>
 <translation id="3567399274263440288">若要充分利用 Chromium,请使用您的 Google 帐号登录 Chromium。</translation>
-<translation id="3619462831205197427">登录此网站、您的 Google 帐号和 Chromium。</translation>
 <translation id="3639997914391704523">您需要先登录 Google 帐号才能使用 Chromium 的密码检查功能。</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> 原本使用 Chromium,并在此设备上保存了书签、密码及其他设置。</translation>
 <translation id="3805899903892079518">Chromium 无权访问您的照片或视频。请依次点按 iOS 中的“设置”&gt;“隐私”&gt;“照片”,授予其访问权限。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
index 3beadf5..d071e04 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium 無法檢查密碼,請檢查互聯網連線。</translation>
 <translation id="3472200483164753384">Chromium Canary 上不支援此功能</translation>
 <translation id="3567399274263440288">如要充分運用 Chromium 的所有功能,請透過 Google 帳戶登入 Chromium。</translation>
-<translation id="3619462831205197427">登入此網站、您的 Google 帳戶及 Chromium。</translation>
 <translation id="3639997914391704523">Chromium 可在您使用 Google 帳戶登入時檢查密碼。</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> 之前曾在此裝置上使用 Chromium,並儲存書籤、密碼和其他設定。</translation>
 <translation id="3805899903892079518">Chromium 沒有存取相片或影片的權限。請前往「iOS 設定」&gt;「私隱」&gt;「相片」開放權限。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb
index f3d0a90..c170d841 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">Chromium 無法檢查你的密碼,請查看網際網路連線狀態。</translation>
 <translation id="3472200483164753384">Chromium Canary 不支援這項功能</translation>
 <translation id="3567399274263440288">如要充分運用 Chromium 的所有功能,請透過 Google 帳戶登入 Chromium。</translation>
-<translation id="3619462831205197427">登入這個網站、Google 帳戶和 Chromium。</translation>
 <translation id="3639997914391704523">如果你使用 Google 帳戶登入,Chromium 可以檢查你的密碼。</translation>
 <translation id="3650632991272923014"><ph name="USER_EMAIL1" /> 原本使用 Chromium,並將書籤、密碼和其他設定儲存在裝置上。</translation>
 <translation id="3805899903892079518">Chromium 無法存取您的相片或影片,請前往「iOS 設定」中的 [隱私權] &gt; [相片] 啟用存取權。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb
index c864d68..d4805d6 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb
@@ -45,7 +45,6 @@
 <translation id="3344973607274501920">I-Chromium ayikwazanga ukuhlola iphasiwedi yakho. Zama ukuhlola ukuxhumeka kwakho ku-inthanethi.</translation>
 <translation id="3472200483164753384">Ayisekelwe ku-Chromium Canary</translation>
 <translation id="3567399274263440288">Ukuze uthole okuningi kwe-Chromium, ngena ngemvume ku-Chromium nge-Google Account yakho</translation>
-<translation id="3619462831205197427">Ngena ngemvume kuleli sayithi, i-Google Account yakho, ne-Chromium.</translation>
 <translation id="3639997914391704523">I-Chromium ingahlola amaphasiwedi akho uma ungena ngemvume nge-Akhawunti yakho ye-Google.</translation>
 <translation id="3650632991272923014">U-<ph name="USER_EMAIL1" /> ubesebenzisa i-Chromium futhi washiya amabhukhimakhi, amaphasiwedi, namanye amasethingi kule divayisi.</translation>
 <translation id="3805899903892079518">I-Chromium ayinakho ukufinyelela kuzithombe zakho noma amavidiyo. Nika amandla ukufinyelela kuzilungiselelo ze-iOS &gt; Ubumfihlo &gt; Izithombe.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
index 00d62c3..4a07a04 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome spaar jou tyd deur jou rekeninge na die web te bring. Jy kan rekeninge in instellings byvoeg of verwyder.</translation>
 <translation id="3282568296779691940">Meld by Chrome aan</translation>
 <translation id="3345341804167540816">Gebruik Chrome oral</translation>
-<translation id="3428998300753080128">Meld by hierdie werf, jou Google-rekening en Chrome aan.</translation>
 <translation id="3522659714780527202">Skakel sinkronisering aan om jou oortjies te sien van waar ook al jy Chrome gebruik</translation>
 <translation id="3533694711092285624">Geen gestoorde wagwoorde nie. Chrome kan jou wagwoorde nagaan wanneer jy hulle stoor.</translation>
 <translation id="3641179212828090796">Gebruik die wagwoord wat jy in Chrome gestoor het om vinniger aan te meld</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
index 95ea24d..b4617f28 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome የእርስዎን መለያዎች ወደ ድር በማምጣት ጊዜ ይቆጥብልዎለታል። ቅንብሮች ውስጥ መለያዎችን ማከል ወይም ማስወገድ ይችላሉ።</translation>
 <translation id="3282568296779691940">Chrome ውስጥ ይግቡ</translation>
 <translation id="3345341804167540816">Chromeን በየትኛውም ቦታ ይጠቀሙበት</translation>
-<translation id="3428998300753080128">ወደዚህ ጣቢያ፣ የእርስዎ Google መለያ እና Chrome ይግቡ።</translation>
 <translation id="3522659714780527202">Chromeን ከሚጠቀሙበት የትኛዉም ቦታ ትሮችን ለማየት ስምረትን ያብሩ</translation>
 <translation id="3533694711092285624">ምንም የተቀመጡ የይለፍ ቃላት የሉም። Chrome እርስዎ ሲያስቀምጧቸው የእርስዎን የይለፍ ቃላት መፈተሽ ይችላል።</translation>
 <translation id="3641179212828090796">በፍጥነት ለመግባት በChrome ውስጥ ያስቀመጡትን ይለፍ ቃል ይጠቀሙ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb
index 68d4365..783307d 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">‏يوفر Chrome وقتك من خلال تجميع حساباتك على شبكة الإنترنت. ويمكنك إضافة أو إزالة حسابات في الإعدادات.</translation>
 <translation id="3282568296779691940">‏تسجيل الدخول إلى Chrome</translation>
 <translation id="3345341804167540816">‏استخدم Chrome في كل مكان</translation>
-<translation id="3428998300753080128">‏يُرجى تسجيل الدخول إلى الموقع الإلكتروني هذا وإلى حسابك على Google وChrome.</translation>
 <translation id="3522659714780527202">‏للاطّلاع على علامات التبويب من أي جهاز تستخدم فيه Chrome، فعِّل المزامنة.</translation>
 <translation id="3533694711092285624">‏ما مِن كلمات مرور محفوظة. لا يستطيع متصفّح Chrome التحقّق من كلمات المرور إلا عند حفظها.</translation>
 <translation id="3641179212828090796">‏يمكنك استخدام كلمة المرور المحفوظة في Chrome لتسجيل الدخول بشكل أسرع.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb
index 17db841..5439c87 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">আপোনাৰ একাউণ্টসমূহ ৱেবলৈ আনি Chromeএ আপোনাৰ সময় ৰাহি কৰে। আপুনি ছেটিংসমূহ-ত একাউন্ট যোগ দিব বা আঁতৰাব পাৰে।</translation>
 <translation id="3282568296779691940">Chromeত ছাইন-ইন কৰক</translation>
 <translation id="3345341804167540816">সকলোতে Chrome ব্যৱহাৰ কৰক</translation>
-<translation id="3428998300753080128">এইটো ছাইট, আপোনাৰ Google একাউণ্ট আৰু Chromeত ছাইন ইন কৰক।</translation>
 <translation id="3522659714780527202">আপুনি Chrome ব্যৱহাৰ কৰা সকলো ডিভাইচৰ পৰা নিজৰ টেবসমূহ চাবলৈ ছিংক অন কৰক</translation>
 <translation id="3533694711092285624">ছেভ কৰা কোনো পাছৱৰ্ড নাই। আপুনি আপোনাৰ পাছৱর্ডসমূহ ছেভ কৰিলে Chromeএ সেইবোৰ পৰীক্ষা কৰিব পাৰে।</translation>
 <translation id="3641179212828090796">দ্ৰুতভাৱে ছাইন ইন কৰিবলৈ আপুনি Chromeত ছেভ কৰি থোৱা পাছৱৰ্ডটো ব্যৱহাৰ কৰক</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
index aa37d28..ff703a3 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome hesablarınızı vebə gətirməklə vaxtınıza qənaət edir. Hesabları Ayarlar bölməsindən əlavə edə və ya silə bilərsiniz.</translation>
 <translation id="3282568296779691940">Chrome'a daxil olun</translation>
 <translation id="3345341804167540816">Chrome'u Hər yerdə İstifadə edin</translation>
-<translation id="3428998300753080128">Bu sayta, Google hesabınıza və Chrome'a daxil olun.</translation>
 <translation id="3522659714780527202">Chrome istifadə etdiyiniz hər yerdən tabları görmək üçün sinxronizasiyanı aktiv edin</translation>
 <translation id="3533694711092285624">Yadda saxlanmış parol yoxdur. Parollarınızı yadda saxladıqda Chrome onları yoxlaya bilər.</translation>
 <translation id="3641179212828090796">Sürətli daxil olmaq üçün Chrome'da saxladığınız paroldan istifadə edin</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb
index 916a819..863879b 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome зберагае вам час, злучаючы вашы ўліковыя запісы з інтэрнэтам. Вы можаце дадаваць або выдаляць уліковыя запісы ў "Наладах".</translation>
 <translation id="3282568296779691940">Увайсці ў Chrome</translation>
 <translation id="3345341804167540816">Выкарыстоўвайце Chrome усюды</translation>
-<translation id="3428998300753080128">Выканайце ўваход на сайт, ва Уліковы запіс Google і ў браўзер Chrome.</translation>
 <translation id="3522659714780527202">Каб мець доступ да сваіх укладак з усіх прылад, на якіх вы выкарыстоўваеце Chrome, уключыце сінхранізацыю</translation>
 <translation id="3533694711092285624">Няма захаваных пароляў. Chrome можа правяраць толькі захаваныя паролі.</translation>
 <translation id="3641179212828090796">Для больш хуткага ўваходу выкарыстоўвайце пароль, які вы захавалі ў Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb
index eea7f104..81fe1a47 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">С Chrome спестявате време, като свързвате профилите си с мрежата. Можете да добавяте или премахвате профили от настройките.</translation>
 <translation id="3282568296779691940">Вход в Chrome</translation>
 <translation id="3345341804167540816">Използвайте Chrome навсякъде</translation>
-<translation id="3428998300753080128">Влезте в този сайт, профила си в Google и Chrome.</translation>
 <translation id="3522659714780527202">Включете синхронизирането, за да виждате разделите си навсякъде, където използвате Chrome</translation>
 <translation id="3533694711092285624">Няма запазени пароли. Chrome може да проверява паролите ви, когато ги запазите.</translation>
 <translation id="3641179212828090796">Използвайте запазената в Chrome парола, за да влизате по-бързо в профила си</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb
index 48b7965d..942cfc2 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome আপনার অ্যাকাউন্টগুলিকে ওয়েবে নিয়ে এসে আপনার সময় বাঁচায়। আপনি সেটিংস থেকে অ্যাকাউন্ট জুড়তে বা সরাতে পারবেন।</translation>
 <translation id="3282568296779691940">Chrome-এ সাইন-ইন করুন</translation>
 <translation id="3345341804167540816">Chrome সব জায়গায় ব্যবহার করুন</translation>
-<translation id="3428998300753080128">এই সাইট, আপনার Google অ্যাকাউন্ট ও Chrome-এ সাইন-ইন করুন।</translation>
 <translation id="3522659714780527202">সিঙ্ক চালু করে রাখুন, যাতে আপনি যেখান থেকেই Chrome ব্যবহার করুন না কেন, সেখানেই আপনি নিজের ট্যাবগুলি দেখতে পারেন</translation>
 <translation id="3533694711092285624">কোনও পাসওয়ার্ড সেভ করা নেই। আপনি পাসওয়ার্ড সেভ করলে Chrome সেটি চেক করতে পারবে।</translation>
 <translation id="3641179212828090796">দ্রুত সাইন ইন করতে Chrome-এ আপনার সেভ করা পাসওয়ার্ড ব্যবহার করুন</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb
index 63efe22..e158b18a 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome vam štedi vrijeme povezivanjem vaših računa s webom. Možete dodati ili ukloniti račune u Postavkama.</translation>
 <translation id="3282568296779691940">Prijava na Chrome</translation>
 <translation id="3345341804167540816">Koristite Chrome svugdje</translation>
-<translation id="3428998300753080128">Prijavite se na ovu web lokaciju, Google račun i u Chrome.</translation>
 <translation id="3522659714780527202">Da vidite kartice s bilo kojeg uređaja na kojem koristite Chrome, uključite sinhronizaciju</translation>
 <translation id="3533694711092285624">Nema sačuvanih lozinki. Chrome može provjeravati vaše lozinke kada ih sačuvate.</translation>
 <translation id="3641179212828090796">Koristite lozinku koju ste sačuvali u Chromeu da se brže prijavite</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb
index 2558f5e..28dd727 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Per ajudar-te a estalviar temps, Chrome connecta els teus comptes al web. Pots afegir o suprimir comptes a Configuració.</translation>
 <translation id="3282568296779691940">Inicia la sessió a Chrome</translation>
 <translation id="3345341804167540816">Utilitzeu Chrome a tot arreu</translation>
-<translation id="3428998300753080128">Inicia la sessió en aquest lloc web, al teu Compte de Google i a Chrome.</translation>
 <translation id="3522659714780527202">Per veure les pestanyes des de tots els llocs on facis servir Chrome, activa la sincronització</translation>
 <translation id="3533694711092285624">No hi ha cap contrasenya desada. Chrome pot comprovar les teves contrasenyes quan les deses.</translation>
 <translation id="3641179212828090796">Utilitza la contrasenya que has desat a Chrome per iniciar la sessió més ràpidament</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb
index 4f8a3f3..947353c 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome vám šetří čas tím, že vaše účty přenáší na web. Účty můžete přidat nebo odstranit v Nastavení.</translation>
 <translation id="3282568296779691940">Přihlásit se do Chromu</translation>
 <translation id="3345341804167540816">Používejte Chrome všude</translation>
-<translation id="3428998300753080128">Přihlaste se na tento web, k účtu Google a do Chromu.</translation>
 <translation id="3522659714780527202">Chcete-li mít své karty k dispozici všude, kde používáte Chrome, zapněte synchronizaci</translation>
 <translation id="3533694711092285624">Nemáte žádná uložená hesla. Chrome může hesla zkontrolovat, pouze když si je uložíte.</translation>
 <translation id="3641179212828090796">Přihlaste se rychleji s použitím hesla, které jste uložili v prohlížeči Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb
index 007524e5..00f53cd3 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Mae Chrome yn arbed amser i chi drwy ddod â'ch cyfrifon i'r we. Gallwch ychwanegu neu dynnu cyfrifon yn y Gosodiadau.</translation>
 <translation id="3282568296779691940">Mewngofnodi i Chrome</translation>
 <translation id="3345341804167540816">Gallwch Ddefnyddio Chrome Ymhobman</translation>
-<translation id="3428998300753080128">Mewngofnodi i'r wefan hon, eich Cyfrif Google a Chrome.</translation>
 <translation id="3522659714780527202">I weld eich tabiau o ble bynnag rydych yn defnyddio Chrome, trowch gysoni ymlaen</translation>
 <translation id="3533694711092285624">Nid oes unrhyw gyfrineiriau sydd wedi'u cadw. Gall Chrome wirio'ch cyfrineiriau pan fyddwch yn eu cadw.</translation>
 <translation id="3641179212828090796">Defnyddiwch y cyfrinair a gadwyd gennych yn Chrome i fewngofnodi yn gyflymach</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb
index 748296c6..a845d3c 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Med Chrome sparer du tid ved at gøre alle dine konti tilgængelige online. Du kan tilføje eller fjerne konti under Indstillinger.</translation>
 <translation id="3282568296779691940">Log ind i Chrome</translation>
 <translation id="3345341804167540816">Brug Chrome overalt</translation>
-<translation id="3428998300753080128">Log ind på dette website, din Google-konto og Chrome.</translation>
 <translation id="3522659714780527202">Aktivér synkronisering for at se dine faner på alle de enheder, hvor du bruger Chrome</translation>
 <translation id="3533694711092285624">Der er ingen gemte adgangskoder. Chrome kan tjekke dine adgangskoder, når du gemmer dem.</translation>
 <translation id="3641179212828090796">Brug den adgangskode, du har gemt i Chrome, for at logge hurtigere ind.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb
index 955d333..58874cac 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Mit Chrome sparst du Zeit, da du deine Konten im Web verwenden kannst. In den Einstellungen hast du die Möglichkeit, Konten hinzuzufügen oder zu entfernen.</translation>
 <translation id="3282568296779691940">In Chrome anmelden</translation>
 <translation id="3345341804167540816">Chrome überall nutzen</translation>
-<translation id="3428998300753080128">Melde dich bei dieser Website, in deinem Google-Konto und in Chrome an.</translation>
 <translation id="3522659714780527202">Aktiviere die Synchronisierung, um deine Tabs überall dort aufzurufen, wo du Chrome verwendest</translation>
 <translation id="3533694711092285624">Keine gespeicherten Passwörter. Chrome kann deine Passwörter prüfen, wenn du sie speicherst.</translation>
 <translation id="3641179212828090796">Du kannst das Passwort verwenden, das du in Chrome gespeichert hast, um dich schneller anzumelden</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb
index aafd63f5a..0336132 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Το Chrome σάς βοηθά να εξοικονομήσετε χρόνο, μεταφέροντας τους λογαριασμούς σας στον ιστό. Μπορείτε να προσθέσετε ή να καταργήσετε λογαριασμούς στις Ρυθμίσεις.</translation>
 <translation id="3282568296779691940">Σύνδεση στο Chrome</translation>
 <translation id="3345341804167540816">Χρήση Chrome παντού</translation>
-<translation id="3428998300753080128">Συνδεθείτε σε αυτόν τον ιστότοπο, στον Λογαριασμό σας Google και στο Chrome.</translation>
 <translation id="3522659714780527202">Για να βλέπετε τις καρτέλες σας από όπου και αν χρησιμοποιείτε το Chrome, ενεργοποιήστε τον συγχρονισμό.</translation>
 <translation id="3533694711092285624">Δεν υπάρχουν αποθηκευμένοι κωδικοί πρόσβασης. Το Chrome μπορεί να ελέγξει τους κωδικούς πρόσβασής σας όταν τους αποθηκεύσετε.</translation>
 <translation id="3641179212828090796">Χρησιμοποιήστε τον κωδικό πρόσβασης που αποθηκεύσατε στο Chrome για να συνδεθείτε πιο γρήγορα</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb
index 9e3a409..fe88c5a 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome saves you time by bringing your accounts to the web. You can add or remove accounts in Settings.</translation>
 <translation id="3282568296779691940">Sign in to Chrome</translation>
 <translation id="3345341804167540816">Use Chrome Everywhere</translation>
-<translation id="3428998300753080128">Sign in to this site, your Google Account and Chrome.</translation>
 <translation id="3522659714780527202">To see your tabs from wherever you use Chrome, turn on sync</translation>
 <translation id="3533694711092285624">No saved passwords. Chrome can check your passwords when you save them.</translation>
 <translation id="3641179212828090796">Use the password that you saved in Chrome to sign in faster</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
index f1c093b..853f3e2 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome lleva tus cuentas a la Web para ahorrarte tiempo. Puedes agregar o quitar cuentas en la configuración.</translation>
 <translation id="3282568296779691940">Acceder a Chrome</translation>
 <translation id="3345341804167540816">Usar Chrome en todas partes</translation>
-<translation id="3428998300753080128">Accede a este sitio, tu Cuenta de Google y Chrome.</translation>
 <translation id="3522659714780527202">Para ver tus pestañas donde sea que uses Chrome, activa la sincronización</translation>
 <translation id="3533694711092285624">No hay contraseñas guardadas. Chrome puede revisar las contraseñas cuando las guardas.</translation>
 <translation id="3641179212828090796">Usa la contraseña que guardaste en Chrome para acceder más rápido</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb
index 0c340af..3224ac0c 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome te permite llevar tus cuentas a la Web para ahorrar tiempo. Puedes añadirlas o quitarlas en los ajustes.</translation>
 <translation id="3282568296779691940">Iniciar sesión en Chrome</translation>
 <translation id="3345341804167540816">Usar Chrome en todas partes</translation>
-<translation id="3428998300753080128">Inicia sesión en este sitio, en tu cuenta de Google y en Chrome.</translation>
 <translation id="3522659714780527202">Activa la sincronización para ver tus pestañas dondequiera que uses Chrome</translation>
 <translation id="3533694711092285624">No hay ninguna contraseña guardada. Chrome puede comprobar tus contraseñas cuando las guardas.</translation>
 <translation id="3641179212828090796">Usa la contraseña que guardaste en Chrome para iniciar sesión más rápido</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb
index 6c459027..820315a 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome säästab aega, tuues teie kontod veebi. Saate kontosid lisada või eemaldada menüüs Seaded.</translation>
 <translation id="3282568296779691940">Chrome'i sisselogimine</translation>
 <translation id="3345341804167540816">Chrome'i kasutamine kõikjal</translation>
-<translation id="3428998300753080128">Logige sellele saidile, oma Google'i kontole ja Chrome'i sisse.</translation>
 <translation id="3522659714780527202">Selleks et näha vahelehti kõikjalt, kus Chrome'i kasutate, lülitage sisse sünkroonimine</translation>
 <translation id="3533694711092285624">Salvestatud paroole ei ole. Chrome saab teie paroole kontrollida, kui olete need salvestanud.</translation>
 <translation id="3641179212828090796">Kasutage Chrome'i salvestatud parooli, et kiiremini sisse logida</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb
index 1558a6b..a9e894323 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome-rekin denbora aurrezten duzu kontuak sarera eramanda. Kontuak gehi edo ken ditzakezu Ezarpenak atalean.</translation>
 <translation id="3282568296779691940">Hasi saioa Chrome-n</translation>
 <translation id="3345341804167540816">Erabili Chrome edonon</translation>
-<translation id="3428998300753080128">Hasi saioa webgune honetan, Google-ko kontuan eta Chrome-n.</translation>
 <translation id="3522659714780527202">Chrome erabiltzen duzun gailu guztietan zure fitxak eskura izateko, aktibatu sinkronizazioa</translation>
 <translation id="3533694711092285624">Ez dago pasahitzik gordeta. Chrome-k pasahitzak egiazta ditzake gorde ondoren.</translation>
 <translation id="3641179212828090796">Erabili Chrome-n gordeta daukazun pasahitza saioa bizkorrago hasteko</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb
index 83a8785..9d34e9f1 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">‏Chrome با آوردن حساب‌های شما به وب، در وقت شما صرفه‌جویی می‌کند. در «تنظیمات» می‌توانید حساب‌ها را اضافه یا حذف کنید.</translation>
 <translation id="3282568296779691940">‏ورود به Chrome</translation>
 <translation id="3345341804167540816">‏استفاده از Chrome در همه جا</translation>
-<translation id="3428998300753080128">‏به سیستم این سایت، «حساب Google» خود، و Chrome وارد شوید.</translation>
 <translation id="3522659714780527202">‏در همه دستگاه‌هایی که در آن‌ها از Chrome استفاده می‌کنید، همگام‌سازی را روشن کنید تا بتوانید برگه‌هایتان را ببینید</translation>
 <translation id="3533694711092285624">‏گذرواژه ذخیره‌شده‌ای وجود ندارد. Chrome زمانی می‌تواند گذرواژه‌هایتان را بررسی کند که آن‌ها را ذخیره کرده باشید.</translation>
 <translation id="3641179212828090796">‏برای ورود سریع‌تر به سیستم، از گذرواژه ذخیره‌شده در Chrome استفاده کنید</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
index 173d25e..40679f58 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome säästää aikaasi tuomalla tilisi verkkoon. Voit lisätä tai poistaa tilejä asetuksissa.</translation>
 <translation id="3282568296779691940">Kirjaudu Chromeen</translation>
 <translation id="3345341804167540816">Käytä Chromea missä tahansa</translation>
-<translation id="3428998300753080128">Kirjaudu sisään tälle sivustolle, Google-tilillesi ja Chromeen.</translation>
 <translation id="3522659714780527202">Laita synkronointi päälle, niin voit nähdä Chrome-välilehtesi missä tahansa</translation>
 <translation id="3533694711092285624">Ei tallennettuja salasanoja. Chrome voi tarkistaa salasanasi, kun tallennat niitä.</translation>
 <translation id="3641179212828090796">Kirjaudu nopeammin sisään Chromeen tallentamallasi salasanalla</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb
index f1eb66d..1f14672 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Nakakatipid ka ng oras sa Chrome sa pamamagitan ng pagdadala ng iyong mga account sa web. Maaari kang magdagdag o mag-alis ng mga account sa Mga Setting.</translation>
 <translation id="3282568296779691940">Mag-sign in sa Chrome</translation>
 <translation id="3345341804167540816">Gamitin ang Chrome sa Lahat ng Lugar</translation>
-<translation id="3428998300753080128">Mag-sign in sa site na ito, sa iyong Google Account, at sa Chrome.</translation>
 <translation id="3522659714780527202">Para makita ang iyong mga tab sa kahit saan ka man gumagamit ng Chrome, i-on ang pag-sync</translation>
 <translation id="3533694711092285624">Walang naka-save na password. Masusuri ng Chrome ang iyong mga password kapag na-save mo ang mga ito.</translation>
 <translation id="3641179212828090796">Gamitin ang password na na-save mo sa Chrome para mas mabilis na makapag-sign in</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
index 115c616..a5a2c9d 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome vous fait gagner du temps en mettant vos comptes sur le Web. Vous pouvez ajouter ou supprimer des comptes dans Paramètres.</translation>
 <translation id="3282568296779691940">Connexion à Chrome</translation>
 <translation id="3345341804167540816">Utiliser Chrome sur toutes les plateformes</translation>
-<translation id="3428998300753080128">Connectez-vous à ce site, à votre compte Google et à Chrome.</translation>
 <translation id="3522659714780527202">Pour voir vos onglets partout où vous utilisez Chrome, activez la synchronisation</translation>
 <translation id="3533694711092285624">Aucun mot de passe enregistré. Chrome ne peut vérifier vos mots de passe que si vous les enregistrez.</translation>
 <translation id="3641179212828090796">Utilisez le mot de passe que vous avez enregistré dans Chrome pour vous connecter plus rapidement</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb
index 3931652..1d9917a 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome vous permet de gagner du temps en connectant vos comptes au Web. Vous pouvez ajouter ou supprimer des comptes dans la section "Paramètres".</translation>
 <translation id="3282568296779691940">Connectez-vous à Chrome</translation>
 <translation id="3345341804167540816">Utilisez Chrome où que vous soyez</translation>
-<translation id="3428998300753080128">Connectez-vous à ce site, à votre compte Google et à Chrome.</translation>
 <translation id="3522659714780527202">Pour retrouver vos onglets Chrome quel que soit l'appareil utilisé, activez la synchronisation</translation>
 <translation id="3533694711092285624">Aucun mot de passe enregistré. Chrome ne peut vérifier vos mots de passe que si vous les enregistrez.</translation>
 <translation id="3641179212828090796">Utiliser le mot de passe que vous avez enregistré dans Chrome pour vous connecter plus vite</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
index d6c0154..addac070 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome fai que aforres tempo ao pasar as túas contas á web. Podes engadir ou eliminar contas en Configuración.</translation>
 <translation id="3282568296779691940">Iniciar sesión en Chrome</translation>
 <translation id="3345341804167540816">Usar Chrome en todas partes</translation>
-<translation id="3428998300753080128">Inicia sesión neste sitio, na túa Conta de Google e en Chrome.</translation>
 <translation id="3522659714780527202">Para ver as túas pestanas desde calquera dispositivo no que utilices Chrome, activa a sincronización</translation>
 <translation id="3533694711092285624">Non hai contrasinais gardados. Chrome pode comprobar os teus contrasinais cando os gardes.</translation>
 <translation id="3641179212828090796">Usa o contrasinal que gardaches en Chrome para iniciar sesión máis rápido</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb
index 659b0be..ee3ad77 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">વેબ પર તમારા એકાઉન્ટ લાવીને Chrome તમારો સમય બચાવે છે. તમે સેટિંગમાં એકાઉન્ટ ઉમેરી અથવા કાઢી નાખી શકો છો.</translation>
 <translation id="3282568296779691940">Chrome માં સાઇન ઇન કરો</translation>
 <translation id="3345341804167540816">સર્વત્ર Chrome નો ઉપયોગ કરો</translation>
-<translation id="3428998300753080128">આ સાઇટમાં, તમારા Google એકાઉન્ટમાં અને Chromeમાં સાઇન ઇન કરો.</translation>
 <translation id="3522659714780527202">તમે જ્યાંથી Chromeનો ઉપયોગ કરો ત્યાંથી તમારી ટૅબ જોવા માટે, સિંક કરવાનું ચાલુ કરો</translation>
 <translation id="3533694711092285624">કોઈ સાચવેલો પાસવર્ડ નથી. જ્યારે તમે તમારા પાસવર્ડ સાચવો ત્યારે Chrome તેને ચેક કરી શકે છે.</translation>
 <translation id="3641179212828090796">વધુ ઝડપથી સાઇન ઇન કરવા માટે, Chromeમાં તમે સાચવેલા પાસવર્ડનો ઉપયોગ કરો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
index b392c32..4aebf881 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome आपके खातों को वेब पर लाकर आपका समय बचाता है. आप सेटिंग में खाते जोड़ सकते हैं या उन्हें निकाल सकते हैं.</translation>
 <translation id="3282568296779691940">Chrome में साइन इन करें</translation>
 <translation id="3345341804167540816">Chrome का सभी जगह उपयोग करना</translation>
-<translation id="3428998300753080128">इस साइट, अपने Google खाते, और Chrome में साइन इन करें.</translation>
 <translation id="3522659714780527202">आप जिन डिवाइस पर Chrome का इस्तेमाल करते हैं, उन सभी पर खोले गए टैब देखने के लिए, सिंक करने की सुविधा चालू करें</translation>
 <translation id="3533694711092285624">सेव किया हुआ कोई भी पासवर्ड नहीं है. Chrome आपके पासवर्ड की जांच तब कर सकता है, जब आप उन्हें सेव करें.</translation>
 <translation id="3641179212828090796">तेज़ी से साइन इन करने के लिए, Chrome में सेव किए गए पासवर्ड का इस्तेमाल करें</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb
index bdeadc5..56e19d3 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome vam štedi vrijeme sinkronizacijom vaših računa na webu. Račune možete dodavati i uklanjati u postavkama.</translation>
 <translation id="3282568296779691940">Prijavite se u Chrome</translation>
 <translation id="3345341804167540816">Upotrebljavajte Chrome svugdje</translation>
-<translation id="3428998300753080128">Prijavite se na ovu web-lokaciju, Google račun i Chrome.</translation>
 <translation id="3522659714780527202">Da biste vidjeli svoje kartice bez obzira na to gdje koristite Chrome, uključite sinkronizaciju</translation>
 <translation id="3533694711092285624">Nema nijedne spremljene zaporke. Chrome može provjeriti vaše zaporke kad ih spremite.</translation>
 <translation id="3641179212828090796">Koristite zaporku koju ste spremili u Chrome da biste se prijavljivali brže</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb
index 7e0b3e7..1f09f59 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">A Chrome időt takarít meg Önnek azzal, hogy a fiókjait az internetre viszi. A beállításokban tud fiókokat hozzáadni vagy eltávolítani.</translation>
 <translation id="3282568296779691940">Bejelentkezés a Chrome-ba</translation>
 <translation id="3345341804167540816">A Chrome használata mindenhol</translation>
-<translation id="3428998300753080128">Jelentkezzen be erre a webhelyre, a Google-fiókjába és a Chrome-ba.</translation>
 <translation id="3522659714780527202">Kapcsolja be a szinkronizálást, hogy bárhol hozzáférhessen a lapjaihoz, ahol a Chrome-ot használja.</translation>
 <translation id="3533694711092285624">Nincsenek mentett jelszavak. A Chrome képes a jelszavak ellenőrzésére, amikor Ön menti őket.</translation>
 <translation id="3641179212828090796">A Chrome-ban mentett jelszóval gyorsabban jelentkezhet be</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb
index 4cad357..3bf7981 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome-ը խնայում է ձեր ժամանակը՝ ձեր հաշիվները հասանելի դարձնելով համացանցում: Կարգավորումներում կարող եք ավելացնել կամ հեռացնել հաշիվներ:</translation>
 <translation id="3282568296779691940">Մուտք գործել Chrome</translation>
 <translation id="3345341804167540816">Օգտագործեք Chrome-ն ամենուրեք</translation>
-<translation id="3428998300753080128">Մուտք գործեք այս կայքում, ձեր Google հաշիվ և Chrome։</translation>
 <translation id="3522659714780527202">Chrome-ն օգտագործելիս ձեր բոլոր ներդիրները տեսնելու համար միացրեք համաժամացումը։</translation>
 <translation id="3533694711092285624">Պահված գաղտնաբառեր չկան։ Chrome-ը կարող է ստուգել ձեր գաղտնաբառերը, երբ պահում եք դրանք։</translation>
 <translation id="3641179212828090796">Ավելի արագ մուտք գործելու համար օգտագործեք Chrome-ում ձեր պահած գաղտնաբառը</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
index cb40cb4f..557d0d6 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome menghemat waktu Anda dengan membawa akun ke web. Anda dapat menambahkan atau menghapus akun di Setelan.</translation>
 <translation id="3282568296779691940">Login ke Chrome</translation>
 <translation id="3345341804167540816">Gunakan Chrome di Mana Saja</translation>
-<translation id="3428998300753080128">Login ke situs ini, Akun Google Anda, dan Chrome.</translation>
 <translation id="3522659714780527202">Untuk melihat tab Chrome Anda dari perangkat lain, aktifkan sinkronisasi</translation>
 <translation id="3533694711092285624">Tidak ada sandi yang tersimpan. Chrome dapat memeriksa sandi Anda saat menyimpannya.</translation>
 <translation id="3641179212828090796">Gunakan sandi yang Anda simpan di Chrome untuk login lebih cepat</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_is.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_is.xtb
index 71a7c00..0a1c1efb 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_is.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_is.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome sparar þér tíma með því að færa reikningana þína yfir á vefinn. Þú getur bætt við reikningum eða fjarlægt þá í stillingum.</translation>
 <translation id="3282568296779691940">Skráðu þig inn á Chrome</translation>
 <translation id="3345341804167540816">Notaðu Chrome alls staðar</translation>
-<translation id="3428998300753080128">Skráðu þig inn á þetta vefsvæði, Google reikninginn þinn og Chrome.</translation>
 <translation id="3522659714780527202">Kveiktu á samstillingu til að sjá flipana þína hvar sem þú notar Chrome</translation>
 <translation id="3533694711092285624">Engin vistuð aðgangsorð. Chrome getur athugað aðgangsorðin þín þegar þú vistar þau.</translation>
 <translation id="3641179212828090796">Notaðu aðgangsorðið sem þú vistaðir í Chrome til að skrá þig inn hraðar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
index 8eeabcc..1c3e419 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome ti fa risparmiare tempo portando i tuoi account sul Web. Puoi aggiungere o rimuovere account nelle Impostazioni.</translation>
 <translation id="3282568296779691940">Accedi a Chrome</translation>
 <translation id="3345341804167540816">Utilizza Chrome ovunque</translation>
-<translation id="3428998300753080128">Accedi a questo sito, al tuo Account Google e a Chrome.</translation>
 <translation id="3522659714780527202">Per visualizzare le tue schede su tutti i dispositivi su cui utilizzi Chrome, attiva la sincronizzazione</translation>
 <translation id="3533694711092285624">Nessuna password salvata. Chrome può controllare le password quando le salvi.</translation>
 <translation id="3641179212828090796">Usa la password salvata in Chrome per eseguire l'accesso più rapidamente</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
index 2180cc8f..4662ba19 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">‏Chromium מאפשר גישה לחשבונות באינטרנט וכך חוסך לך זמן. ניתן להוסיף או להסיר חשבונות בקטע 'הגדרות'.</translation>
 <translation id="3282568296779691940">‏כניסה ל-Chrome</translation>
 <translation id="3345341804167540816">‏להשתמש ב-Chrome בכל מקום</translation>
-<translation id="3428998300753080128">‏יש לך אפשרות להיכנס לאתר הזה, לחשבון Google ול-Chrome.</translation>
 <translation id="3522659714780527202">‏כדי לראות את הכרטיסיות שלך מכל מקום שבו פתחת את Chrome יש להפעיל את הסנכרון</translation>
 <translation id="3533694711092285624">‏אין סיסמאות שמורות. Chrome יכול לבדוק את הסיסמאות שלך רק אם שמרת אותן.</translation>
 <translation id="3641179212828090796">‏כדי להיכנס לחשבון מהר יותר, משתמשים בסיסמה ששמורה ב-Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
index ccea3a8f5..62af123 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome ではアカウントがウェブで管理されるので、さまざまな手間を省くことができます。[設定] でアカウントの追加と削除を行うことができます。</translation>
 <translation id="3282568296779691940">Chrome にログイン</translation>
 <translation id="3345341804167540816">Chromeをどこでも使用</translation>
-<translation id="3428998300753080128">このサイト、Google アカウント、Chrome にログインします。</translation>
 <translation id="3522659714780527202">どのデバイスからでも Chrome で自分のタブにアクセスするには、同期をオンにしてください</translation>
 <translation id="3533694711092285624">保存されているパスワードがありません。パスワードを保存すると Chrome で確認できるようになります。</translation>
 <translation id="3641179212828090796">Chrome に保存したパスワードを使用して、よりすばやくログインできます</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb
index 903f0b7b..5696146 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">თქვენი ანგარიშების ვებში გამოყენებით, Chrome დროის დაზოგვაში დაგეხმარებათ. ანგარიშების დამატება ან ამოშლა პარამეტრებიდან შეგიძლიათ.</translation>
 <translation id="3282568296779691940">შესვლა Chrome-ში</translation>
 <translation id="3345341804167540816">გამოიყენეთ Chrome ყველგან</translation>
-<translation id="3428998300753080128">შედით ამ საიტში, თქვენს Google ანგარიშსა და Chrome-ში.</translation>
 <translation id="3522659714780527202">იმისთვის, რომ იხილოთ თქვენი ჩანართები ნებისმიერი მოწყობილობიდან, საიდანაც Chrome-ს იყენებთ, ჩართეთ სინქრონიზაცია</translation>
 <translation id="3533694711092285624">შენახული პაროლები არ არის. პაროლების შემოწმებას Chrome მოახერხებს მათი შენახვის შემდეგ.</translation>
 <translation id="3641179212828090796">გამოიყენეთ Chrome-ში თქვენ მიერ შენახული პაროლი, სისტემაში უფრო სწრაფად რომ შეხვიდეთ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb
index 59b97c8..352b6394 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome браузері аккаунттарыңызды вебке алып келу арқылы уақыт үнемдейді. "Параметрлер" бөлімінде аккаунттарды енгізуге немесе өшіруге болады.</translation>
 <translation id="3282568296779691940">Chrome жүйесіне кіру</translation>
 <translation id="3345341804167540816">Chrome қолданбасын барлық жерде қолдану</translation>
-<translation id="3428998300753080128">Осы сайтқа, Google аккаунтыңызға және Chrome браузеріне кіріңіз.</translation>
 <translation id="3522659714780527202">Chrome браузерін пайдаланатын кез келген жерден қойындыларды көру үшін синхрондауды қосыңыз.</translation>
 <translation id="3533694711092285624">Ешқандай құпия сөз сақталмаған. Құпия сөздер сақталған кезде, Chrome оларды тексере алады.</translation>
 <translation id="3641179212828090796">Жылдамырақ кіру үшін Chrome-да сақталған құпия сөзді пайдаланыңыз.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb
index 483262d..3444f76 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome សន្សំពេលវេលាដោយប្រើគណនីរបស់អ្នកនៅលើបណ្តាញអ៊ីនធឺណិត។ អ្នកអាចបញ្ចូល ឬលុបគណនីនៅក្នុងការកំណត់។</translation>
 <translation id="3282568296779691940">ចូលទៅ Chrome</translation>
 <translation id="3345341804167540816">ប្រើ Chrome គ្រប់ទីកន្លែង</translation>
-<translation id="3428998300753080128">ចូល​គេហទំព័រ​នេះ, គណនី Google របស់អ្នក និង Chrome។</translation>
 <translation id="3522659714780527202">ដើម្បី​អាចមើលឃើញ​ផ្ទាំង​របស់អ្នក​ពី​ឧបករណ៍ទាំងឡាយ​ដែលអ្នក​ប្រើ Chrome សូមបើក​សមកាលកម្ម</translation>
 <translation id="3533694711092285624">គ្មានពាក្យសម្ងាត់ដែលបានរក្សាទុកទេ។ Chrome អាចពិនិត្យពាក្យសម្ងាត់របស់អ្នក នៅពេលអ្នករក្សាទុកពាក្យសម្ងាត់ទាំងនោះ។</translation>
 <translation id="3641179212828090796">ប្រើ​ពាក្យសម្ងាត់​ដែលអ្នក​បានរក្សាទុក​នៅក្នុង Chrome ដើម្បីចូលគណនី​បានកាន់តែរហ័ស</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb
index 28799dc..5cc1e3d 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">ವೆಬ್‌ನಲ್ಲಿ ನಿಮ್ಮ ಖಾತೆಗಳನ್ನು ತರುವ ಮೂಲಕ Chrome ನಿಮ್ಮ ಸಮಯವನ್ನು ಉಳಿಸುತ್ತದೆ. ನೀವು ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಖಾತೆಗಳನ್ನು ಸೇರಿಸಬಹುದು ಅಥವಾ ತೆಗೆದುಹಾಕಬಹುದು.</translation>
 <translation id="3282568296779691940">Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 <translation id="3345341804167540816">Chrome ಎಲ್ಲೆಡೆ ಬಳಸಿ</translation>
-<translation id="3428998300753080128">ಈ ಸೈಟ್, ನಿಮ್ಮ Google ಖಾತೆ ಮತ್ತು Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="3522659714780527202">ನೀವು Chrome ಅನ್ನು ಎಲ್ಲಿ ಬಳಸುತ್ತೀರೋ ಅಲ್ಲಿ ನಿಮ್ಮ ಟ್ಯಾಬ್‌ಗಳನ್ನು ನೋಡಲು, ಸಿಂಕ್ ಆನ್ ಮಾಡಿ</translation>
 <translation id="3533694711092285624">ಉಳಿಸಿರುವ ಯಾವುದೇ ಪಾಸ್‍‍ವರ್ಡ್‍ಗಳಿಲ್ಲ. ನೀವು ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಉಳಿಸಿದಾಗ, Chrome ಅವುಗಳನ್ನು ಪರಿಶೀಲಿಸಬಹುದು.</translation>
 <translation id="3641179212828090796">ವೇಗವಾಗಿ ಸೈನ್ ಇನ್ ಮಾಡಲು ನೀವು Chrome ನಲ್ಲಿ ಉಳಿಸಿದ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಬಳಸಿ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
index 65ed3a7..415a3c5cf 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome에서는 계정 로그인 정보가 자동으로 채워지기 때문에 시간을 절약할 수 있습니다. 설정에서 계정을 추가하거나 삭제할 수 있습니다.</translation>
 <translation id="3282568296779691940">Chrome에 로그인</translation>
 <translation id="3345341804167540816">어디서나 Chrome 사용</translation>
-<translation id="3428998300753080128">이 사이트, Google 계정, Chrome에 로그인하세요.</translation>
 <translation id="3522659714780527202">Chrome을 사용하는 어느 곳에서나 탭을 확인하려면 동기화를 사용 설정하세요.</translation>
 <translation id="3533694711092285624">저장된 비밀번호가 없습니다. 비밀번호를 저장하면 Chrome에서 확인할 수 있습니다.</translation>
 <translation id="3641179212828090796">Chrome에 저장한 비밀번호를 사용하여 더 빠르게 로그인하세요</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ky.xtb
index 79205d21..c96e6b4f 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ky.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ky.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Аккаунттарыңызды желеге жайгаштыруу менен Chrome убакытыңызды үнөмдөйт. Аккаунттарды Жөндөөлөрдөн кошуп же алып салсаңыз болот.</translation>
 <translation id="3282568296779691940">Chrome'го кириңиз</translation>
 <translation id="3345341804167540816">Бүт жерде Chrome колдонуңуз</translation>
-<translation id="3428998300753080128">Бул сайтка, Google аккаунтуңузга жана Chrome'го кириңиз.</translation>
 <translation id="3522659714780527202">Chrome колдонулган түзмөктөрдүн баарындагы өтмөктөрүңүздү көрүү үчүн шайкештирүүнү күйгүзүңүз</translation>
 <translation id="3533694711092285624">Сакталган сырсөздөр жок. Сырсөздөрүңүздү сактаганда Chrome аларды текшере алат.</translation>
 <translation id="3641179212828090796">Аккаунтка тезирээк кирүү үчүн Chrome'го сакталган сырсөздү колдонуңуз</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
index 543eb25..d18a3b04 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome ຊ່ວຍທ່ານປະຢັດເວລາໂດຍການນຳເອົາບັນຊີຂອງທ່ານມາສູ່ເວັບ. ທ່ານສາມາດເພີ່ມ ຫຼື ລຶບບັນຊີອອກໄດ້ໃນການຕັ້ງຄ່າ.</translation>
 <translation id="3282568296779691940">ລົງຊື່ເຂົ້າ​ໃຊ້ Chrome</translation>
 <translation id="3345341804167540816">ໃຊ້ Chrome ຢູ່​ທຸກ​ບ່ອນ</translation>
-<translation id="3428998300753080128">ເຂົ້າສູ່ລະບົບເວັບໄຊນີ້, ບັນຊີ Google ຂອງທ່ານ ແລະ Chrome.</translation>
 <translation id="3522659714780527202">ເພື່ອເຫັນແຖບຂອງທ່ານຈາກທຸກບ່ອນທີ່ທ່ານໃຊ້ Chrome, ກະລຸນາເປີດການຊິ້ງຂໍ້ມູນ</translation>
 <translation id="3533694711092285624">ບໍ່ມີລະຫັດຜ່ານທີ່ບັນທຶກໄວ້. Chrome ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານເມື່ອທ່ານບັນທຶກພວກມັນໄວ້.</translation>
 <translation id="3641179212828090796">ໃຊ້ລະຫັດຜ່ານທີ່ທ່ານບັນທຶກໄວ້ໃນ Chrome ເພື່ອເຂົ້າສູ່ລະບົບໄດ້ໄວຂຶ້ນ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb
index f4c106a..0bafc87 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">„Chrome“ taupo laiką naudodama paskyras žiniatinklyje. Paskyras galite pridėti arba pašalinti nustatymuose.</translation>
 <translation id="3282568296779691940">Prisijungti prie „Chrome“</translation>
 <translation id="3345341804167540816">Naudokite „Chrome“ visur</translation>
-<translation id="3428998300753080128">Prisijunkite prie šios svetainės, „Google“ paskyros ir „Chrome“.</translation>
 <translation id="3522659714780527202">Kad matytumėte skirtukus iš visų įrenginių, kuriuose naudojate „Chrome“, įjunkite sinchronizavimą</translation>
 <translation id="3533694711092285624">Nėra išsaugotų slaptažodžių. „Chrome“ gali tikrinti jūsų slaptažodžius, kai juos išsaugote.</translation>
 <translation id="3641179212828090796">Naudokite „Chrome“ išsaugotą slaptažodį, kad prisijungtumėte greičiau</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb
index 74e0aea..5938fc4 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome ietaupa jūsu laiku, pievienojot jūsu kontus tīmeklim. Kontus varat pievienot vai noņemt sadaļā Iestatījumi.</translation>
 <translation id="3282568296779691940">Pierakstīties pārlūkā Chrome</translation>
 <translation id="3345341804167540816">Izmantojiet Chrome visur</translation>
-<translation id="3428998300753080128">Pierakstieties šajā vietnē, savā Google kontā un pārlūkā Chrome.</translation>
 <translation id="3522659714780527202">Lai skatītu cilnes no ierīcēm, kurās lietojat pārlūku Chrome, ieslēdziet sinhronizāciju.</translation>
 <translation id="3533694711092285624">Nav saglabātu paroļu. Pārlūkprogrammā Chrome var pārbaudīt jūsu paroles, ja jūs tās saglabājat.</translation>
 <translation id="3641179212828090796">Lai pierakstītos ātrāk, izmantojiet paroli, ko saglabājāt pārlūkā Chrome.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb
index 2e8808f9..2204af97 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome ви заштедува време со тоа што ви ги носи сметките на Интернет. Може да додавате или отстранувате сметки во „Поставки“.</translation>
 <translation id="3282568296779691940">Најави се на Chrome</translation>
 <translation id="3345341804167540816">Користете го Chrome секаде</translation>
-<translation id="3428998300753080128">Најавете се на сајтов, вашата сметка на Google и Chrome.</translation>
 <translation id="3522659714780527202">За да ги гледате картичките секаде каде што користите Chrome, вклучете синхронизација</translation>
 <translation id="3533694711092285624">Нема зачувани лозинки. Chrome може да ги проверува вашите лозинки кога ги зачувувате.</translation>
 <translation id="3641179212828090796">Користете ја лозинката што сте ја зачувале во Chrome за да се најавите побрзо</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb
index 8050de3..25e6a9f 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">വെബിൽ അക്കൗണ്ടുകൾ കൊണ്ടുവരുന്നതിലൂടെ Chrome നിങ്ങളുടെ സമയം ലാഭിക്കുന്നു. നിങ്ങൾക്ക് ക്രമീകരണത്തിൽ അക്കൗണ്ടുകൾ ചേർക്കാനോ നീക്കംചെയ്യാനോ കഴിയും.</translation>
 <translation id="3282568296779691940">Chrome-ലേക്ക് സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="3345341804167540816">എല്ലായിടത്തും Chrome ഉപയോഗിക്കുക</translation>
-<translation id="3428998300753080128">ഈ സൈറ്റിലും നിങ്ങളുടെ Google അക്കൗണ്ടിലും Chrome-ലും സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="3522659714780527202">Chrome ഉപയോഗിക്കുന്നിടത്തെല്ലാം നിങ്ങളുടെ ടാബുകൾ കാണാൻ, സമന്വയിപ്പിക്കൽ ഓണാക്കുക</translation>
 <translation id="3533694711092285624">സംരക്ഷിച്ച പാസ്‌വേഡുകളൊന്നുമില്ല. നിങ്ങളുടെ പാസ്‌വേഡുകൾ സംരക്ഷിക്കുകയാണങ്കിൽ, Chrome-ന് അവ പരിശോധിക്കാനാവും.</translation>
 <translation id="3641179212828090796">കൂടുതൽ വേഗത്തിൽ സൈൻ ഇൻ ചെയ്യാൻ നിങ്ങൾ Chrome-ൽ സംരക്ഷിച്ചിരിക്കുന്ന പാസ്‌വേഡ് ഉപയോഗിക്കുക</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb
index b10e3de..64edcd3 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome таны бүртгэлийг вебэд оруулснаар таны цагийг хэмнэдэг. Та Тохиргоо хэсэгт бүртгэл нэмэх, эсвэл устгах боломжтой.</translation>
 <translation id="3282568296779691940">Chrome руу нэвтрэх</translation>
 <translation id="3345341804167540816">Chrome-г хүссэн газраа ашиглаарай</translation>
-<translation id="3428998300753080128">Энэ сайт, өөрийн Google Бүртгэл болон Chrome-д нэвтэрнэ үү.</translation>
 <translation id="3522659714780527202">Та Chrome-г хаанаас ч ашигласан бай табуудаа харахын тулд синк хийхийг асаана уу</translation>
 <translation id="3533694711092285624">Хадгалсан ямар ч нууц үг байхгүй байна. Таныг нууц үгсээ хадгалах үед Chrome тэднийг шалгах боломжтой.</translation>
 <translation id="3641179212828090796">Илүү хурдан нэвтрэхийн тулд Chrome-д хадгалсан нууц үгээ ашиглана уу</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
index 2e0b50a0..15c0ae8 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">तुमची खाती वेबवर आणून Chrome तुमचा वेळ वाचविते. तुम्ही सेटिंग्जमध्ये खाती जोडू किंवा काढू शकता.</translation>
 <translation id="3282568296779691940">Chrome वर साइन इन करा</translation>
 <translation id="3345341804167540816">Chrome सर्वत्र वापरा</translation>
-<translation id="3428998300753080128">ही साइट, तुमचे Google खाते आणि Chrome यांमध्ये साइन इन करा.</translation>
 <translation id="3522659714780527202">तुम्ही जेथून Chrome वापरत असाल तेथून तुमचे टॅब पाहण्यासाठी, सिंक सुरू करा</translation>
 <translation id="3533694711092285624">सेव्ह केलेले पासवर्ड नाहीत. तुम्ही तुमचे पासवर्ड सेव्ह केल्यावर Chrome ते तपासू शकते.</translation>
 <translation id="3641179212828090796">जलद साइन इन करण्यासाठी, तुम्ही Chrome मध्ये सेव्ह केलेला पासवर्ड वापरा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
index 4cc9f96..e38073c 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome menjimatkan masa anda dengan membawa akaun anda ke web. Anda boleh menambahkan atau mengalih keluar akaun dalam Tetapan.</translation>
 <translation id="3282568296779691940">Log masuk ke Chrome</translation>
 <translation id="3345341804167540816">Gunakan Chrome Everywhere</translation>
-<translation id="3428998300753080128">Log masuk ke laman ini, Akaun Google anda dan Chrome.</translation>
 <translation id="3522659714780527202">Untuk melihat tab anda daripada mana-mana tempat anda menggunakan Chrome, hidupkan penyegerakan</translation>
 <translation id="3533694711092285624">Tiada kata laluan yang disimpan. Chrome boleh menyemak kata laluan anda yang disimpan.</translation>
 <translation id="3641179212828090796">Gunakan kata laluan yang anda simpan dalam Chrome untuk log masuk dengan lebih pantas</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb
index 629f2f3..d7e4a349 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome သည် သင့်အကောင့်များကို ဝဘ်သို့ပို့ဆောင်ပေးခြင်းဖြင့် သင့်အချိန်ကို ချွေတာပေးပါသည်။ ဆက်တင်များထဲတွင် အကောင့်များကို ပေါင်းထည့်ခြင်း သို့မဟုတ် ဖယ်ရှားခြင်းတို့ ပြုလုပ်နိုင်သည်။</translation>
 <translation id="3282568296779691940">Chrome သို့ လက်မှတ်ထိုး ဝင်</translation>
 <translation id="3345341804167540816">Chrome ကို နေရာတိုင်းမှာ သုံးပါ</translation>
-<translation id="3428998300753080128">ဤဝဘ်ဆိုက်၊ သင်၏ Google Account နှင့် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ။</translation>
 <translation id="3522659714780527202">Chrome အသုံးပြုသည့် နေရာမှန်သမျှမှ သင့်တဘ်များကိုကြည့်ရန် စင့်ခ်လုပ်ခြင်း ဖွင့်ပါ</translation>
 <translation id="3533694711092285624">သိမ်းထားသော စကားဝှက် မရှိပါ။ သင်စကားဝှက်များကို သိမ်းသည့်အခါ Chrome က ၎င်းတို့ကို စစ်ဆေးနိုင်သည်။</translation>
 <translation id="3641179212828090796">ပိုမိုမြန်ဆန်စွာ လက်မှတ်ထိုးဝင်ရန် Chrome တွင် သိမ်းထားသည့် စကားဝှက်ကို အသုံးပြုနိုင်သည်</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb
index 4b966a5..f5b681e 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome ले तपाईंका खाताहरूलाई वेबमा ल्याएर तपाईंको समय बचत गरिदिन्छ। तपाईं सेटिङहरूमा गई खाताहरू थप्न वा हटाउन सक्नुहुन्छ।</translation>
 <translation id="3282568296779691940">Chrome मा साइन इन गर्नुहोस्</translation>
 <translation id="3345341804167540816">सबैतिर Chrome प्रयोग गर्नुहोस्</translation>
-<translation id="3428998300753080128">यो साइट, आफ्नो Google खाता र Chrome मा साइन इन गर्नुहोस्।</translation>
 <translation id="3522659714780527202">आफूले Chrome प्रयोग गर्ने सबै डिभाइसमा खोलिएका ट्याबहरू हेर्न सिंक गर्ने सुविधा अन गर्नुहोस्</translation>
 <translation id="3533694711092285624">कुनै पनि सुरक्षित गरिएको पासवर्ड छैन। तपाईंले आफ्ना पासवर्डहरू सुरक्षित गर्नुभएको छ भने मात्र Chrome ले तिनको जाँच गर्न सक्छ।</translation>
 <translation id="3641179212828090796">तपाईं अझ छिटो साइन इन गर्न चाहनुहुन्छ भने आफूले Chrome मा सेभ गरेको पासवर्ड प्रयोग गर्नुहोस्</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb
index 4ee4ec3b..651a67c2 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome bespaart je tijd door je accounts beschikbaar te maken op internet. Je kunt accounts toevoegen of verwijderen bij Instellingen.</translation>
 <translation id="3282568296779691940">Inloggen bij Chrome</translation>
 <translation id="3345341804167540816">Chrome overal gebruiken</translation>
-<translation id="3428998300753080128">Log in op deze site, op je Google-account en bij Chrome.</translation>
 <translation id="3522659714780527202">Zet de synchronisatie aan om je tabbladen te bekijken vanaf elk apparaat waarop je Chrome gebruikt</translation>
 <translation id="3533694711092285624">Geen opgeslagen wachtwoorden. Chrome kan je wachtwoorden controleren als je deze hebt opgeslagen.</translation>
 <translation id="3641179212828090796">Gebruik het wachtwoord dat je hebt opgeslagen in Chrome om sneller in te loggen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb
index 6a9cef9..b998066d 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome sparer tid for deg ved å legge kontoene dine på nettet. Du kan legge til eller fjerne kontoer i Innstillinger.</translation>
 <translation id="3282568296779691940">Logg på Chrome</translation>
 <translation id="3345341804167540816">Bruk Chrome overalt</translation>
-<translation id="3428998300753080128">Logg på dette nettstedet, Google-kontoen din og Chrome.</translation>
 <translation id="3522659714780527202">For å se fanene dine overalt hvor du bruker Chrome, slå på synkronisering</translation>
 <translation id="3533694711092285624">Ingen lagrede passord. Chrome kan sjekke passordene dine når du lagrer dem.</translation>
 <translation id="3641179212828090796">Bruk passordet du har lagret i Chrome, for å logge på raskere</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb
index 85da3573..b4242aad 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome ଆପଣଙ୍କର ଆକାଉଣ୍ଟଗୁଡ଼ିକୁ ୱେବ୍‍କୁ ନେ‍ଇ ଆପଣଙ୍କ ସମୟ ବଞ୍ଚାଏ। ଆପଣ ସେଟିଂସ୍‍‍ରେ ଆକାଉଣ୍ଟଗୁଡ଼ିକ ଯୋଗ କରିପାରିବେ କିମ୍ବା କାଢ଼ିଦେ‍ଇପାରିବେ।</translation>
 <translation id="3282568296779691940">Chromeରେ ସାଇନ୍‌ ଇନ୍‌ କରନ୍ତୁ</translation>
 <translation id="3345341804167540816">Chromeକୁ ସର୍ବତ୍ର ବ୍ୟବହାର କରନ୍ତୁ</translation>
-<translation id="3428998300753080128">ଏହି ସାଇଟ, ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ଏବଂ Chromeରେ ସାଇନ ଇନ କରନ୍ତୁ।</translation>
 <translation id="3522659714780527202">ଆପଣ Chrome ବ୍ୟବହାର କରୁଥିବା ଯେ କୌଣସି ସ୍ଥାନରୁ ଆପଣଙ୍କ ଟାବଗୁଡ଼ିକ ଦେଖିବାକୁ, ସିଙ୍କ୍ ଚାଲୁ କରନ୍ତୁ</translation>
 <translation id="3533694711092285624">ସେଭ୍ କରାଯାଇଥିବା କୌଣସି ପାସୱାର୍ଡ ନାହିଁ। ଆପଣ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ସେଭ୍ କଲେ Chrome ସେଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ।</translation>
 <translation id="3641179212828090796">ଶୀଘ୍ର ସାଇନ ଇନ କରିବା ପାଇଁ ଆପଣ Chromeରେ ସେଭ କରିଥିବା ପାସୱାର୍ଡକୁ ବ୍ୟବହାର କରନ୍ତୁ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb
index fc682414..b745186 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome ਤੁਹਾਡੇ ਖਾਤਿਆਂ ਨੂੰ ਵੈੱਬ 'ਤੇ ਲਿਆ ਕੇ ਤੁਹਾਡਾ ਸਮਾਂ ਬਚਾਉਂਦਾ ਹੈ। ਤੁਸੀਂ 'ਸੈਟਿੰਗਾਂ' ਵਿੱਚ ਖਾਤੇ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਹਟਾ ਸਕਦੇ ਹੋ।</translation>
 <translation id="3282568296779691940">Chrome 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
 <translation id="3345341804167540816">ਹਰ ਥਾਂ 'ਤੇ Chrome ਵਰਤੋ</translation>
-<translation id="3428998300753080128">ਇਸ ਸਾਈਟ, ਆਪਣੇ Google ਖਾਤੇ ਅਤੇ Chrome ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ।</translation>
 <translation id="3522659714780527202">ਜਿਸ ਡੀਵਾਈਸ 'ਤੇ ਵੀ ਤੁਸੀਂ Chrome ਵਰਤਦੇ ਹੋ, ਉੱਥੇ ਆਪਣੀਆਂ ਟੈਬਾਂ ਦੇਖਣ ਲਈ ਸਿੰਕ ਚਾਲੂ ਕਰੋ</translation>
 <translation id="3533694711092285624">ਕੋਈ ਰੱਖਿਅਤ ਕੀਤੇ ਪਾਸਵਰਡ ਨਹੀਂ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਆਪਣੇ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਕਰਨ 'ਤੇ Chrome ਉਹਨਾਂ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹੈ।</translation>
 <translation id="3641179212828090796">ਤੇਜ਼ੀ ਨਾਲ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਉਹ ਪਾਸਵਰਡ ਵਰਤੋ ਜਿਸਨੂੰ ਤੁਸੀਂ Chrome ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਹੈ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
index db5f9ae..f97d329 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome oszczędza Twój czas, zapisując konta w internecie. Konta możesz dodawać i usuwać w Ustawieniach.</translation>
 <translation id="3282568296779691940">Zaloguj się w Chrome</translation>
 <translation id="3345341804167540816">Korzystaj z Chrome w dowolnym miejscu</translation>
-<translation id="3428998300753080128">Zaloguj się na tej stronie, na swoim koncie Google i w Chrome.</translation>
 <translation id="3522659714780527202">Aby widzieć swoje karty zawsze, kiedy korzystasz z Chrome, włącz synchronizację</translation>
 <translation id="3533694711092285624">Brak zapisanych haseł. Chrome może sprawdzać Twoje hasła, gdy je zapiszesz.</translation>
 <translation id="3641179212828090796">Użyj hasła zapisanego w Chrome, aby szybciej się zalogować</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
index 02aa93d..5ad321d 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">O Chrome permite que você otimize seu tempo trazendo suas contas para a Web. É possível adicionar ou remover contas nas configurações.</translation>
 <translation id="3282568296779691940">Fazer login no Google Chrome</translation>
 <translation id="3345341804167540816">Usar o Chrome em qualquer lugar</translation>
-<translation id="3428998300753080128">Faça login neste site, na sua Conta do Google e no Chrome.</translation>
 <translation id="3522659714780527202">Para ver suas guias em qualquer lugar onde você usar o Chrome, ative a sincronização</translation>
 <translation id="3533694711092285624">Nenhuma senha salva. O Chrome poderá verificar suas senhas quando elas forem salvas.</translation>
 <translation id="3641179212828090796">Use a senha salva no Chrome para fazer login com mais rapidez</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb
index 612220d..a9489cfc 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">O Chrome poupa o seu tempo ao trazer as suas contas para a Web. Pode adicionar ou remover contas nas Definições.</translation>
 <translation id="3282568296779691940">Iniciar sessão no Chrome</translation>
 <translation id="3345341804167540816">Utilizar o Chrome em todas as plataformas</translation>
-<translation id="3428998300753080128">Inicie sessão neste site, na sua Conta Google e no Chrome.</translation>
 <translation id="3522659714780527202">Para ver os seus separadores onde quer que esteja a utilizar o Chrome, ative a sincronização.</translation>
 <translation id="3533694711092285624">Não existem palavras-passe guardadas. O Chrome consegue verificar as suas palavras-passe quando as guarda.</translation>
 <translation id="3641179212828090796">Use a palavra-passe que guardou no Chrome para iniciar sessão mais rápido</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb
index a1f5aca..c26e876 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Folosind Chrome, economisești timp, deoarece te conectează la conturi și pe web. Poți să adaugi sau să elimini conturi din Setări.</translation>
 <translation id="3282568296779691940">Conectează-te la Chrome</translation>
 <translation id="3345341804167540816">Folosește Chrome oriunde</translation>
-<translation id="3428998300753080128">Conectează-te la acest site, la Contul Google și la Chrome.</translation>
 <translation id="3522659714780527202">Activează sincronizarea ca să vezi toate filele tale deschise în Chrome</translation>
 <translation id="3533694711092285624">Nu există parole salvate. Chrome îți poate verifica parolele dacă le salvezi.</translation>
 <translation id="3641179212828090796">Folosește parola salvată în Chrome pentru a te conecta mai rapid</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
index f316f5f..9ed4a72 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Чтобы сэкономить ваше время, Chrome будет использовать аккаунты, сохраненные на вашем устройстве. Добавить или удалить их можно в настройках.</translation>
 <translation id="3282568296779691940">Войти в Chrome</translation>
 <translation id="3345341804167540816">Возьмите Chrome с собой</translation>
-<translation id="3428998300753080128">Войдите на этот сайт, в аккаунт Google и в Chrome.</translation>
 <translation id="3522659714780527202">Чтобы ваши вкладки всегда были доступны вам при работе с Chrome, включите синхронизацию.</translation>
 <translation id="3533694711092285624">Сохраненных паролей нет. Чтобы браузер Chrome мог проверять пароли, сохраните их.</translation>
 <translation id="3641179212828090796">Воспользуйтесь сохраненным в Chrome паролем для быстрого входа</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb
index 97fdd34c..713f5e7 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome ඔබේ ගිණුම් වෙබය වෙත ගෙන ඒම මගින් ඔබට කාලය ඉතිරි කරයි. ඔබට සැකසීම් තුළ ගිණුම් එක් කිරීම හෝ ඉවත් කිරීම කළ හැකිය.</translation>
 <translation id="3282568296779691940">Chrome වෙත පුරන්න</translation>
 <translation id="3345341804167540816">සෑම තැනකම Chrome භාවිතා කරන්න</translation>
-<translation id="3428998300753080128">මෙම අඩවිය, ඔබගේ Google ගිණුම සහ Chrome වෙත පුරන්න.</translation>
 <translation id="3522659714780527202">ඔබ Chrome භාවිත කරන ඕනෑම ස්ථානයක සිට ඔබේ ටැබ බැලීමට, සමමුහුර්ත කිරීම ක්‍රියාත්මක කරන්න</translation>
 <translation id="3533694711092285624">සුරැකි මුරපද නැත. ඔබ ඔබේ මුරපද පරීක්‍ෂා කරන විට Chrome හට ඒවා පරීක්‍ෂා කළ හැක.</translation>
 <translation id="3641179212828090796">වේගයෙන් පිරීමට ඔබ Chrome හි සුරකින ලද මුරපදය භාවිත කරන්න</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb
index 8fb7ddea..a9a0936 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Vaše účty sú na webe, čím Chrome šetrí váš čas. Účty môžete pridávať alebo odstraňovať v nastaveniach.</translation>
 <translation id="3282568296779691940">Prihlásiť sa do Chromu</translation>
 <translation id="3345341804167540816">Používajte prehliadač Chrome kdekoľvek</translation>
-<translation id="3428998300753080128">Prihláste sa na tomto webe, do svojho účtu Google aj Chromu.</translation>
 <translation id="3522659714780527202">Ak chcete vidieť svoje karty vo všetkých zariadeniach, v ktorých používate Chrome, zapnite synchronizáciu</translation>
 <translation id="3533694711092285624">Žiadne uložené heslá. Chrome môže skontrolovať heslá, keď ich uložíte.</translation>
 <translation id="3641179212828090796">Prihláste sa rýchlejšie použitím hesla, ktoré ste uložili v prehliadači Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb
index 58a8830c..36b1e5e3 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome poskrbi, da so vaši računi v spletu, in vam tako prihrani čas. Račune lahko dodajate ali odstranjujete v nastavitvah.</translation>
 <translation id="3282568296779691940">Prijava v Chrome</translation>
 <translation id="3345341804167540816">Use Chrome Everywhere</translation>
-<translation id="3428998300753080128">Prijavite se v to spletno mesto, svoj račun Google in Chrome.</translation>
 <translation id="3522659714780527202">Če si želite ogledati zavihke iz naprav, v katerih uporabljate Chrome, vklopite sinhronizacijo</translation>
 <translation id="3533694711092285624">Ni shranjenih gesel. Chrome lahko preveri gesla, če jih shranite.</translation>
 <translation id="3641179212828090796">Za hitrejšo prijavo uporabite gesla, ki ste jih shranili v Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
index a7692ca..652f68dd 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome të kursen kohë duke i sjellë llogaritë e  tua në ueb. Mund të shtosh ose të heqësh llogari te "Cilësimet".</translation>
 <translation id="3282568296779691940">Identifikohu në Chrome</translation>
 <translation id="3345341804167540816">Përdor Chrome kudo</translation>
-<translation id="3428998300753080128">Identifikohu në këtë sajt, "Llogarinë tënde të Google" dhe Chrome.</translation>
 <translation id="3522659714780527202">Për të parë skedat e tua nga çdo vend ku përdor Chrome, aktivizo sinkronizimin</translation>
 <translation id="3533694711092285624">Nuk ka asnjë fjalëkalim të ruajtur. Chrome mund t'i kontrollojë fjalëkalimet e tua kur ti i ruan ato.</translation>
 <translation id="3641179212828090796">Përdor fjalëkalimin që ruajte në Chrome për t'u identifikuar më shpejt</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb
index 6c6e190..3691a95 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome vam štedi vreme tako što postavlja naloge na veb. Možete da dodajete ili uklanjate naloge u podešavanjima.</translation>
 <translation id="3282568296779691940">Prijavljivanje u Chrome</translation>
 <translation id="3345341804167540816">Koristite Chrome svuda</translation>
-<translation id="3428998300753080128">Prijavite se na ovaj sajt, Google nalog i u Chrome.</translation>
 <translation id="3522659714780527202">Da biste videli kartice na bilo kojem uređaju na kom koristite Chrome, uključite sinhronizaciju</translation>
 <translation id="3533694711092285624">Nema sačuvanih lozinki. Chrome može da proverava lozinke kada ih sačuvate.</translation>
 <translation id="3641179212828090796">Koristite lozinku koju ste sačuvali u Chrome-u radi bržeg prijavljivanja</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb
index 4c49c6d..a522eab 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome вам штеди време тако што поставља налоге на веб. Можете да додајете или уклањате налоге у подешавањима.</translation>
 <translation id="3282568296779691940">Пријављивање у Chrome</translation>
 <translation id="3345341804167540816">Користите Chrome свуда</translation>
-<translation id="3428998300753080128">Пријавите се на овај сајт, Google налог и у Chrome.</translation>
 <translation id="3522659714780527202">Да бисте видели картице на било којем уређају на ком користите Chrome, укључите синхронизацију</translation>
 <translation id="3533694711092285624">Нема сачуваних лозинки. Chrome може да проверава лозинке када их сачувате.</translation>
 <translation id="3641179212828090796">Користите лозинку коју сте сачували у Chrome-у ради бржег пријављивања</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sv.xtb
index 5479529..d3baad9 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sv.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sv.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Med Chrome sparar du tid genom att dina konton blir tillgängliga på nätet. Du kan lägga till och ta bort konton i inställningarna.</translation>
 <translation id="3282568296779691940">Logga in i Chrome</translation>
 <translation id="3345341804167540816">Använd Chrome överallt</translation>
-<translation id="3428998300753080128">Logga in på den här webbplatsen, i ditt Google-konto och i Chrome.</translation>
 <translation id="3522659714780527202">Aktivera synkronisering om du vill ha samma flikar tillgängliga på alla enheter där du använder Chrome</translation>
 <translation id="3533694711092285624">Det finns inga sparade lösenord. Chrome kan bara kontrollera dina lösenord om du sparar dem.</translation>
 <translation id="3641179212828090796">Logga in snabbare med lösenordet du sparade i Chrome</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sw.xtb
index 1e28b7d3..11c2deef 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sw.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sw.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome inakuokolea wakati kwa kuleta akaunti zako kwenye wavuti. Unaweza kuongeza au kuondoa akaunti katika Mipangilio.</translation>
 <translation id="3282568296779691940">Ingia katika Chrome</translation>
 <translation id="3345341804167540816">Tumia Chrome Kila Mahali</translation>
-<translation id="3428998300753080128">Ingia katika tovuti hii, Akaunti yako ya Google na Chrome.</translation>
 <translation id="3522659714780527202">Ili uone vichupo vyako kwenye kifaa chochote unakotumia Chrome, washa kipengele cha kusawazisha</translation>
 <translation id="3533694711092285624">Hakuna manenosiri yaliyohifadhiwa. Chrome inaweza kukagua manenosiri yako unapoyahifadhi.</translation>
 <translation id="3641179212828090796">Tumia nenosiri ulilohifadhi kwenye Chrome ili uingie haraka katika akaunti</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
index 6044df2..fca7f2a 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">இணையத்தில் உங்கள் கணக்குகளில் உள்நுழைவதற்கான நேரத்தை Chrome சேமிக்கும். அமைப்புகளில் கணக்குகளைச் சேர்க்கலாம் அல்லது அகற்றலாம்.</translation>
 <translation id="3282568296779691940">Chrome இல் உள்நுழைக</translation>
 <translation id="3345341804167540816">எங்கும் Chromeஐப் பயன்படுத்தவும்</translation>
-<translation id="3428998300753080128">இந்தத் தளம், உங்கள் Google கணக்கு, Chrome ஆகியவற்றில் உள்நுழையுங்கள்.</translation>
 <translation id="3522659714780527202">நீங்கள் Chromeமைப் பயன்படுத்தும் சாதனங்களில் உங்கள் தாவல்களைப் பார்க்க, ஒத்திசைவை இயக்கவும்</translation>
 <translation id="3533694711092285624">சேமித்த கடவுச்சொற்கள் எதுவும் இல்லை. நீங்கள் அவற்றைச் சேமிக்கும்போது Chromeமால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியும்.</translation>
 <translation id="3641179212828090796">விரைவாக உள்நுழைய Chromeமில் நீங்கள் சேமித்த கடவுச்சொல்லைப் பயன்படுத்தவும்</translation>
@@ -57,6 +56,7 @@
 <translation id="4249068189593983585">Chrome உதவிக்குறிப்பு. கூடுதல் தாவல் விருப்பங்களைப் பார்க்க திரையின் கீழிருக்கும் / மேலிருக்கும் கருவிப்பட்டியிலுள்ள ‘தாவல்களைக் காட்டு’ பட்டனைத் தொட்டுப் பிடிக்கவும்.</translation>
 <translation id="4523886039239821078">சில செருகு நிரல்களினால் Chrome சிதைவுக்குட்படுகிறது. பின்வருபவற்றை நிறுவல் நீக்கம் செய்யவும்:</translation>
 <translation id="4633328489441962921">Chrome உலாவியால் புதுப்பிப்புகள் உள்ளனவா எனப் பார்க்க முடியவில்லை</translation>
+<translation id="4636900170638246267">இந்தத் தளத்திலும் Chromeமிலும் உள்நுழையுங்கள்.</translation>
 <translation id="4698415050768537821">Chrome உலாவியால் கடவுச்சொற்கள் அனைத்தையும் சரிபார்க்க முடியவில்லை. நாளை முயலவும் அல்லது <ph name="BEGIN_LINK" />உங்கள் Google கணக்கில் கடவுச்சொற்களைச் சரிபார்க்கவும்.<ph name="END_LINK" /></translation>
 <translation id="4802922164792993118">Chrome உதவிக்குறிப்பு. கீபோர்டின் மேற்புறத்தில் காட்டப்படும் சேமிக்கப்பட்ட கடவுச்சொல்லைத் தேர்ந்தெடுப்பதன் மூலம் விரைவாக உள்நுழையலாம்.</translation>
 <translation id="4819268619367838612">ஆப்ஸை மேம்படுத்த உதவுவதற்காக, உபயோகத் தரவையும் சிதைவுத் தரவையும் Googleளுக்கு Chrome அனுப்பும். <ph name="BEGIN_LINK" />நிர்வகியுங்கள்<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb
index 58d1ee44..fe3691b 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome మీ ఖాతాలను వెబ్‌లో అందించడం ద్వారా మీకు సమయాన్ని ఆదా చేస్తుంది. మీరు సెట్టింగ్‌లలో ఖాతాలను జోడించవచ్చు లేదా తీసివేయవచ్చు.</translation>
 <translation id="3282568296779691940">Chromeకు సైన్ ఇన్ చేయండి</translation>
 <translation id="3345341804167540816">Chromeని అంతటా ఉపయోగించండి</translation>
-<translation id="3428998300753080128">ఈ సైట్‌కు, మీ Google ఖాతాకు, Chromeకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="3522659714780527202">మీరు Chromeను ఎక్కడ ఉపయోగించినా మీ ట్యాబ్‌లను చూడటానికి, సింక్‌ను ఆన్ చేయండి</translation>
 <translation id="3533694711092285624">సేవ్ చేసిన పాస్‌వర్డ్‌లు లేవు. మీరు మీ పాస్‌వర్డ్‌లను సేవ్ చేసినప్పుడు Chrome వాటిని చెక్ చేయగలదు.</translation>
 <translation id="3641179212828090796">వేగంగా సైన్ ఇన్ చేయడానికి మీరు Chromeలో సేవ్ చేసిన పాస్‌వర్డ్‌ను ఉపయోగించండి</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb
index 0e4fce5..f1721fcd2 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome ช่วยคุณประหยัดเวลาโดยนำบัญชีของคุณไปไว้บนเว็บ คุณสามารถเพิ่มหรือนำบัญชีออกได้ในการตั้งค่า</translation>
 <translation id="3282568296779691940">ลงชื่อเข้าใช้ Chrome</translation>
 <translation id="3345341804167540816">ใช้ Chrome ในทุกที่</translation>
-<translation id="3428998300753080128">ลงชื่อเข้าใช้เว็บไซต์นี้ บัญชี Google และ Chrome</translation>
 <translation id="3522659714780527202">เปิดการซิงค์เพื่อดูแท็บที่เปิดไว้จากอุปกรณ์ที่คุณใช้ Chrome</translation>
 <translation id="3533694711092285624">ไม่มีรหัสผ่านที่บันทึกไว้ Chrome จะตรวจสอบรหัสผ่านได้เมื่อคุณบันทึกรหัสผ่านไว้</translation>
 <translation id="3641179212828090796">ใช้รหัสผ่านที่คุณบันทึกไว้ใน Chrome เพื่อลงชื่อเข้าใช้ได้เร็วขึ้น</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb
index 8349ce36..0e4c66e3 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome, hesaplarınızı web'e getirerek size zaman kazandırır. Hesapları Ayarlar'dan ekleyebilir veya kaldırabilirsiniz.</translation>
 <translation id="3282568296779691940">Chrome'da oturum aç</translation>
 <translation id="3345341804167540816">Chrome'u Her Yerde Kullanın</translation>
-<translation id="3428998300753080128">Bu sitede, Google Hesabınızda ve Chrome'da oturum açın.</translation>
 <translation id="3522659714780527202">Chrome kullandığınız her yerde sekmelerinizi görmek için senkronizasyonu açın</translation>
 <translation id="3533694711092285624">Kaydedilen şifre yok. Kaydetmeniz halinde Chrome, şifrelerinizi kontrol edebilir.</translation>
 <translation id="3641179212828090796">Chrome'da kaydettiğiniz şifreyi kullanarak daha hızlı oturum açın</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb
index f1cffdd..49a2f97 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">З Chrome ви можете заощадити час, розмістивши свої облікові записи в Інтернеті. Додати або вилучити облікові записи можна в налаштуваннях.</translation>
 <translation id="3282568296779691940">Вхід у Chrome</translation>
 <translation id="3345341804167540816">Використовуйте Chrome на всіх пристроях</translation>
-<translation id="3428998300753080128">Увійдіть в облікові записи цього сайту, Google і Chrome.</translation>
 <translation id="3522659714780527202">Щоб переглядати свої вкладки Chrome на будь-якому пристрої, увімкніть синхронізацію</translation>
 <translation id="3533694711092285624">Немає збережених паролів. Chrome зможе перевірити ваші паролі, коли ви їх збережете.</translation>
 <translation id="3641179212828090796">Використовуйте пароль, збережений у Chrome, щоб входити швидше</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb
index 45e32fa..46fa75b 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">‏Chrome آپ کے اکاؤنٹس کو ویب پر لا کر آپ کا وقت بچاتا ہے۔ آپ ترتیبات میں اکاؤنٹس کو شامل کر سکتے یا ہٹا سکتے ہیں۔</translation>
 <translation id="3282568296779691940">‏Chrome میں سائن ان کریں</translation>
 <translation id="3345341804167540816">‏Chrome کو ہر جگہ استعمال کریں</translation>
-<translation id="3428998300753080128">‏اپنے Google اکاؤنٹ اور Chrome سے اس سائٹ میں سائن ان کریں۔</translation>
 <translation id="3522659714780527202">‏اپنے ٹیبز کو دیکھنے کے لئے جہاں بھی آپ Chrome استعمال کرتے ہیں، سِنک کو آن کریں</translation>
 <translation id="3533694711092285624">‏کوئی محفوظ کردہ پاس ورڈز نہیں۔ جب آپ پاس ورڈز کو محفوظ کرتے ہیں تو Chrome انہیں چیک کر سکتا ہے۔</translation>
 <translation id="3641179212828090796">‏تیز سائن ان کرنے کے لیے وہ پاس ورڈ استعمال کریں جو آپ نے Chrome میں محفوظ کیا تھا</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb
index b8252ead..a8db8bf 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome xizmatlariga kirishda har safar foydalanuvchi nomi va parol kiritishingiz shart emas. Chrome qurilmada saqlangan hisoblardan foydalanadi. Ularni sozlamalar orqali boshqarishingiz mumkin.</translation>
 <translation id="3282568296779691940">Chrome hisobiga kirish</translation>
 <translation id="3345341804167540816">Chrome’ni o‘zingiz bilan olib yuring</translation>
-<translation id="3428998300753080128">Bu sayt, Google va Chrome hisoblaringizga kiring.</translation>
 <translation id="3522659714780527202">Boshqa qurilmalardagi Chrome varaqlarini koʻrish uchun sinxronizatsiyani yoqing</translation>
 <translation id="3533694711092285624">Hech qanday parol saqlanmagan. Chrome faqat saqlangan parollaringizni tekshira oladi.</translation>
 <translation id="3641179212828090796">Tezroq kirish uchun Chromeda saqlangan paroldan foydalaning</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb
index 2c10ea0..c182608 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome giúp bạn tiết kiệm thời gian bằng cách đưa tài khoản của bạn lên web. Bạn có thể thêm hoặc xóa tài khoản trong Cài đặt.</translation>
 <translation id="3282568296779691940">Đăng nhập vào Chrome</translation>
 <translation id="3345341804167540816">Sử dụng Chrome ở mọi nơi</translation>
-<translation id="3428998300753080128">Đăng nhập vào trang web này, Tài khoản Google của bạn và Chrome.</translation>
 <translation id="3522659714780527202">Để xem các thẻ của bạn trên bất cứ thiết bị nào mà bạn có dùng Chrome, hãy bật tính năng đồng bộ hóa</translation>
 <translation id="3533694711092285624">Bạn chưa lưu mật khẩu nào. Chrome có thể kiểm tra các mật khẩu của bạn khi bạn lưu các mật khẩu đó.</translation>
 <translation id="3641179212828090796">Sử dụng mật khẩu bạn đã lưu trong Chrome để đăng nhập nhanh hơn</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb
index a8f22bb..86203f60 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">为节省您的时间,Chrome 已将您的 Google 帐号同步到网络上。您可在“设置”中添加或移除帐号。</translation>
 <translation id="3282568296779691940">登录 Chrome</translation>
 <translation id="3345341804167540816">随时随地使用 Chrome</translation>
-<translation id="3428998300753080128">登录此网站、您的 Google 帐号和 Chrome。</translation>
 <translation id="3522659714780527202">要查看您在其他设备上用 Chrome 打开的标签页,请开启同步功能</translation>
 <translation id="3533694711092285624">尚未保存任何密码。您需要先保存密码才能使用 Chrome 的密码检查功能。</translation>
 <translation id="3641179212828090796">使用您保存在 Chrome 中的密码更快地完成登录</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
index 590d5389..21d81ee 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome 允許您將帳戶同步至網路上,以節省時間。您可以在設定中新增或移除帳戶。</translation>
 <translation id="3282568296779691940">登入 Chrome</translation>
 <translation id="3345341804167540816">隨時隨地使用 Chrome</translation>
-<translation id="3428998300753080128">登入此網站、您的 Google 帳戶及 Chrome。</translation>
 <translation id="3522659714780527202">如要在任何使用 Chrome 的裝置上查看分頁,請開啟同步處理功能</translation>
 <translation id="3533694711092285624">沒有已儲存的密碼。儲存密碼時,Chrome 可檢查您的密碼。</translation>
 <translation id="3641179212828090796">使用儲存在 Chrome 中的密碼加快登入速度</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb
index 6f9afb1..c41cee7 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">Chrome 會將你的所有帳戶同步到網路上,為你節省時間。你可以在「設定」中新增或移除帳戶。</translation>
 <translation id="3282568296779691940">登入 Chrome</translation>
 <translation id="3345341804167540816">隨時隨地使用 Chrome</translation>
-<translation id="3428998300753080128">登入這個網站、Google 帳戶和 Chrome。</translation>
 <translation id="3522659714780527202">開啟同步功能後,不論從何處使用 Chrome 都能查看你的分頁</translation>
 <translation id="3533694711092285624">未儲存任何密碼。你必須先儲存密碼,才能使用 Chrome 的密碼檢查功能。</translation>
 <translation id="3641179212828090796">使用儲存在 Chrome 中的密碼加快登入速度</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb
index bf10ebe4..e8f41ccd 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb
@@ -39,7 +39,6 @@
 <translation id="3196546062792660320">I-Chrome ikulondolozela isikhathi ngokuletha ama-akhawunti wakho kuwebhu. Ungangeza noma ususe ama-akhawunti kuzilungiselelo.</translation>
 <translation id="3282568296779691940">Ngena ngemvume ku-Chrome</translation>
 <translation id="3345341804167540816">Sebenzisa i-Chrome Noma Kuphi</translation>
-<translation id="3428998300753080128">Ngena ngemvume kuleli sayithi, i-Google Account yakho, ne-Chrome.</translation>
 <translation id="3522659714780527202">Ukuze ubone amathebhu wakho noma kuphi lapho usebenzisa i-Chrome, vula ukuvumelanisa</translation>
 <translation id="3533694711092285624">Awekho amaphasiwedi alondoloziwe. I-Chrome ingahlola amaphasiwedi akho uma uwalondolozile.</translation>
 <translation id="3641179212828090796">Sebenzisa iphasiwedi oyilondoloze ku-Chrome ukuze ungene ngemvume ngokushesha</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb
index a95837dd..4f36495 100644
--- a/ios/chrome/app/strings/resources/ios_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">Kon nie druk nie.</translation>
 <translation id="1125564390852150847">Skep nuwe oortjie.</translation>
 <translation id="1126809382673880764">Beskerm jou nie teen gevaarlike webwerwe, aflaaie en uitbreidings nie. Jy sal steeds Veiligblaai-beskerming kry, indien beskikbaar, in ander Google-dienste, soos Gmail en Search.</translation>
+<translation id="1135212215217513471">Kry Chrome vir iOS</translation>
 <translation id="1145536944570833626">Vee bestaande data uit.</translation>
 <translation id="1147031633655575115">Aangemeld as <ph name="USER" /></translation>
 <translation id="1154984953698510061">Sien ander oortjies</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">Verifieer dis jy om seker te maak dat jy altyd toegang tot jou gesinkroniseerde data het</translation>
 <translation id="1870148520156231997">Wys wagwoord</translation>
 <translation id="1872096359983322073">Flits</translation>
+<translation id="1910975740091000991">Chrome vir iOS</translation>
 <translation id="1911619930368729126">Laai op na Google Drive</translation>
 <translation id="1923342640370224680">Afgelope uur</translation>
 <translation id="1930989359703290198">Jou organisasie laat jou toe om net met sekere rekeninge aan te meld. Rekeninge wat nie toegelaat word nie, word versteek. <ph name="BEGIN_LINK" />Kom meer te wete<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">Soek vir teks wat jy gekopieer het</translation>
 <translation id="214201757571129614">Meld aan …</translation>
 <translation id="2149973817440762519">Wysig boekmerk</translation>
+<translation id="2155145621546387786">Deel Chrome</translation>
 <translation id="2175927920773552910">QR-kode</translation>
 <translation id="2218443599109088993">Zoem uit</translation>
 <translation id="2230173723195178503">Webblad is gelaai</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index 28ab346..d55ae1f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">چاپ انجام نشد.</translation>
 <translation id="1125564390852150847">ایجاد برگه جدید</translation>
 <translation id="1126809382673880764">‏دربرابر وب‌سایت‌ها، بارگیری‌ها، و افزونه‌های خطرناک از شما محافظت نمی‌کند. درصورت موجود بودن، همچنان ویژگی حفاظتی «مرور ایمن» را در سرویس‌های دیگر Google مثل Gmail و «جستجو» دریافت می‌کنید.</translation>
+<translation id="1135212215217513471">‏دریافت Chrome ویژه iOS</translation>
 <translation id="1145536944570833626">حذف داده‌های موجود.</translation>
 <translation id="1147031633655575115">با <ph name="USER" /> به سیستم وارد شده‌اید</translation>
 <translation id="1154984953698510061">دیدن برگه‌های دیگر</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">برای اینکه مطمئن شوید همیشه می‌توانید به داده‌های همگام‌سازی دسترسی داشته باشید، هویتتان را به‌تأیید برسانید</translation>
 <translation id="1870148520156231997">نشان دادن گذرواژه</translation>
 <translation id="1872096359983322073">چراغ‌قوه</translation>
+<translation id="1910975740091000991">‏Chrome ویژه iOS</translation>
 <translation id="1911619930368729126">‏بارگذاری در Google Drive</translation>
 <translation id="1923342640370224680">ساعت گذشته</translation>
 <translation id="1930989359703290198">سازمانتان فقط ورود به سیستم با حساب‌های خاصی را مجاز کرده است. حساب‌هایی که مجاز نیستند پنهان می‌شوند. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">جستجوی نوشتاری که کپی کرده‌اید</translation>
 <translation id="214201757571129614">ورود به سیستم…</translation>
 <translation id="2149973817440762519">ویرایش نشانک</translation>
+<translation id="2155145621546387786">‏هم‌رسانی Chrome</translation>
 <translation id="2175927920773552910">رمزینه پاسخ‌سریع</translation>
 <translation id="2218443599109088993">کوچک کردن</translation>
 <translation id="2230173723195178503">صفحه وب بار شد</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 9d6bcff6..8aad806 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">Échec impr.</translation>
 <translation id="1125564390852150847">Créer un onglet.</translation>
 <translation id="1126809382673880764">Ce mode ne vous protège pas contre les téléchargements, les extensions ni les sites Web dangereux. Vous profitez toujours de la protection de navigation sécurisée, lorsqu'elle est offerte, dans d'autres services Google, comme Gmail et la recherche.</translation>
+<translation id="1135212215217513471">Télécharger Chrome pour iOS</translation>
 <translation id="1145536944570833626">Supprimer toutes les données existantes.</translation>
 <translation id="1147031633655575115">Connecté en tant que <ph name="USER" /></translation>
 <translation id="1154984953698510061">Voir les autres onglets</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">Pour vous assurer de toujours pouvoir accéder à vos données de synchronisation, vérifiez qu'il s'agit bien de vous</translation>
 <translation id="1870148520156231997">Afficher le mot de passe</translation>
 <translation id="1872096359983322073">Lampe de poche</translation>
+<translation id="1910975740091000991">Chrome pour iOS</translation>
 <translation id="1911619930368729126">Télév. vers Google Disque</translation>
 <translation id="1923342640370224680">Dernière heure</translation>
 <translation id="1930989359703290198">Votre organisation vous autorise à vous connecter à certains comptes seulement. Les comptes qui ne sont pas autorisés seront masqués. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">Rechercher le texte que vous avez copié</translation>
 <translation id="214201757571129614">Connexion…</translation>
 <translation id="2149973817440762519">Modifier le favori</translation>
+<translation id="2155145621546387786">Partager Chrome</translation>
 <translation id="2175927920773552910">Code QR</translation>
 <translation id="2218443599109088993">Zoom arrière</translation>
 <translation id="2230173723195178503">Page Web chargée</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index af949e2d..f6ed3bf5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">છાપવાનું નિષ્ફળ થયું.</translation>
 <translation id="1125564390852150847">નવું ટૅબ બનાવો.</translation>
 <translation id="1126809382673880764">જોખમકારક વેબસાઇટ, ડાઉનલોડ અને એક્સ્ટેન્શન સામે તમારું રક્ષણ કરતું નથી. Gmail અને Search જેવી Googleની અન્ય સેવાઓમાં, જ્યાં ઉપલબ્ધ હોય, ત્યાં તમને હજી પણ Safe Browsing સંરક્ષણ મળશે.</translation>
+<translation id="1135212215217513471">iOS માટે Chrome મેળવો</translation>
 <translation id="1145536944570833626">અસ્તિત્વમાંના ડેટાને ડિલીટ કરો.</translation>
 <translation id="1147031633655575115"><ph name="USER" /> તરીકે સાઇન ઇન થયા</translation>
 <translation id="1154984953698510061">અન્ય ટૅબ જુઓ</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">તમે તમારો સિંક કરેલો ડેટા ગમે ત્યારે ઍક્સેસ કરી શકો છો, એની ખાતરી કરવા માટે, આ તમે જ છો તેની ચકાસણી કરો</translation>
 <translation id="1870148520156231997">પાસવર્ડ જણાવો</translation>
 <translation id="1872096359983322073">ટોર્ચ</translation>
+<translation id="1910975740091000991">iOS માટે Chrome</translation>
 <translation id="1911619930368729126">Google ડ્રાઇવ પર અપલોડ કરો</translation>
 <translation id="1923342640370224680">છેલ્લી કલાક</translation>
 <translation id="1930989359703290198">તમારી સંસ્થા માત્ર અમુક ચોક્કસ એકાઉન્ટ વડે તમને સાઇન ઇન કરવાની મંજૂરી આપે છે. મંજૂરી ન હોય એવા એકાઉન્ટને છુપાવવામાં આવે છે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">તમે કૉપિ કરેલી ટેક્સ્ટ માટે શોધ કરો</translation>
 <translation id="214201757571129614">સાઇન ઇન કરો…</translation>
 <translation id="2149973817440762519">બુકમાર્કમાં ફેરફાર કરો</translation>
+<translation id="2155145621546387786">Chrome શેર કરો</translation>
 <translation id="2175927920773552910">QR કોડ</translation>
 <translation id="2218443599109088993">નાનું કરો</translation>
 <translation id="2230173723195178503">વેબપેજ લોડ કર્યું</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index ec12900..3a0c550 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">प्रिंट विफल रहा.</translation>
 <translation id="1125564390852150847">नया टैब बनाएं.</translation>
 <translation id="1126809382673880764">इस मोड में आपको नुकसान पहुंचाने वाली वेबसाइटों, डाउनलोड, और एक्सटेंशन से सुरक्षा नहीं मिलती. Gmail और Search जैसी दूसरी Google की सेवाओं में, आपको अब भी सुरक्षित ब्राउज़िंग की सुरक्षा मिल सकती है.</translation>
+<translation id="1135212215217513471">iOS के लिए Chrome डाउनलोड करें</translation>
 <translation id="1145536944570833626">मौजूदा डेटा मिटाएं.</translation>
 <translation id="1147031633655575115">आपने <ph name="USER" /> के तौर पर साइन इन किया है</translation>
 <translation id="1154984953698510061">अन्य टैब देखें</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">यह पक्का करने के लिए कि आप हमेशा अपना सिंक किया हुआ डेटा ऐक्सेस कर सकें, अपनी पहचान की पुष्टि करें</translation>
 <translation id="1870148520156231997">पासवर्ड दिखाएं</translation>
 <translation id="1872096359983322073">टॉर्च</translation>
+<translation id="1910975740091000991">iOS के लिए Chrome</translation>
 <translation id="1911619930368729126">Google डिस्क पर अपलोड करें</translation>
 <translation id="1923342640370224680">पिछला घंटा</translation>
 <translation id="1930989359703290198">आपका संगठन, आपको सिर्फ़ कुछ खास खातों से साइन इन करने की अनुमति देता है. जिन खातों से साइन करने की अनुमति नहीं है वे छिपा दिए जाते हैं. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">आपका कॉपी किया गया टेक्स्ट</translation>
 <translation id="214201757571129614">साइन इन करें…</translation>
 <translation id="2149973817440762519">बुकमार्क में बदलाव करें</translation>
+<translation id="2155145621546387786">Share Chrome</translation>
 <translation id="2175927920773552910">क्यूआर कोड</translation>
 <translation id="2218443599109088993">ज़ूम घटाएं</translation>
 <translation id="2230173723195178503">वेबपेज लोड हो गया है</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
index 59f763f..e4e1cd1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">Басып шығарылмады.</translation>
 <translation id="1125564390852150847">Жаңа қойынды жасау</translation>
 <translation id="1126809382673880764">Қауіпті веб-сайттардан, жүктеп алынған файлдардан және кеңейтімдерден қорғамайды. Gmail және Search сияқты басқа Google қызметтерінде "Қауіпсіз шолу" функциясы қорғайтын болады.</translation>
+<translation id="1135212215217513471">iOS-қа арналған Chrome-ды пайдаланыңыз.</translation>
 <translation id="1145536944570833626">Бар деректерді жойыңыз.</translation>
 <translation id="1147031633655575115"><ph name="USER" /> аккаунтына кірдіңіз.</translation>
 <translation id="1154984953698510061">Басқа қойындыларды көру</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">Синхрондау деректерін әрдайым пайдалана алатыныңызға көз жеткізу үшін, жеке басыңызды растаңыз.</translation>
 <translation id="1870148520156231997">Құпия сөзді көрсету</translation>
 <translation id="1872096359983322073">Шам</translation>
+<translation id="1910975740091000991">iOS-қа арналған Chrome</translation>
 <translation id="1911619930368729126">Google Drive-қа жүктеу</translation>
 <translation id="1923342640370224680">Соңғы сағат</translation>
 <translation id="1930989359703290198">Ұйымыңыз сізге белгілі бір аккаунттармен ғана кіруге рұқсат етеді. Рұқсат етілмеген аккаунттар жасырылған. <ph name="BEGIN_LINK" />Толығырақ<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">Көшірілген мәтінді іздеу</translation>
 <translation id="214201757571129614">Кіру…</translation>
 <translation id="2149973817440762519">Бетбелгіні өзгерту</translation>
+<translation id="2155145621546387786">Chrome-ды бөлісу</translation>
 <translation id="2175927920773552910">QR коды</translation>
 <translation id="2218443599109088993">Кішірейту</translation>
 <translation id="2230173723195178503">Веббет жүктелді</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb
index d4f4f03..ca53a84 100644
--- a/ios/chrome/app/strings/resources/ios_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">បានបរាជ័យក្នុងការបោះពុម្ព</translation>
 <translation id="1125564390852150847">បង្កើតផ្ទាំងថ្មី</translation>
 <translation id="1126809382673880764">មិនការពារអ្នក​ពីគេហទំព័រ ការទាញយក ឬកម្មវិធី​បន្ថែម​ដែលមានគ្រោះថ្នាក់ទេ។ អ្នក​នឹង​នៅតែ​ទទួលបាន​ការការពារ​ការរុករក​ដោយសុវត្ថិភាព (ប្រសិនបើមាន) នៅក្នុង​សេវាកម្ម Google ផ្សេងទៀត​ដូចជា Gmail និង​កម្មវិធីស្វែងរកជាដើម។</translation>
+<translation id="1135212215217513471">ទាញយក Chrome សម្រាប់ iOS</translation>
 <translation id="1145536944570833626">លុបទិន្នន័យដែលមានស្រាប់។</translation>
 <translation id="1147031633655575115">បានចូលជា <ph name="USER" /></translation>
 <translation id="1154984953698510061">មើលផ្ទាំងផ្សេងទៀត</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">ដើម្បី​ប្រាកដថា អ្នកអាចចូលប្រើ​ទិន្នន័យ​សមកាលកម្ម​របស់អ្នកបាន​ជានិច្ច សូមផ្ទៀងផ្ទាត់ថា​ជាអ្នក</translation>
 <translation id="1870148520156231997">បង្ហាញ​ពាក្យសម្ងាត់</translation>
 <translation id="1872096359983322073">ពិល</translation>
+<translation id="1910975740091000991">Chrome សម្រាប់ iOS</translation>
 <translation id="1911619930368729126">អាប់ឡូត Google Drive</translation>
 <translation id="1923342640370224680">ម៉ោងមុន</translation>
 <translation id="1930989359703290198">ស្ថាប័នរបស់អ្នក​អនុញ្ញាតឱ្យអ្នក​ចូលដោយប្រើ​គណនីជាក់លាក់​តែប៉ុណ្ណោះ។ គណនីដែលមិនមាន​ការអនុញ្ញាត​ត្រូវបានលាក់។ <ph name="BEGIN_LINK" />ស្វែងយល់បន្ថែម<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">ស្វែងរក​អត្ថបទ​ដែលអ្នក​បានចម្លង</translation>
 <translation id="214201757571129614">ចូលគណនី…</translation>
 <translation id="2149973817440762519">កែប្រែចំណាំ</translation>
+<translation id="2155145621546387786">ចែករំលែក Chrome</translation>
 <translation id="2175927920773552910">កូដ QR</translation>
 <translation id="2218443599109088993">បង្រួម</translation>
 <translation id="2230173723195178503">បាន​ផ្ទុក​គេហទំព័រ​</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
index f4e7c70..908567d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">ಮುದ್ರಿಸುವಿಕೆ ವಿಫಲಗೊಂಡಿದೆ.</translation>
 <translation id="1125564390852150847">ಹೊಸ ಟ್ಯಾಬ್ ರಚಿಸಿ.</translation>
 <translation id="1126809382673880764">ಅಪಾಯಕಾರಿ ವೆಬ್‌ಸೈಟ್‌ಗಳು, ಡೌನ್‌ಲೋಡ್‌ಗಳು ಮತ್ತು ವಿಸ್ತರಣೆಗಳ ವಿರುದ್ಧ ನಿಮಗೆ ರಕ್ಷಣೆ ನೀಡುವುದಿಲ್ಲ. Gmail ಮತ್ತು Search ನಂತಹ ಲಭ್ಯವಿರುವ ಇತರ Google ಸೇವೆಗಳಲ್ಲಿ, ನೀವು ಈಗಲೂ ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ರಕ್ಷಣೆಯನ್ನು ಪಡೆಯುತ್ತೀರಿ.</translation>
+<translation id="1135212215217513471">iOS ಗಾಗಿ Chrome ಅನ್ನು ಪಡೆಯಿರಿ</translation>
 <translation id="1145536944570833626">ಪ್ರಸ್ತುತ ಡೇಟಾ ಅಳಿಸಿ.</translation>
 <translation id="1147031633655575115"><ph name="USER" /> ಎಂಬ ಹೆಸರಿನಲ್ಲಿ ಸೈನ್ ಇನ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="1154984953698510061">ಇತರ ಟ್ಯಾಬ್‌ಗಳನ್ನು ನೋಡಿ</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">ನಿಮ್ಮ ಸಿಂಕ್ ಡೇಟಾವನ್ನು ನೀವು ಯಾವಾಗಲೂ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗುವ ಹಾಗೆ ನೋಡಿಕೊಳ್ಳಲು, ಅದು ನೀವೇ ಎಂದು ದೃಢೀಕರಿಸಿ</translation>
 <translation id="1870148520156231997">ಪಾಸ್‌ವರ್ಡ್‌ ತೋರಿಸಿ</translation>
 <translation id="1872096359983322073">ಟಾರ್ಚ್</translation>
+<translation id="1910975740091000991">iOS ಗಾಗಿ Chrome</translation>
 <translation id="1911619930368729126">Google ಡ್ರೈವ್‌ಗೆ ಅಪ್‌ಲೋಡ್ ಮಾಡಿ</translation>
 <translation id="1923342640370224680">ಕೊನೆಯ ಗಂಟೆ</translation>
 <translation id="1930989359703290198">ಕೆಲವು ಖಾತೆಗಳ ಮೂಲಕ ಮಾತ್ರ ಸೈನ್ ಇನ್ ಮಾಡಲು ನಿಮ್ಮ ಸಂಸ್ಥೆ ನಿಮಗೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ. ಅನುಮತಿಸದ ಖಾತೆಗಳನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">ನೀವು ನಕಲಿಸಿದ ಪಠ್ಯವನ್ನು ಹುಡುಕಿ</translation>
 <translation id="214201757571129614">ಸೈನ್ ಇನ್…</translation>
 <translation id="2149973817440762519">ಬುಕ್‌ಮಾರ್ಕ್ ಎಡಿಟ್ ಮಾಡಿ</translation>
+<translation id="2155145621546387786">Chrome ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಿ</translation>
 <translation id="2175927920773552910">QR ಕೋಡ್</translation>
 <translation id="2218443599109088993">ಝೂಮ್ ಔಟ್</translation>
 <translation id="2230173723195178503">ವೆಬ್‌ಪುಟ ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
index 75ef472..6bc7e6e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">Басылып чыгарылбай калды.</translation>
 <translation id="1125564390852150847">Жаңы өтмөк түзүү.</translation>
 <translation id="1126809382673880764">Кооптуу вебсайттардан, жүктөлүп алынган файлдардан жана кеңейтүүлөрдөн коргобойт. Gmail жана Издөө сыяктуу Google'дун башка кызматтарында мүмкүн болгондо Коопсуз серептөө иштетилет.</translation>
+<translation id="1135212215217513471">iOS үчүн Chrome'ду жүктөп алуу</translation>
 <translation id="1145536944570833626">Учурдагы дайындарды жок кылуу.</translation>
 <translation id="1147031633655575115"><ph name="USER" /> катары кирдиңиз</translation>
 <translation id="1154984953698510061">Башка өтмөктөрдү көрүү</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">Шайкештирилген маалыматыңызга каалаган убакта кирүү үчүн бул сиз экениңизди ырастаңыз</translation>
 <translation id="1870148520156231997">Сырсөздү көрсөтүү</translation>
 <translation id="1872096359983322073">Колчырак</translation>
+<translation id="1910975740091000991">iOS үчүн Chrome</translation>
 <translation id="1911619930368729126">Google Drive'га жүкт брүү</translation>
 <translation id="1923342640370224680">Акыркы саатта</translation>
 <translation id="1930989359703290198">Уюмуңуз белгилүү бир аккаунттар менен гана кирүүгө уруксат берет. Тыюу салынган аккаунттар жашырылды. <ph name="BEGIN_LINK" />Кеңири маалымат<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">Көчүрүп алган текстти издеңиз</translation>
 <translation id="214201757571129614">Кирүү…</translation>
 <translation id="2149973817440762519">Кыстарманы түзөтүү</translation>
+<translation id="2155145621546387786">Chrome'ду бөлүшүү</translation>
 <translation id="2175927920773552910">QR коду</translation>
 <translation id="2218443599109088993">Кичирейтүү</translation>
 <translation id="2230173723195178503">Веб баракча жүктөлдү</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index a69f419..8ae87a6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">Nepav. atsp.</translation>
 <translation id="1125564390852150847">Kurti naują skirtuką.</translation>
 <translation id="1126809382673880764">Neapsaugo jūsų nuo pavojingų svetainių, atsisiuntimų ir plėtinių. Kai yra galimybė, vis tiek gausite saugaus naršymo pranešimus kitose „Google“ paslaugose, pvz., „Gmail“ ir paieškoje.</translation>
+<translation id="1135212215217513471">Atsisiųskite „Chrome“, skirtą „iOS“</translation>
 <translation id="1145536944570833626">Ištrinti esamus duomenis.</translation>
 <translation id="1147031633655575115">Prisijungta kaip <ph name="USER" /></translation>
 <translation id="1154984953698510061">Žr. kitus skirtukus</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">Kad užtikrintumėte galimybę visada pasiekti sinchronizuojamus duomenis, patvirtinkite savo tapatybę</translation>
 <translation id="1870148520156231997">Rodyti slaptažodį</translation>
 <translation id="1872096359983322073">Žibintuvėlis</translation>
+<translation id="1910975740091000991">„Chrome“, skirta „iOS“</translation>
 <translation id="1911619930368729126">Įkelti į „Google“ diską</translation>
 <translation id="1923342640370224680">Pastaroji valanda</translation>
 <translation id="1930989359703290198">Organizacijoje leidžiama prisijungti tik naudojant tam tikras paskyras. Neleidžiamos paskyros yra paslėptos. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">Ieškoti nukopijuoto teksto</translation>
 <translation id="214201757571129614">Prisijungti…</translation>
 <translation id="2149973817440762519">Redaguoti žymes</translation>
+<translation id="2155145621546387786">Bendrinti „Chrome“</translation>
 <translation id="2175927920773552910">QR kodas</translation>
 <translation id="2218443599109088993">Tolinti</translation>
 <translation id="2230173723195178503">TInklalapis įkeltas</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
index a859143..c2ac1d40 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">പ്രിന്റിംഗ് പരാജയപ്പെട്ടു.</translation>
 <translation id="1125564390852150847">പുതിയ ടാബ് സൃഷ്‌ടിക്കുക.</translation>
 <translation id="1126809382673880764">അപകടകരമായ വെബ്‌സൈറ്റുകൾ ഡൗൺലോഡുകൾ, വിപുലീകരണങ്ങൾ എന്നിവയിൽ നിന്ന് നിങ്ങളെ പരിരക്ഷിക്കില്ല. Gmail, Search പോലുള്ള മറ്റ് Google സേവനങ്ങളിൽ ഉള്ള സുരക്ഷിത ബ്രൗസിംഗ് പരിരക്ഷ നിങ്ങൾക്ക് തുടർന്നും ലഭിക്കും.</translation>
+<translation id="1135212215217513471">iOS-നുള്ള Chrome നേടുക</translation>
 <translation id="1145536944570833626">നിലവിലുള്ള വിവരങ്ങൾ ഇല്ലാതാക്കുക.</translation>
 <translation id="1147031633655575115"><ph name="USER" /> ആയി സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്നു</translation>
 <translation id="1154984953698510061">മറ്റ് ടാബുകൾ കാണുക</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">സമന്വയിപ്പിക്കുന്ന ഡാറ്റ നിങ്ങൾക്ക് എപ്പോഴും ആക്‌സസ് ചെയ്യാനാകുമെന്ന് ഉറപ്പാക്കാൻ ഇത് നിങ്ങളാണെന്ന് പരിശോധിച്ചുറപ്പിക്കുക</translation>
 <translation id="1870148520156231997">പാസ്‌വേഡ് വെളിപ്പെടുത്തുക</translation>
 <translation id="1872096359983322073">ടോർച്ച്</translation>
+<translation id="1910975740091000991">iOS-നുള്ള Chrome</translation>
 <translation id="1911619930368729126">Google ഡ്രൈവിലേക്ക് അപ്‌ലോഡ് ചെയ്യുക</translation>
 <translation id="1923342640370224680">കഴിഞ്ഞ മണിക്കൂർ</translation>
 <translation id="1930989359703290198">ചില അക്കൗണ്ടുകൾ ഉപയോഗിച്ച് മാത്രമേ സൈൻ ഇൻ ചെയ്യാൻ നിങ്ങളുടെ സ്ഥാപനം അനുവദിക്കൂ. അനുവദനീയമല്ലാത്ത അക്കൗണ്ടുകൾ മറച്ചിരിക്കുന്നു. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">നിങ്ങൾ പകർത്തിയ ടെക്‌സ്‌റ്റ് തിരയുക</translation>
 <translation id="214201757571129614">സൈൻ ഇൻ ചെയ്യുക…</translation>
 <translation id="2149973817440762519">ബുക്മാര്‍ക്ക് എഡിറ്റ് ചെയ്യുക</translation>
+<translation id="2155145621546387786">Chrome പങ്കിടുക</translation>
 <translation id="2175927920773552910">QR കോഡ്</translation>
 <translation id="2218443599109088993">സൂം ഔട്ട് ചെയ്യുക</translation>
 <translation id="2230173723195178503">വെബ്‌പേജ് ലോഡ് ചെയ്‌തു</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb
index 29856bd2..def2307 100644
--- a/ios/chrome/app/strings/resources/ios_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">ပုံနှိပ်ခြင်း မအောင်မြင်ပါ။</translation>
 <translation id="1125564390852150847">တဘ်အသစ်ဖန်တီးပါ</translation>
 <translation id="1126809382673880764">အန္တရာယ်ရှိသော ဝဘ်ဆိုက်၊ ဒေါင်းလုဒ်နှင့် နောက်ဆက်တွဲများ၏ ရန်မှ ကာကွယ်မပေးပါ။ ရနိုင်သည့်အခါ Gmail နှင့် Search ကဲ့သို့ အခြား Google ဝန်ဆောင်မှုများတွင် 'ဘေးကင်းစွာ အင်တာနက်အသုံးပြုခြင်းစနစ်' ကာကွယ်မှုဆက်လက်ရရှိနေပါမည်။</translation>
+<translation id="1135212215217513471">iOS အတွက် Chrome ရယူနိုင်သည်</translation>
 <translation id="1145536944570833626">လက်ရှိဒေတာများကို ဖျက်ပါ</translation>
 <translation id="1147031633655575115"><ph name="USER" /> အဖြစ် လက်မှတ်ထိုးဝင်ထားသည်</translation>
 <translation id="1154984953698510061">အခြားတဘ်များ ကြည့်ရန်</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">စင့်ခ်လုပ်သောဒေတာကို အမြဲသုံးခွင့်ရကြောင်း သေချာစေရန် သင်ဖြစ်ကြောင်းအတည်ပြုပါ</translation>
 <translation id="1870148520156231997">စကားဝှက်ကို ပြသရန်</translation>
 <translation id="1872096359983322073">ဓာတ်မီး</translation>
+<translation id="1910975740091000991">iOS အတွက် Chrome</translation>
 <translation id="1911619930368729126">Google Drive သို့အပ်လုဒ်လုပ်မည်</translation>
 <translation id="1923342640370224680">နောက်ဆုံး နာရီ</translation>
 <translation id="1930989359703290198">အကောင့်အချို့ဖြင့်သာ လက်မှတ်ထိုးဝင်ရန် သင့်အဖွဲ့အစည်းက ခွင့်ပြုထားသည်။ ခွင့်ပြုမထားသော အကောင့်များကို ဖျောက်ထားသည်။ <ph name="BEGIN_LINK" />ပိုမိုလေ့လာရန်<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">သင်မိတ္တူကူးထားသည့် စာသားကို ရှာဖွေပါ</translation>
 <translation id="214201757571129614">လက်မှတ်ထိုးဝင်ရန်…</translation>
 <translation id="2149973817440762519">စာညှပ် တည်းဖြတ်ရန်</translation>
+<translation id="2155145621546387786">Chrome ကို မျှဝေရန်</translation>
 <translation id="2175927920773552910">QR ကုဒ်</translation>
 <translation id="2218443599109088993">ဇူးမ်ဖြုတ်ရန်</translation>
 <translation id="2230173723195178503">ဝဘ်စာမျက်နှာကို ဖွင့်ပြီးပါပြီ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
index bd0bbb9..dd7678c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">छाप्न सकिएन।</translation>
 <translation id="1125564390852150847">नयाँ ट्याब सिर्जना गर्नुहोस्।</translation>
 <translation id="1126809382673880764">तपाईंलाई जोखिमपूर्ण वेबसाइट, डाउनलोड वा एक्स्टेन्सनहरूविरुद्ध सुरक्षा प्रदान गर्दैन। उपलब्ध भएसम्म तपाईं अझै पनि Gmail र खोज जस्ता Google का अन्य सेवाहरूमा सुरक्षित ब्राउजिङको सुरक्षा प्राप्त गर्नु हुने छ।</translation>
+<translation id="1135212215217513471">Chrome को iOS संस्करण डाउनलोड गर्नुहोस्</translation>
 <translation id="1145536944570833626">विद्यमान डेटा मेट्नुहोस्।</translation>
 <translation id="1147031633655575115">तपाईंले <ph name="USER" /> का नामबाट साइन इन गर्नुभएको छ</translation>
 <translation id="1154984953698510061">अन्य ट्याबहरू हेर्नुहोस्</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">तपाईं आफूले सिंक गरेका डेटा जुनसुकै बेला हेर्न तथा प्रयोग गर्न सक्नुहुन्छ भन्ने कुरा सुनिश्चित गर्न साइन इन गर्ने व्यक्ति तपाईं नै हो भन्ने कुरा पुष्टि गर्नुहोस्</translation>
 <translation id="1870148520156231997">पासवर्ड देखाउनुहोस्</translation>
 <translation id="1872096359983322073">टर्च</translation>
+<translation id="1910975740091000991">Chrome को iOS संस्करण</translation>
 <translation id="1911619930368729126">Google ड्राइभमा अपलोड गर्नुहोस्</translation>
 <translation id="1923342640370224680">बितेको घन्टा</translation>
 <translation id="1930989359703290198">तपाईंको सङ्गठनको नीतिअनुसार तपाईं निश्चित खातामार्फत मात्र साइन इन गर्न पाउनुहुन्छ। साइन इन गर्ने अनुमति नदिइएका खाताहरू लुकाइन्छन्। <ph name="BEGIN_LINK" />थप जान्नुहोस्<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">तपाईंले प्रतिलिपि गरेको पाठको खोजी गर्नुहोस्</translation>
 <translation id="214201757571129614">साइन इन गर्नुहोस्…</translation>
 <translation id="2149973817440762519">बुकमार्क सम्पादन गर्नुहोस्</translation>
+<translation id="2155145621546387786">Chrome सेयर गर्नुहोस्</translation>
 <translation id="2175927920773552910">QR कोड</translation>
 <translation id="2218443599109088993">जुम घटाउनुहोस्</translation>
 <translation id="2230173723195178503">वेबपृष्ठ लोड गरियो</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 ead132f..af64555e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">Falha na impressão.</translation>
 <translation id="1125564390852150847">Criar nova guia</translation>
 <translation id="1126809382673880764">Não protege você contra sites, downloads e extensões perigosos. Você ainda terá a proteção do "Navegação segura", sempre que possível, em outros Serviços do Google, como o Gmail e a Pesquisa.</translation>
+<translation id="1135212215217513471">Instale o Chrome para iOS</translation>
 <translation id="1145536944570833626">Excluir os dados atuais.</translation>
 <translation id="1147031633655575115">Conta conectada: <ph name="USER" /></translation>
 <translation id="1154984953698510061">Ver outras guias</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">Para garantir o acesso aos seus dados sincronizados, confirme sua identidade</translation>
 <translation id="1870148520156231997">Mostrar senha</translation>
 <translation id="1872096359983322073">Lanterna</translation>
+<translation id="1910975740091000991">Chrome para iOS</translation>
 <translation id="1911619930368729126">Enviar para o Google Drive</translation>
 <translation id="1923342640370224680">Última hora</translation>
 <translation id="1930989359703290198">Sua organização permite que você faça login apenas com determinadas contas. As contas que não têm permissão para fazer login ficam ocultas. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">Pesquisar o texto que você copiou</translation>
 <translation id="214201757571129614">Login…</translation>
 <translation id="2149973817440762519">Editar favoritos</translation>
+<translation id="2155145621546387786">Compartilhar o Chrome</translation>
 <translation id="2175927920773552910">Código QR</translation>
 <translation id="2218443599109088993">Diminuir zoom</translation>
 <translation id="2230173723195178503">Página da Web carregada</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
index f9384ff..3b2c0d3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">அச்சிட முடியவில்லை.</translation>
 <translation id="1125564390852150847">புதிய தாவலை உருவாக்கு</translation>
 <translation id="1126809382673880764">ஆபத்தான இணையதளங்கள், பதிவிறக்கங்கள், நீட்டிப்புகள் ஆகியவற்றிலிருந்து உங்களைப் பாதுகாக்காது. எனினும் Gmail, Search போன்ற பிற Google சேவைகளில் ’பாதுகாப்பு உலாவல்’ அம்சத்தின் (கிடைத்தால்) மூலம் பாதுகாப்பைப் பெறுவீர்கள்.</translation>
+<translation id="1135212215217513471">iOSக்கான Chromeமைப் பெறுங்கள்</translation>
 <translation id="1145536944570833626">ஏற்கனவே உள்ள தரவை நீக்கு.</translation>
 <translation id="1147031633655575115"><ph name="USER" /> ஆக உள்நுழைந்துள்ளீர்கள்</translation>
 <translation id="1154984953698510061">பிற தாவல்களைக் காட்டு</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">நீங்கள் ஒத்திசைத்த தரவை எப்போது வேண்டுமானாலும் அணுக இது நீங்கள்தான் என உறுதிசெய்யவும்</translation>
 <translation id="1870148520156231997">கடவுச்சொல்லைக் காட்டும்</translation>
 <translation id="1872096359983322073">டார்ச்</translation>
+<translation id="1910975740091000991">iOSக்கான Chrome</translation>
 <translation id="1911619930368729126">Google இயக்ககத்தில் பதிவேற்றுக</translation>
 <translation id="1923342640370224680">கடந்த மணிநேரம்</translation>
 <translation id="1930989359703290198">குறிப்பிட்ட சில கணக்குகளை மட்டுமே பயன்படுத்தி உள்நுழைய உங்கள் நிறுவனம் அனுமதி வழங்கியுள்ளது. அனுமதிக்கப்படாத கணக்குகள் மறைக்கப்பட்டிருக்கும். <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">நீங்கள் நகலெடுத்த உரையைத் தேடவும்</translation>
 <translation id="214201757571129614">உள்நுழைக…</translation>
 <translation id="2149973817440762519">புக்மார்க்கை மாற்றுக</translation>
+<translation id="2155145621546387786">Chromeமைப் பகிர்</translation>
 <translation id="2175927920773552910">QR குறியீடு</translation>
 <translation id="2218443599109088993">சிறிதாக்கு</translation>
 <translation id="2230173723195178503">இணையப் பக்கம் ஏற்றப்பட்டது</translation>
@@ -474,6 +477,7 @@
 <translation id="4979397965658815378">உங்கள் எல்லா சாதனங்களிலும் புக்மார்க்குகள், கடவுச்சொற்கள், வரலாறு மற்றும் பிற அமைப்புகளைப் பெற, உங்கள் Google கணக்கு மூலம் உள்நுழையவும்</translation>
 <translation id="4986678885919050584">இந்தச் சாதனத்திலிருந்து அகற்று</translation>
 <translation id="4989542687859782284">இல்லை</translation>
+<translation id="498985224078955265">இந்தப் பக்கத்தை மற்றொரு சாதனத்திற்கு அனுப்ப, இரண்டு சாதனங்களிலும் Chromeமில் உள்நுழைய வேண்டும்.</translation>
 <translation id="5005498671520578047">கடவுச்சொல்லை நகலெடு</translation>
 <translation id="5017828934289857214">பின்னர் நினைவூட்டு</translation>
 <translation id="5037676449506322593">எல்லாம் தேர்ந்தெடு</translation>
@@ -525,6 +529,7 @@
 <translation id="5489208564673669003">அனைத்துத் தளங்களுக்குமான குக்கீகளையும் நிர்வகிக்க, <ph name="BEGIN_LINK" />குக்கீ அமைப்புகளைப்<ph name="END_LINK" /> பார்க்கவும்.</translation>
 <translation id="5490005495580364134">அனைத்து குக்கீகளையும் தடு (பரிந்துரைக்கப்படவில்லை)</translation>
 <translation id="5513681519188741830"><ph name="TIME" /> ம.நே. முன்பு</translation>
+<translation id="5525095647255982834">இந்தப் பக்கத்தை மற்றொரு சாதனத்திற்கு அனுப்ப, அந்தச் சாதனத்திலிருக்கும் Chromeமில் உள்நுழைய வேண்டும்.</translation>
 <translation id="5525269841082836315">கடவுச்சொற்றொடரை உருவாக்கவும்</translation>
 <translation id="5542540507657872337"><ph name="COUNT" /> உள்ளது</translation>
 <translation id="5548760955356983418">ஹேண்ட்ஆஃப் இந்தச் சாதனத்தில் ஒரு இணையதளத்தில் உலாவத் தொடங்கி, அதே தளத்தில், Macகில் தொடர்ந்து எளிதாக உலாவ அனுமதிக்கிறது. தற்போது திறந்து வைத்திருக்கும் இணையதளம், உங்கள் Macகின் ஐகான்கள் பட்டியலில் காட்டப்படும்.
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index 8c04649..2ccde8d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">Yazdırılamadı.</translation>
 <translation id="1125564390852150847">Yeni sekme oluştur.</translation>
 <translation id="1126809382673880764">Sizi tehlikeli web siteleri, indirmeler ve uzantılara karşı korumaz. Gmail ve Arama gibi diğer Google hizmetlerinde, mümkün olduğunda Güvenli Tarama korumasından yararlanmaya devam edersiniz.</translation>
+<translation id="1135212215217513471">iOS için Chrome'u yükleyin</translation>
 <translation id="1145536944570833626">Mevcut verileri silin.</translation>
 <translation id="1147031633655575115"><ph name="USER" /> olarak oturum açıldı</translation>
 <translation id="1154984953698510061">Diğer Sekmeleri Göster</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">Senkronize edilen verilerinize her zaman erişebileceğinizden emin olmak için kimliğinizi doğrulayın</translation>
 <translation id="1870148520156231997">Şifreyi Göster</translation>
 <translation id="1872096359983322073">Flaş</translation>
+<translation id="1910975740091000991">iOS için Chrome</translation>
 <translation id="1911619930368729126">Google Drive'a yükle</translation>
 <translation id="1923342640370224680">Son Bir Saat</translation>
 <translation id="1930989359703290198">Kuruluşunuz yalnızca belirli hesaplarla oturum açmanıza izin vermektedir. İzin verilmeyen hesaplar gösterilmez. <ph name="BEGIN_LINK" />Daha Fazla Bilgi<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">Kopyalanan Metni Ara</translation>
 <translation id="214201757571129614">Oturum aç…</translation>
 <translation id="2149973817440762519">Yer İşaretini Düzenle</translation>
+<translation id="2155145621546387786">Chrome'u paylaşın</translation>
 <translation id="2175927920773552910">QR Kodu</translation>
 <translation id="2218443599109088993">Uzaklaştır</translation>
 <translation id="2230173723195178503">Web sayfası yüklendi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
index 4d8f1dbf..13c203b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">In không thành công.</translation>
 <translation id="1125564390852150847">Tạo thẻ mới.</translation>
 <translation id="1126809382673880764">Không bảo vệ bạn trước các trang web, tệp đã tải xuống và tiện ích nguy hiểm. Bạn sẽ vẫn được bảo vệ bằng tính năng Duyệt web an toàn (nếu có) ở các dịch vụ khác của Google, chẳng hạn như Gmail và Tìm kiếm.</translation>
+<translation id="1135212215217513471">Tải Chrome dành cho iOS</translation>
 <translation id="1145536944570833626">Xóa dữ liệu hiện có.</translation>
 <translation id="1147031633655575115">Đã đăng nhập bằng tên <ph name="USER" /></translation>
 <translation id="1154984953698510061">Xem các thẻ khác</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">Hãy xác minh danh tính để đảm bảo bạn luôn có thể truy cập vào dữ liệu đã đồng bộ</translation>
 <translation id="1870148520156231997">Hiện mật khẩu</translation>
 <translation id="1872096359983322073">Đèn pin</translation>
+<translation id="1910975740091000991">Chrome dành cho iOS</translation>
 <translation id="1911619930368729126">Tải lên Google Drive</translation>
 <translation id="1923342640370224680">Một giờ qua</translation>
 <translation id="1930989359703290198">Tổ chức của bạn chỉ cho phép bạn đăng nhập bằng một số tài khoản nhất định. Các tài khoản không được phép sẽ bị ẩn. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">Tìm kiếm văn bản bạn đã sao chép</translation>
 <translation id="214201757571129614">Đăng nhập…</translation>
 <translation id="2149973817440762519">Chỉnh sửa dấu trang</translation>
+<translation id="2155145621546387786">Chia sẻ Chrome</translation>
 <translation id="2175927920773552910">Mã QR</translation>
 <translation id="2218443599109088993">Thu nhỏ</translation>
 <translation id="2230173723195178503">Đã tải trang web</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
index 55eae10..bb11f9f04 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
@@ -25,6 +25,7 @@
 <translation id="1112015203684611006">Ukuphrinta kwehlulekile.</translation>
 <translation id="1125564390852150847">Dala ithebhu entsha</translation>
 <translation id="1126809382673880764">Akukuvikeli kumawebusayithi ayingozi, okulandwayo, kanye nezandiso. Usazokuthola ukuvikelwa kokuphequlula okuphephile, lapho kutholakala, kwamanye amasevisi we-Google, njenge-Gmail. nokuSesha.</translation>
+<translation id="1135212215217513471">Thola i-Chrome ye-iOS</translation>
 <translation id="1145536944570833626">Susa idatha ekhona.</translation>
 <translation id="1147031633655575115">Ungene ngemvume njengo-<ph name="USER" /></translation>
 <translation id="1154984953698510061">Bona amanye amathebhu</translation>
@@ -113,6 +114,7 @@
 <translation id="1832848789136765277">Ukuze uqiniseke ukuthi uhlala ufinyelela idatha yakho yokuvumelanisa, qinisekisa ukuthi uwena</translation>
 <translation id="1870148520156231997">Bonisa iphasiwedi</translation>
 <translation id="1872096359983322073">Ithoshi</translation>
+<translation id="1910975740091000991">I-Chrome ye-iOS</translation>
 <translation id="1911619930368729126">Layisha ku-Google Drayivu</translation>
 <translation id="1923342640370224680">Ihora lokugcina</translation>
 <translation id="1930989359703290198">Inhlangano yakho ikuvumela ukube ungene ngemvume ngama-akhawunti athile kuphela. Ama-akhawunti angavunyelwe ayafihlwa. <ph name="BEGIN_LINK" />Funda kabanzi<ph name="END_LINK" /></translation>
@@ -140,6 +142,7 @@
 <translation id="2139867232736819575">Sesha umbhalo owukopishile</translation>
 <translation id="214201757571129614">Ukungena ngemvume…</translation>
 <translation id="2149973817440762519">Hlela ibhukhimakhi</translation>
+<translation id="2155145621546387786">Yabelana nge-Chrome</translation>
 <translation id="2175927920773552910">Ikhodi ye-QR</translation>
 <translation id="2218443599109088993">Hlehlisa isithombe</translation>
 <translation id="2230173723195178503">Ikhasi lewebhu lilayishiwe</translation>
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 6ffb1612..62a1f0f 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -249,11 +249,12 @@
 };
 
 const FeatureEntry::FeatureParam kDiscoverFeedTopSyncPromoFullWithTitle[] = {
-    {kDiscoverFeedTopSyncPromoStyleParam,
-     kDiscoverFeedTopSyncPromoStyleFullWithTitle}};
+    {kDiscoverFeedTopSyncPromoStyleFullWithTitle, "true"},
+    {kDiscoverFeedTopSyncPromoStyleCompact, "false"}};
 const FeatureEntry::FeatureParam kDiscoverFeedTopSyncPromoCompact[] = {
-    {kDiscoverFeedTopSyncPromoStyleParam,
-     kDiscoverFeedTopSyncPromoStyleCompact}};
+    {kDiscoverFeedTopSyncPromoStyleFullWithTitle, "false"},
+    {kDiscoverFeedTopSyncPromoStyleCompact, "true"}};
+
 const FeatureEntry::FeatureVariation kDiscoverFeedTopSyncPromoVariations[] = {
     {"Full with title", kDiscoverFeedTopSyncPromoFullWithTitle,
      std::size(kDiscoverFeedTopSyncPromoFullWithTitle), nullptr},
diff --git a/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm b/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm
index c9ade8f..5117c05 100644
--- a/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm
+++ b/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm
@@ -2,37 +2,37 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <map>
 #include <string>
 
-#include "base/bind.h"
-#include "base/strings/escape.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/sys_string_conversions.h"
+#import "base/bind.h"
+#import "base/strings/escape.h"
+#import "base/strings/string_util.h"
+#import "base/strings/stringprintf.h"
+#import "base/strings/sys_string_conversions.h"
 #import "base/test/ios/wait_util.h"
-#include "base/test/metrics/histogram_tester.h"
-#include "components/security_interstitials/core/https_only_mode_metrics.h"
+#import "base/test/metrics/histogram_tester.h"
+#import "components/security_interstitials/core/https_only_mode_metrics.h"
+#import "components/security_interstitials/core/omnibox_https_upgrade_metrics.h"
 #import "ios/chrome/browser/https_upgrades/https_upgrade_app_interface.h"
 #import "ios/chrome/browser/https_upgrades/https_upgrade_test_helper.h"
-#include "ios/chrome/browser/metrics/metrics_app_interface.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/metrics/metrics_app_interface.h"
+#import "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_app_interface.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
 #import "ios/chrome/test/earl_grey/web_http_server_chrome_test_case.h"
-#include "ios/components/security_interstitials/https_only_mode/feature.h"
+#import "ios/components/security_interstitials/https_only_mode/feature.h"
 #import "ios/testing/earl_grey/earl_grey_test.h"
-#include "ios/testing/embedded_test_server_handlers.h"
-#include "ios/web/common/features.h"
-#include "ios/web/public/test/element_selector.h"
-#include "net/test/embedded_test_server/default_handlers.h"
-#include "net/test/embedded_test_server/http_request.h"
-#include "net/test/embedded_test_server/http_response.h"
-#include "net/test/embedded_test_server/request_handler_util.h"
-#include "ui/base/l10n/l10n_util.h"
+#import "ios/testing/embedded_test_server_handlers.h"
+#import "ios/web/common/features.h"
+#import "ios/web/public/test/element_selector.h"
+#import "net/test/embedded_test_server/default_handlers.h"
+#import "net/test/embedded_test_server/http_request.h"
+#import "net/test/embedded_test_server/http_response.h"
+#import "net/test/embedded_test_server/request_handler_util.h"
+#import "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -89,6 +89,14 @@
              @"Timer is still running");
   GREYAssert(![HttpsUpgradeAppInterface isOmniboxUpgradeTimerRunning],
              @"Omnibox upgrade timer is unexpectedly running");
+
+  // Omnibox HTTPS Upgrades shouldn't handle this navigation.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:0
+              forHistogram:@(security_interstitials::omnibox_https_upgrades::
+                                 kEventHistogram)],
+      @"Omnibox HTTPS Upgrades unexpectedly recorded a histogram event");
 }
 
 // Asserts that the metrics are properly recorded for a successful upgrade.
@@ -120,6 +128,14 @@
              @"Timer is still running");
   GREYAssert(![HttpsUpgradeAppInterface isOmniboxUpgradeTimerRunning],
              @"Omnibox upgrade timer is unexpectedly running");
+
+  // Omnibox HTTPS Upgrades shouldn't handle this navigation.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:0
+              forHistogram:@(security_interstitials::omnibox_https_upgrades::
+                                 kEventHistogram)],
+      @"Omnibox HTTPS Upgrades unexpectedly recorded a histogram event");
 }
 
 // Asserts that the metrics are properly recorded for a failed upgrade.
@@ -151,6 +167,14 @@
              @"Timer is still running");
   GREYAssert(![HttpsUpgradeAppInterface isOmniboxUpgradeTimerRunning],
              @"Omnibox upgrade timer is unexpectedly running");
+
+  // Omnibox HTTPS Upgrades shouldn't handle this navigation.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:0
+              forHistogram:@(security_interstitials::omnibox_https_upgrades::
+                                 kEventHistogram)],
+      @"Omnibox HTTPS Upgrades unexpectedly recorded a histogram event");
 }
 
 // Asserts that the metrics are properly recorded for a timed-out upgrade.
@@ -182,6 +206,14 @@
              @"Timer is still running");
   GREYAssert(![HttpsUpgradeAppInterface isOmniboxUpgradeTimerRunning],
              @"Omnibox upgrade timer is unexpectedly running");
+
+  // Omnibox HTTPS Upgrades shouldn't handle this navigation.
+  GREYAssertNil(
+      [MetricsAppInterface
+          expectTotalCount:0
+              forHistogram:@(security_interstitials::omnibox_https_upgrades::
+                                 kEventHistogram)],
+      @"Omnibox HTTPS Upgrades unexpectedly recorded a histogram event");
 }
 
 #pragma mark - Tests
@@ -189,7 +221,7 @@
 // Disable the feature and navigate to an HTTP URL directly. Since the feature
 // is disabled, this should load the HTTP URL even though the upgraded HTTPS
 // version serves good SSL.
-- (void)testUpgrade_FeatureDisabled_NoUpgrade {
+- (void)test_FeatureDisabled_ShouldNotUpgrade {
   [ChromeEarlGrey setBoolValue:NO forUserPref:prefs::kHttpsOnlyModeEnabled];
 
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
@@ -202,7 +234,7 @@
 }
 
 // Tests that navigations to localhost URLs aren't upgraded.
-- (void)testUpgrade_Localhost_NoUpgrade {
+- (void)test_Localhost_ShouldNotUpgrade {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
                                       useFakeHTTPS:true];
 
@@ -216,9 +248,20 @@
   [self assertNoUpgrade];
 }
 
+// Navigate to an HTTPS URL directly. The navigation shouldn't be upgraded.
+- (void)test_GoodHTTPS_ShouldNotUpgrade {
+  [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
+                                      useFakeHTTPS:true];
+
+  GURL testURL = self.goodHTTPSServer->GetURL("/");
+  [ChromeEarlGrey loadURL:testURL];
+  [ChromeEarlGrey waitForWebStateContainingText:"HTTPS_RESPONSE"];
+  [self assertNoUpgrade];
+}
+
 // Navigate to an HTTP URL directly. The upgraded HTTPS version serves good SSL.
 // This should end up loading the HTTPS version of the URL.
-- (void)testUpgrade_GoodHTTPS {
+- (void)test_HTTPWithGoodHTTPS_ShouldUpgrade {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
                                       useFakeHTTPS:true];
 
@@ -230,7 +273,7 @@
 
 // Navigate to an HTTP URL by clicking a link. This should end up loading the
 // HTTPS version of the URL.
-- (void)testUpgrade_GoodHTTPS_LinkClick {
+- (void)test_HTTPWithGoodHTTPS_LinkClick_ShouldUpgrade {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
                                       useFakeHTTPS:true];
   int HTTPPort = self.testServer->port();
@@ -250,7 +293,7 @@
 
 // Navigate to an HTTP URL directly. The upgraded HTTPS version serves good SSL
 // which redirects to the original HTTP URL. This should show the interstitial.
-- (void)testUpgrade_HTTPSRedirectsToHTTP {
+- (void)test_HTTPSRedirectsToHTTP_ShouldFallback {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
                                       useFakeHTTPS:true];
 
@@ -284,7 +327,7 @@
 // Tests that prerendered navigations that should be upgraded are cancelled.
 // This test is adapted from testTapPrerenderSuggestions() in
 // prerender_egtest.mm.
-- (void)testUpgrade_BadHTTPS_PrerenderCanceled {
+- (void)test_BadHTTPS_ShouldCancelPrerender {
   // TODO(crbug.com/793306): Re-enable the test on iPad once the alternate
   // letters problem is fixed.
   if ([ChromeEarlGrey isIPadIdiom]) {
@@ -359,7 +402,7 @@
 
 // Navigate to an HTTP URL and allowlist the URL. Then clear browsing data.
 // This should clear the HTTP allowlist.
-- (void)testUpgrade_RemoveBrowsingData_ShouldClearAllowlist {
+- (void)test_RemoveBrowsingData_ShouldClearAllowlist {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.badHTTPSServer->port()
                                       useFakeHTTPS:false];
 
@@ -397,7 +440,7 @@
 
 // Click on the "Learn more" link in the interstitial. This should open a
 // new tab.
-- (void)testUpgrade_LearnMore_ShouldOpenNewTab {
+- (void)test_ClickLearnMore_ShouldOpenNewTab {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.badHTTPSServer->port()
                                       useFakeHTTPS:false];
 
@@ -421,7 +464,7 @@
 // Navigate to an HTTP URL directly. The upgraded HTTPS version serves bad SSL.
 // The upgrade will fail and the HTTPS-Only mode interstitial will be shown.
 // Reloading the page should show the interstitial again.
-- (void)testUpgrade_BadHTTPS_ReloadInterstitial {
+- (void)test_BadHTTPS_ReloadInterstitial {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.badHTTPSServer->port()
                                       useFakeHTTPS:false];
 
@@ -438,7 +481,7 @@
 // Navigate to an HTTP URL directly. The upgraded HTTPS version serves slow SSL.
 // The upgrade will fail and the HTTPS-Only mode interstitial will be shown.
 // Reloading the page should show the interstitial again.
-- (void)testUpgrade_SlowHTTPS_ReloadInterstitial {
+- (void)test_SlowHTTPS_ReloadInterstitial {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.slowHTTPSServer->port()
                                       useFakeHTTPS:true];
   // Set the fallback delay to zero. This will immediately stop the HTTPS
@@ -459,7 +502,7 @@
 // The upgrade will fail and the HTTPS-Only mode interstitial will be shown.
 // Click through the interstitial, then reload the page. The HTTP page should
 // be shown.
-- (void)testUpgrade_BadHTTPS_ProceedInterstitial_Allowlisted {
+- (void)test_BadHTTPS_ProceedInterstitial_Allowlisted {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.badHTTPSServer->port()
                                       useFakeHTTPS:false];
 
@@ -522,7 +565,7 @@
 // loading SSL page. The upgrade will be cancelled and the HTTPS-Only mode
 // interstitial will be shown. Click through the interstitial, then reload the
 // page. The HTTP page should be shown.
-- (void)testUpgrade_SlowHTTPS_ProceedInterstitial_Allowlisted {
+- (void)test_SlowHTTPS_ProceedInterstitial_Allowlisted {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.slowHTTPSServer->port()
                                       useFakeHTTPS:true];
   // Set the fallback delay to zero. This will immediately stop the HTTPS
@@ -556,7 +599,7 @@
 // Navigate to an HTTP URL directly. The upgraded HTTPS version serves bad SSL.
 // The upgrade will fail and the HTTPS-Only mode interstitial will be shown.
 // Tap Go back on the interstitial.
-- (void)testUpgrade_BadHTTPS_GoBack {
+- (void)test_BadHTTPS_GoBack {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.badHTTPSServer->port()
                                       useFakeHTTPS:false];
 
@@ -583,7 +626,7 @@
 // Navigate to an HTTP URL directly. The upgraded HTTPS version serves a slow
 // loading HTTPS page. The upgrade will be cancelled and the HTTPS-Only mode
 // interstitial will be shown. Tap Go back on the interstitial.
-- (void)testUpgrade_SlowHTTPS_GoBack {
+- (void)test_SlowHTTPS_GoBack {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.slowHTTPSServer->port()
                                       useFakeHTTPS:true];
   // Set the fallback delay to zero. This will immediately stop the HTTPS
@@ -613,7 +656,7 @@
 // Navigate to an HTTP URL and click through the interstitial. Then,
 // navigate to a new page and go back. This should load the HTTP URL
 // without showing the interstitial again.
-- (void)testUpgrade_BadHTTPS_GoBackToAllowlistedSite {
+- (void)test_BadHTTPS_GoBackToAllowlistedSite {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.badHTTPSServer->port()
                                       useFakeHTTPS:false];
 
@@ -646,7 +689,7 @@
 // Navigate to an HTTP URL with a slow HTTPS upgrade, click through the
 // interstitial. Then, navigate to a new page and go back. This should load the
 // HTTP URL without showing the interstitial again.
-- (void)testUpgrade_SlowHTTPS_GoBackToAllowlistedSite {
+- (void)test_SlowHTTPS_GoBackToAllowlistedSite {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.slowHTTPSServer->port()
                                       useFakeHTTPS:true];
   // Set the fallback delay to zero. This will immediately stop the HTTPS
diff --git a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.h b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.h
index 7aeb87f..c3247e6 100644
--- a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.h
+++ b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.h
@@ -44,7 +44,8 @@
 
  private:
   enum class State {
-    // Initial state.
+    // Initial state. The navigation hasn't started yet, or started but hasn't
+    // been upgraded because it's already HTTPS or a non-HTTP scheme.
     kNone,
     // The navigation is stopped to start an upgraded navigation.
     kStoppedToUpgrade,
diff --git a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm
index cb19dbe..e773e47 100644
--- a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm
+++ b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm
@@ -167,12 +167,12 @@
     return;
   }
 
-  state_ = State::kNone;
-  if (navigation_context->GetUrl().SchemeIs(url::kHttpsScheme) ||
-      service_->IsFakeHTTPSForTesting(navigation_context->GetUrl())) {
+  if (state_ == State::kDone &&
+      (navigation_context->GetUrl().SchemeIs(url::kHttpsScheme) ||
+       service_->IsFakeHTTPSForTesting(navigation_context->GetUrl()))) {
     RecordUMA(Event::kUpgradeSucceeded);
-    return;
   }
+  state_ = State::kNone;
 }
 
 void HttpsOnlyModeUpgradeTabHelper::StopToUpgrade(
@@ -256,7 +256,10 @@
   // If already HTTPS (real or faux), simply allow the response.
   if (url.SchemeIs(url::kHttpsScheme) || service_->IsFakeHTTPSForTesting(url)) {
     timer_.Stop();
-    state_ = State::kDone;
+    if (state_ != State::kNone) {
+      // Only call it done if the navigation was originally upgraded.
+      state_ = State::kDone;
+    }
     std::move(callback).Run(
         web::WebStatePolicyDecider::PolicyDecision::Allow());
     return;
diff --git a/ios/chrome/browser/https_upgrades/https_upgrade_test_helper.mm b/ios/chrome/browser/https_upgrades/https_upgrade_test_helper.mm
index 74bf5af..6eade9bb 100644
--- a/ios/chrome/browser/https_upgrades/https_upgrade_test_helper.mm
+++ b/ios/chrome/browser/https_upgrades/https_upgrade_test_helper.mm
@@ -144,6 +144,7 @@
   // Release the histogram tester.
   GREYAssertNil([MetricsAppInterface releaseHistogramTester],
                 @"Cannot reset histogram tester.");
+
   [super tearDown];
 }
 
diff --git a/ios/chrome/browser/https_upgrades/typed_navigation_upgrade_tab_helper_egtest.mm b/ios/chrome/browser/https_upgrades/typed_navigation_upgrade_tab_helper_egtest.mm
index cd1f94f..0a65657 100644
--- a/ios/chrome/browser/https_upgrades/typed_navigation_upgrade_tab_helper_egtest.mm
+++ b/ios/chrome/browser/https_upgrades/typed_navigation_upgrade_tab_helper_egtest.mm
@@ -4,31 +4,32 @@
 
 #include <string>
 
-#include "base/bind.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/sys_string_conversions.h"
-#include "base/test/metrics/histogram_tester.h"
-#include "components/omnibox/common/omnibox_features.h"
-#include "components/security_interstitials/core/omnibox_https_upgrade_metrics.h"
-#include "components/strings/grit/components_strings.h"
+#import "base/bind.h"
+#import "base/strings/stringprintf.h"
+#import "base/strings/sys_string_conversions.h"
+#import "base/test/metrics/histogram_tester.h"
+#import "components/omnibox/common/omnibox_features.h"
+#import "components/security_interstitials/core/https_only_mode_metrics.h"
+#import "components/security_interstitials/core/omnibox_https_upgrade_metrics.h"
+#import "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/https_upgrades/https_upgrade_app_interface.h"
 #import "ios/chrome/browser/https_upgrades/https_upgrade_test_helper.h"
-#include "ios/chrome/browser/metrics/metrics_app_interface.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/metrics/metrics_app_interface.h"
+#import "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
 #import "ios/chrome/test/earl_grey/web_http_server_chrome_test_case.h"
 #import "ios/testing/earl_grey/earl_grey_test.h"
-#include "ios/testing/embedded_test_server_handlers.h"
-#include "ios/web/common/features.h"
-#include "ios/web/public/test/element_selector.h"
-#include "net/test/embedded_test_server/default_handlers.h"
-#include "net/test/embedded_test_server/http_request.h"
-#include "net/test/embedded_test_server/http_response.h"
-#include "net/test/embedded_test_server/request_handler_util.h"
-#include "ui/base/l10n/l10n_util.h"
+#import "ios/testing/embedded_test_server_handlers.h"
+#import "ios/web/common/features.h"
+#import "ios/web/public/test/element_selector.h"
+#import "net/test/embedded_test_server/default_handlers.h"
+#import "net/test/embedded_test_server/http_request.h"
+#import "net/test/embedded_test_server/http_response.h"
+#import "net/test/embedded_test_server/request_handler_util.h"
+#import "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -83,6 +84,13 @@
              @"HTTPS Only Mode timer is unexpectedly running");
   GREYAssert(![HttpsUpgradeAppInterface isOmniboxUpgradeTimerRunning],
              @"Omnibox upgrade timer is unexpectedly running");
+
+  // HTTPS-Only mode shouldn't handle this navigation.
+  GREYAssertNil([MetricsAppInterface
+                    expectTotalCount:0
+                        forHistogram:@(security_interstitials::https_only_mode::
+                                           kEventHistogram)],
+                @"HTTPS-Only mode unexpectedly recorded a histogram event");
 }
 
 // Asserts that the metrics are properly recorded for a successful upgrade.
@@ -116,6 +124,13 @@
              @"HTTPS Only Mode timer is still running");
   GREYAssert(![HttpsUpgradeAppInterface isOmniboxUpgradeTimerRunning],
              @"Omnibox upgrade timer is still running");
+
+  // HTTPS-Only mode shouldn't handle this navigation.
+  GREYAssertNil([MetricsAppInterface
+                    expectTotalCount:0
+                        forHistogram:@(security_interstitials::https_only_mode::
+                                           kEventHistogram)],
+                @"HTTPS-Only mode unexpectedly recorded a histogram event");
 }
 
 // Asserts that the metrics are properly recorded for a failed upgrade.
@@ -150,6 +165,13 @@
              @"HTTPS Only Mode timer is still running");
   GREYAssert(![HttpsUpgradeAppInterface isOmniboxUpgradeTimerRunning],
              @"Omnibox upgrade timer is still running");
+
+  // HTTPS-Only mode shouldn't handle this navigation.
+  GREYAssertNil([MetricsAppInterface
+                    expectTotalCount:0
+                        forHistogram:@(security_interstitials::https_only_mode::
+                                           kEventHistogram)],
+                @"HTTPS-Only mode unexpectedly recorded a histogram event");
 }
 
 // Asserts that the metrics are properly recorded for a timed-out upgrade.
@@ -184,6 +206,13 @@
              @"HTTPS Only Mode timer is still running");
   GREYAssert(![HttpsUpgradeAppInterface isOmniboxUpgradeTimerRunning],
              @"Omnibox upgrade timer is still running");
+
+  // HTTPS-Only mode shouldn't handle this navigation.
+  GREYAssertNil([MetricsAppInterface
+                    expectTotalCount:0
+                        forHistogram:@(security_interstitials::https_only_mode::
+                                           kEventHistogram)],
+                @"HTTPS-Only mode unexpectedly recorded a histogram event");
 }
 
 // Focuses on the omnibox and types the given text.
@@ -202,7 +231,7 @@
 
 // Navigate to an HTTP URL. Since it's not typed in the omnibox, it shouldn't
 // be upgraded to HTTPS.
-- (void)testUpgrade_NoTyping_NoUpgrade {
+- (void)test_NoTyping_ShouldNotUpgrade {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
                                       useFakeHTTPS:true];
 
@@ -213,7 +242,7 @@
 }
 
 // Type an HTTP URL with scheme. It shouldn't be upgraded to HTTPS.
-- (void)testUpgrade_TypeFullHTTPURL_NoUpgrade {
+- (void)test_TypeFullHTTPURL_ShouldNotUpgrade {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
                                       useFakeHTTPS:true];
 
@@ -228,7 +257,7 @@
 }
 
 // Type an HTTPS URL with scheme. It shouldn't be upgraded.
-- (void)testUpgrade_TypeFullHTTPSURL_NoUpgrade {
+- (void)test_TypeFullHTTPSURL_ShouldNotUpgrade {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
                                       useFakeHTTPS:true];
 
@@ -244,7 +273,7 @@
 
 // Type an HTTP URL without scheme. The navigation should be upgraded to HTTPS
 // which should load successfully.
-- (void)testUpgrade_GoodHTTPS {
+- (void)test_TypeHTTPWithGoodHTTPS_ShouldUpgrade {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
                                       useFakeHTTPS:true];
 
@@ -272,10 +301,50 @@
   [self assertSuccessfulUpgrade:2];
 }
 
+// Same as test_TypeHTTPWithGoodHTTPS_ShouldUpgrade but with HTTPS-Only Mode
+// enabled.
+- (void)test_TypeHTTPWithGoodHTTPS_HTTPSOnlyModeEnabled_ShouldUpgrade {
+  // Enable HTTPS-Only Mode.
+  [ChromeEarlGrey setBoolValue:NO forUserPref:prefs::kHttpsOnlyModeEnabled];
+
+  [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port()
+                                      useFakeHTTPS:true];
+
+  // Go to a web page to have a normal location bar.
+  [ChromeEarlGrey loadURL:GURL("data:text/html,Blank Page")];
+  [ChromeEarlGrey waitForWebStateContainingText:"Blank Page"];
+
+  GURL testURL = self.testServer->GetURL("/");
+  std::string text = GetURLWithoutScheme(testURL);
+
+  // Type the URL in the omnibox.
+  [self typeTextAndPressEnter:text];
+  [ChromeEarlGrey waitForWebStateContainingText:"HTTPS_RESPONSE"];
+  [self assertSuccessfulUpgrade:1];
+
+  // Load an interim data URL to clear the "HTTP_RESPONSE" text.
+  [ChromeEarlGrey loadURL:GURL("data:text/html,Blank Page")];
+  [ChromeEarlGrey waitForWebStateContainingText:"Blank Page"];
+
+  // Type again. Normally, Omnibox should remember the successful HTTPS
+  // navigation and not attempt to upgrade again. We are using a faux-HTTPS
+  // server in tests which serves an http:// URL, so it will get upgraded again.
+  [self typeTextAndPressEnter:text];
+  [ChromeEarlGrey waitForWebStateContainingText:"HTTPS_RESPONSE"];
+  [self assertSuccessfulUpgrade:2];
+
+  // HTTPS-Only mode shouldn't handle this navigation.
+  GREYAssertNil([MetricsAppInterface
+                    expectTotalCount:0
+                        forHistogram:@(security_interstitials::https_only_mode::
+                                           kEventHistogram)],
+                @"HTTPS-Only mode unexpectedly recorded a histogram event");
+}
+
 // Type an HTTP URL without scheme. The navigation should be upgraded to HTTPS,
 // but the HTTPS URL serves bad response. The navigation should fall back to
 // HTTP.
-- (void)testUpgrade_BadHTTPS {
+- (void)test_HTTPWithBadHTTPS_ShouldFallback {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.badHTTPSServer->port()
                                       useFakeHTTPS:false];
   [HttpsUpgradeAppInterface
@@ -310,7 +379,7 @@
 // Type an HTTP URL without scheme. The navigation should be upgraded to HTTPS,
 // but the HTTPS URL serves a slow loading response. The upgrade should timeout
 // and the navigation should fall back to HTTP.
-- (void)testUpgrade_SlowTTPS {
+- (void)test_HTTPWithSlowHTTPS_ShouldFallBack {
   [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.slowHTTPSServer->port()
                                       useFakeHTTPS:true];
   [HttpsUpgradeAppInterface
diff --git a/ios/chrome/browser/metrics/BUILD.gn b/ios/chrome/browser/metrics/BUILD.gn
index 112a1449..322ca12 100644
--- a/ios/chrome/browser/metrics/BUILD.gn
+++ b/ios/chrome/browser/metrics/BUILD.gn
@@ -49,6 +49,8 @@
     "ios_chrome_signin_and_sync_status_metrics_provider.mm",
     "ios_chrome_stability_metrics_provider.h",
     "ios_chrome_stability_metrics_provider.mm",
+    "ios_feed_enabled_metrics_provider.h",
+    "ios_feed_enabled_metrics_provider.mm",
     "ios_profile_session_durations_service.h",
     "ios_profile_session_durations_service.mm",
     "ios_profile_session_durations_service_factory.h",
@@ -71,6 +73,7 @@
     "//components/breadcrumbs/core:feature_flags",
     "//components/browser_sync",
     "//components/crash/core/common",
+    "//components/feed/core/shared_prefs:feed_shared_prefs",
     "//components/keyed_service/core",
     "//components/keyed_service/ios",
     "//components/metrics",
@@ -103,6 +106,7 @@
     "//ios/chrome/browser/translate",
     "//ios/chrome/browser/ui/default_promo:utils",
     "//ios/chrome/browser/ui/main:scene_state_header",
+    "//ios/chrome/browser/ui/ntp:feature_flags",
     "//ios/chrome/browser/ui/overscroll_actions",
     "//ios/chrome/browser/variations",
     "//ios/chrome/browser/variations:ios_chrome_ui_string_overrider_factory",
@@ -127,6 +131,7 @@
     "ios_chrome_metrics_service_accessor_unittest.mm",
     "ios_chrome_metrics_service_client_unittest.mm",
     "ios_chrome_stability_metrics_provider_unittest.mm",
+    "ios_feed_enabled_metrics_provider_unittest.mm",
     "mobile_session_shutdown_metrics_provider_unittest.mm",
     "pageload_foreground_duration_tab_helper_unittest.mm",
   ]
@@ -137,6 +142,7 @@
     "//base",
     "//base/test:test_support",
     "//build:branding_buildflags",
+    "//components/feed/core/shared_prefs:feed_shared_prefs",
     "//components/metrics",
     "//components/metrics:test_support",
     "//components/network_time:network_time",
diff --git a/ios/chrome/browser/metrics/DEPS b/ios/chrome/browser/metrics/DEPS
index ae8adb8..f1518971 100644
--- a/ios/chrome/browser/metrics/DEPS
+++ b/ios/chrome/browser/metrics/DEPS
@@ -8,6 +8,13 @@
   "metrics_app_interface\.mm": [
     "+third_party/zlib/google/compression_utils.h",
   ],
+  "ios_feed_enabled_metrics_provider.mm": [
+    "+components/feed/core/shared_prefs/pref_names.h",
+    "+ios/chrome/browser/ui/ntp/new_tab_page_feature.h",
+  ],
+  "ios_feed_enabled_metrics_provider_unittest.mm": [
+    "+components/feed/core/shared_prefs/pref_names.h",
+  ],
 
   # TODO(crbug.com/1294160): Remove these dependencies.
   "^incognito_usage_app_state_agent.mm": [
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
index a242e1c..7ea1646 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
@@ -71,6 +71,7 @@
 #import "ios/chrome/browser/metrics/ios_chrome_default_browser_metrics_provider.h"
 #include "ios/chrome/browser/metrics/ios_chrome_signin_and_sync_status_metrics_provider.h"
 #include "ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider.h"
+#import "ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.h"
 #include "ios/chrome/browser/metrics/ios_profile_session_metrics_provider.h"
 #include "ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider.h"
 #include "ios/chrome/browser/sync/device_info_sync_service_factory.h"
@@ -343,6 +344,13 @@
 
   metrics_service_->RegisterMetricsProvider(
       CreateIOSProfileSessionMetricsProvider());
+
+  ChromeBrowserState* browser_state = GetApplicationContext()
+                                          ->GetChromeBrowserStateManager()
+                                          ->GetLastUsedBrowserState();
+  metrics_service_->RegisterMetricsProvider(
+      std::make_unique<IOSFeedEnabledMetricsProvider>(
+          browser_state->GetPrefs()));
 }
 
 void IOSChromeMetricsServiceClient::RegisterUKMProviders() {
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client_unittest.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client_unittest.mm
index 30649ce1..8c4dc56d 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client_unittest.mm
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client_unittest.mm
@@ -96,7 +96,7 @@
 
   // This is the number of metrics providers that are registered inside
   // IOSChromeMetricsServiceClient::Initialize().
-  expected_providers += 17;
+  expected_providers += 18;
 
   std::unique_ptr<IOSChromeMetricsServiceClient> chrome_metrics_service_client =
       IOSChromeMetricsServiceClient::Create(metrics_state_manager_.get());
diff --git a/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.h b/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.h
new file mode 100644
index 0000000..88adc98
--- /dev/null
+++ b/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.h
@@ -0,0 +1,31 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_METRICS_IOS_FEED_ENABLED_METRICS_PROVIDER_H_
+#define IOS_CHROME_BROWSER_METRICS_IOS_FEED_ENABLED_METRICS_PROVIDER_H_
+
+#import "components/metrics/metrics_provider.h"
+
+class PrefService;
+
+// Log a metric indicating whether the Feed can be shown to the user.
+class IOSFeedEnabledMetricsProvider : public metrics::MetricsProvider {
+ public:
+  explicit IOSFeedEnabledMetricsProvider(PrefService* pref_service);
+
+  IOSFeedEnabledMetricsProvider(const IOSFeedEnabledMetricsProvider&) = delete;
+  IOSFeedEnabledMetricsProvider& operator=(
+      const IOSFeedEnabledMetricsProvider&) = delete;
+
+  ~IOSFeedEnabledMetricsProvider() override;
+
+  // metrics::MetricsProvider
+  void ProvideCurrentSessionData(
+      metrics::ChromeUserMetricsExtension* uma_proto) override;
+
+ private:
+  PrefService* pref_service_;
+};
+
+#endif  // IOS_CHROME_BROWSER_METRICS_IOS_FEED_ENABLED_METRICS_PROVIDER_H_
diff --git a/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.mm b/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.mm
new file mode 100644
index 0000000..f22f25e
--- /dev/null
+++ b/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.mm
@@ -0,0 +1,33 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.h"
+
+#import "base/metrics/histogram_functions.h"
+#import "components/feed/core/shared_prefs/pref_names.h"
+#import "components/prefs/pref_service.h"
+#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/ui/ntp/new_tab_page_feature.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+IOSFeedEnabledMetricsProvider::IOSFeedEnabledMetricsProvider(
+    PrefService* pref_service)
+    : pref_service_(pref_service) {}
+
+IOSFeedEnabledMetricsProvider::~IOSFeedEnabledMetricsProvider() {}
+
+void IOSFeedEnabledMetricsProvider::ProvideCurrentSessionData(
+    metrics::ChromeUserMetricsExtension* uma_proto) {
+  BOOL policy_allows_feed =
+      pref_service_->GetBoolean(prefs::kNTPContentSuggestionsEnabled);
+  BOOL can_feed_be_shown =
+      policy_allows_feed && !IsFeedAblationEnabled() &&
+      pref_service_->GetBoolean(prefs::kArticlesForYouEnabled) &&
+      pref_service_->GetBoolean(feed::prefs::kArticlesListVisible);
+  base::UmaHistogramBoolean("ContentSuggestions.Feed.CanBeShown",
+                            can_feed_be_shown);
+}
diff --git a/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider_unittest.mm b/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider_unittest.mm
new file mode 100644
index 0000000..7e76753
--- /dev/null
+++ b/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider_unittest.mm
@@ -0,0 +1,67 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.h"
+
+#import "base/test/metrics/histogram_tester.h"
+#import "components/feed/core/shared_prefs/pref_names.h"
+#import "components/metrics/metrics_log_uploader.h"
+#import "components/prefs/pref_registry_simple.h"
+#import "components/prefs/testing_pref_service.h"
+#import "ios/chrome/browser/pref_names.h"
+#import "testing/platform_test.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+// Tests metrics that are recorded and uploaded by
+// IOSFeedEnabledMetricsProvider.
+class IOSFeedEnabledMetricsProviderTest : public PlatformTest {
+  void SetUp() override {
+    testing_pref_service_.registry()->RegisterBooleanPref(
+        prefs::kArticlesForYouEnabled, true);
+    testing_pref_service_.registry()->RegisterBooleanPref(
+        prefs::kNTPContentSuggestionsEnabled, true);
+    testing_pref_service_.registry()->RegisterBooleanPref(
+        feed::prefs::kArticlesListVisible, true);
+  }
+
+ protected:
+  TestingPrefServiceSimple testing_pref_service_;
+  base::HistogramTester histogram_tester_;
+};
+
+// Tests the implementation of ProvideCurrentSessionData
+TEST_F(IOSFeedEnabledMetricsProviderTest, ProvideCurrentSessionData) {
+  IOSFeedEnabledMetricsProvider provider(&testing_pref_service_);
+  provider.ProvideCurrentSessionData(nullptr /* uma_proto */);
+  histogram_tester_.ExpectBucketCount("ContentSuggestions.Feed.CanBeShown",
+                                      false, 0);
+  histogram_tester_.ExpectBucketCount("ContentSuggestions.Feed.CanBeShown",
+                                      true, 1);
+
+  testing_pref_service_.SetBoolean(prefs::kArticlesForYouEnabled, false);
+  provider.ProvideCurrentSessionData(nullptr /* uma_proto */);
+  histogram_tester_.ExpectBucketCount("ContentSuggestions.Feed.CanBeShown",
+                                      false, 1);
+  histogram_tester_.ExpectBucketCount("ContentSuggestions.Feed.CanBeShown",
+                                      true, 1);
+
+  testing_pref_service_.SetBoolean(prefs::kArticlesForYouEnabled, true);
+  testing_pref_service_.SetBoolean(prefs::kNTPContentSuggestionsEnabled, false);
+  provider.ProvideCurrentSessionData(nullptr /* uma_proto */);
+  histogram_tester_.ExpectBucketCount("ContentSuggestions.Feed.CanBeShown",
+                                      false, 2);
+  histogram_tester_.ExpectBucketCount("ContentSuggestions.Feed.CanBeShown",
+                                      true, 1);
+
+  testing_pref_service_.SetBoolean(prefs::kNTPContentSuggestionsEnabled, true);
+  testing_pref_service_.SetBoolean(feed::prefs::kArticlesListVisible, false);
+  provider.ProvideCurrentSessionData(nullptr /* uma_proto */);
+  histogram_tester_.ExpectBucketCount("ContentSuggestions.Feed.CanBeShown",
+                                      false, 3);
+  histogram_tester_.ExpectBucketCount("ContentSuggestions.Feed.CanBeShown",
+                                      true, 1);
+}
diff --git a/ios/chrome/browser/net/ios_chrome_network_delegate.cc b/ios/chrome/browser/net/ios_chrome_network_delegate.cc
index 9e43285..13930fa 100644
--- a/ios/chrome/browser/net/ios_chrome_network_delegate.cc
+++ b/ios/chrome/browser/net/ios_chrome_network_delegate.cc
@@ -14,6 +14,7 @@
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
 #include "base/path_service.h"
+#include "components/content_settings/core/browser/cookie_settings.h"
 #include "components/content_settings/core/common/content_settings.h"
 #include "components/prefs/pref_member.h"
 #include "components/prefs/pref_service.h"
@@ -78,7 +79,8 @@
   bool allowed =
       !cookie_settings_ ||
       cookie_settings_->IsFullCookieAccessAllowed(
-          request.url(), request.site_for_cookies().RepresentativeUrl());
+          request.url(), request.site_for_cookies().RepresentativeUrl(),
+          QueryReason::kCookies);
 
   if (!allowed) {
     ExcludeAllCookies(
@@ -98,7 +100,8 @@
     return true;
 
   return cookie_settings_->IsFullCookieAccessAllowed(
-      request.url(), request.site_for_cookies().RepresentativeUrl());
+      request.url(), request.site_for_cookies().RepresentativeUrl(),
+      QueryReason::kCookies);
 }
 
 net::NetworkDelegate::PrivacySetting
@@ -111,8 +114,8 @@
   if (!cookie_settings_.get())
     return net::NetworkDelegate::PrivacySetting::kStateAllowed;
 
-  return cookie_settings_->IsFullCookieAccessAllowed(url, site_for_cookies,
-                                                     top_frame_origin)
+  return cookie_settings_->IsFullCookieAccessAllowed(
+             url, site_for_cookies, top_frame_origin, QueryReason::kCookies)
              ? net::NetworkDelegate::PrivacySetting::kStateAllowed
              : net::NetworkDelegate::PrivacySetting::kStateDisallowed;
 }
diff --git a/ios/chrome/browser/net/ios_chrome_network_delegate.h b/ios/chrome/browser/net/ios_chrome_network_delegate.h
index a5deb0d7..7924f9c 100644
--- a/ios/chrome/browser/net/ios_chrome_network_delegate.h
+++ b/ios/chrome/browser/net/ios_chrome_network_delegate.h
@@ -48,6 +48,7 @@
                                         PrefService* pref_service);
 
  private:
+  using QueryReason = content_settings::CookieSettings::QueryReason;
   // NetworkDelegate implementation.
   int OnBeforeURLRequest(net::URLRequest* request,
                          net::CompletionOnceCallback callback,
diff --git a/ios/chrome/browser/ntp/features.h b/ios/chrome/browser/ntp/features.h
index c9b36f0..124bc22 100644
--- a/ios/chrome/browser/ntp/features.h
+++ b/ios/chrome/browser/ntp/features.h
@@ -59,7 +59,7 @@
 
 // Returns true if the user should receive a local notification when a feed
 // background refresh is completed. Background refresh completion notifications
-// are only compiled into non-release versions.
+// are only enabled by Experimental Settings.
 bool IsFeedBackgroundRefreshCompletedNotificationEnabled();
 
 // Whether the Following feed should also be refreshed in the background.
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view.h b/ios/chrome/browser/ui/authentication/cells/signin_promo_view.h
index 66296f50..58a8e28 100644
--- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view.h
+++ b/ios/chrome/browser/ui/authentication/cells/signin_promo_view.h
@@ -40,8 +40,8 @@
 // `textLabel`.
 @property(nonatomic, assign, readonly) CGFloat horizontalPadding;
 
-// `YES` when the promo view layout is compact.
-@property(nonatomic, assign) BOOL compactLayout;
+// The current layout style. Defaults to `SigninPromoViewStyleStandard`.
+@property(nonatomic, assign) SigninPromoViewStyle promoViewStyle;
 
 // Designated initializer.
 - (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view.mm b/ios/chrome/browser/ui/authentication/cells/signin_promo_view.mm
index ca579a5..0fd8d960 100644
--- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view.mm
+++ b/ios/chrome/browser/ui/authentication/cells/signin_promo_view.mm
@@ -26,15 +26,14 @@
 
 typedef struct {
   // Vertical spacing between stackView and cell contentView.
-  const CGFloat kStackViewVerticalPadding;
+  const CGFloat kStackViewTopPadding;
+  const CGFloat kStackViewBottomPadding;
   // Trailing margin for content.
   const CGFloat kStackViewTrailingMargin;
   // Spacing within content stack view.
   const CGFloat kContentStackViewSubViewSpacing;
   // Spacing within text stack view.
   const CGFloat kTextStackViewSubViewSpacing;
-  // Size for the imageView width and height.
-  const CGFloat kImageViewWidthHeight;
   // Margins for the primary button.
   const CGFloat kButtonTitleHorizontalContentInset;
   const CGFloat kButtonTitleVerticalContentInset;
@@ -46,11 +45,11 @@
 } PromoStyleValues;
 
 const PromoStyleValues kStandardPromoStyle = {
-    11.0,  // kStackViewVerticalPadding
+    11.0,  // kStackViewTopPadding
+    11.0,  // kStackViewBottomPadding
     16.0,  // kStackViewTrailingMargin
     13.0,  // kContentStackViewSubViewSpacing
     13.0,  // kTextStackViewSubViewSpacing
-    32.0,  // kImageViewWidthHeight
     12.0,  // kButtonTitleHorizontalContentInset
     8.0,   // kButtonTitleVerticalContentInset
     8.0,   // kButtonCornerRadius
@@ -58,12 +57,27 @@
     0.0,   // kCloseButtonTopMargin
 };
 
-const PromoStyleValues kCompactPromoStyle = {
-    18.0,  // kStackViewVerticalPadding
+// TODO(crbug.com/1331010): We may remove these styles if we don't launch them
+// with the feed promo.
+const PromoStyleValues kTitledPromoStyle = {
+    14.0,  // kStackViewTopPadding
+    27.0,  // kStackViewBottomPadding
+    16.0,  // kStackViewTrailingMargin
+    13.0,  // kContentStackViewSubViewSpacing
+    13.0,  // kTextStackViewSubViewSpacing
+    30.0,  // kButtonTitleHorizontalContentInset
+    8.0,   // kButtonTitleVerticalContentInset
+    8.0,   // kButtonCornerRadius
+    -9.0,  // kCloseButtonTrailingMargin
+    9.0,   // kCloseButtonTopMargin
+};
+
+const PromoStyleValues kTitledCompactPromoStyle = {
+    18.0,  // kStackViewTopPadding
+    18.0,  // kStackViewBottomPadding
     41.0,  // kStackViewTrailingMargin
     17.0,  // kContentStackViewSubViewSpacing
     4.0,   // kTextStackViewSubViewSpacing
-    56.0,  // kImageViewWidthHeight
     0.0,   // kButtonTitleHorizontalContentInset
     0.0,   // kButtonTitleVerticalContentInset
     0.0,   // kButtonCornerRadius
@@ -71,16 +85,17 @@
     9.0,   // kCloseButtonTopMargin
 };
 
-// UI Refresh Constants:
 // Horizontal padding for label and buttons.
 constexpr CGFloat kHorizontalPadding = 40;
 // Horizontal spacing between stackView and cell contentView.
 constexpr CGFloat kStackViewHorizontalPadding = 16.0;
-
 // Non-profile icon background corner radius.
 constexpr CGFloat kNonProfileIconCornerRadius = 14;
 // Size for the close button width and height.
 constexpr CGFloat kCloseButtonWidthHeight = 24;
+// Size of the signin promo image.
+constexpr CGFloat kProfileImageHeightWidth = 32.0;
+constexpr CGFloat kNonProfileImageHeightWidth = 56.0;
 }
 
 @interface SigninPromoView ()
@@ -96,10 +111,14 @@
 // Contains all the text elements of the promo (title,body and buttons).
 @property(nonatomic, strong) UIStackView* textVerticalStackView;
 // Constraints for the different layout styles.
+@property(nonatomic, weak)
+    NSArray<NSLayoutConstraint*>* currentLayoutConstraints;
 @property(nonatomic, strong)
     NSArray<NSLayoutConstraint*>* standardLayoutConstraints;
 @property(nonatomic, strong)
-    NSArray<NSLayoutConstraint*>* compactLayoutConstraints;
+    NSArray<NSLayoutConstraint*>* titledLayoutConstraints;
+@property(nonatomic, strong)
+    NSArray<NSLayoutConstraint*>* titledCompactLayoutConstraints;
 // Constraints for the image size.
 @property(nonatomic, strong) NSArray<NSLayoutConstraint*>* imageConstraints;
 @end
@@ -208,7 +227,7 @@
     ]];
 
     // Default layout style.
-    _compactLayout = NO;
+    _promoViewStyle = SigninPromoViewStyleStandard;
     [self updateLayoutForStyle];
     // Default mode.
     _mode = SigninPromoViewModeNoAccounts;
@@ -226,21 +245,18 @@
 - (void)setProfileImage:(UIImage*)image {
   DCHECK_NE(self.mode, SigninPromoViewModeNoAccounts);
   [self updateImageSizeForProfileImage:YES];
-  DCHECK_EQ(kStandardPromoStyle.kImageViewWidthHeight, image.size.height);
-  DCHECK_EQ(kStandardPromoStyle.kImageViewWidthHeight, image.size.width);
+  DCHECK_EQ(kProfileImageHeightWidth, image.size.height);
+  DCHECK_EQ(kProfileImageHeightWidth, image.size.width);
   self.imageView.image =
-      CircularImageFromImage(image, kStandardPromoStyle.kImageViewWidthHeight);
+      CircularImageFromImage(image, kProfileImageHeightWidth);
   self.backgroundColor = nil;
   self.imageView.layer.cornerRadius = 0;
 }
 
 - (void)setNonProfileImage:(UIImage*)image {
   [self updateImageSizeForProfileImage:NO];
-  CGFloat imageSize = self.compactLayout
-                          ? kCompactPromoStyle.kImageViewWidthHeight
-                          : kStandardPromoStyle.kImageViewWidthHeight;
-  DCHECK_EQ(imageSize, image.size.width);
-  DCHECK_EQ(imageSize, image.size.height);
+  DCHECK_EQ(kNonProfileImageHeightWidth, image.size.height);
+  DCHECK_EQ(kNonProfileImageHeightWidth, image.size.width);
   self.imageView.image = image;
   self.imageView.backgroundColor = [UIColor colorNamed:kSolidPrimaryColor];
   self.imageView.layer.cornerRadius = kNonProfileIconCornerRadius;
@@ -297,12 +313,12 @@
 
 #pragma mark - Setters
 
-// Sets layout style and updates layout accordingly.
-- (void)setCompactLayout:(BOOL)compactLayout {
-  if (_compactLayout == compactLayout) {
+// Sets promo style and updates layout accordingly.
+- (void)setPromoViewStyle:(SigninPromoViewStyle)promoViewStyle {
+  if (_promoViewStyle == promoViewStyle) {
     return;
   }
-  _compactLayout = compactLayout;
+  _promoViewStyle = promoViewStyle;
   [self updateLayoutForStyle];
 }
 
@@ -334,12 +350,10 @@
       // Content padding.
       [self.contentStackView.topAnchor
           constraintEqualToAnchor:self.topAnchor
-                         constant:kStandardPromoStyle
-                                      .kStackViewVerticalPadding],
+                         constant:kStandardPromoStyle.kStackViewTopPadding],
       [self.contentStackView.bottomAnchor
           constraintEqualToAnchor:self.bottomAnchor
-                         constant:-kStandardPromoStyle
-                                       .kStackViewVerticalPadding],
+                         constant:-kStandardPromoStyle.kStackViewBottomPadding],
       [self.contentStackView.trailingAnchor
           constraintEqualToAnchor:self.trailingAnchor
                          constant:-kStandardPromoStyle
@@ -356,117 +370,189 @@
   return _standardLayoutConstraints;
 }
 
-// Constraints specific to compact layout.
-- (NSArray<NSLayoutConstraint*>*)compactLayoutConstraints {
-  if (!_compactLayoutConstraints) {
-    _compactLayoutConstraints = @[
+// Constraints specific to titled layout.
+- (NSArray<NSLayoutConstraint*>*)titledLayoutConstraints {
+  if (!_titledLayoutConstraints) {
+    _titledLayoutConstraints = @[
       // Content padding.
       [self.contentStackView.topAnchor
           constraintEqualToAnchor:self.topAnchor
-                         constant:kCompactPromoStyle.kStackViewVerticalPadding],
+                         constant:kTitledPromoStyle.kStackViewTopPadding],
       [self.contentStackView.bottomAnchor
           constraintEqualToAnchor:self.bottomAnchor
-                         constant:-kCompactPromoStyle
-                                       .kStackViewVerticalPadding],
+                         constant:-kTitledPromoStyle.kStackViewBottomPadding],
       [self.contentStackView.trailingAnchor
           constraintEqualToAnchor:self.trailingAnchor
-                         constant:-kCompactPromoStyle.kStackViewTrailingMargin],
+                         constant:-kTitledPromoStyle.kStackViewTrailingMargin],
       [self.closeButton.trailingAnchor
           constraintEqualToAnchor:self.trailingAnchor
-                         constant:kCompactPromoStyle
+                         constant:kTitledPromoStyle.kCloseButtonTrailingMargin],
+      [self.closeButton.topAnchor
+          constraintEqualToAnchor:self.topAnchor
+                         constant:kTitledPromoStyle.kCloseButtonTopMargin],
+    ];
+  }
+  return _titledLayoutConstraints;
+}
+
+// Constraints specific to titled compact layout.
+- (NSArray<NSLayoutConstraint*>*)titledCompactLayoutConstraints {
+  if (!_titledCompactLayoutConstraints) {
+    _titledCompactLayoutConstraints = @[
+      // Content padding.
+      [self.contentStackView.topAnchor
+          constraintEqualToAnchor:self.topAnchor
+                         constant:kTitledCompactPromoStyle
+                                      .kStackViewTopPadding],
+      [self.contentStackView.bottomAnchor
+          constraintEqualToAnchor:self.bottomAnchor
+                         constant:-kTitledCompactPromoStyle
+                                       .kStackViewBottomPadding],
+      [self.contentStackView.trailingAnchor
+          constraintEqualToAnchor:self.trailingAnchor
+                         constant:-kTitledCompactPromoStyle
+                                       .kStackViewTrailingMargin],
+      [self.closeButton.trailingAnchor
+          constraintEqualToAnchor:self.trailingAnchor
+                         constant:kTitledCompactPromoStyle
                                       .kCloseButtonTrailingMargin],
       [self.closeButton.topAnchor
           constraintEqualToAnchor:self.topAnchor
-                         constant:kCompactPromoStyle.kCloseButtonTopMargin],
+                         constant:kTitledCompactPromoStyle
+                                      .kCloseButtonTopMargin],
     ];
   }
-  return _compactLayoutConstraints;
+  return _titledCompactLayoutConstraints;
 }
 
 #pragma mark - Private
 
 // Updates layout for current layout style.
 - (void)updateLayoutForStyle {
-  if (self.compactLayout) {
-    // Lays out content for compact view.
-    self.contentStackView.axis = UILayoutConstraintAxisHorizontal;
-    self.contentStackView.spacing =
-        kCompactPromoStyle.kContentStackViewSubViewSpacing;
-    self.textVerticalStackView.alignment = UIStackViewAlignmentLeading;
-    self.textVerticalStackView.spacing =
-        kCompactPromoStyle.kTextStackViewSubViewSpacing;
-    self.textLabel.textAlignment = NSTextAlignmentNatural;
-    self.secondaryButton.hidden = YES;
+  NSArray<NSLayoutConstraint*>* constraintsToActivate;
+  switch (self.promoViewStyle) {
+    case SigninPromoViewStyleStandard: {
+      // Lays out content vertically for standard view.
+      self.contentStackView.axis = UILayoutConstraintAxisVertical;
+      self.contentStackView.spacing =
+          kStandardPromoStyle.kContentStackViewSubViewSpacing;
+      self.textVerticalStackView.alignment = UIStackViewAlignmentCenter;
+      self.textVerticalStackView.spacing =
+          kStandardPromoStyle.kTextStackViewSubViewSpacing;
+      self.textLabel.textAlignment = NSTextAlignmentCenter;
+      self.secondaryButton.hidden = NO;
 
-    // Configures fonts for compact layout.
-    self.titleLabel.font =
-        [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
-    self.titleLabel.textColor = [UIColor colorNamed:kTextPrimaryColor];
-    self.textLabel.font =
-        [UIFont preferredFontForTextStyle:UIFontTextStyleCallout];
-    self.textLabel.textColor = [UIColor colorNamed:kTextSecondaryColor];
+      // Configures fonts for standard layout.
+      self.titleLabel.font =
+          [UIFont preferredFontForTextStyle:UIFontTextStyleTitle3];
+      self.titleLabel.textColor = [UIColor colorNamed:kTextPrimaryColor];
+      self.textLabel.font =
+          [UIFont preferredFontForTextStyle:UIFontTextStyleFootnote];
+      self.textLabel.textColor = [UIColor colorNamed:kTextPrimaryColor];
 
-    // In the compact layout, the primary button is plain.
-    [self.primaryButton setTitleColor:[UIColor colorNamed:kBlueColor]
-                             forState:UIControlStateNormal];
-    self.primaryButton.backgroundColor = nil;
-    self.primaryButton.layer.cornerRadius =
-        kCompactPromoStyle.kButtonCornerRadius;
-    self.primaryButton.clipsToBounds = NO;
-    self.primaryButton.contentEdgeInsets =
-        UIEdgeInsetsMake(kCompactPromoStyle.kButtonTitleVerticalContentInset,
-                         kCompactPromoStyle.kButtonTitleHorizontalContentInset,
-                         kCompactPromoStyle.kButtonTitleVerticalContentInset,
-                         kCompactPromoStyle.kButtonTitleHorizontalContentInset);
+      // In the standard layout, the button has a background.
+      [self.primaryButton
+          setTitleColor:[UIColor colorNamed:kSolidButtonTextColor]
+               forState:UIControlStateNormal];
+      self.primaryButton.backgroundColor = [UIColor colorNamed:kBlueColor];
+      self.primaryButton.layer.cornerRadius =
+          kStandardPromoStyle.kButtonCornerRadius;
+      self.primaryButton.clipsToBounds = YES;
+      self.primaryButton.contentEdgeInsets = UIEdgeInsetsMake(
+          kStandardPromoStyle.kButtonTitleVerticalContentInset,
+          kStandardPromoStyle.kButtonTitleHorizontalContentInset,
+          kStandardPromoStyle.kButtonTitleVerticalContentInset,
+          kStandardPromoStyle.kButtonTitleHorizontalContentInset);
 
-    // Applies constraints for compact layout.
-    [NSLayoutConstraint deactivateConstraints:self.standardLayoutConstraints];
-    [NSLayoutConstraint activateConstraints:self.compactLayoutConstraints];
-  } else {
-    // Lays out content vertically for standard view.
-    self.contentStackView.axis = UILayoutConstraintAxisVertical;
-    self.contentStackView.spacing =
-        kStandardPromoStyle.kContentStackViewSubViewSpacing;
-    self.textVerticalStackView.alignment = UIStackViewAlignmentCenter;
-    self.textVerticalStackView.spacing =
-        kStandardPromoStyle.kTextStackViewSubViewSpacing;
-    self.textLabel.textAlignment = NSTextAlignmentCenter;
+      constraintsToActivate = self.standardLayoutConstraints;
+      break;
+    }
+    case SigninPromoViewStyleTitled: {
+      // Lays out content vertically for standard view.
+      self.contentStackView.axis = UILayoutConstraintAxisVertical;
+      self.contentStackView.spacing =
+          kTitledPromoStyle.kContentStackViewSubViewSpacing;
+      self.textVerticalStackView.alignment = UIStackViewAlignmentCenter;
+      self.textVerticalStackView.spacing =
+          kTitledPromoStyle.kTextStackViewSubViewSpacing;
+      self.textLabel.textAlignment = NSTextAlignmentCenter;
+      self.secondaryButton.hidden = YES;
 
-    // Configures fonts for standard layout.
-    self.titleLabel.font =
-        [UIFont preferredFontForTextStyle:UIFontTextStyleTitle3];
-    self.titleLabel.textColor = [UIColor colorNamed:kTextPrimaryColor];
-    self.textLabel.font =
-        [UIFont preferredFontForTextStyle:UIFontTextStyleFootnote];
-    self.textLabel.textColor = [UIColor colorNamed:kTextPrimaryColor];
+      // Configures fonts for titled layout.
+      self.titleLabel.font =
+          [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
+      self.titleLabel.textColor = [UIColor colorNamed:kTextPrimaryColor];
+      self.textLabel.font =
+          [UIFont preferredFontForTextStyle:UIFontTextStyleCallout];
+      self.textLabel.textColor = [UIColor colorNamed:kTextSecondaryColor];
 
-    // In the standard layout, the button has a background.
-    [self.primaryButton setTitleColor:[UIColor colorNamed:kSolidButtonTextColor]
-                             forState:UIControlStateNormal];
-    self.primaryButton.backgroundColor = [UIColor colorNamed:kBlueColor];
-    self.primaryButton.layer.cornerRadius =
-        kStandardPromoStyle.kButtonCornerRadius;
-    self.primaryButton.clipsToBounds = YES;
-    self.primaryButton.contentEdgeInsets = UIEdgeInsetsMake(
-        kStandardPromoStyle.kButtonTitleVerticalContentInset,
-        kStandardPromoStyle.kButtonTitleHorizontalContentInset,
-        kStandardPromoStyle.kButtonTitleVerticalContentInset,
-        kStandardPromoStyle.kButtonTitleHorizontalContentInset);
+      // In the standard layout, the button has a background.
+      [self.primaryButton
+          setTitleColor:[UIColor colorNamed:kSolidButtonTextColor]
+               forState:UIControlStateNormal];
+      self.primaryButton.backgroundColor = [UIColor colorNamed:kBlueColor];
+      self.primaryButton.layer.cornerRadius =
+          kTitledPromoStyle.kButtonCornerRadius;
+      self.primaryButton.clipsToBounds = YES;
+      self.primaryButton.contentEdgeInsets = UIEdgeInsetsMake(
+          kTitledPromoStyle.kButtonTitleVerticalContentInset,
+          kTitledPromoStyle.kButtonTitleHorizontalContentInset,
+          kTitledPromoStyle.kButtonTitleVerticalContentInset,
+          kTitledPromoStyle.kButtonTitleHorizontalContentInset);
 
-    // Applies constraints for standard layout.
-    [NSLayoutConstraint deactivateConstraints:self.compactLayoutConstraints];
-    [NSLayoutConstraint activateConstraints:self.standardLayoutConstraints];
+      constraintsToActivate = self.titledLayoutConstraints;
+      break;
+    }
+    case SigninPromoViewStyleTitledCompact: {
+      // Lays out content for titled compact view.
+      self.contentStackView.axis = UILayoutConstraintAxisHorizontal;
+      self.contentStackView.spacing =
+          kTitledCompactPromoStyle.kContentStackViewSubViewSpacing;
+      self.textVerticalStackView.alignment = UIStackViewAlignmentLeading;
+      self.textVerticalStackView.spacing =
+          kTitledCompactPromoStyle.kTextStackViewSubViewSpacing;
+      self.textLabel.textAlignment = NSTextAlignmentNatural;
+      self.secondaryButton.hidden = YES;
+
+      // Configures fonts for titled compact layout.
+      self.titleLabel.font =
+          [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
+      self.titleLabel.textColor = [UIColor colorNamed:kTextPrimaryColor];
+      self.textLabel.font =
+          [UIFont preferredFontForTextStyle:UIFontTextStyleCallout];
+      self.textLabel.textColor = [UIColor colorNamed:kTextSecondaryColor];
+
+      // In the titled compact layout, the primary button is plain.
+      [self.primaryButton setTitleColor:[UIColor colorNamed:kBlueColor]
+                               forState:UIControlStateNormal];
+      self.primaryButton.backgroundColor = nil;
+      self.primaryButton.layer.cornerRadius =
+          kTitledCompactPromoStyle.kButtonCornerRadius;
+      self.primaryButton.clipsToBounds = NO;
+      self.primaryButton.contentEdgeInsets = UIEdgeInsetsMake(
+          kTitledCompactPromoStyle.kButtonTitleVerticalContentInset,
+          kTitledCompactPromoStyle.kButtonTitleHorizontalContentInset,
+          kTitledCompactPromoStyle.kButtonTitleVerticalContentInset,
+          kTitledCompactPromoStyle.kButtonTitleHorizontalContentInset);
+
+      constraintsToActivate = self.titledCompactLayoutConstraints;
+      break;
+    }
   }
+  // Removes previous constraints and activates new ones.
+  [NSLayoutConstraint deactivateConstraints:self.currentLayoutConstraints];
+  self.currentLayoutConstraints = constraintsToActivate;
+  [NSLayoutConstraint activateConstraints:self.currentLayoutConstraints];
   [self layoutIfNeeded];
 }
 
 // Updates image size constraints based on if it is a profile avatar.
 - (void)updateImageSizeForProfileImage:(BOOL)isProfileImage {
   CGFloat imageSize;
-  if (self.compactLayout && !isProfileImage) {
-    imageSize = kCompactPromoStyle.kImageViewWidthHeight;
+  if (isProfileImage) {
+    imageSize = kProfileImageHeightWidth;
   } else {
-    imageSize = kStandardPromoStyle.kImageViewWidthHeight;
+    imageSize = kNonProfileImageHeightWidth;
   }
 
   [NSLayoutConstraint deactivateConstraints:self.imageConstraints];
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm b/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm
index 2823cdf5..79393db7 100644
--- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm
+++ b/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm
@@ -66,19 +66,17 @@
                        withStyle:(SigninPromoViewStyle)promoViewStyle {
   signinPromoView.closeButton.hidden = !self.hasCloseButton;
   signinPromoView.mode = self.signinPromoViewMode;
+  signinPromoView.promoViewStyle = promoViewStyle;
   switch (promoViewStyle) {
     case SigninPromoViewStyleStandard: {
-      signinPromoView.compactLayout = NO;
       [self configureStandardSigninPromoView:signinPromoView];
       break;
     }
     case SigninPromoViewStyleTitled: {
-      signinPromoView.compactLayout = NO;
       [self configureTitledPromoView:signinPromoView];
       break;
     }
     case SigninPromoViewStyleTitledCompact: {
-      signinPromoView.compactLayout = YES;
       [self configureTitledPromoView:signinPromoView];
       break;
     }
@@ -94,6 +92,7 @@
 // |SigninPromoViewStyleStandard| style.
 - (void)configureStandardSigninPromoView:(SigninPromoView*)signinPromoView {
   signinPromoView.titleLabel.hidden = YES;
+  //  signinPromoView.secondaryButton.hidden = NO;
   NSString* name =
       self.userGivenName.length ? self.userGivenName : self.userEmail;
   std::u16string name16 = SysNSStringToUTF16(name);
@@ -130,6 +129,7 @@
   // In the titled Promo views (both compact and non compact the primary button
   // text will use "continue" regardless of the promo mode.
   signinPromoView.titleLabel.hidden = NO;
+  //  signinPromoView.secondaryButton.hidden = YES;
   NSString* signInString = GetNSString(IDS_IOS_NTP_FEED_SIGNIN_PROMO_CONTINUE);
   [signinPromoView.primaryButton setTitle:signInString
                                  forState:UIControlStateNormal];
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_unittest.mm b/ios/chrome/browser/ui/authentication/cells/signin_promo_view_unittest.mm
index ca903bb..5412ad14 100644
--- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/cells/signin_promo_view_unittest.mm
@@ -81,23 +81,33 @@
 
 // Tests that signin is created on non-compact layout and that setting compact
 // layout changes the primary button styling.
-TEST_F(SigninPromoViewTest, CompactLayout) {
+TEST_F(SigninPromoViewTest, ChangeLayout) {
   UIWindow* currentWindow = GetAnyKeyWindow();
   SigninPromoView* view =
       [[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
   view.mode = SigninPromoViewModeNoAccounts;
   [currentWindow.rootViewController.view addSubview:view];
-  // The default mode should not be compact.
-  EXPECT_FALSE(view.compactLayout);
+  // The default mode should be standard.
+  EXPECT_EQ(view.promoViewStyle, SigninPromoViewStyleStandard);
   // In full layout, the primary button is rounded with background color.
   EXPECT_TRUE(view.primaryButton.backgroundColor);
   EXPECT_GT(view.primaryButton.layer.cornerRadius, 0.0);
 
-  view = [[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
-  view.mode = SigninPromoViewModeNoAccounts;
-  view.compactLayout = YES;
-  EXPECT_TRUE(view.compactLayout);
+  // Switch to compact layout.
+  view.promoViewStyle = SigninPromoViewStyleTitledCompact;
+  EXPECT_EQ(view.promoViewStyle, SigninPromoViewStyleTitledCompact);
   // In compact layout, the primary button is plain.
   EXPECT_FALSE(view.primaryButton.backgroundColor);
   EXPECT_EQ(view.primaryButton.layer.cornerRadius, 0.0);
+  // The secondary button should be hidden.
+  EXPECT_TRUE(view.secondaryButton.hidden);
+
+  // Switch to titled layout.
+  view.promoViewStyle = SigninPromoViewStyleTitled;
+  EXPECT_EQ(view.promoViewStyle, SigninPromoViewStyleTitled);
+  // In titled layout, the primary button is rounded with a background color.
+  EXPECT_TRUE(view.primaryButton.backgroundColor);
+  EXPECT_GT(view.primaryButton.layer.cornerRadius, 0.0);
+  // The secondary button should be hidden.
+  EXPECT_TRUE(view.secondaryButton.hidden);
 }
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
index 2e3de7f4..dc81d54 100644
--- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
@@ -201,8 +201,7 @@
     ExpectNoAccountsConfiguration(style);
     OCMExpect([close_button_ setHidden:close_button_hidden_]);
     OCMExpect([title_label_ setHidden:(style == SigninPromoViewStyleStandard)]);
-    OCMExpect([signin_promo_view_
-        setCompactLayout:(style == SigninPromoViewStyleTitledCompact)]);
+    OCMExpect([signin_promo_view_ setPromoViewStyle:style]);
     [configurator configureSigninPromoView:signin_promo_view_ withStyle:style];
     EXPECT_EQ(nil, image_view_profile_image_);
   }
@@ -250,8 +249,7 @@
     ExpectSigninWithAccountConfiguration(style);
     OCMExpect([close_button_ setHidden:close_button_hidden_]);
     OCMExpect([title_label_ setHidden:(style == SigninPromoViewStyleStandard)]);
-    OCMExpect([signin_promo_view_
-        setCompactLayout:(style == SigninPromoViewStyleTitledCompact)]);
+    OCMExpect([signin_promo_view_ setPromoViewStyle:style]);
     [configurator configureSigninPromoView:signin_promo_view_ withStyle:style];
     EXPECT_NE(nil, image_view_profile_image_);
   }
@@ -283,8 +281,7 @@
     ExpectSyncPromoConfiguration();
     OCMExpect([close_button_ setHidden:close_button_hidden_]);
     OCMExpect([title_label_ setHidden:(style == SigninPromoViewStyleStandard)]);
-    OCMExpect([signin_promo_view_
-        setCompactLayout:(style == SigninPromoViewStyleTitledCompact)]);
+    OCMExpect([signin_promo_view_ setPromoViewStyle:style]);
     [configurator configureSigninPromoView:signin_promo_view_ withStyle:style];
     EXPECT_NE(nil, image_view_profile_image_);
   }
diff --git a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.mm b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.mm
index 02fe11e..e8600cc6 100644
--- a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.mm
+++ b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.mm
@@ -6,9 +6,12 @@
 
 #import "base/strings/sys_string_conversions.h"
 #import "components/autofill/core/browser/ui/payments/card_unmask_prompt_controller.h"
+#import "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h"
 #import "ios/chrome/browser/ui/autofill/cells/cvc_header_item.h"
 #import "ios/chrome/browser/ui/table_view/table_view_utils.h"
+#import "ios/chrome/common/ui/colors/semantic_color_names.h"
+#import "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -30,6 +33,9 @@
 }  // namespace
 
 @interface CardUnmaskPromptViewController () {
+  // Button displayed on the right side of the navigation bar.
+  // Tapping it sends the data in the prompt for verification.
+  UIBarButtonItem* _confirmButton;
   // Owns `self`.
   autofill::CardUnmaskPromptViewBridge* _bridge;  // weak
 }
@@ -54,6 +60,16 @@
   self.tableView.accessibilityIdentifier =
       kCardUnmaskPromptTableViewAccessibilityID;
 
+  self.title =
+      base::SysUTF16ToNSString(_bridge->GetController()->GetWindowTitle());
+
+  self.navigationItem.leftBarButtonItem = [self createCancelButton];
+  _confirmButton = [self createConfirmButton];
+  // Disable confirm button by default. It will be enabled after valid data is
+  // entered in the prompt.
+  _confirmButton.enabled = NO;
+  self.navigationItem.rightBarButtonItem = _confirmButton;
+
   [self loadModel];
 }
 
@@ -76,6 +92,16 @@
   _bridge = nullptr;
 }
 
+#pragma mark - Actions
+
+- (void)onCancelTapped {
+  _bridge->PerformClose();
+}
+
+- (void)onVerifyTapped {
+  NOTIMPLEMENTED();
+}
+
 #pragma mark - Private
 
 // Returns a newly created item for the footer of the section.
@@ -90,4 +116,36 @@
   return header;
 }
 
+// Returns a new cancel button for the navigation bar.
+- (UIBarButtonItem*)createCancelButton {
+  UIBarButtonItem* cancelButton =
+      [[UIBarButtonItem alloc] initWithTitle:l10n_util::GetNSString(IDS_CANCEL)
+                                       style:UIBarButtonItemStylePlain
+                                      target:self
+                                      action:@selector(onCancelTapped)];
+
+  return cancelButton;
+}
+
+// Returns a new confirm button for the navigation bar.
+- (UIBarButtonItem*)createConfirmButton {
+  NSString* confirmButtonText =
+      base::SysUTF16ToNSString(_bridge->GetController()->GetOkButtonLabel());
+  UIBarButtonItem* confirmButton =
+      [[UIBarButtonItem alloc] initWithTitle:confirmButtonText
+                                       style:UIBarButtonItemStylePlain
+                                      target:self
+                                      action:@selector(onVerifyTapped)];
+  [confirmButton setTitleTextAttributes:@{
+    NSForegroundColorAttributeName : [UIColor colorNamed:kBlueColor]
+  }
+                               forState:UIControlStateNormal];
+  [confirmButton setTitleTextAttributes:@{
+    NSForegroundColorAttributeName : [UIColor colorNamed:kDisabledTintColor]
+  }
+                               forState:UIControlStateDisabled];
+
+  return confirmButton;
+}
+
 @end
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
index 09d14908f..fabb8d6 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -235,8 +235,7 @@
 #pragma mark - BVC
 
 // Note other delegates defined in the Delegates category header.
-@interface BrowserViewController () <CRWWebStateObserver,
-                                     FindBarPresentationDelegate,
+@interface BrowserViewController () <FindBarPresentationDelegate,
                                      FullscreenUIElement,
                                      MainContentUI,
                                      SideSwipeControllerDelegate,
@@ -313,14 +312,6 @@
   // Fake status bar view used to blend the toolbar into the status bar.
   UIView* _fakeStatusBarView;
 
-  // Forwards observer methods for all WebStates in the WebStateList to this
-  // BrowserViewController object.
-  std::unique_ptr<AllWebStateObservationForwarder>
-      _allWebStateObservationForwarder;
-
-  // Bridges C++ WebStateObserver methods to this BrowserViewController.
-  std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
-
   std::unique_ptr<UrlLoadingObserverBridge> _URLLoadingObserverBridge;
 
   // Bridges C++ WebStateListObserver methods to this BrowserViewController.
@@ -514,12 +505,6 @@
 
     _isOffTheRecord = browser->GetBrowserState()->IsOffTheRecord();
 
-    _webStateObserverBridge =
-        std::make_unique<web::WebStateObserverBridge>(self);
-    _allWebStateObservationForwarder =
-        std::make_unique<AllWebStateObservationForwarder>(
-            browser->GetWebStateList(), _webStateObserverBridge.get());
-
     _webStateListObserver = std::make_unique<WebStateListObserverBridge>(self);
     browser->GetWebStateList()->AddObserver(_webStateListObserver.get());
     _URLLoadingObserverBridge =
@@ -1037,7 +1022,6 @@
   self.secondaryToolbarCoordinator = nil;
   _sideSwipeController = nil;
   _webStateListObserver.reset();
-  _allWebStateObservationForwarder = nullptr;
   [_voiceSearchController disconnect];
   _voiceSearchController = nil;
   _fullscreenDisabler = nullptr;
@@ -2780,16 +2764,6 @@
                              inPosition:position];
 }
 
-#pragma mark - CRWWebStateObserver methods.
-
-// TODO(crbug.com/1329087): Move this logic to a mediator attached to the
-// primary toolbar coordinator (ToolbarMediator?
-- (void)webState:(web::WebState*)webState
-    didStartNavigation:(web::NavigationContext*)navigation {
-  if (webState == self.currentWebState)
-    [self.primaryToolbarCoordinator updateToolbar];
-}
-
 #pragma mark - OmniboxPopupPresenterDelegate methods.
 
 - (UIView*)popupParentViewForPresenter:(OmniboxPopupPresenter*)presenter {
diff --git a/ios/chrome/browser/ui/browser_view/tab_events_mediator.mm b/ios/chrome/browser/ui/browser_view/tab_events_mediator.mm
index 6faa845..4eb98c9 100644
--- a/ios/chrome/browser/ui/browser_view/tab_events_mediator.mm
+++ b/ios/chrome/browser/ui/browser_view/tab_events_mediator.mm
@@ -7,7 +7,7 @@
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_coordinator.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
-#import "ios/chrome/browser/web_state_list/active_web_state_observation_forwarder.h"
+#import "ios/chrome/browser/web_state_list/all_web_state_observation_forwarder.h"
 #import "ios/chrome/browser/web_state_list/web_state_list.h"
 #import "ios/web/public/ui/crw_web_view_proxy.h"
 #import "ios/web/public/web_state.h"
@@ -25,10 +25,10 @@
   // Bridges C++ WebStateObserver methods to this mediator.
   std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
 
-  // Forwards observer methods for active WebStates in the WebStateList to
+  // Forwards observer methods for all WebStates in the WebStateList to
   // this mediator.
-  std::unique_ptr<ActiveWebStateObservationForwarder>
-      _activeWebStateObservationForwarder;
+  std::unique_ptr<AllWebStateObservationForwarder>
+      _allWebStateObservationForwarder;
 
   WebStateList* _webStateList;
   __weak NewTabPageCoordinator* _ntpCoordinator;
@@ -44,15 +44,15 @@
 
     _webStateObserverBridge =
         std::make_unique<web::WebStateObserverBridge>(self);
-    _activeWebStateObservationForwarder =
-        std::make_unique<ActiveWebStateObservationForwarder>(
-            webStateList, _webStateObserverBridge.get());
+    _allWebStateObservationForwarder =
+        std::make_unique<AllWebStateObservationForwarder>(
+            _webStateList, _webStateObserverBridge.get());
   }
   return self;
 }
 
 - (void)disconnect {
-  _activeWebStateObservationForwarder = nullptr;
+  _allWebStateObservationForwarder = nullptr;
   _webStateObserverBridge = nullptr;
 
   _webStateList = nullptr;
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm
index c30c58c2..b077fadd 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm
@@ -55,12 +55,15 @@
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_metrics.h"
 #import "ios/chrome/browser/ui/content_suggestions/start_suggest_service_factory.h"
 #import "ios/chrome/browser/ui/default_promo/default_browser_utils.h"
+#import "ios/chrome/browser/ui/main/scene_state.h"
+#import "ios/chrome/browser/ui/main/scene_state_browser_agent.h"
 #import "ios/chrome/browser/ui/ntp/feed_delegate.h"
 #import "ios/chrome/browser/ui/ntp/metrics.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_feature.h"
 #import "ios/chrome/browser/ui/ntp/notification_promo_whats_new.h"
 #import "ios/chrome/browser/ui/ntp/ntp_tile_saver.h"
 #import "ios/chrome/browser/ui/start_surface/start_surface_features.h"
+#import "ios/chrome/browser/ui/start_surface/start_surface_util.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
 #import "ios/chrome/browser/ui/util/ui_util.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
@@ -351,10 +354,10 @@
 
   self.returnToRecentTabItem.title =
       l10n_util::GetNSString(IDS_IOS_RETURN_TO_RECENT_TAB_TITLE);
-  NSString* subtitle = [NSString
-      stringWithFormat:@"%@%@", base::SysUTF16ToNSString(webState->GetTitle()),
-                       timeLabel];
-  self.returnToRecentTabItem.subtitle = subtitle;
+  self.returnToRecentTabItem.subtitle = [self
+      constructReturnToRecentTabSubtitleWithPageTitle:base::SysUTF16ToNSString(
+                                                          webState->GetTitle())
+                                           timeString:timeLabel];
   self.showMostRecentTabStartSurfaceTile = YES;
   NSArray<CSCollectionViewItem*>* items =
       [self itemsForSectionInfo:self.returnToRecentTabSectionInfo];
@@ -599,6 +602,19 @@
   }
 }
 
+- (void)mostRecentTabTitleWasUpdated:(NSString*)title {
+  if (self.returnToRecentTabItem) {
+    SceneState* scene =
+        SceneStateBrowserAgent::FromBrowser(self.browser)->GetSceneState();
+    NSString* time_label = GetRecentTabTileTimeLabelForSceneState(scene);
+    self.returnToRecentTabItem.subtitle =
+        [self constructReturnToRecentTabSubtitleWithPageTitle:title
+                                                   timeString:time_label];
+    [self.consumer
+        updateReturnToRecentTabTileWithConfig:self.returnToRecentTabItem];
+  }
+}
+
 #pragma mark - MostVisitedSitesObserving
 
 - (void)onMostVisitedURLsAvailable:
@@ -846,6 +862,12 @@
       self.showingStartSurface);
 }
 
+- (NSString*)constructReturnToRecentTabSubtitleWithPageTitle:
+                 (NSString*)pageTitle
+                                                  timeString:(NSString*)time {
+  return [NSString stringWithFormat:@"%@%@", pageTitle, time];
+}
+
 #pragma mark - Properties
 
 - (NSArray<ContentSuggestionsMostVisitedActionItem*>*)actionButtonItems {
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
index c8e8401..8c74b40c 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
@@ -430,6 +430,9 @@
     self.returnToRecentTabTile.iconImageView.image = config.icon;
     self.returnToRecentTabTile.iconImageView.hidden = NO;
   }
+  if (config.title) {
+    self.returnToRecentTabTile.subtitleLabel.text = config.subtitle;
+  }
 }
 
 - (void)hideReturnToRecentTabTile {
diff --git a/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler.mm b/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler.mm
index fd373a70c..4a86942 100644
--- a/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler.mm
+++ b/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler.mm
@@ -306,6 +306,10 @@
     if (!weakSelf.animator.reversed) {
       weakSelf.currentState = weakSelf.nextState;
     }
+    // Animator crashes if stopAnimation is called during this completer. It can
+    // happened if a listener to `didAnimateViewRevealFromState:toState`
+    // triggers a new state change. Make it nil to avoid calling that.
+    weakSelf.animator = nil;
     [weakSelf didAnimateViewRevealFromState:startState
                                     toState:weakSelf.currentState];
   }];
diff --git a/ios/chrome/browser/ui/ntp/feed_top_section_view_controller.mm b/ios/chrome/browser/ui/ntp/feed_top_section_view_controller.mm
index 6429248..df95128 100644
--- a/ios/chrome/browser/ui/ntp/feed_top_section_view_controller.mm
+++ b/ios/chrome/browser/ui/ntp/feed_top_section_view_controller.mm
@@ -11,6 +11,7 @@
 #import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h"
 #import "ios/chrome/browser/ui/ntp/discover_feed_constants.h"
 #import "ios/chrome/browser/ui/ntp/feed_top_section_consumer.h"
+#import "ios/chrome/browser/ui/ntp/new_tab_page_feature.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #import "ios/chrome/grit/ios_chromium_strings.h"
 #import "ios/chrome/grit/ios_strings.h"
@@ -135,10 +136,10 @@
 
   SigninPromoViewConfigurator* configurator =
       self.delegate.signinPromoConfigurator;
-  // TODO(crbug.com/1331010): Use feature params to specify which style of promo
-  // to use.
-  [configurator configureSigninPromoView:promoView
-                               withStyle:SigninPromoViewStyleTitledCompact];
+  SigninPromoViewStyle promoViewStyle = IsDiscoverFeedTopSyncPromoCompact()
+                                            ? SigninPromoViewStyleTitledCompact
+                                            : SigninPromoViewStyleTitled;
+  [configurator configureSigninPromoView:promoView withStyle:promoViewStyle];
   promoView.titleLabel.text =
       l10n_util::GetNSString(IDS_IOS_NTP_FEED_SIGNIN_PROMO_TITLE);
   promoView.textLabel.text =
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
index 158ffaa..0894011a 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
@@ -384,6 +384,7 @@
   [self.containedViewController.view removeFromSuperview];
   [self.containedViewController removeFromParentViewController];
   self.containedViewController = nil;
+  self.ntpViewController.feedHeaderViewController = nil;
   self.ntpViewController = nil;
   self.feedHeaderViewController = nil;
   self.alertCoordinator = nil;
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_feature.h b/ios/chrome/browser/ui/ntp/new_tab_page_feature.h
index 5c05e8e6..3fda7bc 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_feature.h
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_feature.h
@@ -66,6 +66,9 @@
 // Whether the Discover feed top sync promotion is enabled.
 bool IsDiscoverFeedTopSyncPromoEnabled();
 
+// Whether the feed top sync promotion is compact or not.
+bool IsDiscoverFeedTopSyncPromoCompact();
+
 // Whether the Discover feed ablation experiment is enabled.
 bool IsFeedAblationEnabled();
 
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_feature.mm b/ios/chrome/browser/ui/ntp/new_tab_page_feature.mm
index a747f04..b1bc99d 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_feature.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_feature.mm
@@ -4,6 +4,7 @@
 
 #import "ios/chrome/browser/ui/ntp/new_tab_page_feature.h"
 
+#import "base/metrics/field_trial_params.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -64,6 +65,12 @@
   return base::FeatureList::IsEnabled(kEnableDiscoverFeedTopSyncPromo);
 }
 
+bool IsDiscoverFeedTopSyncPromoCompact() {
+  return base::GetFieldTrialParamByFeatureAsBool(
+      kEnableDiscoverFeedTopSyncPromo, kDiscoverFeedTopSyncPromoStyleCompact,
+      false);
+}
+
 bool IsFeedAblationEnabled() {
   return base::FeatureList::IsEnabled(kEnableFeedAblation);
 }
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm
index 051ac7a2..b22b20dd 100644
--- a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm
@@ -341,6 +341,8 @@
                 imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]);
 }
 
+// Tests UI for Safe Browsing row in Safety Check settings with one of the
+// Enhanced Protection features enabled.
 TEST_F(SafetyCheckMediatorTest,
        SafeBrowsingSafeUIStandardAndEnhancedProtection) {
   base::test::ScopedFeatureList feature_list;
@@ -366,6 +368,55 @@
                 imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]);
 }
 
+// TODO(crbug.com/1348254): Consolidate with other test when feature is
+// launched.
+// Tests UI for Safe Browsing row in Safety Check settings with Enhanced
+// Protection features enabled.
+TEST_F(SafetyCheckMediatorTest,
+       SafeBrowsingSafeUIStandardAndEnhancedProtectionPhase2IOS) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitWithFeatures(
+      /*enabled_features=*/{safe_browsing::kEnhancedProtection,
+                            safe_browsing::kEnhancedProtectionPhase2IOS},
+      /*disabled_features=*/{});
+
+  // Check UI when Safe Browsing protection choice is "Enhanced Protection".
+  mediator_.safeBrowsingCheckRowState = SafeBrowsingCheckRowStateSafe;
+  [mediator_ reconfigureSafeBrowsingCheckItem];
+  EXPECT_NSEQ(
+      mediator_.safeBrowsingCheckItem.detailText,
+      GetNSString(
+          IDS_IOS_SETTINGS_SAFETY_CHECK_SAFE_BROWSING_ENHANCED_PROTECTION_ENABLED_DESC));
+  EXPECT_EQ(mediator_.safeBrowsingCheckItem.accessoryType,
+            UITableViewCellAccessoryNone);
+  EXPECT_EQ(mediator_.safeBrowsingCheckItem.trailingImage,
+            [[UIImage imageNamed:@"settings_safe_state"]
+                imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]);
+
+  // Check UI when Safe Browsing protection choice is "Standard Protection".
+  mediator_.enhancedSafeBrowsingPreference.value = false;
+  [mediator_ reconfigureSafeBrowsingCheckItem];
+  EXPECT_NSEQ(
+      mediator_.safeBrowsingCheckItem.detailText,
+      GetNSString(
+          IDS_IOS_SETTINGS_SAFETY_CHECK_SAFE_BROWSING_STANDARD_PROTECTION_ENABLED_DESC_WITH_ENHANCED_PROTECTION));
+  EXPECT_EQ(mediator_.safeBrowsingCheckItem.accessoryType,
+            UITableViewCellAccessoryDisclosureIndicator);
+  EXPECT_EQ(mediator_.safeBrowsingCheckItem.trailingImage,
+            [[UIImage imageNamed:@"settings_safe_state"]
+                imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]);
+
+  // Check UI when Safe Browsing protection choice is "No Protection".
+  mediator_.safeBrowsingPreference.value = false;
+  mediator_.safeBrowsingCheckRowState = SafeBrowsingCheckRowStateUnsafe;
+  [mediator_ reconfigureSafeBrowsingCheckItem];
+  EXPECT_EQ(mediator_.safeBrowsingCheckItem.accessoryType,
+            UITableViewCellAccessoryDisclosureIndicator);
+  EXPECT_EQ(mediator_.safeBrowsingCheckItem.trailingImage,
+            [[UIImage imageNamed:@"settings_unsafe_state"]
+                imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]);
+}
+
 TEST_F(SafetyCheckMediatorTest, SafeBrowsingDisabledReturnsInfoState) {
   mediator_.safeBrowsingPreference.value = false;
   RunUntilIdle();
diff --git a/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_browser_agent.h b/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_browser_agent.h
index 1370b97..990f672d 100644
--- a/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_browser_agent.h
+++ b/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_browser_agent.h
@@ -35,6 +35,8 @@
   // recent tab was updated to `image`.
   virtual void MostRecentTabFaviconUpdated(UIImage* image) {}
 
+  virtual void MostRecentTabTitleUpdated(const std::u16string& title) {}
+
  protected:
   virtual ~StartSurfaceRecentTabObserver() = default;
 };
@@ -82,6 +84,7 @@
 
   // web::WebStateObserver
   void WebStateDestroyed(web::WebState* web_state) override;
+  void TitleWasSet(web::WebState* web_state) override;
 
   // favicon::FaviconDriverObserver
   void OnFaviconUpdated(favicon::FaviconDriver* driver,
diff --git a/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_browser_agent.mm b/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_browser_agent.mm
index d23a56a..ef0f050 100644
--- a/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_browser_agent.mm
+++ b/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_browser_agent.mm
@@ -111,3 +111,9 @@
     }
   }
 }
+
+void StartSurfaceRecentTabBrowserAgent::TitleWasSet(web::WebState* web_state) {
+  for (auto& observer : observers_) {
+    observer.MostRecentTabTitleUpdated(web_state->GetTitle());
+  }
+}
diff --git a/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_removal_observer_bridge.h b/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_removal_observer_bridge.h
index 64080b20..2668ef72 100644
--- a/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_removal_observer_bridge.h
+++ b/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_removal_observer_bridge.h
@@ -22,6 +22,9 @@
 // Notifies the receiver that the favicon for the current page of the most
 // recent tab was updated with `image`.
 - (void)mostRecentTabFaviconUpdatedWithImage:(UIImage*)image;
+// Notifies the receiver that the title of the current page of the most recent
+// tab was updated to `title`.
+- (void)mostRecentTabTitleWasUpdated:(NSString*)title;
 @end
 
 // Bridge to use an id<StartSurfaceRecentTabObserving> as a
@@ -43,6 +46,7 @@
   // StartSurfaceBrowserAgentObserver.
   void MostRecentTabRemoved(web::WebState* web_state) override;
   void MostRecentTabFaviconUpdated(UIImage* image) override;
+  void MostRecentTabTitleUpdated(const std::u16string& title) override;
 
   __weak id<StartSurfaceRecentTabObserving> delegate_ = nil;
 };
diff --git a/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_removal_observer_bridge.mm b/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_removal_observer_bridge.mm
index b1e26a7..89a7533 100644
--- a/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_removal_observer_bridge.mm
+++ b/ios/chrome/browser/ui/start_surface/start_surface_recent_tab_removal_observer_bridge.mm
@@ -4,6 +4,8 @@
 
 #import "ios/chrome/browser/ui/start_surface/start_surface_recent_tab_removal_observer_bridge.h"
 
+#import "base/strings/sys_string_conversions.h"
+
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
 #endif
@@ -32,3 +34,12 @@
 
   [delegate_ mostRecentTabFaviconUpdatedWithImage:image];
 }
+
+void StartSurfaceRecentTabObserverBridge::MostRecentTabTitleUpdated(
+    const std::u16string& title) {
+  const SEL selector = @selector(mostRecentTabTitleWasUpdated:);
+  if (![delegate_ respondsToSelector:selector])
+    return;
+
+  [delegate_ mostRecentTabTitleWasUpdated:base::SysUTF16ToNSString(title)];
+}
diff --git a/ios/chrome/browser/ui/toolbar/BUILD.gn b/ios/chrome/browser/ui/toolbar/BUILD.gn
index 10587d4e7..0e21647 100644
--- a/ios/chrome/browser/ui/toolbar/BUILD.gn
+++ b/ios/chrome/browser/ui/toolbar/BUILD.gn
@@ -9,6 +9,8 @@
     "adaptive_toolbar_coordinator.mm",
     "primary_toolbar_coordinator.h",
     "primary_toolbar_coordinator.mm",
+    "primary_toolbar_mediator.h",
+    "primary_toolbar_mediator.mm",
     "secondary_toolbar_coordinator.h",
     "secondary_toolbar_coordinator.mm",
     "toolbar_coordinatee.h",
@@ -59,6 +61,7 @@
     "//ios/chrome/browser/ui/main:scene_state_header",
     "//ios/chrome/browser/ui/menu",
     "//ios/chrome/browser/ui/ntp",
+    "//ios/chrome/browser/ui/ntp:coordinator",
     "//ios/chrome/browser/ui/ntp:util",
     "//ios/chrome/browser/ui/omnibox",
     "//ios/chrome/browser/ui/omnibox:omnibox_internal",
diff --git a/ios/chrome/browser/ui/toolbar/primary_toolbar_coordinator.mm b/ios/chrome/browser/ui/toolbar/primary_toolbar_coordinator.mm
index 3ec7a2b8..56805b9 100644
--- a/ios/chrome/browser/ui/toolbar/primary_toolbar_coordinator.mm
+++ b/ios/chrome/browser/ui/toolbar/primary_toolbar_coordinator.mm
@@ -28,6 +28,7 @@
 #import "ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.h"
 #import "ios/chrome/browser/ui/orchestrator/omnibox_focus_orchestrator.h"
 #import "ios/chrome/browser/ui/toolbar/adaptive_toolbar_coordinator+subclassing.h"
+#import "ios/chrome/browser/ui/toolbar/primary_toolbar_mediator.h"
 #import "ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.h"
 #import "ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller_delegate.h"
 #import "ios/chrome/browser/ui/toolbar/toolbar_coordinator_delegate.h"
@@ -41,7 +42,8 @@
 #error "This file requires ARC support."
 #endif
 
-@interface PrimaryToolbarCoordinator () <PrimaryToolbarViewControllerDelegate> {
+@interface PrimaryToolbarCoordinator () <PrimaryToolbarMediatorDelegate,
+                                         PrimaryToolbarViewControllerDelegate> {
   // Observer that updates `toolbarViewController` for fullscreen events.
   std::unique_ptr<FullscreenUIUpdater> _fullscreenUIUpdater;
   PrerenderService* _prerenderService;
@@ -49,6 +51,8 @@
 
 // Whether the coordinator is started.
 @property(nonatomic, assign, getter=isStarted) BOOL started;
+// Mediator for this toolbar.
+@property(nonatomic, strong) PrimaryToolbarMediator* primaryToolbarMediator;
 // Redefined as PrimaryToolbarViewController.
 @property(nonatomic, strong) PrimaryToolbarViewController* viewController;
 // The coordinator for the location bar in the toolbar.
@@ -79,6 +83,10 @@
       startDispatchingToTarget:self
                    forProtocol:@protocol(FakeboxFocuser)];
 
+  self.primaryToolbarMediator = [[PrimaryToolbarMediator alloc]
+      initWithWebStateList:self.browser->GetWebStateList()];
+  self.primaryToolbarMediator.delegate = self;
+
   // LocationBarCoordinator dispatches OmniboxCommands therefore Location Bar
   // setup should be done before using OmniboxCommands handler (below).
   [self setUpLocationBar];
@@ -120,6 +128,8 @@
   if (!self.started)
     return;
   [super stop];
+  self.primaryToolbarMediator.delegate = nil;
+  [self.primaryToolbarMediator disconnect];
   [self.browser->GetCommandDispatcher() stopDispatchingToTarget:self];
   [self.locationBarCoordinator stop];
   _fullscreenUIUpdater = nullptr;
diff --git a/ios/chrome/browser/ui/toolbar/primary_toolbar_mediator.h b/ios/chrome/browser/ui/toolbar/primary_toolbar_mediator.h
new file mode 100644
index 0000000..c5a1ca9d
--- /dev/null
+++ b/ios/chrome/browser/ui/toolbar/primary_toolbar_mediator.h
@@ -0,0 +1,37 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_TOOLBAR_PRIMARY_TOOLBAR_MEDIATOR_H_
+#define IOS_CHROME_BROWSER_UI_TOOLBAR_PRIMARY_TOOLBAR_MEDIATOR_H_
+
+#import <Foundation/Foundation.h>
+
+@class NewTabPageCoordinator;
+class WebStateList;
+
+@protocol PrimaryToolbarMediatorDelegate <NSObject>
+
+// Updates toolbar appearance.
+- (void)updateToolbar;
+
+@end
+
+@interface PrimaryToolbarMediator : NSObject
+
+@property(nonatomic, weak) id<PrimaryToolbarMediatorDelegate> delegate;
+
+// Creates an instance of the mediator. Observers will be installed into all
+// existing web states in `webStateList`. While the mediator is alive,
+// observers will be added and removed from web states when they are inserted
+// into or removed from the web state list.
+- (instancetype)initWithWebStateList:(WebStateList*)webStateList;
+
+// Disconnects all observers set by the mediator on any web states in its
+// web state list. After `disconnect` is called, the mediator will not add
+// observers to further webstates.
+- (void)disconnect;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_TOOLBAR_PRIMARY_TOOLBAR_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/toolbar/primary_toolbar_mediator.mm b/ios/chrome/browser/ui/toolbar/primary_toolbar_mediator.mm
new file mode 100644
index 0000000..0f5c1c6a
--- /dev/null
+++ b/ios/chrome/browser/ui/toolbar/primary_toolbar_mediator.mm
@@ -0,0 +1,63 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/toolbar/primary_toolbar_mediator.h"
+
+#import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
+#import "ios/chrome/browser/ui/ntp/new_tab_page_coordinator.h"
+#import "ios/chrome/browser/ui/util/uikit_ui_util.h"
+#import "ios/chrome/browser/web_state_list/active_web_state_observation_forwarder.h"
+#import "ios/chrome/browser/web_state_list/web_state_list.h"
+#import "ios/web/public/ui/crw_web_view_proxy.h"
+#import "ios/web/public/web_state.h"
+#import "ios/web/public/web_state_observer_bridge.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface PrimaryToolbarMediator () <CRWWebStateObserver>
+
+@end
+
+@implementation PrimaryToolbarMediator {
+  // Bridges C++ WebStateObserver methods to this mediator.
+  std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
+
+  // Forwards observer methods for active WebStates in the WebStateList to
+  // this mediator.
+  std::unique_ptr<ActiveWebStateObservationForwarder>
+      _activeWebStateObservationForwarder;
+
+  WebStateList* _webStateList;
+}
+
+- (instancetype)initWithWebStateList:(WebStateList*)webStateList {
+  if (self = [super init]) {
+    _webStateList = webStateList;
+
+    _webStateObserverBridge =
+        std::make_unique<web::WebStateObserverBridge>(self);
+    _activeWebStateObservationForwarder =
+        std::make_unique<ActiveWebStateObservationForwarder>(
+            webStateList, _webStateObserverBridge.get());
+  }
+  return self;
+}
+
+- (void)disconnect {
+  _activeWebStateObservationForwarder = nullptr;
+  _webStateObserverBridge = nullptr;
+
+  _webStateList = nullptr;
+}
+
+#pragma mark - CRWWebStateObserver methods.
+
+- (void)webState:(web::WebState*)webState
+    didStartNavigation:(web::NavigationContext*)navigation {
+  [self.delegate updateToolbar];
+}
+
+@end
diff --git a/ios/chrome/browser/ui/ui_feature_flags.cc b/ios/chrome/browser/ui/ui_feature_flags.cc
index b65ac71..080892d6 100644
--- a/ios/chrome/browser/ui/ui_feature_flags.cc
+++ b/ios/chrome/browser/ui/ui_feature_flags.cc
@@ -79,5 +79,11 @@
 const base::Feature kEnableExpKitAppleCalendar{
     "EnableExpKitAppleCalendar", base::FEATURE_DISABLED_BY_DEFAULT};
 
-const base::Feature kEnableCBDSignOut{"EnableCBDSignOut",
+const base::Feature kEnableCBDSignOut{"EnableCbdSignOut",
                                       base::FEATURE_DISABLED_BY_DEFAULT};
+
+const base::Feature kEnablePhoneNumbers{"EnablePhoneNumbers",
+                                        base::FEATURE_DISABLED_BY_DEFAULT};
+
+const base::Feature kEnableMiniMap{"EnableMiniMap",
+                                   base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ios/chrome/browser/ui/ui_feature_flags.h b/ios/chrome/browser/ui/ui_feature_flags.h
index e0cfe56..eb781a09 100644
--- a/ios/chrome/browser/ui/ui_feature_flags.h
+++ b/ios/chrome/browser/ui/ui_feature_flags.h
@@ -97,4 +97,10 @@
 // Feature flag to enable sign-out from Chrome Browsing Data.
 extern const base::Feature kEnableCBDSignOut;
 
+// Feature flag to enable Phone Numbers detection.
+extern const base::Feature kEnablePhoneNumbers;
+
+// Feature flag to enable Mini Map in experience kit.
+extern const base::Feature kEnableMiniMap;
+
 #endif  // IOS_CHROME_BROWSER_UI_UI_FEATURE_FLAGS_H_
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
index e43c3af..1e15c88f 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-3a2733efb290c5e61feab6553cc8b3d99c6f88a9
\ No newline at end of file
+5268948920d23c50d0c43f7afa433762849134f5
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
index bb094e5..b46b2954 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-24a733a5131e008997b1fd843b7c8252f4b27034
\ No newline at end of file
+166592853e5f77245f7a3413350ba34e77cf8760
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
index 3cb04b6..da59f3f1 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-d781d3ba036a437dcf69ed5ed36a2584b225ff4e
\ No newline at end of file
+3da3db3b8e3426f3b51186533e4c09f5abf804f9
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
index e5e12056..1b8caf6a 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-09856a0ba2de799aa988c44fc92e6c4f7eea6779
\ No newline at end of file
+fcc213828c38f01ec6c9fde85ad177b86f7d4ee6
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
index 829f117..94fa00a 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-5a34a1b729ae1a2418009c76f568926f45edfc6a
\ No newline at end of file
+44c194b0a32f3977a4a45d031dc91f171f4107b7
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
index 2562cf8..d3b1441 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-4014c0ced2e51ec21ea4bd3e5f80d8aebabd7278
\ No newline at end of file
+64692b297b72b072769794ad66d268296fb14839
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
index 1415951a..44f610f 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-a231280d77561372f93503182f3468eb63dd861b
\ No newline at end of file
+1e3d3c916dc1f2457fc1391655eba1fe89b95c5e
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
index abe8b0f..0bc6ea2 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-616eb7482a752fda61a47e26342d9d2f5a76b47c
\ No newline at end of file
+34399045db8ab1086d736a2d72f2ca9e0632b6e1
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
index 0fefa9e..bc01591 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-d5ee80f988e539019e812e7ae31c095d79a1b6db
\ No newline at end of file
+33ac090e75cb98e76c6b45a001de9cd0800b493d
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
index 6f209aa4..f0d27d2 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-4e59880b1d969ec7d89bae72265d6639c1763d96
\ No newline at end of file
+db8e3d533b7640924d4a77b7de6cffd331a6d464
\ No newline at end of file
diff --git a/media/gpu/mac/vt_video_decode_accelerator_mac.cc b/media/gpu/mac/vt_video_decode_accelerator_mac.cc
index e2f355ef..e7d412b 100644
--- a/media/gpu/mac/vt_video_decode_accelerator_mac.cc
+++ b/media/gpu/mac/vt_video_decode_accelerator_mac.cc
@@ -2046,9 +2046,9 @@
     // Request new pictures.
     picture_size_ = frame.image_size;
 
-    // TODO(https://crbug.com/1210994): Remove XRGB support, and expose only
+    // TODO(https://crbug.com/1210994): Remove RGBAF16 support, and expose only
     // PIXEL_FORMAT_NV12 and PIXEL_FORMAT_YUV420P10.
-    picture_format_ = PIXEL_FORMAT_XRGB;
+    picture_format_ = PIXEL_FORMAT_RGBAF16;
     if (base::FeatureList::IsEnabled(kMultiPlaneVideoToolboxSharedImages)) {
       // TODO(https://crbug.com/1233228): The UV planes of P010 frames cannot
       // be represented in the current gfx::BufferFormat.
@@ -2098,7 +2098,7 @@
       planes.push_back(gfx::BufferPlane::Y);
       planes.push_back(gfx::BufferPlane::UV);
       break;
-    case PIXEL_FORMAT_XRGB:
+    case PIXEL_FORMAT_RGBAF16:
       planes.push_back(gfx::BufferPlane::DEFAULT);
       break;
     default:
@@ -2115,8 +2115,8 @@
     // TODO(https://crbug.com/1108909): BGRA is not an appropriate value for
     // these parameters.
     const viz::ResourceFormat viz_resource_format =
-        (picture_format_ == PIXEL_FORMAT_XRGB)
-            ? viz::ResourceFormat::BGRA_8888
+        (picture_format_ == PIXEL_FORMAT_RGBAF16)
+            ? viz::ResourceFormat::RGBA_F16
             : viz::GetResourceFormat(plane_buffer_format);
     const GLenum gl_format = viz::GLDataFormat(viz_resource_format);
 
diff --git a/media/renderers/paint_canvas_video_renderer.cc b/media/renderers/paint_canvas_video_renderer.cc
index 66da6d3e..30e42ff 100644
--- a/media/renderers/paint_canvas_video_renderer.cc
+++ b/media/renderers/paint_canvas_video_renderer.cc
@@ -141,7 +141,8 @@
          PIXEL_FORMAT_XBGR == video_frame->format() ||
          PIXEL_FORMAT_XB30 == video_frame->format() ||
          PIXEL_FORMAT_XR30 == video_frame->format() ||
-         PIXEL_FORMAT_NV12 == video_frame->format())
+         PIXEL_FORMAT_NV12 == video_frame->format() ||
+         PIXEL_FORMAT_RGBAF16 == video_frame->format())
       << "Format: " << VideoPixelFormatToString(video_frame->format());
 
   const gpu::MailboxHolder& mailbox_holder = video_frame->mailbox_holder(0);
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc
index d899d10..ef464da 100644
--- a/media/video/gpu_memory_buffer_video_frame_pool.cc
+++ b/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -1273,6 +1273,13 @@
 
   VideoPixelFormat frame_format = VideoFormat(output_format_);
 
+#if BUILDFLAG(IS_MAC)
+  // TODO(https://crbug.com/1155760): Until individual planes can be bound as
+  // their own textures, P010 buffers are copied to F16 textures for sampling.
+  if (frame_format == PIXEL_FORMAT_P016LE)
+    frame_format = PIXEL_FORMAT_RGBAF16;
+#endif
+
   // Create the VideoFrame backed by native textures.
   scoped_refptr<VideoFrame> frame = VideoFrame::WrapNativeTextures(
       frame_format, mailbox_holders, VideoFrame::ReleaseMailboxCB(), coded_size,
diff --git a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
index 33e31251..a9553e0 100644
--- a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
+++ b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
@@ -771,7 +771,11 @@
   RunUntilIdle();
 
   EXPECT_NE(software_frame.get(), frame.get());
+#if BUILDFLAG(IS_MAC)
+  EXPECT_EQ(PIXEL_FORMAT_RGBAF16, frame->format());
+#else
   EXPECT_EQ(PIXEL_FORMAT_P016LE, frame->format());
+#endif
   EXPECT_EQ(1u, frame->NumTextures());
   EXPECT_EQ(1u, sii_->shared_image_count());
   EXPECT_TRUE(frame->metadata().read_lock_fences_enabled);
@@ -806,7 +810,11 @@
   if (gfx::IsOddWidthMultiPlanarBuffersAllowed() &&
       gfx::IsOddHeightMultiPlanarBuffersAllowed()) {
     EXPECT_NE(software_frame.get(), frame.get());
+#if BUILDFLAG(IS_MAC)
+    EXPECT_EQ(PIXEL_FORMAT_RGBAF16, frame->format());
+#else
     EXPECT_EQ(PIXEL_FORMAT_P016LE, frame->format());
+#endif
     EXPECT_EQ(1u, frame->NumTextures());
     EXPECT_EQ(1u, sii_->shared_image_count());
     EXPECT_TRUE(frame->metadata().read_lock_fences_enabled);
diff --git a/net/cookies/cookie_monster.h b/net/cookies/cookie_monster.h
index 278c842..7f94ea94 100644
--- a/net/cookies/cookie_monster.h
+++ b/net/cookies/cookie_monster.h
@@ -349,7 +349,7 @@
   // of scheme. This enum should not be used when cookies are *cleared*,
   // because its purpose is to understand if Chrome can deprecate the
   // ability of HTTP urls to set/overwrite Secure cookies.
-  enum CookieSource {
+  enum CookieSource : uint8_t {
     COOKIE_SOURCE_SECURE_COOKIE_CRYPTOGRAPHIC_SCHEME = 0,
     COOKIE_SOURCE_SECURE_COOKIE_NONCRYPTOGRAPHIC_SCHEME,
     COOKIE_SOURCE_NONSECURE_COOKIE_CRYPTOGRAPHIC_SCHEME,
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index 2042b99..cf7b7b34 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2022-07-29 12:54 UTC
+# Last updated: 2022-08-01 12:54 UTC
 PinsListTimestamp
-1659099280
+1659358464
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/quic/dedicated_web_transport_http3_client_test.cc b/net/quic/dedicated_web_transport_http3_client_test.cc
index 70839b1..a68940ef 100644
--- a/net/quic/dedicated_web_transport_http3_client_test.cc
+++ b/net/quic/dedicated_web_transport_http3_client_test.cc
@@ -204,8 +204,8 @@
   Run();
 }
 
-// TODO(https://crbug.com/1288036): The test is flaky on iOS.
-#if BUILDFLAG(IS_IOS)
+// TODO(https://crbug.com/1288036): The test is flaky on Mac and iOS.
+#if BUILDFLAG(IS_IOS) || BUILDFLAG(IS_MAC)
 #define MAYBE_CloseTimeout DISABLED_CloseTimeout
 #else
 #define MAYBE_CloseTimeout CloseTimeout
diff --git a/services/network/cookie_manager_unittest.cc b/services/network/cookie_manager_unittest.cc
index c1ffea9..641d875 100644
--- a/services/network/cookie_manager_unittest.cc
+++ b/services/network/cookie_manager_unittest.cc
@@ -62,6 +62,7 @@
 namespace network {
 namespace {
 using base::StrCat;
+using QueryReason = CookieSettings::QueryReason;
 using testing::IsEmpty;
 using testing::UnorderedElementsAre;
 
@@ -2647,25 +2648,25 @@
 TEST_F(CookieManagerTest, BlockThirdPartyCookies) {
   const GURL kThisURL = GURL("http://www.this.com");
   const GURL kThatURL = GURL("http://www.that.com");
-  EXPECT_TRUE(service()->cookie_settings().IsFullCookieAccessAllowed(kThisURL,
-                                                                     kThatURL));
+  EXPECT_TRUE(service()->cookie_settings().IsFullCookieAccessAllowed(
+      kThisURL, kThatURL, QueryReason::kCookies));
 
   // Set block third party cookies to true, cookie should now be blocked.
   cookie_service_client()->BlockThirdPartyCookies(true);
   base::RunLoop().RunUntilIdle();
 
   EXPECT_FALSE(service()->cookie_settings().IsFullCookieAccessAllowed(
-      kThisURL, kThatURL));
-  EXPECT_TRUE(service()->cookie_settings().IsFullCookieAccessAllowed(kThisURL,
-                                                                     kThisURL));
+      kThisURL, kThatURL, QueryReason::kCookies));
+  EXPECT_TRUE(service()->cookie_settings().IsFullCookieAccessAllowed(
+      kThisURL, kThisURL, QueryReason::kCookies));
 
   // Set block third party cookies back to false, cookie should no longer be
   // blocked.
   cookie_service_client()->BlockThirdPartyCookies(false);
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_TRUE(service()->cookie_settings().IsFullCookieAccessAllowed(kThisURL,
-                                                                     kThatURL));
+  EXPECT_TRUE(service()->cookie_settings().IsFullCookieAccessAllowed(
+      kThisURL, kThatURL, QueryReason::kCookies));
 }
 
 // A test class having cookie store with a persistent backing store.
diff --git a/services/network/cookie_settings.cc b/services/network/cookie_settings.cc
index 6649c65..98856bb 100644
--- a/services/network/cookie_settings.cc
+++ b/services/network/cookie_settings.cc
@@ -123,7 +123,7 @@
           url,
           GetFirstPartyURL(site_for_cookies,
                            base::OptionalOrNullptr(top_frame_origin)),
-          IsThirdPartyRequest(url, site_for_cookies)),
+          IsThirdPartyRequest(url, site_for_cookies), QueryReason::kCookies),
       cookie.IsSameParty(), cookie.IsPartitioned(), /*record_metrics=*/true);
 }
 
@@ -162,7 +162,8 @@
   //
   // We don't record metrics here, since this isn't actually accessing a cookie.
   CookieSettingWithMetadata metadata = GetCookieSettingWithMetadata(
-      url, site_for_cookies, base::OptionalOrNullptr(top_frame_origin));
+      url, site_for_cookies, base::OptionalOrNullptr(top_frame_origin),
+      QueryReason::kCookies);
   if (IsHypotheticalCookieAllowed(metadata,
                                   same_party_cookie_context_type ==
                                       SamePartyCookieContextType::kSameParty,
@@ -189,17 +190,20 @@
     bool is_third_party_request,
     const GURL& url,
     const GURL& first_party_url,
-    ContentSetting cookie_setting) const {
+    ContentSetting cookie_setting,
+    QueryReason query_reason) const {
   if (block_third_party_cookies_ && is_third_party_request &&
       !base::Contains(third_party_cookies_allowed_schemes_,
                       first_party_url.scheme())) {
-    // See if a Storage Access permission grant can unblock.
-    if (const ContentSettingPatternSource* match =
-            FindMatchingSetting(url, first_party_url, storage_access_grants_);
-        match && match->GetContentSetting() == CONTENT_SETTING_ALLOW) {
-      FireStorageAccessHistogram(net::cookie_util::StorageAccessResult::
-                                     ACCESS_ALLOWED_STORAGE_ACCESS_GRANT);
-      return false;
+    if (ShouldConsiderStorageAccessGrants(query_reason)) {
+      // See if a Storage Access permission grant can unblock.
+      if (const ContentSettingPatternSource* match =
+              FindMatchingSetting(url, first_party_url, storage_access_grants_);
+          match && match->GetContentSetting() == CONTENT_SETTING_ALLOW) {
+        FireStorageAccessHistogram(net::cookie_util::StorageAccessResult::
+                                       ACCESS_ALLOWED_STORAGE_ACCESS_GRANT);
+        return false;
+      }
     }
 
     FireStorageAccessHistogram(
@@ -231,10 +235,10 @@
 }
 
 CookieSettings::CookieSettingWithMetadata
-CookieSettings::GetCookieSettingWithMetadata(
-    const GURL& url,
-    const GURL& first_party_url,
-    bool is_third_party_request) const {
+CookieSettings::GetCookieSettingWithMetadata(const GURL& url,
+                                             const GURL& first_party_url,
+                                             bool is_third_party_request,
+                                             QueryReason query_reason) const {
   if (ShouldAlwaysAllowCookies(url, first_party_url)) {
     return {
         /*cookie_setting=*/CONTENT_SETTING_ALLOW,
@@ -258,7 +262,8 @@
 
   if (cookie_setting != CONTENT_SETTING_BLOCK && !found_explicit_setting) {
     if (BlockDueToThirdPartyCookieBlockingSetting(
-            is_third_party_request, url, first_party_url, cookie_setting)) {
+            is_third_party_request, url, first_party_url, cookie_setting,
+            query_reason)) {
       cookie_setting = CONTENT_SETTING_BLOCK;
       third_party_blocking_outcome =
           GetThirdPartyBlockingScope(first_party_url);
@@ -277,19 +282,21 @@
 CookieSettings::GetCookieSettingWithMetadata(
     const GURL& url,
     const net::SiteForCookies& site_for_cookies,
-    const url::Origin* top_frame_origin) const {
+    const url::Origin* top_frame_origin,
+    QueryReason query_reason) const {
   return GetCookieSettingWithMetadata(
       url, GetFirstPartyURL(site_for_cookies, top_frame_origin),
-      IsThirdPartyRequest(url, site_for_cookies));
+      IsThirdPartyRequest(url, site_for_cookies), query_reason);
 }
 
 ContentSetting CookieSettings::GetCookieSettingInternal(
     const GURL& url,
     const GURL& first_party_url,
     bool is_third_party_request,
-    content_settings::SettingSource* source) const {
+    content_settings::SettingSource* source,
+    QueryReason query_reason) const {
   return GetCookieSettingWithMetadata(url, first_party_url,
-                                      is_third_party_request)
+                                      is_third_party_request, query_reason)
       .cookie_setting;
 }
 
@@ -300,7 +307,8 @@
     net::CookieAccessResultList& maybe_included_cookies,
     net::CookieAccessResultList& excluded_cookies) const {
   const CookieSettingWithMetadata setting_with_metadata =
-      GetCookieSettingWithMetadata(url, site_for_cookies, top_frame_origin);
+      GetCookieSettingWithMetadata(url, site_for_cookies, top_frame_origin,
+                                   QueryReason::kCookies);
 
   if (IsAllowed(setting_with_metadata.cookie_setting))
     return true;
diff --git a/services/network/cookie_settings.h b/services/network/cookie_settings.h
index 081bb52..94a5934 100644
--- a/services/network/cookie_settings.h
+++ b/services/network/cookie_settings.h
@@ -36,6 +36,8 @@
 class COMPONENT_EXPORT(NETWORK_SERVICE) CookieSettings
     : public content_settings::CookieSettingsBase {
  public:
+  using QueryReason = content_settings::CookieSettingsBase::QueryReason;
+
   CookieSettings();
 
   CookieSettings(const CookieSettings&) = delete;
@@ -152,7 +154,8 @@
       const GURL& url,
       const GURL& first_party_url,
       bool is_third_party_request,
-      content_settings::SettingSource* source) const override;
+      content_settings::SettingSource* source,
+      QueryReason query_reason) const override;
 
   // An enum that represents the result of applying the user's
   // third-party-cookie-blocking setting in a given context.
@@ -185,7 +188,8 @@
       bool is_third_party_request,
       const GURL& url,
       const GURL& first_party_url,
-      ContentSetting cookie_setting) const;
+      ContentSetting cookie_setting,
+      QueryReason query_reason) const;
 
   // Determines the scope of third-party-cookie-blocking, i.e. whether it
   // applies to all cookies or just unpartitioned cookies. Assumes that
@@ -200,14 +204,16 @@
   CookieSettingWithMetadata GetCookieSettingWithMetadata(
       const GURL& url,
       const GURL& first_party_url,
-      bool is_third_party_request) const;
+      bool is_third_party_request,
+      QueryReason query_reason) const;
 
   // An overload of the above, which determines `first_party_url` and
   // `is_third_party_request` appropriately.
   CookieSettingWithMetadata GetCookieSettingWithMetadata(
       const GURL& url,
       const net::SiteForCookies& site_for_cookies,
-      const url::Origin* top_frame_origin) const;
+      const url::Origin* top_frame_origin,
+      QueryReason query_reason) const;
 
   // Returns whether the given cookie should be allowed to be sent, according to
   // the user's settings. Assumes that the `cookie.access_result` has been
diff --git a/services/network/cookie_settings_unittest.cc b/services/network/cookie_settings_unittest.cc
index 5cd2b51c..b64ae56da 100644
--- a/services/network/cookie_settings_unittest.cc
+++ b/services/network/cookie_settings_unittest.cc
@@ -21,6 +21,8 @@
 namespace network {
 namespace {
 
+using QueryReason = CookieSettings::QueryReason;
+
 using testing::_;
 using testing::ElementsAre;
 using testing::IsEmpty;
@@ -57,10 +59,13 @@
       cookie_partition_key);
 }
 
-class CookieSettingsTest : public testing::Test {
+class CookieSettingsTest : public testing::TestWithParam<bool> {
  public:
   CookieSettingsTest()
-      : task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
+      : task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME) {
+    features_.InitWithFeatureState(net::features::kStorageAccessAPI,
+                                   IsStorageAccessAPIEnabled());
+  }
 
   ContentSettingPatternSource CreateSetting(
       const std::string& primary_pattern,
@@ -77,46 +82,61 @@
     task_environment_.FastForwardBy(delta);
   }
 
+  bool IsStorageAccessAPIEnabled() const { return GetParam(); }
+
+  // Assumes that cookie access would be blocked if not for a Storage Access API
+  // grant.
+  ContentSetting SettingWithStorageAccessGrantOverride() const {
+    return IsStorageAccessAPIEnabled() ? CONTENT_SETTING_ALLOW
+                                       : CONTENT_SETTING_BLOCK;
+  }
+
  private:
+  base::test::ScopedFeatureList features_;
   base::test::TaskEnvironment task_environment_;
 };
 
-TEST_F(CookieSettingsTest, GetCookieSettingDefault) {
+TEST_P(CookieSettingsTest, GetCookieSettingDefault) {
   CookieSettings settings;
-  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kURL), nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kURL), nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_ALLOW);
 }
 
-TEST_F(CookieSettingsTest, GetCookieSetting) {
+TEST_P(CookieSettingsTest, GetCookieSetting) {
   CookieSettings settings;
   settings.set_content_settings(
       {CreateSetting(kURL, kURL, CONTENT_SETTING_BLOCK)});
-  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kURL), nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kURL), nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 
-TEST_F(CookieSettingsTest, GetCookieSettingMustMatchBothPatterns) {
+TEST_P(CookieSettingsTest, GetCookieSettingMustMatchBothPatterns) {
   CookieSettings settings;
   // This setting needs kOtherURL as the secondary pattern.
   settings.set_content_settings(
       {CreateSetting(kURL, kOtherURL, CONTENT_SETTING_BLOCK)});
-  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kURL), nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kURL), nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_ALLOW);
 
-  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kOtherURL), nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kOtherURL), nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 
-TEST_F(CookieSettingsTest, GetCookieSettingGetsFirstSetting) {
+TEST_P(CookieSettingsTest, GetCookieSettingGetsFirstSetting) {
   CookieSettings settings;
   settings.set_content_settings(
       {CreateSetting(kURL, kURL, CONTENT_SETTING_BLOCK),
        CreateSetting(kURL, kURL, CONTENT_SETTING_SESSION_ONLY)});
-  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kURL), nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kURL), nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 
-TEST_F(CookieSettingsTest, GetCookieSettingDontBlockThirdParty) {
+TEST_P(CookieSettingsTest, GetCookieSettingDontBlockThirdParty) {
   base::HistogramTester histogram_tester;
   histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 0);
 
@@ -124,7 +144,8 @@
   settings.set_content_settings(
       {CreateSetting("*", "*", CONTENT_SETTING_ALLOW)});
   settings.set_block_third_party_cookies(false);
-  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kOtherURL), nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kOtherURL), nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_ALLOW);
   histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 1);
   histogram_tester.ExpectBucketCount(
@@ -133,27 +154,29 @@
       1);
 }
 
-TEST_F(CookieSettingsTest, GetCookieSettingBlockThirdParty) {
+TEST_P(CookieSettingsTest, GetCookieSettingBlockThirdParty) {
   CookieSettings settings;
   settings.set_content_settings(
       {CreateSetting("*", "*", CONTENT_SETTING_ALLOW)});
   settings.set_block_third_party_cookies(true);
-  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kOtherURL), nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kOtherURL), nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 
-TEST_F(CookieSettingsTest, GetCookieSettingDontBlockThirdPartyWithException) {
+TEST_P(CookieSettingsTest, GetCookieSettingDontBlockThirdPartyWithException) {
   CookieSettings settings;
   settings.set_content_settings(
       {CreateSetting(kURL, kOtherURL, CONTENT_SETTING_ALLOW)});
   settings.set_block_third_party_cookies(true);
-  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kOtherURL), nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(GURL(kURL), GURL(kOtherURL), nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_ALLOW);
 }
 
 // The Storage Access API should unblock storage access that would otherwise be
 // blocked.
-TEST_F(CookieSettingsTest, GetCookieSettingSAAUnblocks) {
+TEST_P(CookieSettingsTest, GetCookieSettingSAAUnblocks) {
   GURL top_level_url = GURL(kURL);
   GURL url = GURL(kOtherURL);
   GURL third_url = GURL(kDomainURL);
@@ -172,34 +195,41 @@
   // When requesting our setting for the embedder/top-level combination our
   // grant is for access should be allowed. For any other domain pairs access
   // should still be blocked.
-  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr),
-            CONTENT_SETTING_ALLOW);
+  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr,
+                                      QueryReason::kCookies),
+            SettingWithStorageAccessGrantOverride());
   histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 1);
   histogram_tester.ExpectBucketCount(
       kAllowedRequestsHistogram,
-      static_cast<int>(net::cookie_util::StorageAccessResult::
-                           ACCESS_ALLOWED_STORAGE_ACCESS_GRANT),
+      static_cast<int>(
+          IsStorageAccessAPIEnabled()
+              ? net::cookie_util::StorageAccessResult::
+                    ACCESS_ALLOWED_STORAGE_ACCESS_GRANT
+              : net::cookie_util::StorageAccessResult::ACCESS_BLOCKED),
       1);
 
   // Invalid pair the |top_level_url| granting access to |url| is now
   // being loaded under |url| as the top level url.
-  EXPECT_EQ(settings.GetCookieSetting(top_level_url, url, nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(top_level_url, url, nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
   histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 2);
   histogram_tester.ExpectBucketCount(
       kAllowedRequestsHistogram,
       static_cast<int>(net::cookie_util::StorageAccessResult::
                            ACCESS_ALLOWED_STORAGE_ACCESS_GRANT),
-      1);
+      IsStorageAccessAPIEnabled() ? 1 : 0);
   histogram_tester.ExpectBucketCount(
       kAllowedRequestsHistogram,
       static_cast<int>(net::cookie_util::StorageAccessResult::ACCESS_BLOCKED),
-      1);
+      IsStorageAccessAPIEnabled() ? 1 : 2);
 
   // Invalid pairs where a |third_url| is used.
-  EXPECT_EQ(settings.GetCookieSetting(url, third_url, nullptr),
-            CONTENT_SETTING_BLOCK);
-  EXPECT_EQ(settings.GetCookieSetting(third_url, top_level_url, nullptr),
+  EXPECT_EQ(
+      settings.GetCookieSetting(url, third_url, nullptr, QueryReason::kCookies),
+      CONTENT_SETTING_BLOCK);
+  EXPECT_EQ(settings.GetCookieSetting(third_url, top_level_url, nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 
   // If cookies are globally blocked, SAA grants should be ignored.
@@ -208,7 +238,8 @@
         {CreateSetting("*", "*", CONTENT_SETTING_BLOCK)});
     settings.set_block_third_party_cookies(true);
     base::HistogramTester histogram_tester;
-    EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr),
+    EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr,
+                                        QueryReason::kCookies),
               CONTENT_SETTING_BLOCK);
     histogram_tester.ExpectTotalCount(kAllowedRequestsHistogram, 1);
     histogram_tester.ExpectBucketCount(
@@ -220,7 +251,7 @@
 
 // Subdomains of the granted embedding url should not gain access if a valid
 // grant exists.
-TEST_F(CookieSettingsTest, GetCookieSettingSAAResourceWildcards) {
+TEST_P(CookieSettingsTest, GetCookieSettingSAAResourceWildcards) {
   GURL top_level_url = GURL(kURL);
   GURL url = GURL(kDomainURL);
 
@@ -232,17 +263,18 @@
   settings.set_storage_access_grants(
       {CreateSetting(kDomain, top_level_url.host(), CONTENT_SETTING_ALLOW)});
 
-  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr),
-            CONTENT_SETTING_ALLOW);
+  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr,
+                                      QueryReason::kCookies),
+            SettingWithStorageAccessGrantOverride());
 
-  EXPECT_EQ(
-      settings.GetCookieSetting(GURL(kSubDomainURL), top_level_url, nullptr),
-      CONTENT_SETTING_BLOCK);
+  EXPECT_EQ(settings.GetCookieSetting(GURL(kSubDomainURL), top_level_url,
+                                      nullptr, QueryReason::kCookies),
+            CONTENT_SETTING_BLOCK);
 }
 
 // Subdomains of the granted top level url should not grant access if a valid
 // grant exists.
-TEST_F(CookieSettingsTest, GetCookieSettingSAATopLevelWildcards) {
+TEST_P(CookieSettingsTest, GetCookieSettingSAATopLevelWildcards) {
   GURL top_level_url = GURL(kDomainURL);
   GURL url = GURL(kURL);
 
@@ -254,16 +286,18 @@
   settings.set_storage_access_grants(
       {CreateSetting(url.host(), kDomain, CONTENT_SETTING_ALLOW)});
 
-  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr),
-            CONTENT_SETTING_ALLOW);
+  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr,
+                                      QueryReason::kCookies),
+            SettingWithStorageAccessGrantOverride());
 
-  EXPECT_EQ(settings.GetCookieSetting(url, GURL(kSubDomainURL), nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(url, GURL(kSubDomainURL), nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 
 // Any Storage Access API grant should not override an explicit setting to block
 // cookie access.
-TEST_F(CookieSettingsTest, GetCookieSettingSAARespectsSettings) {
+TEST_P(CookieSettingsTest, GetCookieSettingSAARespectsSettings) {
   GURL top_level_url = GURL(kURL);
   GURL url = GURL(kOtherURL);
 
@@ -274,12 +308,13 @@
   settings.set_storage_access_grants(
       {CreateSetting(url.host(), top_level_url.host(), CONTENT_SETTING_ALLOW)});
 
-  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 
 // Once a grant expires access should no longer be given.
-TEST_F(CookieSettingsTest, GetCookieSettingSAAExpiredGrant) {
+TEST_P(CookieSettingsTest, GetCookieSettingSAAExpiredGrant) {
   GURL top_level_url = GURL(kURL);
   GURL url = GURL(kOtherURL);
 
@@ -296,36 +331,38 @@
   // When requesting our setting for the embedder/top-level combination our
   // grant is for access should be allowed. For any other domain pairs access
   // should still be blocked.
-  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr),
-            CONTENT_SETTING_ALLOW);
+  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr,
+                                      QueryReason::kCookies),
+            SettingWithStorageAccessGrantOverride());
 
   // If we fastforward past the expiration of our grant the result should be
   // CONTENT_SETTING_BLOCK now.
   FastForwardTime(base::Seconds(101));
-  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr),
+  EXPECT_EQ(settings.GetCookieSetting(url, top_level_url, nullptr,
+                                      QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 }
 
-TEST_F(CookieSettingsTest, CreateDeleteCookieOnExitPredicateNoSettings) {
+TEST_P(CookieSettingsTest, CreateDeleteCookieOnExitPredicateNoSettings) {
   CookieSettings settings;
   EXPECT_FALSE(settings.CreateDeleteCookieOnExitPredicate());
 }
 
-TEST_F(CookieSettingsTest, CreateDeleteCookieOnExitPredicateNoSessionOnly) {
+TEST_P(CookieSettingsTest, CreateDeleteCookieOnExitPredicateNoSessionOnly) {
   CookieSettings settings;
   settings.set_content_settings(
       {CreateSetting("*", "*", CONTENT_SETTING_ALLOW)});
   EXPECT_FALSE(settings.CreateDeleteCookieOnExitPredicate());
 }
 
-TEST_F(CookieSettingsTest, CreateDeleteCookieOnExitPredicateSessionOnly) {
+TEST_P(CookieSettingsTest, CreateDeleteCookieOnExitPredicateSessionOnly) {
   CookieSettings settings;
   settings.set_content_settings(
       {CreateSetting("*", "*", CONTENT_SETTING_SESSION_ONLY)});
   EXPECT_TRUE(settings.CreateDeleteCookieOnExitPredicate().Run(kURL, false));
 }
 
-TEST_F(CookieSettingsTest, CreateDeleteCookieOnExitPredicateAllow) {
+TEST_P(CookieSettingsTest, CreateDeleteCookieOnExitPredicateAllow) {
   CookieSettings settings;
   settings.set_content_settings(
       {CreateSetting("*", "*", CONTENT_SETTING_ALLOW),
@@ -333,7 +370,7 @@
   EXPECT_FALSE(settings.CreateDeleteCookieOnExitPredicate().Run(kURL, false));
 }
 
-TEST_F(CookieSettingsTest, GetCookieSettingSecureOriginCookiesAllowed) {
+TEST_P(CookieSettingsTest, GetCookieSettingSecureOriginCookiesAllowed) {
   CookieSettings settings;
   settings.set_secure_origin_cookies_allowed_schemes({"chrome"});
   settings.set_block_third_party_cookies(true);
@@ -341,23 +378,23 @@
   EXPECT_EQ(
       settings.GetCookieSetting(GURL("https://foo.com") /* url */,
                                 GURL("chrome://foo") /* first_party_url */,
-                                nullptr /* source */),
+                                nullptr /* source */, QueryReason::kCookies),
       CONTENT_SETTING_ALLOW);
 
   EXPECT_EQ(
       settings.GetCookieSetting(GURL("chrome://foo") /* url */,
                                 GURL("https://foo.com") /* first_party_url */,
-                                nullptr /* source */),
+                                nullptr /* source */, QueryReason::kCookies),
       CONTENT_SETTING_BLOCK);
 
   EXPECT_EQ(
       settings.GetCookieSetting(GURL("http://foo.com") /* url */,
                                 GURL("chrome://foo") /* first_party_url */,
-                                nullptr /* source */),
+                                nullptr /* source */, QueryReason::kCookies),
       CONTENT_SETTING_BLOCK);
 }
 
-TEST_F(CookieSettingsTest, GetCookieSettingWithThirdPartyCookiesAllowedScheme) {
+TEST_P(CookieSettingsTest, GetCookieSettingWithThirdPartyCookiesAllowedScheme) {
   CookieSettings settings;
   settings.set_third_party_cookies_allowed_schemes({"chrome-extension"});
   settings.set_block_third_party_cookies(true);
@@ -365,23 +402,23 @@
   EXPECT_EQ(settings.GetCookieSetting(
                 GURL("http://foo.com") /* url */,
                 GURL("chrome-extension://foo") /* first_party_url */,
-                nullptr /* source */),
+                nullptr /* source */, QueryReason::kCookies),
             CONTENT_SETTING_ALLOW);
 
   EXPECT_EQ(settings.GetCookieSetting(
                 GURL("http://foo.com") /* url */,
                 GURL("other-scheme://foo") /* first_party_url */,
-                nullptr /* source */),
+                nullptr /* source */, QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 
   EXPECT_EQ(
       settings.GetCookieSetting(GURL("chrome-extension://foo") /* url */,
                                 GURL("http://foo.com") /* first_party_url */,
-                                nullptr /* source */),
+                                nullptr /* source */, QueryReason::kCookies),
       CONTENT_SETTING_BLOCK);
 }
 
-TEST_F(CookieSettingsTest, GetCookieSettingMatchingSchemeCookiesAllowed) {
+TEST_P(CookieSettingsTest, GetCookieSettingMatchingSchemeCookiesAllowed) {
   CookieSettings settings;
   settings.set_matching_scheme_cookies_allowed_schemes({"chrome-extension"});
   settings.set_block_third_party_cookies(true);
@@ -389,23 +426,23 @@
   EXPECT_EQ(settings.GetCookieSetting(
                 GURL("chrome-extension://bar") /* url */,
                 GURL("chrome-extension://foo") /* first_party_url */,
-                nullptr /* source */),
+                nullptr /* source */, QueryReason::kCookies),
             CONTENT_SETTING_ALLOW);
 
   EXPECT_EQ(settings.GetCookieSetting(
                 GURL("http://foo.com") /* url */,
                 GURL("chrome-extension://foo") /* first_party_url */,
-                nullptr /* source */),
+                nullptr /* source */, QueryReason::kCookies),
             CONTENT_SETTING_BLOCK);
 
   EXPECT_EQ(
       settings.GetCookieSetting(GURL("chrome-extension://foo") /* url */,
                                 GURL("http://foo.com") /* first_party_url */,
-                                nullptr /* source */),
+                                nullptr /* source */, QueryReason::kCookies),
       CONTENT_SETTING_BLOCK);
 }
 
-TEST_F(CookieSettingsTest, LegacyCookieAccessDefault) {
+TEST_P(CookieSettingsTest, LegacyCookieAccessDefault) {
   CookieSettings settings;
 
   EXPECT_EQ(settings.GetSettingForLegacyCookieAccess(kDomain),
@@ -414,7 +451,7 @@
             settings.GetCookieAccessSemanticsForDomain(kDomain));
 }
 
-TEST_F(CookieSettingsTest, CookieAccessSemanticsForDomain) {
+TEST_P(CookieSettingsTest, CookieAccessSemanticsForDomain) {
   CookieSettings settings;
   settings.set_content_settings_for_legacy_cookie_access(
       {CreateSetting(kDomain, "*", CONTENT_SETTING_ALLOW)});
@@ -435,7 +472,7 @@
   }
 }
 
-TEST_F(CookieSettingsTest, CookieAccessSemanticsForDomainWithWildcard) {
+TEST_P(CookieSettingsTest, CookieAccessSemanticsForDomainWithWildcard) {
   CookieSettings settings;
   settings.set_content_settings_for_legacy_cookie_access(
       {CreateSetting(kDomainWildcardPattern, "*", CONTENT_SETTING_ALLOW)});
@@ -456,7 +493,7 @@
   }
 }
 
-TEST_F(CookieSettingsTest, IsPrivacyModeEnabled) {
+TEST_P(CookieSettingsTest, IsPrivacyModeEnabled) {
   base::HistogramTester histogram_tester;
   CookieSettings settings;
   settings.set_block_third_party_cookies(true);
@@ -545,7 +582,7 @@
   base::test::ScopedFeatureList features_;
 };
 
-TEST_F(SamePartyCookieSettingsTest, IsPrivacyModeEnabled) {
+TEST_P(SamePartyCookieSettingsTest, IsPrivacyModeEnabled) {
   base::HistogramTester histogram_tester;
   CookieSettings settings;
   settings.set_block_third_party_cookies(true);
@@ -579,7 +616,7 @@
               IsEmpty());
 }
 
-TEST_F(CookieSettingsTest, IsCookieAccessible) {
+TEST_P(CookieSettingsTest, IsCookieAccessible) {
   base::HistogramTester histogram_tester;
   CookieSettings settings;
   settings.set_block_third_party_cookies(true);
@@ -621,7 +658,7 @@
               ElementsAre(base::Bucket(/*min=*/1, /*count=*/1)));
 }
 
-TEST_F(SamePartyCookieSettingsTest, IsCookieAccessible) {
+TEST_P(SamePartyCookieSettingsTest, IsCookieAccessible) {
   base::HistogramTester histogram_tester;
   CookieSettings settings;
   settings.set_block_third_party_cookies(true);
@@ -676,7 +713,7 @@
               ElementsAre(base::Bucket(/*min=*/0, /*count=*/1)));
 }
 
-TEST_F(CookieSettingsTest, IsCookieAccessible_PartitionedCookies) {
+TEST_P(CookieSettingsTest, IsCookieAccessible_PartitionedCookies) {
   CookieSettings settings;
   settings.set_block_third_party_cookies(true);
 
@@ -738,7 +775,7 @@
       url::Origin::Create(GURL(kOtherURL))));
 }
 
-TEST_F(CookieSettingsTest, AnnotateAndMoveUserBlockedCookies) {
+TEST_P(CookieSettingsTest, AnnotateAndMoveUserBlockedCookies) {
   base::HistogramTester histogram_tester;
   CookieSettings settings;
   settings.set_block_third_party_cookies(true);
@@ -796,7 +833,7 @@
               ElementsAre(base::Bucket(/*min=*/1, /*count=*/1)));
 }
 
-TEST_F(SamePartyCookieSettingsTest, AnnotateAndMoveUserBlockedCookies) {
+TEST_P(SamePartyCookieSettingsTest, AnnotateAndMoveUserBlockedCookies) {
   base::HistogramTester histogram_tester;
   CookieSettings settings;
   settings.set_block_third_party_cookies(true);
@@ -898,7 +935,7 @@
 
 }  // namespace
 
-TEST_F(CookieSettingsTest,
+TEST_P(CookieSettingsTest,
        AnnotateAndMoveUserBlockedCookies_PartitionedCookies) {
   CookieSettings settings;
 
@@ -1004,5 +1041,10 @@
                       _, _, _))));
 }
 
+INSTANTIATE_TEST_SUITE_P(/* no prefix */, CookieSettingsTest, testing::Bool());
+INSTANTIATE_TEST_SUITE_P(/* no prefix */,
+                         SamePartyCookieSettingsTest,
+                         testing::Bool());
+
 }  // namespace
 }  // namespace network
diff --git a/services/network/cors/preflight_result.cc b/services/network/cors/preflight_result.cc
index f78671da..df296a2 100644
--- a/services/network/cors/preflight_result.cc
+++ b/services/network/cors/preflight_result.cc
@@ -154,7 +154,7 @@
 
   // This should be consistent with `NetworkServiceCorsPreflightMethodAllowed`
   // in `tools/metrics/histograms/enums.xml`.
-  enum CorsPreflightMethodAllowed {
+  enum CorsPreflightMethodAllowed : uint8_t {
     kBothDisallowed = 0,
     kNormalizedMethodAllowed = 1,
     kMethodAllowed = 2,
diff --git a/services/network/network_service_network_delegate.cc b/services/network/network_service_network_delegate.cc
index 5f3bf3a..b807b5c 100644
--- a/services/network/network_service_network_delegate.cc
+++ b/services/network/network_service_network_delegate.cc
@@ -280,7 +280,8 @@
     const url::Origin& origin) const {
   return network_context_->cookie_manager()
       ->cookie_settings()
-      .IsFullCookieAccessAllowed(origin.GetURL(), origin.GetURL());
+      .IsFullCookieAccessAllowed(origin.GetURL(), origin.GetURL(),
+                                 QueryReason::kSiteStorage);
 }
 
 void NetworkServiceNetworkDelegate::OnCanSendReportingReports(
@@ -312,7 +313,8 @@
     const GURL& endpoint) const {
   return network_context_->cookie_manager()
       ->cookie_settings()
-      .IsFullCookieAccessAllowed(origin.GetURL(), origin.GetURL());
+      .IsFullCookieAccessAllowed(origin.GetURL(), origin.GetURL(),
+                                 QueryReason::kSiteStorage);
 }
 
 bool NetworkServiceNetworkDelegate::OnCanUseReportingClient(
@@ -320,7 +322,8 @@
     const GURL& endpoint) const {
   return network_context_->cookie_manager()
       ->cookie_settings()
-      .IsFullCookieAccessAllowed(origin.GetURL(), origin.GetURL());
+      .IsFullCookieAccessAllowed(origin.GetURL(), origin.GetURL(),
+                                 QueryReason::kSiteStorage);
 }
 
 int NetworkServiceNetworkDelegate::HandleClearSiteDataHeader(
diff --git a/services/network/network_service_network_delegate.h b/services/network/network_service_network_delegate.h
index f463804d..e6f7fab 100644
--- a/services/network/network_service_network_delegate.h
+++ b/services/network/network_service_network_delegate.h
@@ -45,6 +45,7 @@
   }
 
  private:
+  using QueryReason = CookieSettings::QueryReason;
   // net::NetworkDelegateImpl implementation.
   int OnBeforeURLRequest(net::URLRequest* request,
                          net::CompletionOnceCallback callback,
diff --git a/services/network/public/cpp/client_hints_fuzzer.cc b/services/network/public/cpp/client_hints_fuzzer.cc
index 929b644..74b4708 100644
--- a/services/network/public/cpp/client_hints_fuzzer.cc
+++ b/services/network/public/cpp/client_hints_fuzzer.cc
@@ -13,6 +13,8 @@
   base::AtExitManager at_exit_manager;
 };
 
+Environment* environment = new Environment();
+
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   const std::string test_data(reinterpret_cast<const char*>(data), size);
   network::ParseClientHintToDelegatedThirdPartiesHeader(
diff --git a/services/network/restricted_cookie_manager.cc b/services/network/restricted_cookie_manager.cc
index e0beb30..2217606 100644
--- a/services/network/restricted_cookie_manager.cc
+++ b/services/network/restricted_cookie_manager.cc
@@ -865,7 +865,8 @@
   }
 
   std::move(callback).Run(cookie_settings_.IsFullCookieAccessAllowed(
-      url, site_for_cookies, top_frame_origin));
+      url, site_for_cookies, top_frame_origin,
+      CookieSettings::QueryReason::kCookies));
 }
 
 void RestrictedCookieManager::RemoveChangeListener(Listener* listener) {
diff --git a/services/tracing/public/cpp/perfetto/flow_event_utils.h b/services/tracing/public/cpp/perfetto/flow_event_utils.h
index de5694d..0295dee 100644
--- a/services/tracing/public/cpp/perfetto/flow_event_utils.h
+++ b/services/tracing/public/cpp/perfetto/flow_event_utils.h
@@ -22,7 +22,7 @@
 // TODO(b/147673438): Change to the new model flow events when finalized
 void COMPONENT_EXPORT(TRACING_CPP) FillFlowEvent(
     const perfetto::EventContext&,
-    perfetto::protos::pbzero::TrackEvent_LegacyEvent_FlowDirection,
+    perfetto::protos::pbzero::TrackEvent::LegacyEvent::FlowDirection,
     uint64_t bind_id);
 
 }  // namespace tracing
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index 1982e586..02a87cf 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5750,21 +5750,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5209.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -5777,7 +5777,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "isolate_profile_data": true,
@@ -5915,21 +5915,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5209.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -5941,7 +5941,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "args": [
@@ -6061,21 +6061,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5209.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -6087,7 +6087,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "isolate_profile_data": true,
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 7400cf6a..148c771 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -86193,21 +86193,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5209.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -86215,7 +86215,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "isolate_profile_data": true,
@@ -86328,28 +86328,28 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5209.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "args": [
@@ -86449,28 +86449,28 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5209.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "isolate_profile_data": true,
@@ -87808,20 +87808,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5209.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -87835,7 +87835,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "merge": {
@@ -87973,20 +87973,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5209.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -87999,7 +87999,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "args": [
@@ -88119,20 +88119,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5209.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -88145,7 +88145,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "merge": {
@@ -89641,20 +89641,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5209.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -89668,7 +89668,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "merge": {
@@ -89806,20 +89806,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5209.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -89832,7 +89832,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "args": [
@@ -89952,20 +89952,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5209.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -89978,7 +89978,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "merge": {
@@ -90713,20 +90713,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5209.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -90739,7 +90739,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       }
     ]
   },
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index f49ee81..01e44e5 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -9223,228 +9223,10 @@
     ]
   },
   "Mac FYI Experimental Release (Apple M1)": {
-    "gtest_tests": [
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "angle_unittests",
-        "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/",
-        "use_isolated_scripts_api": true
-      },
-      {
-        "args": [
-          "--enable-gpu",
-          "--test-launcher-bot-mode",
-          "--test-launcher-jobs=1",
-          "--gtest_filter=TabCaptureApiPixelTest.EndToEnd*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "tab_capture_end2end_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "browser_tests",
-        "test_id_prefix": "ninja://chrome/test:browser_tests/"
-      },
-      {
-        "args": [
-          "--use-cmd-decoder=passthrough",
-          "--use-gl=angle",
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "gl_tests_passthrough",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
-        },
-        "test": "gl_tests",
-        "test_id_prefix": "ninja://gpu:gl_tests/"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "gl_unittests",
-        "test_id_prefix": "ninja://ui/gl:gl_unittests/"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "gles2_conform_test",
-        "test_id_prefix": "ninja://gpu/gles2_conform_support:gles2_conform_test/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "gpu_unittests",
-        "test_id_prefix": "ninja://gpu:gpu_unittests/"
-      },
-      {
-        "args": [
-          "--gtest_filter=*Detection*",
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "services_unittests",
-        "test_id_prefix": "ninja://services:services_unittests/"
-      }
-    ],
     "isolated_scripts": [
       {
         "args": [
-          "context_lost",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "context_lost_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "gpu_process",
+          "noop_sleep",
           "--show-stdout",
           "--browser=release",
           "--passthrough",
@@ -9456,527 +9238,7 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "gpu_process_launch_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "hardware_accelerated_feature",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "hardware_accelerated_feature_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "info_collection",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
-          "--expected-vendor-id",
-          "106b",
-          "--expected-device-id",
-          "0"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "info_collection_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "maps",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
-          "--dont-restore-color-profile-after-test",
-          "--test-machine-name",
-          "${buildername}",
-          "--git-revision=${got_revision}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "maps_pixel_passthrough_test",
-        "precommit_args": [
-          "--gerrit-issue=${patch_issue}",
-          "--gerrit-patchset=${patch_set}",
-          "--buildbucket-id=${buildbucket_build_id}"
-        ],
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "mediapipe",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_higher_performance_gpu --use-cmd-decoder=passthrough --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "mediapipe_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "pixel",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
-          "--dont-restore-color-profile-after-test",
-          "--test-machine-name",
-          "${buildername}",
-          "--git-revision=${got_revision}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "pixel_skia_gold_passthrough_test",
-        "precommit_args": [
-          "--gerrit-issue=${patch_issue}",
-          "--gerrit-patchset=${patch_set}",
-          "--buildbucket-id=${buildbucket_build_id}"
-        ],
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "screenshot_sync",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
-          "--dont-restore-color-profile-after-test"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "screenshot_sync_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "trace_test",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "trace_test",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webcodecs",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webcodecs_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_gl_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 20
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=metal --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_metal_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 20
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_gl_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=metal --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_metal_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "arm64",
-              "display_attached": "1",
-              "mac_model": "Macmini9,1",
-              "os": "Mac-12",
-              "pool": "chromium.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 3
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=swiftshader --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--test-filter=conformance/rendering/gl-drawelements.html",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_swangle_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
+        "name": "noop_sleep_tests",
         "should_retry_with_patch": false,
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -9998,228 +9260,10 @@
     ]
   },
   "Mac FYI Experimental Release (Intel)": {
-    "gtest_tests": [
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "angle_unittests",
-        "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/",
-        "use_isolated_scripts_api": true
-      },
-      {
-        "args": [
-          "--enable-gpu",
-          "--test-launcher-bot-mode",
-          "--test-launcher-jobs=1",
-          "--gtest_filter=TabCaptureApiPixelTest.EndToEnd*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "tab_capture_end2end_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "browser_tests",
-        "test_id_prefix": "ninja://chrome/test:browser_tests/"
-      },
-      {
-        "args": [
-          "--use-cmd-decoder=passthrough",
-          "--use-gl=angle",
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "gl_tests_passthrough",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
-        },
-        "test": "gl_tests",
-        "test_id_prefix": "ninja://gpu:gl_tests/"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "gl_unittests",
-        "test_id_prefix": "ninja://ui/gl:gl_unittests/"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "gles2_conform_test",
-        "test_id_prefix": "ninja://gpu/gles2_conform_support:gles2_conform_test/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "gpu_unittests",
-        "test_id_prefix": "ninja://gpu:gpu_unittests/"
-      },
-      {
-        "args": [
-          "--gtest_filter=*Detection*:-FaceDetectionImplMacTest.ScanOneFace*",
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "services_unittests",
-        "test_id_prefix": "ninja://services:services_unittests/"
-      }
-    ],
     "isolated_scripts": [
       {
         "args": [
-          "context_lost",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "context_lost_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "gpu_process",
+          "noop_sleep",
           "--show-stdout",
           "--browser=release",
           "--passthrough",
@@ -10231,527 +9275,7 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "gpu_process_launch_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "hardware_accelerated_feature",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "hardware_accelerated_feature_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "info_collection",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
-          "--expected-vendor-id",
-          "8086",
-          "--expected-device-id",
-          "3e9b"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "info_collection_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "maps",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
-          "--dont-restore-color-profile-after-test",
-          "--test-machine-name",
-          "${buildername}",
-          "--git-revision=${got_revision}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "maps_pixel_passthrough_test",
-        "precommit_args": [
-          "--gerrit-issue=${patch_issue}",
-          "--gerrit-patchset=${patch_set}",
-          "--buildbucket-id=${buildbucket_build_id}"
-        ],
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "mediapipe",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_higher_performance_gpu --use-cmd-decoder=passthrough --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "mediapipe_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "pixel",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
-          "--dont-restore-color-profile-after-test",
-          "--test-machine-name",
-          "${buildername}",
-          "--git-revision=${got_revision}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "pixel_skia_gold_passthrough_test",
-        "precommit_args": [
-          "--gerrit-issue=${patch_issue}",
-          "--gerrit-patchset=${patch_set}",
-          "--buildbucket-id=${buildbucket_build_id}"
-        ],
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "screenshot_sync",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
-          "--dont-restore-color-profile-after-test"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "screenshot_sync_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "trace_test",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "trace_test",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webcodecs",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webcodecs_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_gl_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 20
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=metal --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_metal_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 20
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_gl_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=metal --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_metal_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "8086:3e9b",
-              "os": "Mac-12.4"
-            }
-          ],
-          "expiration": 21600,
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 3
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=swiftshader --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--test-filter=conformance/rendering/gl-drawelements.html",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_swangle_passthrough_tests",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
+        "name": "noop_sleep_tests",
         "should_retry_with_patch": false,
         "swarming": {
           "can_use_on_swarming_builders": true,
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index c97e2f10..c7cdb0c9 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -20865,21 +20865,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5209.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -20892,7 +20892,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "isolate_profile_data": true,
@@ -21030,21 +21030,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5209.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -21056,7 +21056,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "args": [
@@ -21176,21 +21176,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5209.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5213.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v106.0.5209.0",
-              "revision": "version:106.0.5209.0"
+              "location": "lacros_version_skew_tests_v106.0.5213.0",
+              "revision": "version:106.0.5213.0"
             }
           ],
           "dimension_sets": [
@@ -21202,7 +21202,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 106.0.5209.0"
+        "variant_id": "Lacros version skew testing ash 106.0.5213.0"
       },
       {
         "isolate_profile_data": true,
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 3b3623a..9468a765 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -22,15 +22,15 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5209.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5213.0/test_ash_chrome',
     ],
-    'identifier': 'Lacros version skew testing ash 106.0.5209.0',
+    'identifier': 'Lacros version skew testing ash 106.0.5213.0',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v106.0.5209.0',
-          'revision': 'version:106.0.5209.0',
+          'location': 'lacros_version_skew_tests_v106.0.5213.0',
+          'revision': 'version:106.0.5213.0',
         },
       ],
     },
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 39b3d4e..778ad93 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -4556,8 +4556,7 @@
         # the gpu_noop_sleep_telemetry_test test should be used. Otherwise, this
         # should have the same test_suites as 'Mac FYI Release (Apple M1)'.
         'test_suites': {
-          'gtest_tests': 'gpu_fyi_mac_release_gtests',
-          'gpu_telemetry_tests': 'gpu_fyi_mac_release_telemetry_tests',
+          'gpu_telemetry_tests': 'gpu_noop_sleep_telemetry_test',
         },
       },
       'Mac FYI Experimental Release (Intel)': {
@@ -4571,8 +4570,7 @@
         # the gpu_noop_sleep_telemetry_test test should be used. Otherwise, this
         # should have the same test_suites as 'Mac FYI Release (Intel)'.
         'test_suites': {
-          'gtest_tests': 'gpu_fyi_mac_release_gtests',
-          'gpu_telemetry_tests': 'gpu_fyi_mac_release_telemetry_tests',
+          'gpu_telemetry_tests': 'gpu_noop_sleep_telemetry_test',
         },
       },
       'Mac FYI Experimental Retina Release (AMD)': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 312cfb7..12a11c4 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -5512,31 +5512,6 @@
             ]
         }
     ],
-    "JourneysKeywordFiltering": [
-        {
-            "platforms": [
-                "chromeos",
-                "chromeos_lacros",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled_20220502",
-                    "params": {
-                        "keyword_filter_on_categories": "false",
-                        "keyword_filter_on_entity_aliases": "true",
-                        "keyword_filter_on_noisy_visits": "false",
-                        "max_entity_aliases_in_keywords": "5"
-                    },
-                    "enable_features": [
-                        "JourneysKeywordFiltering"
-                    ]
-                }
-            ]
-        }
-    ],
     "KeyPinningAndroid": [
         {
             "platforms": [
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index 28fcb0c..298a562 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -705,6 +705,7 @@
       InvalidHeader
       InvalidRegisterTriggerHeader
       InvalidEligibleHeader
+      TooManyConcurrentRequests
 
   # Details for issues around "Attribution Reporting API" usage.
   # Explainer: https://github.com/WICG/attribution-reporting-api
diff --git a/third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom b/third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom
index 9f7f2f8..6fb4697 100644
--- a/third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom
+++ b/third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom
@@ -94,7 +94,7 @@
   BLOCKLISTED_WRITE,
   NOT_ALLOWED_TO_ACCESS_ANY_SERVICE,
   NOT_ALLOWED_TO_ACCESS_SERVICE,
-  REQUEST_DEVICE_WITH_BLOCKLISTED_UUID,
+  REQUEST_DEVICE_WITH_BLOCKLISTED_UUID_OR_MANUFACTURER_DATA,
   DESCRIPTOR_NO_LONGER_EXISTS,
   PERMISSIONS_POLICY_VIOLATION,
   // NotAllowedError:
diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h
index 2c24abb..d8935b6 100644
--- a/third_party/blink/public/platform/web_runtime_features.h
+++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -99,6 +99,7 @@
   BLINK_PLATFORM_EXPORT static void EnableDecodeJpeg420ImagesToYUV(bool);
   BLINK_PLATFORM_EXPORT static void EnableDecodeLossyWebPImagesToYUV(bool);
   BLINK_PLATFORM_EXPORT static void EnableDevicePosture(bool enable);
+  BLINK_PLATFORM_EXPORT static void EnableDocumentPictureInPictureAPI(bool);
   BLINK_PLATFORM_EXPORT static void EnableRemoveMobileViewportDoubleTap(
       bool enable);
   BLINK_PLATFORM_EXPORT static void EnableZeroCopyTabCapture(bool enable);
@@ -138,7 +139,6 @@
   BLINK_PLATFORM_EXPORT static void EnablePermissionsAPI(bool);
   BLINK_PLATFORM_EXPORT static void EnablePictureInPicture(bool);
   BLINK_PLATFORM_EXPORT static void EnablePictureInPictureAPI(bool);
-  BLINK_PLATFORM_EXPORT static void EnablePictureInPictureV2(bool);
   BLINK_PLATFORM_EXPORT static void EnablePointerLockOptions(bool);
   BLINK_PLATFORM_EXPORT static void EnablePortals(bool);
   BLINK_PLATFORM_EXPORT static bool IsPortalsEnabled();
diff --git a/third_party/blink/renderer/core/css/parser/css_property_parser_test.cc b/third_party/blink/renderer/core/css/parser/css_property_parser_test.cc
index 073ae87..9e2a766 100644
--- a/third_party/blink/renderer/core/css/parser/css_property_parser_test.cc
+++ b/third_party/blink/renderer/core/css/parser/css_property_parser_test.cc
@@ -195,7 +195,7 @@
       CSSPropertyID::kGridTemplateColumns,
       "repeat(100000000000000000000, 10% 1fr)",
       StrictCSSParserContext(SecureContextMode::kSecureContext));
-  EXPECT_EQ(ComputeNumberOfTracks(To<CSSValueList>(value)), INT_MAX - 1);
+  EXPECT_EQ(ComputeNumberOfTracks(To<CSSValueList>(value)), 10000000);
 }
 
 TEST(CSSPropertyParserTest, GridTrackLimit14) {
@@ -203,7 +203,7 @@
       CSSPropertyID::kGridTemplateRows,
       "repeat(100000000000000000000, 10% 1fr)",
       StrictCSSParserContext(SecureContextMode::kSecureContext));
-  EXPECT_EQ(ComputeNumberOfTracks(To<CSSValueList>(value)), INT_MAX - 1);
+  EXPECT_EQ(ComputeNumberOfTracks(To<CSSValueList>(value)), 10000000);
 }
 
 TEST(CSSPropertyParserTest, GridTrackLimit15) {
@@ -211,7 +211,7 @@
       CSSPropertyID::kGridTemplateColumns,
       "repeat(100000000000000000000, 10% 5em 1fr auto auto 15px min-content)",
       StrictCSSParserContext(SecureContextMode::kSecureContext));
-  EXPECT_EQ(ComputeNumberOfTracks(To<CSSValueList>(value)), INT_MAX - 1);
+  EXPECT_EQ(ComputeNumberOfTracks(To<CSSValueList>(value)), 9999997);
 }
 
 TEST(CSSPropertyParserTest, GridTrackLimit16) {
@@ -219,7 +219,7 @@
       CSSPropertyID::kGridTemplateRows,
       "repeat(100000000000000000000, 10% 5em 1fr auto auto 15px min-content)",
       StrictCSSParserContext(SecureContextMode::kSecureContext));
-  EXPECT_EQ(ComputeNumberOfTracks(To<CSSValueList>(value)), INT_MAX - 1);
+  EXPECT_EQ(ComputeNumberOfTracks(To<CSSValueList>(value)), 9999997);
 }
 
 static int GetGridPositionInteger(const CSSValue& value) {
@@ -259,7 +259,7 @@
       CSSPropertyID::kGridRowEnd, "5000000000",
       StrictCSSParserContext(SecureContextMode::kSecureContext));
   DCHECK(value);
-  EXPECT_EQ(GetGridPositionInteger(*value), INT_MAX - 1);
+  EXPECT_EQ(GetGridPositionInteger(*value), 10000000);
 }
 
 TEST(CSSPropertyParserTest, GridPositionLimit5) {
@@ -291,7 +291,7 @@
       CSSPropertyID::kGridRowEnd, "-5000000000",
       StrictCSSParserContext(SecureContextMode::kSecureContext));
   DCHECK(value);
-  EXPECT_EQ(GetGridPositionInteger(*value), 1 - INT_MAX);
+  EXPECT_EQ(GetGridPositionInteger(*value), -10000000);
 }
 
 TEST(CSSPropertyParserTest, ColorFunction) {
diff --git a/third_party/blink/renderer/core/execution_context/navigator_base.cc b/third_party/blink/renderer/core/execution_context/navigator_base.cc
index 0d746592..cb996c47 100644
--- a/third_party/blink/renderer/core/execution_context/navigator_base.cc
+++ b/third_party/blink/renderer/core/execution_context/navigator_base.cc
@@ -20,6 +20,26 @@
 
 namespace blink {
 
+namespace {
+
+String GetReducedNavigatorPlatform() {
+#if BUILDFLAG(IS_ANDROID)
+  return "Linux armv81";
+#elif BUILDFLAG(IS_MAC)
+  return "MacIntel";
+#elif BUILDFLAG(IS_WIN)
+  return "Win32";
+#elif BUILDFLAG(IS_FUCHSIA)
+  return "";
+#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+  return "Linux x86_64";
+#else
+#error Unsupported platform
+#endif
+}
+
+}  // namespace
+
 NavigatorBase::NavigatorBase(ExecutionContext* context)
     : NavigatorLanguage(context), ExecutionContextClient(context) {}
 
@@ -49,17 +69,18 @@
   // matching the frozen string per https://github.com/WICG/ua-client-hints.
   // See content::frozen_user_agent_strings.
   if (RuntimeEnabledFeatures::UserAgentReductionEnabled(execution_context)) {
-#if BUILDFLAG(IS_ANDROID)
-    return "Linux armv81";
-#elif BUILDFLAG(IS_MAC)
-    return "MacIntel";
-#elif BUILDFLAG(IS_WIN)
-    return "Win32";
-#else
-    return "Linux x86_64";
-#endif
+    return GetReducedNavigatorPlatform();
   }
 
+// For user-agent reduction phase 5, all desktop platform should be frozen
+// string, see https://www.chromium.org/updates/ua-reduction/.
+#if !BUILDFLAG(IS_ANDROID)
+  if (RuntimeEnabledFeatures::ReduceUserAgentPlatformOsCpuEnabled(
+          execution_context)) {
+    return GetReducedNavigatorPlatform();
+  }
+#endif
+
   return NavigatorID::platform();
 }
 
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc
index 10755e0..5f973720 100644
--- a/third_party/blink/renderer/core/exported/web_view_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -389,7 +389,7 @@
     case kNavigationPolicyNewPopup:
       return ui::mojom::blink::WindowOpenDisposition::NEW_POPUP;
     case kNavigationPolicyPictureInPicture:
-      DCHECK(RuntimeEnabledFeatures::PictureInPictureV2Enabled());
+      DCHECK(RuntimeEnabledFeatures::DocumentPictureInPictureAPIEnabled());
       return ui::mojom::blink::WindowOpenDisposition::NEW_PICTURE_IN_PICTURE;
   }
   NOTREACHED() << "Unexpected NavigationPolicy";
diff --git a/third_party/blink/renderer/core/frame/attribution_src_loader.cc b/third_party/blink/renderer/core/frame/attribution_src_loader.cc
index 319ea0a..c1b0cc2 100644
--- a/third_party/blink/renderer/core/frame/attribution_src_loader.cc
+++ b/third_party/blink/renderer/core/frame/attribution_src_loader.cc
@@ -171,10 +171,17 @@
                              uint64_t request_id);
 
  private:
-  void HandleSourceRegistration(const ResourceResponse& response,
-                                uint64_t request_id);
-  void HandleTriggerRegistration(const ResourceResponse& response,
-                                 uint64_t request_id);
+  [[nodiscard]] bool CheckReportingOrigin(
+      const SecurityOrigin& reporting_origin,
+      uint64_t request_id);
+  void HandleSourceRegistration(
+      const AtomicString& json,
+      scoped_refptr<const SecurityOrigin> reporting_origin,
+      uint64_t request_id);
+  void HandleTriggerRegistration(
+      const AtomicString& json,
+      scoped_refptr<const SecurityOrigin> reporting_origin,
+      uint64_t request_id);
 
   // RawResourceClient:
   String DebugName() const override;
@@ -244,8 +251,15 @@
   if (!local_frame_->IsAttached())
     return nullptr;
 
-  if (num_resource_clients_ >= kMaxConcurrentRequests)
+  LocalDOMWindow* window = local_frame_->DomWindow();
+
+  if (num_resource_clients_ >= kMaxConcurrentRequests) {
+    LogAuditIssue(
+        window, AttributionReportingIssueType::kTooManyConcurrentRequests,
+        element, /*request_id=*/absl::nullopt,
+        /*invalid_parameter=*/AtomicString::Number(kMaxConcurrentRequests));
     return nullptr;
+  }
 
   if (!src_url.ProtocolIsInHTTPFamily())
     return nullptr;
@@ -255,7 +269,6 @@
     return nullptr;
   }
 
-  LocalDOMWindow* window = local_frame_->DomWindow();
   Document* document = window->document();
 
   if (document->IsPrerendering()) {
@@ -493,53 +506,69 @@
 void AttributionSrcLoader::ResourceClient::HandleResponseHeaders(
     const ResourceResponse& response,
     uint64_t request_id) {
+  scoped_refptr<const SecurityOrigin> reporting_origin =
+      SecurityOrigin::Create(response.CurrentRequestUrl());
+
   const auto& headers = response.HttpHeaderFields();
 
-  bool can_process_source =
-      type_ == SrcType::kUndetermined || type_ == SrcType::kSource;
-  if (can_process_source &&
-      headers.Contains(http_names::kAttributionReportingRegisterSource)) {
-    type_ = SrcType::kSource;
-    HandleSourceRegistration(response, request_id);
-    return;
-  }
+  // TODO(apaseltiner): Report a DevTools issue when `type_` and `headers` do
+  // not correspond correctly.
 
   // TODO(johnidel): Consider surfacing an error when source and trigger headers
   // are present together.
-  bool can_process_trigger =
-      type_ == SrcType::kUndetermined || type_ == SrcType::kTrigger;
-  if (can_process_trigger &&
-      headers.Contains(http_names::kAttributionReportingRegisterTrigger)) {
-    type_ = SrcType::kTrigger;
-    HandleTriggerRegistration(response, request_id);
+
+  if (type_ == SrcType::kUndetermined || type_ == SrcType::kSource) {
+    const AtomicString& json =
+        headers.Get(http_names::kAttributionReportingRegisterSource);
+    if (!json.IsNull()) {
+      type_ = SrcType::kSource;
+      HandleSourceRegistration(json, std::move(reporting_origin), request_id);
+      return;
+    }
+  }
+
+  if (type_ == SrcType::kUndetermined || type_ == SrcType::kTrigger) {
+    const AtomicString& json =
+        headers.Get(http_names::kAttributionReportingRegisterTrigger);
+    if (!json.IsNull()) {
+      type_ = SrcType::kTrigger;
+      HandleTriggerRegistration(json, std::move(reporting_origin), request_id);
+    }
   }
 }
 
+bool AttributionSrcLoader::ResourceClient::CheckReportingOrigin(
+    const SecurityOrigin& reporting_origin,
+    uint64_t request_id) {
+  if (reporting_origin.IsPotentiallyTrustworthy())
+    return true;
+
+  LogAuditIssue(loader_->local_frame_->DomWindow(),
+                AttributionReportingIssueType::kUntrustworthyReportingOrigin,
+                /*element=*/nullptr, request_id,
+                /*invalid_parameter=*/reporting_origin.ToString());
+  return false;
+}
+
 void AttributionSrcLoader::ResourceClient::HandleSourceRegistration(
-    const ResourceResponse& response,
+    const AtomicString& json,
+    scoped_refptr<const SecurityOrigin> reporting_origin,
     uint64_t request_id) {
   DCHECK_EQ(type_, SrcType::kSource);
 
-  mojom::blink::AttributionSourceDataPtr source_data =
-      mojom::blink::AttributionSourceData::New();
-
-  // Verify the current url is trustworthy and capable of registering sources.
-  scoped_refptr<const SecurityOrigin> reporting_origin =
-      SecurityOrigin::Create(response.CurrentRequestUrl());
-  // TODO(apaseltiner): Report DevTools issue if this fails.
-  if (!reporting_origin->IsPotentiallyTrustworthy())
+  if (!CheckReportingOrigin(*reporting_origin, request_id))
     return;
+
+  auto source_data = mojom::blink::AttributionSourceData::New();
+
   source_data->reporting_origin = std::move(reporting_origin);
 
-  const AtomicString& source_json =
-      response.HttpHeaderField(http_names::kAttributionReportingRegisterSource);
-
   if (!attribution_response_parsing::ParseSourceRegistrationHeader(
-          source_json, *source_data)) {
+          json, *source_data)) {
     LogAuditIssue(loader_->local_frame_->DomWindow(),
                   AttributionReportingIssueType::kInvalidRegisterSourceHeader,
                   /*element=*/nullptr, request_id,
-                  /*invalid_parameter=*/source_json);
+                  /*invalid_parameter=*/json);
     return;
   }
 
@@ -547,28 +576,24 @@
 }
 
 void AttributionSrcLoader::ResourceClient::HandleTriggerRegistration(
-    const ResourceResponse& response,
+    const AtomicString& json,
+    scoped_refptr<const SecurityOrigin> reporting_origin,
     uint64_t request_id) {
   DCHECK_EQ(type_, SrcType::kTrigger);
 
+  if (!CheckReportingOrigin(*reporting_origin, request_id))
+    return;
+
   auto trigger_data = mojom::blink::AttributionTriggerData::New();
 
-  // Verify the current url is trustworthy and capable of registering triggers.
-  scoped_refptr<const SecurityOrigin> reporting_origin =
-      SecurityOrigin::Create(response.CurrentRequestUrl());
-  // TODO(apaseltiner): Report DevTools issue if this fails.
-  if (!reporting_origin->IsPotentiallyTrustworthy())
-    return;
   trigger_data->reporting_origin = std::move(reporting_origin);
 
-  const AtomicString& trigger_json = response.HttpHeaderField(
-      http_names::kAttributionReportingRegisterTrigger);
   if (!attribution_response_parsing::ParseTriggerRegistrationHeader(
-          trigger_json, *trigger_data)) {
+          json, *trigger_data)) {
     LogAuditIssue(loader_->local_frame_->DomWindow(),
                   AttributionReportingIssueType::kInvalidRegisterTriggerHeader,
                   /*element=*/nullptr, request_id,
-                  /*invalid_parameter=*/trigger_json);
+                  /*invalid_parameter=*/json);
     return;
   }
 
diff --git a/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.cc b/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.cc
index 6126582..d807e4c8 100644
--- a/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.cc
+++ b/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.cc
@@ -230,6 +230,18 @@
   DCHECK(RuntimeEnabledFeatures::FencedFramesEnabled(
       outer_element->GetExecutionContext()));
 
+  // If the frame embedding a fenced frame is a detached frame, the execution
+  // context will be null. That makes it impossible to check the sandbox flags,
+  // so delegate creation is stopped if that is the case.
+  if (!outer_element->GetExecutionContext()) {
+    outer_element->GetDocument().AddConsoleMessage(
+        MakeGarbageCollected<ConsoleMessage>(
+            mojom::blink::ConsoleMessageSource::kJavaScript,
+            mojom::blink::ConsoleMessageLevel::kWarning,
+            "Can't create a fenced frame in a detached frame."));
+    return nullptr;
+  }
+
   // If the element has been disconnected by the time we attempt to create the
   // delegate (eg, due to deferral while prerendering), we should not create the
   // delegate.
diff --git a/third_party/blink/renderer/core/html/html_frame_set_element.cc b/third_party/blink/renderer/core/html/html_frame_set_element.cc
index 3ef596e..4af639d 100644
--- a/third_party/blink/renderer/core/html/html_frame_set_element.cc
+++ b/third_party/blink/renderer/core/html/html_frame_set_element.cc
@@ -78,12 +78,20 @@
       row_lengths_ = ParseListOfDimensions(value.GetString());
       SetNeedsStyleRecalc(kSubtreeStyleChange,
                           StyleChangeReasonForTracing::FromAttribute(name));
+      if (GetLayoutObject() && TotalRows() != resize_rows_.deltas_.size()) {
+        resize_rows_.Resize(TotalRows());
+        resize_cols_.Resize(TotalCols());
+      }
     }
   } else if (name == html_names::kColsAttr) {
     if (!value.IsNull()) {
       col_lengths_ = ParseListOfDimensions(value.GetString());
       SetNeedsStyleRecalc(kSubtreeStyleChange,
                           StyleChangeReasonForTracing::FromAttribute(name));
+      if (GetLayoutObject() && TotalCols() != resize_cols_.deltas_.size()) {
+        resize_rows_.Resize(TotalRows());
+        resize_cols_.Resize(TotalCols());
+      }
     }
   } else if (name == html_names::kFrameborderAttr) {
     if (!value.IsNull()) {
@@ -258,8 +266,8 @@
 
   HTMLElement::AttachLayoutTree(context);
   is_resizing_ = false;
-  resize_cols_.split_being_resized_ = ResizeAxis::kNoSplit;
-  resize_rows_.split_being_resized_ = ResizeAxis::kNoSplit;
+  resize_rows_.Resize(TotalRows());
+  resize_cols_.Resize(TotalCols());
 }
 
 void HTMLFrameSetElement::DefaultEventHandler(Event& evt) {
@@ -359,8 +367,8 @@
       (position - current_split_position) - resize_axis.split_resize_offset_;
   if (!delta)
     return;
-  axis.deltas_[resize_axis.split_being_resized_ - 1] += delta;
-  axis.deltas_[resize_axis.split_being_resized_] -= delta;
+  resize_axis.deltas_[resize_axis.split_being_resized_ - 1] += delta;
+  resize_axis.deltas_[resize_axis.split_being_resized_] -= delta;
   GetLayoutObject()->SetNeedsLayoutAndFullPaintInvalidation(
       layout_invalidation_reason::kSizeChanged);
 }
@@ -417,4 +425,10 @@
   return ResizeAxis::kNoSplit;
 }
 
+void HTMLFrameSetElement::ResizeAxis::Resize(wtf_size_t number_of_frames) {
+  deltas_.resize(number_of_frames);
+  deltas_.Fill(0);
+  split_being_resized_ = kNoSplit;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_frame_set_element.h b/third_party/blink/renderer/core/html/html_frame_set_element.h
index 603128a..b34f378 100644
--- a/third_party/blink/renderer/core/html/html_frame_set_element.h
+++ b/third_party/blink/renderer/core/html/html_frame_set_element.h
@@ -58,6 +58,8 @@
 
   const Vector<HTMLDimension>& RowLengths() const { return row_lengths_; }
   const Vector<HTMLDimension>& ColLengths() const { return col_lengths_; }
+  const Vector<int>& RowDeltas() const { return resize_rows_.deltas_; }
+  const Vector<int>& ColDeltas() const { return resize_cols_.deltas_; }
 
   bool HasNonInBodyInsertionMode() const override { return true; }
 
@@ -97,11 +99,13 @@
     ResizeAxis(const ResizeAxis&) = delete;
     ResizeAxis& operator=(const ResizeAxis&) = delete;
 
+    void Resize(wtf_size_t number_of_frames);
     // Returns true if a split is being resized now.
     bool IsResizingSplit() const { return split_being_resized_ != kNoSplit; }
 
     static constexpr int kNoSplit = -1;
 
+    Vector<int> deltas_;
     int split_being_resized_ = kNoSplit;
     int split_resize_offset_;
   };
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc
index 2b02349..79ee14069 100644
--- a/third_party/blink/renderer/core/html/media/html_media_element.cc
+++ b/third_party/blink/renderer/core/html/media/html_media_element.cc
@@ -605,8 +605,9 @@
   // media element to a new document. This is a work in progress, and may cause
   // security and/or stability issues.
   const bool reuse_player =
-      RuntimeEnabledFeatures::PictureInPictureV2Enabled() && new_origin &&
-      old_origin && old_origin->IsSameOriginWith(new_origin.get());
+      RuntimeEnabledFeatures::DocumentPictureInPictureAPIEnabled() &&
+      new_origin && old_origin &&
+      old_origin->IsSameOriginWith(new_origin.get());
   if (!reuse_player) {
     // Don't worry about notifications from any previous document if we're not
     // re-using the player.
diff --git a/third_party/blink/renderer/core/html/media/html_media_element_test.cc b/third_party/blink/renderer/core/html/media/html_media_element_test.cc
index 782bc21..9878f3a8 100644
--- a/third_party/blink/renderer/core/html/media/html_media_element_test.cc
+++ b/third_party/blink/renderer/core/html/media/html_media_element_test.cc
@@ -1206,8 +1206,8 @@
 TEST_P(HTMLMediaElementTest,
        DestroyMediaPlayerWhenSwitchingSameOriginDocumentsIfReuseIsNotEnabled) {
   // Ensure that the WebMediaPlayer is destroyed when moving to a same-origin
-  // document, if `kPictureInPictureV2` is not enabled.
-  ScopedPictureInPictureV2ForTest scoped_feature(false);
+  // document, if `kDocumentPictureInPictureAPI` is not enabled.
+  ScopedDocumentPictureInPictureAPIForTest scoped_feature(false);
   MoveElementAndTestPlayerDestruction("https://a.com", "https://a.com",
                                       /*should_destroy=*/true);
 }
@@ -1216,8 +1216,8 @@
     HTMLMediaElementTest,
     DestroyMediaPlayerWhenSwitchingDifferentOriginDocumentsIfReuseIsNotEnabled) {
   // Ensure that the WebMediaPlayer is destroyed when moving to a new origin
-  // document, if `kPictureInPictureV2` is not enabled.
-  ScopedPictureInPictureV2ForTest scoped_feature(false);
+  // document, if `kDocumentPictureInPictureAPI` is not enabled.
+  ScopedDocumentPictureInPictureAPIForTest scoped_feature(false);
   MoveElementAndTestPlayerDestruction("https://a.com", "https://b.com",
                                       /*should_destroy=*/true);
 }
@@ -1226,9 +1226,9 @@
     HTMLMediaElementTest,
     DoNotDestroyMediaPlayerWhenSwitchingSameOriginDocumentsIfReuseIsEnabled) {
   // Ensure that the WebMediaPlayer is re-used when moving to a same-origin
-  // document, if `kPictureInPictureV2` is enabled.
+  // document, if `kDocumentPictureInPictureAPI` is enabled.
   ScopedPictureInPictureAPIForTest scoped_dependency(true);
-  ScopedPictureInPictureV2ForTest scoped_feature(true);
+  ScopedDocumentPictureInPictureAPIForTest scoped_feature(true);
   MoveElementAndTestPlayerDestruction("https://a.com", "https://a.com",
                                       /*should_destroy=*/false);
 }
@@ -1237,10 +1237,10 @@
     HTMLMediaElementTest,
     DestroyMediaPlayerWhenSwitchingDifferentOriginDocumentsIfReuseIsEnabled) {
   // Ensure that the WebMediaPlayer is destroyed when moving to a new origin
-  // document, if `kPictureInPictureV2` is enabled. Re-use should only occur if
-  // it's a same-origin document.
+  // document, if `kDocumentPictureInPictureAPI` is enabled. Re-use should only
+  // occur if it's a same-origin document.
   ScopedPictureInPictureAPIForTest scoped_dependency(true);
-  ScopedPictureInPictureV2ForTest scoped_feature(true);
+  ScopedDocumentPictureInPictureAPIForTest scoped_feature(true);
   MoveElementAndTestPlayerDestruction("https://a.com", "https://b.com",
                                       /*should_destroy=*/true);
 }
@@ -1250,7 +1250,7 @@
   // Ensure that the WebMediaPlayer is re-used, that navigating the opener away
   // causes the player to be destroyed.
   ScopedPictureInPictureAPIForTest scoped_dependency(true);
-  ScopedPictureInPictureV2ForTest scoped_feature(true);
+  ScopedDocumentPictureInPictureAPIForTest scoped_feature(true);
   const char* origin = "https://a.com";
   SetSecurityOrigin(origin);
   WaitForPlayer();
@@ -1265,7 +1265,7 @@
 TEST_P(HTMLMediaElementTest,
        CreateMediaPlayerAfterMovingElementUsesOpenerFrameIfReuseIsEnabled) {
   ScopedPictureInPictureAPIForTest scoped_dependency(true);
-  ScopedPictureInPictureV2ForTest scoped_feature(true);
+  ScopedDocumentPictureInPictureAPIForTest scoped_feature(true);
   // Move the element before creating the player.
   const char* origin = "https://a.com";
   SetSecurityOrigin(origin);
@@ -1280,7 +1280,7 @@
 
 TEST_P(HTMLMediaElementTest,
        CreateMediaPlayerAfterMovingElementUsesNewFrameIfReuseIsNotEnabled) {
-  ScopedPictureInPictureV2ForTest scoped_feature(false);
+  ScopedDocumentPictureInPictureAPIForTest scoped_feature(false);
   // Move the element before creating the player.
   const char* origin = "https://a.com";
   SetSecurityOrigin(origin);
diff --git a/third_party/blink/renderer/core/inspector/inspector_audits_issue.cc b/third_party/blink/renderer/core/inspector/inspector_audits_issue.cc
index b0a0cc5..2ea276e7 100644
--- a/third_party/blink/renderer/core/inspector/inspector_audits_issue.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_audits_issue.cc
@@ -157,6 +157,9 @@
     case AttributionReportingIssueType::kInvalidEligibleHeader:
       return protocol::Audits::AttributionReportingIssueTypeEnum::
           InvalidEligibleHeader;
+    case AttributionReportingIssueType::kTooManyConcurrentRequests:
+      return protocol::Audits::AttributionReportingIssueTypeEnum::
+          TooManyConcurrentRequests;
   }
 }
 
diff --git a/third_party/blink/renderer/core/inspector/inspector_audits_issue.h b/third_party/blink/renderer/core/inspector/inspector_audits_issue.h
index ef34c54..9e4b9eaf 100644
--- a/third_party/blink/renderer/core/inspector/inspector_audits_issue.h
+++ b/third_party/blink/renderer/core/inspector/inspector_audits_issue.h
@@ -110,6 +110,7 @@
   kInvalidRegisterSourceHeader,
   kInvalidRegisterTriggerHeader,
   kInvalidEligibleHeader,
+  kTooManyConcurrentRequests,
 };
 
 enum class SharedArrayBufferIssueType {
diff --git a/third_party/blink/renderer/core/layout/layout_frame_set.cc b/third_party/blink/renderer/core/layout/layout_frame_set.cc
index a939e31..a3f97ec 100644
--- a/third_party/blink/renderer/core/layout/layout_frame_set.cc
+++ b/third_party/blink/renderer/core/layout/layout_frame_set.cc
@@ -96,6 +96,7 @@
 
   available_len = max(available_len, 0);
 
+  DCHECK_EQ(axis.sizes_.size(), deltas.size());
   int* grid_layout = axis.sizes_.data();
 
   if (grid.IsEmpty()) {
@@ -387,16 +388,12 @@
 
   unsigned cols = FrameSet()->TotalCols();
   unsigned rows = FrameSet()->TotalRows();
-  Vector<int>& rows_deltas = rows_.deltas_;
-  Vector<int>& cols_deltas = cols_.deltas_;
+  const Vector<int>& rows_deltas = FrameSet()->RowDeltas();
+  const Vector<int>& cols_deltas = FrameSet()->ColDeltas();
 
   if (rows_.sizes_.size() != rows || cols_.sizes_.size() != cols) {
     rows_.Resize(rows);
-    rows_deltas.resize(rows);
-    rows_deltas.Fill(0);
     cols_.Resize(cols);
-    cols_deltas.resize(cols);
-    cols_deltas.Fill(0);
   }
 
   LayoutUnit border_thickness(FrameSet()->Border());
diff --git a/third_party/blink/renderer/core/layout/layout_frame_set.h b/third_party/blink/renderer/core/layout/layout_frame_set.h
index c610eed..b9e36b7 100644
--- a/third_party/blink/renderer/core/layout/layout_frame_set.h
+++ b/third_party/blink/renderer/core/layout/layout_frame_set.h
@@ -111,7 +111,6 @@
     bool CanResizeSplitAt(int split_index) const;
 
     Vector<int> sizes_;
-    Vector<int> deltas_;
     Vector<bool> prevent_resize_;
     Vector<bool> allow_border_;
   };
diff --git a/third_party/blink/renderer/core/style/grid_area.h b/third_party/blink/renderer/core/style/grid_area.h
index 169fdc3..dfb596a 100644
--- a/third_party/blink/renderer/core/style/grid_area.h
+++ b/third_party/blink/renderer/core/style/grid_area.h
@@ -46,7 +46,7 @@
 // Legacy grid expands out auto-repeaters, so it has a lower cap than GridNG.
 // Note that this actually allows a [-999,999] range.
 const int kLegacyGridMaxTracks = 1000;
-const int kGridMaxTracks = INT_MAX - 1;
+const int kGridMaxTracks = 10000000;
 
 // A span in a single direction (either rows or columns). Note that |start_line|
 // and |end_line| are grid lines' indexes.
diff --git a/third_party/blink/renderer/core/timing/OWNERS b/third_party/blink/renderer/core/timing/OWNERS
index 9e3a2546..a482016 100644
--- a/third_party/blink/renderer/core/timing/OWNERS
+++ b/third_party/blink/renderer/core/timing/OWNERS
@@ -1 +1,2 @@
+nrosenthal@chromium.org
 npm@chromium.org
diff --git a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
index f8208d4..5d132362 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
@@ -448,10 +448,12 @@
   DCHECK(initialized_);
 #endif
 
-  // All nodes must have an unignored parent within their tree under
-  // the root node of the web area, so force that node to always be unignored.
+  // All nodes must have an unignored parent within their tree under the root
+  // node of the main web area, so force that node to always be unignored.
+  // The web area for a <select>'s' popup document is ignored, because the
+  // popup object hierarchy is constructed without the document root.
   if (IsWebArea())
-    return false;
+    return CachedParentObject() && CachedParentObject()->IsMenuList();
 
   const Node* node = GetNode();
   if (IsA<HTMLHtmlElement>(node))
diff --git a/third_party/blink/renderer/modules/accessibility/ax_menu_list_popup.cc b/third_party/blink/renderer/modules/accessibility/ax_menu_list_popup.cc
index fa734a47..a28c9bb 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_menu_list_popup.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_menu_list_popup.cc
@@ -157,9 +157,8 @@
   }
 
   if (option_index >= 0 && option_index < static_cast<int>(children_.size())) {
-    AXObject* child = children_[option_index].Get();
-    cache.PostNotification(this, ax::mojom::Event::kChildrenChanged);
     cache.PostNotification(this, ax::mojom::Event::kActiveDescendantChanged);
+    AXObject* child = children_[option_index].Get();
     cache.MarkAXObjectDirtyWithCleanLayout(child);
   }
 }
@@ -168,10 +167,9 @@
   AXObjectCacheImpl& cache = AXObjectCache();
   AXObject* descendant = ActiveDescendant();
   cache.PostNotification(this, ax::mojom::Event::kHide);
-  if (descendant) {
+  if (descendant)
     cache.PostNotification(this, ax::mojom::Event::kChildrenChanged);
-    cache.MarkAXObjectDirtyWithCleanLayout(descendant);
-  }
+  cache.MarkAXSubtreeDirtyWithCleanLayout(ParentObject());
 }
 
 void AXMenuListPopup::DidShow() {
@@ -186,6 +184,7 @@
   } else {
     cache.PostNotification(parent_, ax::mojom::Event::kFocus);
   }
+  cache.MarkAXSubtreeDirtyWithCleanLayout(ParentObject());
 }
 
 AXObject* AXMenuListPopup::ActiveDescendant() {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc
index 7384267..bcd96cf 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -62,6 +62,7 @@
 #include "third_party/blink/renderer/core/html/custom/element_internals.h"
 #include "third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_input_element.h"
+#include "third_party/blink/renderer/core/html/forms/html_opt_group_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_text_area_element.h"
 #include "third_party/blink/renderer/core/html/forms/text_control_element.h"
@@ -195,8 +196,10 @@
   }
 
   Element* element = DynamicTo<Element>(node);
-  if (!element)
-    return "<null>";
+  if (!element) {
+    return To<Document>(node)->IsLoadCompleted() ? "#document"
+                                                 : "#document (loading)";
+  }
 
   String string_builder = "<";
 
@@ -655,6 +658,15 @@
   DCHECK(IsValidRole(role_)) << "Illegal " << role_ << " for\n"
                              << GetNode() << '\n'
                              << GetLayoutObject();
+
+  HTMLOptGroupElement* optgroup = DynamicTo<HTMLOptGroupElement>(GetNode());
+  if (optgroup && optgroup->OwnerSelectElement()) {
+    // We do not currently create accessible objects for an <optgroup> inside of
+    // a <select size=1>.
+    // TODO(accessibility) Remove this once we refactor HTML <select> to use
+    // the shadow DOM and AXNodeObject instead of AXMenuList* classes.
+    DCHECK(!optgroup->OwnerSelectElement()->UsesMenuList());
+  }
 #endif  // DCHECK_IS_ON()
 
   // Determine the parent as soon as possible.
@@ -967,7 +979,16 @@
   if (auto* document = DynamicTo<Document>(current_node)) {
     LocalFrame* frame = document->GetFrame();
     DCHECK(frame);
-    return cache.GetOrCreate(frame->PagePopupOwner());
+    Node* popup_owner = frame->PagePopupOwner();
+    if (!popup_owner)
+      return nullptr;
+    // TODO(accessibility) Remove this rule once we stop using AXMenuList*.
+    if (IsA<HTMLSelectElement>(popup_owner) &&
+        AXObjectCacheImpl::ShouldCreateAXMenuListFor(
+            popup_owner->GetLayoutObject())) {
+      return nullptr;
+    }
+    return cache.GetOrCreate(popup_owner);
   }
 
   // For <option> in <select size=1>, return the popup.
@@ -6622,8 +6643,17 @@
   if (verbose) {
     string_builder = string_builder + " axid#" + String::Number(AXObjectID());
     // Add useful HTML element info, like <div.myClass#myId>.
-    if (GetNode())
+    if (GetNode()) {
       string_builder = string_builder + " " + GetNodeString(GetNode());
+      if (IsA<Document>(GetNode())) {
+        if (IsRoot())
+          string_builder = string_builder + " isRoot";
+        if (GetDocument()->GetFrame() &&
+            GetDocument()->GetFrame()->PagePopupOwner()) {
+          string_builder = string_builder + " isPopup";
+        }
+      }
+    }
 
     // Add properties of interest that often contribute to errors:
     if (HasARIAOwns(GetElement())) {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
index 9bee11d..b297217 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -1562,9 +1562,10 @@
   return obj;
 }
 
+// Do not pass a depth if the entire subtree of AXObjects should be removed.
 void AXObjectCacheImpl::RemoveAXObjectsInLayoutSubtree(AXObject* subtree,
-                                                       int depth) {
-  if (!subtree || depth <= 0)
+                                                       int depth = -999) {
+  if (!subtree || depth == 0)
     return;
 
   depth--;
@@ -2493,6 +2494,14 @@
     if (is_ax_layout_object == will_be_ax_layout_object)
       return static_cast<AXObject*>(nullptr);  // No change in the AXObject.
 
+    // When a pseudo element loses its layout, destroy all of the nodeless
+    // descendant objects (they could not be individually invalidated because
+    // only AXObjects with a node can be invalidated).
+    if (!will_be_ax_layout_object && node->IsPseudoElement()) {
+      for (const auto& ax_child : current->UnignoredChildren())
+        RemoveAXObjectsInLayoutSubtree(ax_child);
+    }
+
     AXID retained_axid = current->AXObjectID();
     // Remove from relevant maps, but not from relation cache, as the relations
     // between AXIDs will still be the same.
diff --git a/third_party/blink/renderer/modules/bluetooth/bluetooth_error.cc b/third_party/blink/renderer/modules/bluetooth/bluetooth_error.cc
index 05b3103..b7186ee0 100644
--- a/third_party/blink/renderer/modules/bluetooth/bluetooth_error.cc
+++ b/third_party/blink/renderer/modules/bluetooth/bluetooth_error.cc
@@ -200,10 +200,10 @@
                 "Origin is not allowed to access the service. Tip: Add the "
                 "service UUID to 'optionalServices' in requestDevice() "
                 "options. https://goo.gl/HxfxSQ");
-      MAP_ERROR(REQUEST_DEVICE_WITH_BLOCKLISTED_UUID,
+      MAP_ERROR(REQUEST_DEVICE_WITH_BLOCKLISTED_UUID_OR_MANUFACTURER_DATA,
                 DOMExceptionCode::kSecurityError,
                 "requestDevice() called with a filter containing a blocklisted "
-                "UUID. https://goo.gl/4NeimX");
+                "UUID or manufacturer data. https://goo.gl/4NeimX");
       MAP_ERROR(PERMISSIONS_POLICY_VIOLATION, DOMExceptionCode::kSecurityError,
                 "Access to the feature \"bluetooth\" is disallowed by "
                 "permissions policy.");
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_test.cc b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_test.cc
index aa3552e..1b7c40d 100644
--- a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_test.cc
+++ b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_test.cc
@@ -554,9 +554,9 @@
   EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument())
                          .pictureInPictureWindow());
 
-  // Enable the PictureInPictureV2 flag.
+  // Enable the DocumentPictureInPictureAPI flag.
   ScopedPictureInPictureAPIForTest scoped_dependency(true);
-  ScopedPictureInPictureV2ForTest scoped_feature(true);
+  ScopedDocumentPictureInPictureAPIForTest scoped_feature(true);
 
   V8TestingScope scope;
   KURL url = KURL("https://example.com/");
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_window.idl b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_window.idl
index 04028ce9d..ea1a797 100644
--- a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_window.idl
+++ b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_window.idl
@@ -12,7 +12,7 @@
   [Measure] readonly attribute long width;
   [Measure] readonly attribute long height;
 
-  [RuntimeEnabled=PictureInPictureV2] readonly attribute Document? document;
+  [RuntimeEnabled=DocumentPictureInPictureAPI] readonly attribute Document? document;
 
   attribute EventHandler onresize;
 };
diff --git a/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.idl b/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.idl
index 78b294a..702f700d 100644
--- a/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.idl
+++ b/third_party/blink/renderer/modules/picture_in_picture/window_picture_in_picture.idl
@@ -4,7 +4,7 @@
 
 [
     ImplementedAs=WindowPictureInPicture,
-    RuntimeEnabled=PictureInPictureV2,
+    RuntimeEnabled=DocumentPictureInPictureAPI,
     SecureContext
 ]
 partial interface Window {
diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
index 1dc0131..44afba3fd 100644
--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
+++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -180,6 +180,10 @@
   RuntimeEnabledFeatures::SetDevicePostureEnabled(enable);
 }
 
+void WebRuntimeFeatures::EnableDocumentPictureInPictureAPI(bool enable) {
+  RuntimeEnabledFeatures::SetDocumentPictureInPictureAPIEnabled(enable);
+}
+
 void WebRuntimeFeatures::EnableRemoveMobileViewportDoubleTap(bool enable) {
   RuntimeEnabledFeatures::SetRemoveMobileViewportDoubleTapEnabled(enable);
 }
@@ -289,10 +293,6 @@
   RuntimeEnabledFeatures::SetPictureInPictureAPIEnabled(enable);
 }
 
-void WebRuntimeFeatures::EnablePictureInPictureV2(bool enable) {
-  RuntimeEnabledFeatures::SetPictureInPictureV2Enabled(enable);
-}
-
 void WebRuntimeFeatures::EnablePointerLockOptions(bool enable) {
   RuntimeEnabledFeatures::SetPointerLockOptionsEnabled(enable);
 }
diff --git a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.cc b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.cc
index 4f5983d8..81396d1 100644
--- a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.cc
@@ -195,12 +195,9 @@
     FloatClipRect& mapping_rect,
     OverlayScrollbarClipBehavior clip_behavior,
     InclusiveIntersectOrNot inclusive_behavior) {
-  bool success = false;
-  bool result = LocalToAncestorVisualRectInternal<ForCompositingOverlap::kNo>(
+  return LocalToAncestorVisualRectInternal<ForCompositingOverlap::kNo>(
       local_state, ancestor_state, mapping_rect, clip_behavior,
-      inclusive_behavior, success);
-  DCHECK(success);
-  return result;
+      inclusive_behavior);
 }
 
 template <GeometryMapper::ForCompositingOverlap for_compositing_overlap>
@@ -209,20 +206,18 @@
     const PropertyTreeState& ancestor_state,
     FloatClipRect& rect_to_map,
     OverlayScrollbarClipBehavior clip_behavior,
-    InclusiveIntersectOrNot inclusive_behavior,
-    bool& success) {
-  if (local_state == ancestor_state) {
-    success = true;
+    InclusiveIntersectOrNot inclusive_behavior) {
+  if (local_state == ancestor_state)
     return true;
-  }
 
   if (&local_state.Effect() != &ancestor_state.Effect()) {
     return SlowLocalToAncestorVisualRectWithEffects<for_compositing_overlap>(
         local_state, ancestor_state, rect_to_map, clip_behavior,
-        inclusive_behavior, success);
+        inclusive_behavior);
   }
 
   ExtraProjectionResult extra_result;
+  bool success = false;
   const auto& translation_2d_or_matrix = SourceToDestinationProjectionInternal(
       local_state.Transform(), ancestor_state.Transform(), extra_result,
       success);
@@ -238,7 +233,6 @@
     //   </div>
     // </div>
     // Either way, the element won't be renderable thus returning empty rect.
-    success = true;
     rect_to_map = FloatClipRect(gfx::RectF());
     return false;
   }
@@ -267,23 +261,12 @@
   FloatClipRect clip_rect =
       LocalToAncestorClipRectInternal<for_compositing_overlap>(
           local_state.Clip(), ancestor_state.Clip(), ancestor_state.Transform(),
-          clip_behavior, inclusive_behavior, success);
-  if (success) {
-    // This is where we propagate the roundedness and tightness of |clip_rect|
-    // to |rect_to_map|.
-    if (inclusive_behavior == kInclusiveIntersect)
-      return rect_to_map.InclusiveIntersect(clip_rect);
-    rect_to_map.Intersect(clip_rect);
-    return !rect_to_map.Rect().IsEmpty();
-  }
-
-  // TODO(crbug.com/803649): We still have clip hierarchy issues with fragment
-  // clips. See crbug.com/1228364 for the test cases. Will remove the following
-  // statement (leaving success==false) after LayoutNGBlockFragmentation is
-  // fully launched.
-  success = true;
-
-  rect_to_map.ClearIsTight();
+          clip_behavior, inclusive_behavior);
+  // This is where we propagate the roundedness and tightness of |clip_rect|
+  // to |rect_to_map|.
+  if (inclusive_behavior == kInclusiveIntersect)
+    return rect_to_map.InclusiveIntersect(clip_rect);
+  rect_to_map.Intersect(clip_rect);
   return !rect_to_map.Rect().IsEmpty();
 }
 
@@ -293,8 +276,7 @@
     const PropertyTreeState& ancestor_state,
     FloatClipRect& mapping_rect,
     OverlayScrollbarClipBehavior clip_behavior,
-    InclusiveIntersectOrNot inclusive_behavior,
-    bool& success) {
+    InclusiveIntersectOrNot inclusive_behavior) {
   PropertyTreeState last_transform_and_clip_state(
       local_state.Transform(), local_state.Clip(),
       EffectPaintPropertyNode::Root());
@@ -324,9 +306,8 @@
     bool intersects =
         LocalToAncestorVisualRectInternal<for_compositing_overlap>(
             last_transform_and_clip_state, transform_and_clip_state,
-            mapping_rect, clip_behavior, inclusive_behavior, success);
-    if (!success || !intersects) {
-      success = true;
+            mapping_rect, clip_behavior, inclusive_behavior);
+    if (!intersects) {
       mapping_rect = FloatClipRect(gfx::RectF());
       return false;
     }
@@ -340,7 +321,7 @@
       EffectPaintPropertyNode::Root());
   bool intersects = LocalToAncestorVisualRectInternal<for_compositing_overlap>(
       last_transform_and_clip_state, final_transform_and_clip_state,
-      mapping_rect, clip_behavior, inclusive_behavior, success);
+      mapping_rect, clip_behavior, inclusive_behavior);
 
   // Many effects (e.g. filters, clip-paths) can make a clip rect not tight.
   mapping_rect.ClearIsTight();
@@ -356,11 +337,9 @@
   if (&local_clip == &ancestor_clip)
     return FloatClipRect();
 
-  bool success = false;
   auto result = LocalToAncestorClipRectInternal<ForCompositingOverlap::kNo>(
       local_clip, ancestor_clip, ancestor_state.Transform(), clip_behavior,
-      kNonInclusiveIntersect, success);
-  DCHECK(success);
+      kNonInclusiveIntersect);
 
   // Many effects (e.g. filters, clip-paths) can make a clip rect not tight.
   if (&local_state.Effect() != &ancestor_state.Effect())
@@ -388,15 +367,12 @@
     const ClipPaintPropertyNode& ancestor_clip,
     const TransformPaintPropertyNode& ancestor_transform,
     OverlayScrollbarClipBehavior clip_behavior,
-    InclusiveIntersectOrNot inclusive_behavior,
-    bool& success) {
-  if (&descendant_clip == &ancestor_clip) {
-    success = true;
+    InclusiveIntersectOrNot inclusive_behavior) {
+  if (&descendant_clip == &ancestor_clip)
     return FloatClipRect();
-  }
+
   if (descendant_clip.UnaliasedParent() == &ancestor_clip &&
       &descendant_clip.LocalTransformSpace() == &ancestor_transform) {
-    success = true;
     return GetClipRect(descendant_clip, clip_behavior);
   }
 
@@ -431,11 +407,7 @@
     clip_node = clip_node->UnaliasedParent();
   }
   if (!clip_node) {
-    // TODO(crbug.com/803649): We still have clip hierarchy issues with
-    // fragment clips. See crbug.com/1228364 for the test cases. Will change
-    // the following to "success = false" after LayoutNGBlockFragmentation is
-    // fully launched.
-    success = true;
+    // Don't clip if the clip tree has abnormal hierarchy.
     return InfiniteLooseFloatClipRect();
   }
 
@@ -444,14 +416,13 @@
   for (auto it = intermediate_nodes.rbegin(); it != intermediate_nodes.rend();
        ++it) {
     ExtraProjectionResult extra_result;
+    bool success = false;
     const auto& translation_2d_or_matrix =
         SourceToDestinationProjectionInternal(
             (*it)->LocalTransformSpace().Unalias(), ancestor_transform,
             extra_result, success);
-    if (!success) {
-      success = true;
+    if (!success)
       return FloatClipRect(gfx::RectF());
-    }
 
     if (for_compositing_overlap == ForCompositingOverlap::kYes &&
         (extra_result.has_animation || extra_result.has_sticky))
@@ -479,7 +450,6 @@
          descendant_clip.GetClipCache()
                  .GetCachedClip(clip_and_transform)
                  ->clip_rect == clip);
-  success = true;
   return clip;
 }
 
@@ -526,36 +496,32 @@
     const PropertyTreeState& local_state,
     const PropertyTreeState& ancestor_state) {
   FloatClipRect visual_rect(local_rect);
-  bool success = false;
   GeometryMapper::LocalToAncestorVisualRectInternal<
       ForCompositingOverlap::kYes>(local_state, ancestor_state, visual_rect,
                                    kIgnoreOverlayScrollbarSize,
-                                   kNonInclusiveIntersect, success);
-  DCHECK(success);
+                                   kNonInclusiveIntersect);
   return visual_rect.Rect();
 }
 
 bool GeometryMapper::LocalToAncestorVisualRectInternalForTesting(
     const PropertyTreeState& local_state,
     const PropertyTreeState& ancestor_state,
-    FloatClipRect& mapping_rect,
-    bool& success) {
+    FloatClipRect& mapping_rect) {
   return GeometryMapper::LocalToAncestorVisualRectInternal<
       ForCompositingOverlap::kNo>(local_state, ancestor_state, mapping_rect,
                                   kIgnoreOverlayScrollbarSize,
-                                  kNonInclusiveIntersect, success);
+                                  kNonInclusiveIntersect);
 }
 
 bool GeometryMapper::
     LocalToAncestorVisualRectInternalForCompositingOverlapForTesting(
         const PropertyTreeState& local_state,
         const PropertyTreeState& ancestor_state,
-        FloatClipRect& mapping_rect,
-        bool& success) {
+        FloatClipRect& mapping_rect) {
   return GeometryMapper::LocalToAncestorVisualRectInternal<
       ForCompositingOverlap::kYes>(local_state, ancestor_state, mapping_rect,
                                    kIgnoreOverlayScrollbarSize,
-                                   kNonInclusiveIntersect, success);
+                                   kNonInclusiveIntersect);
 }
 
 void GeometryMapper::ClearCache() {
diff --git a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h
index 6150b69..cede29b 100644
--- a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h
+++ b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h
@@ -248,11 +248,6 @@
   static void ClearCache();
 
  private:
-  // The internal methods do the same things as their public counterparts, but
-  // take an extra |success| parameter which indicates if the function is
-  // successful on return. See comments of the public functions for failure
-  // conditions.
-
   struct ExtraProjectionResult {
     bool has_animation = false;
     bool has_fixed = false;
@@ -273,8 +268,7 @@
       const ClipPaintPropertyNode& ancestor_clip,
       const TransformPaintPropertyNode& ancestor_transform,
       OverlayScrollbarClipBehavior,
-      InclusiveIntersectOrNot,
-      bool& success);
+      InclusiveIntersectOrNot);
 
   // The return value has the same meaning as that for
   // LocalToAncestorVisualRect.
@@ -284,8 +278,7 @@
       const PropertyTreeState& ancestor_state,
       FloatClipRect& mapping_rect,
       OverlayScrollbarClipBehavior,
-      InclusiveIntersectOrNot,
-      bool& success);
+      InclusiveIntersectOrNot);
 
   // The return value has the same meaning as that for
   // LocalToAncestorVisualRect.
@@ -295,8 +288,7 @@
       const PropertyTreeState& ancestor_state,
       FloatClipRect& mapping_rect,
       OverlayScrollbarClipBehavior,
-      InclusiveIntersectOrNot,
-      bool& success);
+      InclusiveIntersectOrNot);
 
   static const ClipPaintPropertyNode* HighestOutputClipBetween(
       const EffectPaintPropertyNode& ancestor,
@@ -325,13 +317,11 @@
   static bool LocalToAncestorVisualRectInternalForTesting(
       const PropertyTreeState& local_state,
       const PropertyTreeState& ancestor_state,
-      FloatClipRect& mapping_rect,
-      bool& success);
+      FloatClipRect& mapping_rect);
   static bool LocalToAncestorVisualRectInternalForCompositingOverlapForTesting(
       const PropertyTreeState& local_state,
       const PropertyTreeState& ancestor_state,
-      FloatClipRect& mapping_rect,
-      bool& success);
+      FloatClipRect& mapping_rect);
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_test.cc b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_test.cc
index 6a790b43..8584f68 100644
--- a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_test.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_test.cc
@@ -31,21 +31,18 @@
   void LocalToAncestorVisualRectInternal(
       const PropertyTreeStateOrAlias& local_state,
       const PropertyTreeStateOrAlias& ancestor_state,
-      FloatClipRect& mapping_rect,
-      bool& success) {
+      FloatClipRect& mapping_rect) {
     GeometryMapper::LocalToAncestorVisualRectInternalForTesting(
-        local_state.Unalias(), ancestor_state.Unalias(), mapping_rect, success);
+        local_state.Unalias(), ancestor_state.Unalias(), mapping_rect);
   }
 
   void LocalToAncestorVisualRectForCompositingOverlap(
       const PropertyTreeStateOrAlias& local_state,
       const PropertyTreeStateOrAlias& ancestor_state,
-      FloatClipRect& mapping_rect,
-      bool& success) {
+      FloatClipRect& mapping_rect) {
     GeometryMapper::
         LocalToAncestorVisualRectInternalForCompositingOverlapForTesting(
-            local_state.Unalias(), ancestor_state.Unalias(), mapping_rect,
-            success);
+            local_state.Unalias(), ancestor_state.Unalias(), mapping_rect);
   }
 
   void CheckMappings();
@@ -84,17 +81,13 @@
 
 void GeometryMapperTest::CheckLocalToAncestorVisualRect() {
   FloatClipRect actual_visual_rect(input_rect);
-  bool success = false;
   LocalToAncestorVisualRectInternal(local_state, ancestor_state,
-                                    actual_visual_rect, success);
-  DCHECK(success);
+                                    actual_visual_rect);
   EXPECT_CLIP_RECT_EQ(expected_visual_rect, actual_visual_rect);
 
   actual_visual_rect = FloatClipRect(input_rect);
-  success = false;
   LocalToAncestorVisualRectForCompositingOverlap(local_state, ancestor_state,
-                                                 actual_visual_rect, success);
-  DCHECK(success);
+                                                 actual_visual_rect);
   EXPECT_CLIP_RECT_EQ(expected_visual_rect_expanded_for_compositing
                           ? *expected_visual_rect_expanded_for_compositing
                           : expected_visual_rect,
@@ -858,15 +851,12 @@
   transform2_and_clip_state.SetTransform(*transform2);
   transform2_and_clip_state.SetClip(*clip);
 
-  bool success;
   input_rect = gfx::RectF(0, 0, 100, 100);
   FloatClipRect result(input_rect);
   LocalToAncestorVisualRectInternal(transform1_state, transform2_and_clip_state,
-                                    result, success);
-  // Fails, because the clip of the destination state is not an ancestor of the
-  // clip of the source state. Known bugs pre-LayoutNGBlockFragmentation would
-  // make such a query. In such cases, no clips are applied.
-  EXPECT_TRUE(success);
+                                    result);
+  // Because the clip of the destination state is not an ancestor of the clip
+  // of the source state, no clips are applied.
   FloatClipRect expected(gfx::RectF(-100, 0, 100, 100));
   expected.ClearIsTight();
   EXPECT_CLIP_RECT_EQ(expected, result);
diff --git a/third_party/blink/renderer/platform/image-encoders/image_encoder_utils.cc b/third_party/blink/renderer/platform/image-encoders/image_encoder_utils.cc
index 97cf9c9..88b3a88 100644
--- a/third_party/blink/renderer/platform/image-encoders/image_encoder_utils.cc
+++ b/third_party/blink/renderer/platform/image-encoders/image_encoder_utils.cc
@@ -16,7 +16,7 @@
 
 namespace {
 // This enum is used in a UMA histogram; the values should not be changed.
-enum RequestedImageMimeType {
+enum RequestedImageMimeType : uint8_t {
   kRequestedImageMimeTypePng = 0,
   kRequestedImageMimeTypeJpeg = 1,
   kRequestedImageMimeTypeWebp = 2,
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
index 38a2c33..1bdcf95 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
@@ -1073,7 +1073,6 @@
     if (auto info = resource_timing_info_map_.Take(resource)) {
       PopulateAndAddResourceTimingInfo(resource, info,
                                        /*response_end=*/base::TimeTicks::Now());
-      Context().AddResourceTiming(*info);
     }
     return resource;
   }
@@ -1965,10 +1964,8 @@
 
   if (scoped_refptr<ResourceTimingInfo> info =
           resource_timing_info_map_.Take(resource)) {
-    if (resource->GetResponse().ShouldPopulateResourceTiming()) {
+    if (resource->GetResponse().ShouldPopulateResourceTiming())
       PopulateAndAddResourceTimingInfo(resource, info, response_end);
-      Context().AddResourceTiming(*info);
-    }
   }
 
   resource->VirtualTimePauser().UnpauseVirtualTime();
@@ -2021,10 +2018,8 @@
   RemoveResourceLoader(resource->Loader());
 
   if (scoped_refptr<ResourceTimingInfo> info =
-          resource_timing_info_map_.Take(resource)) {
+          resource_timing_info_map_.Take(resource))
     PopulateAndAddResourceTimingInfo(resource, info, finish_time);
-    Context().AddResourceTiming(*info);
-  }
 
   resource->VirtualTimePauser().UnpauseVirtualTime();
   // If the preload was cancelled due to an HTTP error, we don't want to request
@@ -2383,6 +2378,9 @@
     Resource* resource,
     scoped_refptr<ResourceTimingInfo> info,
     base::TimeTicks response_end) {
+  if (resource->GetResourceRequest().IsFromOriginDirtyStyleSheet())
+    return;
+
   const KURL& initial_url =
       resource->GetResourceRequest().GetRedirectInfo().has_value()
           ? resource->GetResourceRequest().GetRedirectInfo()->original_url
@@ -2402,6 +2400,7 @@
   info->SetInitialURL(initial_url);
   info->SetFinalResponse(resource->GetResponse());
   info->SetLoadResponseEnd(response_end);
+  Context().AddResourceTiming(*info);
 }
 
 SubresourceWebBundle* ResourceFetcher::GetMatchingBundle(
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_request.h b/third_party/blink/renderer/platform/loader/fetch/resource_request.h
index d848109..957e341 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_request.h
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_request.h
@@ -471,11 +471,6 @@
   void SetInspectorId(uint64_t inspector_id) { inspector_id_ = inspector_id; }
   uint64_t InspectorId() const { return inspector_id_; }
 
-  // Temporary for metrics. True if the request was initiated by a stylesheet
-  // that is not origin-clean:
-  // https://drafts.csswg.org/cssom-1/#concept-css-style-sheet-origin-clean-flag
-  //
-  // TODO(crbug.com/898497): Remove this when there is enough data.
   bool IsFromOriginDirtyStyleSheet() const {
     return is_from_origin_dirty_style_sheet_;
   }
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 8843256..5f4a02e 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -885,6 +885,11 @@
       name: "DocumentDomain",
     },
     {
+      name: "DocumentPictureInPictureAPI",
+      depends_on: ["PictureInPictureAPI"],
+      settable_from_internals: true,
+    },
+    {
       name: "DocumentPolicy",
       status: "stable",
     },
@@ -1761,11 +1766,6 @@
       name: "PictureInPictureAPI",
       status: "stable"
     },
-    {
-      name: "PictureInPictureV2",
-      depends_on: ["PictureInPictureAPI"],
-      settable_from_internals: true,
-    },
     // This is a reverse OT used for a phased deprecation.
     // https://crbug.com/918374
     {
@@ -1876,6 +1876,17 @@
       name: "QuotaChange",
       status: "experimental",
     },
+    // This User-Agent Reduction feature has been enabled starting from M101,
+    // but we still keep this flag for future phase tests.
+    {
+      name: "ReduceUserAgentMinorVersion",
+      status: "stable",
+    },
+    {
+      name: "ReduceUserAgentPlatformOsCpu",
+      depends_on: ["ReduceUserAgentMinorVersion"],
+      status: "experimental",
+    },
     {
       name: "RegionCapture",
       origin_trial_feature_name: "RegionCapture",
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index d9409767..070113f 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -3367,6 +3367,7 @@
 crbug.com/626703 [ Win ] virtual/partitioned-cookies/http/tests/inspector-protocol/network/disabled-cache-navigation.js [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 [ Win10.20h2 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/debug-key.sub.https.html?include=trigger [ Timeout Failure ]
 crbug.com/626703 [ Mac11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html?method=img&eligible [ Timeout ]
 crbug.com/626703 [ Mac11 ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/invalid-image-paint-error.https.html [ Failure ]
 crbug.com/626703 [ Mac11 ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/geometry-background-image-002.https.html [ Failure ]
@@ -7087,3 +7088,16 @@
 crbug.com/1348447 [ Linux ] external/wpt/IndexedDB/blob-composite-blob-reads.any.html [ Failure Pass Timeout ]
 crbug.com/1348447 [ Linux ] virtual/third-party-storage-partitioning/external/wpt/IndexedDB/blob-composite-blob-reads.any.worker.html [ Failure Pass Timeout ]
 crbug.com/1347675 virtual/fenced-frame-mparch/wpt_internal/fenced_frame/fragment-navigation.https.html [ Pass Timeout ]
+
+# Sheriff 2022-08-01
+crbug.com/1348835 [ Linux ] virtual/threaded-no-composited-antialiasing/animations/sample-on-last-keyframe.html [ Failure Pass ]
+crbug.com/1348835 [ Mac ] virtual/threaded-no-composited-antialiasing/animations/sample-on-last-keyframe.html [ Failure Pass ]
+
+# TODO(crbug.com/1225773): Re-enable this test
+crbug.com/1225773 [ Linux ] external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-during-parse.html [ Skip ]
+
+# Flaky timeouts on WebKit Linux MSAN
+crbug.com/1218100 [ Linux ] external/wpt/IndexedDB/idb-partitioned-coverage.tentative.sub.html [ Pass Timeout ]
+
+# TODO(crbug.com/1348836): Re-enable this test
+crbug.com/1348836 external/wpt/accessibility/crashtests/aria-owns-fallback-content.html [ Skip ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index 57b3af4a..62633c2 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1262,8 +1262,8 @@
     "prefix": "document-pip",
     "platforms": ["Linux", "Mac", "Win"],
     "bases": [],
-    "args": ["--enable-features=PictureInPictureV2",
-             "--enable-blink-features=PictureInPictureV2"]
+    "args": ["--enable-features=DocumentPictureInPictureAPI",
+             "--enable-blink-features=DocumentPictureInPictureAPI"]
   },
   {
     "prefix": "origin-agent-cluster-default",
diff --git a/third_party/blink/web_tests/external/Version b/third_party/blink/web_tests/external/Version
index 54f75cf..2e5390b 100644
--- a/third_party/blink/web_tests/external/Version
+++ b/third_party/blink/web_tests/external/Version
@@ -1 +1 @@
-Version: f8d620ce1fce75af30f65543ef9d73557b3371ca
+Version: 69d20d0e3431b88bc778b6ec321a561292d4c054
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index 708a7a1..04f66da 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -97010,7 +97010,7 @@
       ]
      ],
      "contain-size-button-001.html": [
-      "4b2ecd7b76e421ea5dfffce6654d722142b5823c",
+      "9048352f114f33fb161ae7ceb4ce0a2f4eceb445",
       [
        null,
        [
@@ -97023,7 +97023,7 @@
       ]
      ],
      "contain-size-button-002.html": [
-      "9a2df76ff1aae3c26d3d4cdd8b830f440a5f8e57",
+      "d6b6d0d10d4e9a08cbbbb57812130752381dd1a2",
       [
        null,
        [
@@ -164331,6 +164331,19 @@
        {}
       ]
      ],
+     "border-collapse-dynamic-oof.html": [
+      "6699fba3c162ed40f23abfea611667a513bd2e1f",
+      [
+       null,
+       [
+        [
+         "/css/reference/ref-filled-green-100px-square.xht",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "border-collapse-dynamic-section.html": [
       "5f48749fa48f6594cea8947170f4b930bd567608",
       [
@@ -251932,7 +251945,7 @@
     ],
     "resources": {
      "bluetooth-fake-devices.js": [
-      "7710d7f83f6e71e9953a3cd810d2c4de2ef78342",
+      "5694b0803a388946e0df615a135120ebcd61d0e6",
       []
      ],
      "bluetooth-scanning-helpers.js": [
@@ -252706,6 +252719,10 @@
      "6805c323df5a975231648b830e33ce183c3cbbd3",
      []
     ],
+    "proxy-all.sub.pac": [
+     "de601e5d7020e0107e77d91d77716e2e1c6fac23",
+     []
+    ],
     "redirect-opt-in.py": [
      "b5e674a27fb6e2b459b1815ca86fe3c8f1d9b60f",
      []
@@ -255506,7 +255523,7 @@
     ],
     "support": {
      "README.md": [
-      "2825092248cd61c0d5da2325ce3eabc53d2224e6",
+      "902a7caeebf3a2a8bca0e63ccb6ca257356f35f0",
       []
      ],
      "accounts.py": [
@@ -255522,7 +255539,7 @@
       []
      ],
      "fedcm-helper.js": [
-      "1017427c5c28f582c92ba356af2153e4f9851a84",
+      "1881e9df09af9e2614c580b158066e8fc3890ad6",
       []
      ],
      "fedcm-iframe-level2.html": [
@@ -255543,6 +255560,10 @@
       "53257099a18cd8ecbe44e9c62622a7376ec738dc",
       []
      ],
+     "fedcm-mojojs-helper.js": [
+      "428a2fc847708377594817cb01d7a009cc43a35c",
+      []
+     ],
      "fedcm.json": [
       "b4901f538c239dc4c994d233d4349e92016be6f7",
       []
@@ -266066,7 +266087,7 @@
       []
      ],
      "contain-size-button-002-ref.html": [
-      "efadf9b5df49ca45f829208c03dc0feb875c74f1",
+      "6cf0e4ad867d579d883bc1da261df00aa5c026bc",
       []
      ],
      "contain-size-fieldset-003-ref.html": [
@@ -302058,7 +302079,7 @@
       []
      ],
      "event-timing-test-utils.js": [
-      "f60bfb21afb81be04b0a3fb15e5b0fd42ec54801",
+      "b4156d32e73298a05d5f4aba133ca183964187dc",
       []
      ],
      "slow-image.py": [
@@ -342278,7 +342299,7 @@
      ]
     ],
     "blob-composite-blob-reads.any.js": [
-     "7d043ebdf2942acafdec3cf231116759fc965edc",
+     "c94c737f20ef503f47cdce784f30612292595cbf",
      [
       "IndexedDB/blob-composite-blob-reads.any.html",
       {
@@ -342290,8 +342311,13 @@
         [
          "script",
          "resources/support-promises.js"
+        ],
+        [
+         "timeout",
+         "long"
         ]
-       ]
+       ],
+       "timeout": "long"
       }
      ],
      [
@@ -342305,8 +342331,13 @@
         [
          "script",
          "resources/support-promises.js"
+        ],
+        [
+         "timeout",
+         "long"
         ]
-       ]
+       ],
+       "timeout": "long"
       }
      ]
     ],
@@ -357249,6 +357280,32 @@
         }
        ]
       ],
+      "blocklisted-manufacturer-data-filtered-from-event.https.window.js": [
+       "c73e3dbad1b20dd26a02d6ca4326a53b3f668a92",
+       [
+        "bluetooth/device/watchAdvertisements/blocklisted-manufacturer-data-filtered-from-event.https.window.html",
+        {
+         "script_metadata": [
+          [
+           "script",
+           "/resources/testdriver.js"
+          ],
+          [
+           "script",
+           "/resources/testdriver-vendor.js"
+          ],
+          [
+           "script",
+           "/bluetooth/resources/bluetooth-test.js"
+          ],
+          [
+           "script",
+           "/bluetooth/resources/bluetooth-fake-devices.js"
+          ]
+         ]
+        }
+       ]
+      ],
       "concurrent-watchAdvertisements-calls.https.window.js": [
        "cb6532be68ece2a04f5d70106f7b58869906b086",
        [
@@ -357757,8 +357814,42 @@
        ]
       ]
      },
+     "blocklisted-manufacturer-data-in-filter.https.window.js": [
+      "21ae2f1e7ad9b61c261d225469ade9f69ef9f743",
+      [
+       "bluetooth/requestDevice/blocklisted-manufacturer-data-in-filter.https.window.html",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/resources/testharness.js"
+         ],
+         [
+          "script",
+          "/resources/testharnessreport.js"
+         ],
+         [
+          "script",
+          "/resources/testdriver.js"
+         ],
+         [
+          "script",
+          "/resources/testdriver-vendor.js"
+         ],
+         [
+          "script",
+          "/bluetooth/resources/bluetooth-test.js"
+         ],
+         [
+          "script",
+          "/bluetooth/resources/bluetooth-fake-devices.js"
+         ]
+        ]
+       }
+      ]
+     ],
      "blocklisted-service-in-filter.https.window.js": [
-      "48f3d1309da0774442445f1328657ee31e76b8a8",
+      "beb80f42c396b1589413431f5a57e49cd8f32f97",
       [
        "bluetooth/requestDevice/blocklisted-service-in-filter.https.window.html",
        {
@@ -372550,7 +372641,7 @@
      ]
     ],
     "fedcm-logout-rps.https.html": [
-     "9c8d2c16031034f7cd5c3d57e24ed3a963d3ae92",
+     "9a967772d84c221f84cea771a86bc572d0c5ae94",
      [
       null,
       {}
@@ -423350,7 +423441,7 @@
      ]
     ],
     "interactionid-click.html": [
-     "f0d32e63aefbf3936569e447397abac3a8a2b0ef",
+     "1506e31e1d9259d0963378b07ce50e5aaeeb5c25",
      [
       null,
       {
@@ -423379,12 +423470,11 @@
      ]
     ],
     "interactionid-tap.html": [
-     "abe0b85f89dd69c275bf5a00aa52d084c2331709",
+     "40c8ca7fdd746e6464b28ffb5f375645a4786893",
      [
       null,
       {
-       "testdriver": true,
-       "timeout": "long"
+       "testdriver": true
       }
      ]
     ],
@@ -439379,7 +439469,7 @@
       ]
      ],
      "anonymous-window.tentative.https.window.js": [
-      "92db4e1abcdc89563a6bb22c8c58ed3aeea014f8",
+      "16a242aacac952ba4f5d422fb3b4896dce24a515",
       [
        "html/anonymous-iframe/anonymous-window.tentative.https.window.html",
        {
@@ -439975,7 +440065,7 @@
       ]
      ],
      "fenced-frame.tentative.https.window.js": [
-      "08513daedd411300da2648ef26ffcc990fc60a1c",
+      "f5f71bfe0b16f47da13e91804011f1d432dbfc53",
       [
        "html/anonymous-iframe/fenced-frame.tentative.https.window.html",
        {
@@ -440045,7 +440135,7 @@
       ]
      ],
      "initial-empty-document.tentative.https.window.js": [
-      "4d9d00b55b2caabba4ea7953f855392e6f9304dd",
+      "48600f53b1200d2de3498319d9c1ed01932db816",
       [
        "html/anonymous-iframe/initial-empty-document.tentative.https.window.html",
        {
@@ -507737,6 +507827,16 @@
       }
      ]
     ],
+    "preconnect.html": [
+     "f95a5c0ba052e8a35271f893c474a14892d6f21d",
+     [
+      null,
+      {
+       "pac": "/common/proxy-all.sub.pac",
+       "timeout": "long"
+      }
+     ]
+    ],
     "preload-connect-to-doc.html": [
      "ba45f6f3f848068ee9120b89c41307af22d570d3",
      [
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/blob-composite-blob-reads.any.js b/third_party/blink/web_tests/external/wpt/IndexedDB/blob-composite-blob-reads.any.js
index 7d043eb..c94c737f 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/blob-composite-blob-reads.any.js
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/blob-composite-blob-reads.any.js
@@ -1,5 +1,6 @@
 // META: title=IDB-backed composite blobs maintain coherency
 // META: script=resources/support-promises.js
+// META: timeout=long
 
 // This test file is intended to help validate browser handling of complex blob
 // scenarios where one or more levels of multipart blobs are used and varying
@@ -8,15 +9,19 @@
 //
 // A variety of approaches of reading the blob's contents are attempted for
 // completeness:
-// - fetch of a URL created via URL.createObjectURL
+// - `fetch-blob-url`: fetch of a URL created via URL.createObjectURL
 //   - Note that this is likely to involve multi-process behavior in a way that
 //     the next 2 currently will not unless their Blobs are round-tripped
 //     through a MessagePort.
-// - FileReader
-// - Blob.prototype.arrayBuffer()
+// - `file-reader`: FileReader
+// - `direct`: Blob.prototype.arrayBuffer()
 
 function composite_blob_test({ blobCount, blobSize, name }) {
-  for (const mode of ["fetch-blob-url", "file-reader", "direct"]) {
+  // NOTE: In order to reduce the runtime of this test and due to the similarity
+  // of the "file-reader" mechanism to the "direct", "file-reader" is commented
+  // out, but if you are investigating failures detected by this test, you may
+  // want to uncomment it.
+  for (const mode of ["fetch-blob-url", /*"file-reader",*/ "direct"]) {
     promise_test(async testCase => {
       const key = "the-blobs";
       let memBlobs = [];
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/device/watchAdvertisements/blocklisted-manufacturer-data-filtered-from-event.https.window.js b/third_party/blink/web_tests/external/wpt/bluetooth/device/watchAdvertisements/blocklisted-manufacturer-data-filtered-from-event.https.window.js
new file mode 100644
index 0000000..c73e3db
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/device/watchAdvertisements/blocklisted-manufacturer-data-filtered-from-event.https.window.js
@@ -0,0 +1,50 @@
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+// META: script=/bluetooth/resources/bluetooth-test.js
+// META: script=/bluetooth/resources/bluetooth-fake-devices.js
+'use strict';
+const test_desc = `Blocked manufacturer data is filtered from the ` +
+    `advertisement event.`;
+
+const advertisement_packet_with_blocked_manufacturer_data = {
+  deviceAddress: '07:07:07:07:07:07',
+  rssi: -10,
+  scanRecord: {
+    name: 'LE Device',
+    uuids: [uuid1234],
+    manufacturerData: {
+      [nonBlocklistedManufacturerId]: nonBlocklistedManufacturerData,
+      [blocklistedManufacturerId]: blocklistedManufacturerData,
+    },
+  }
+};
+
+bluetooth_test(async (t) => {
+  let {device} = await setUpPreconnectedFakeDevice({
+    fakeDeviceOptions: {
+      address: '07:07:07:07:07:07',
+      knownServiceUUIDs: [uuid1234],
+    },
+    requestDeviceOptions: {
+      filters: [{services: [uuid1234]}],
+      optionalManufacturerData: [nonBlocklistedManufacturerId, blocklistedManufacturerId]
+    }
+  });
+  const watcher = new EventWatcher(t, device, ['advertisementreceived']);
+
+  await device.watchAdvertisements();
+  assert_true(device.watchingAdvertisements);
+
+  let advertisementreceivedPromise = watcher.wait_for('advertisementreceived');
+  await fake_central.simulateAdvertisementReceived(
+      advertisement_packet_with_blocked_manufacturer_data);
+  let evt = await advertisementreceivedPromise;
+  assert_equals(evt.device, device);
+
+  // Check if block-listed manufacturer data is filtered out properly.
+  assert_false(evt.manufacturerData.has(blocklistedManufacturerId));
+
+  // Check if non blocked-listed manufacturer still exists.
+  assert_data_maps_equal(
+    evt.manufacturerData, /*expected_key=*/ nonBlocklistedManufacturerId, nonBlocklistedManufacturerData);
+}, test_desc);
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/blocklisted-manufacturer-data-in-filter.https.window.js b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/blocklisted-manufacturer-data-in-filter.https.window.js
new file mode 100644
index 0000000..21ae2f1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/blocklisted-manufacturer-data-in-filter.https.window.js
@@ -0,0 +1,31 @@
+// META: script=/resources/testharness.js
+// META: script=/resources/testharnessreport.js
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+// META: script=/bluetooth/resources/bluetooth-test.js
+// META: script=/bluetooth/resources/bluetooth-fake-devices.js
+'use strict';
+const test_desc = 'Reject with SecurityError if requesting a blocklisted ' +
+    'manufacturer data.';
+
+const expected = new DOMException(
+    'requestDevice() called with a filter containing a blocklisted UUID ' +
+        'or manufacturer data. https://goo.gl/4NeimX',
+    'SecurityError');
+
+bluetooth_test(async () => {
+  await assert_promise_rejects_with_message(
+      setUpPreconnectedFakeDevice({
+        fakeDeviceOptions: {knownServiceUUIDs: ['heart_rate']},
+        requestDeviceOptions: {
+          filters: [{
+            services: ['heart_rate'],
+            manufacturerData: [{
+              companyIdentifier: blocklistedManufacturerId,
+              dataPrefix: blocklistedManufacturerData,
+            }],
+          }]
+        }
+      }),
+      expected, 'Requesting blocklisted service rejects.');
+}, test_desc);
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/blocklisted-service-in-filter.https.window.js b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/blocklisted-service-in-filter.https.window.js
index 48f3d13..beb80f42 100644
--- a/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/blocklisted-service-in-filter.https.window.js
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/requestDevice/blocklisted-service-in-filter.https.window.js
@@ -8,8 +8,8 @@
 const test_desc = 'Reject with SecurityError if requesting a blocklisted ' +
     'service.';
 const expected = new DOMException(
-    'requestDevice() called with a filter containing a blocklisted UUID. ' +
-        'https://goo.gl/4NeimX',
+    'requestDevice() called with a filter containing a blocklisted UUID ' +
+    'or manufacturer data. https://goo.gl/4NeimX',
     'SecurityError');
 
 bluetooth_test(async () => {
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/resources/bluetooth-fake-devices.js b/third_party/blink/web_tests/external/wpt/bluetooth/resources/bluetooth-fake-devices.js
index 7710d7f8..5694b08 100644
--- a/third_party/blink/web_tests/external/wpt/bluetooth/resources/bluetooth-fake-devices.js
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/resources/bluetooth-fake-devices.js
@@ -135,6 +135,19 @@
 const uuid1234Data = new Uint8Array([5, 6]);
 const uuid5678Data = new Uint8Array([7, 8]);
 const uuidABCDData = new Uint8Array([9, 10]);
+
+// TODO(crbug.com/1163207): Add the blocklist link.
+// Fake manufacturer data following iBeacon format listed in
+// https://en.wikipedia.org/wiki/IBeacon, which will be blocked according to [TBD blocklist link].
+const blocklistedManufacturerId = 0x4c;
+const blocklistedManufacturerData = new Uint8Array([
+  0x02, 0x15, 0xb3, 0xeb, 0x8d, 0xb1, 0x30, 0xa5, 0x44, 0x8d, 0xb4, 0xac,
+  0xfb, 0x68, 0xc9, 0x23, 0xa3, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xbf
+]);
+// Fake manufacturer data that is not in [TBD blocklist link].
+const nonBlocklistedManufacturerId = 0x0001;
+const nonBlocklistedManufacturerData =  new Uint8Array([1, 2]);
+
 /**
  * An advertisement packet object that simulates a device that advertises
  * service and manufacturer data.
diff --git a/third_party/blink/web_tests/external/wpt/common/proxy-all.sub.pac b/third_party/blink/web_tests/external/wpt/common/proxy-all.sub.pac
new file mode 100644
index 0000000..de601e5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/common/proxy-all.sub.pac
@@ -0,0 +1,3 @@
+function FindProxyForURL(url, host) {
+    return "PROXY {{host}}:{{ports[http][0]}}"
+}
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-001.html b/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-001.html
index 4b2ecd7b..9048352f 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-001.html
@@ -9,6 +9,7 @@
 button {
   border: 5px solid green;
   padding: 0;
+  margin: 0;
   contain: size;
   color: transparent;
   font-size: 2em;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-002-ref.html
index efadf9b5..6cf0e4a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-002-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-002-ref.html
@@ -7,6 +7,7 @@
   <style>
   button {
     border: 1em solid green;
+    margin: 0;
     /* In case the testcase's 'inner' text is taller than the button, don't let
        it influence its line-box's size.  This lets us more-easily compare
        sizing between empty buttons vs. contained nonempty buttons. */
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-002.html b/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-002.html
index 9a2df76..d6b6d0d1 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-002.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/contain-size-button-002.html
@@ -9,6 +9,7 @@
   <style>
   button {
     contain: size;
+    margin: 0;
     border: 1em solid green;
     /* In case the testcase's 'inner' text is taller than the button, don't let
        it influence its line-box's size.  This lets us more-easily compare
diff --git a/third_party/blink/web_tests/external/wpt/preload/preconnect.html b/third_party/blink/web_tests/external/wpt/preload/preconnect.html
new file mode 100644
index 0000000..f95a5c0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/preload/preconnect.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<title>Makes sure that preloaded resources reduce connection time to zero</title>
+<meta name="timeout" content="long">
+<meta name="pac" content="/common/proxy-all.sub.pac">
+<script src="/common/utils.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+<script>
+    const FAKE_PORT = 30303;
+    promise_test(async t => {
+        const fake_remote_origin = `http://${token()}.wpt:${FAKE_PORT}`;
+        const link = document.createElement('link');
+        link.rel = "preconnect";
+        link.href = fake_remote_origin;
+        document.head.appendChild(link);
+        await new Promise(r => t.step_timeout(r, 1000));
+        const url = `${fake_remote_origin}/images/smiley.png`;
+        const entryPromise = new Promise(resolve => {
+            new PerformanceObserver(list => {
+                const entries = list.getEntriesByName(url);
+                if (entries.length)
+                    resolve(entries[0]);
+            }).observe({type: "resource"});
+        });
+
+        const img = document.createElement('img');
+        img.src = url;
+        document.body.appendChild(img);
+        const entry = await entryPromise;
+        assert_equals(entry.domainLookupStart, entry.domainLookupEnd);
+        assert_equals(entry.domainLookupStart, entry.connectStart);
+        assert_equals(entry.domainLookupStart, entry.connectEnd);
+    }, "Test that preconnect reduces connection time to zero");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/crash-large-positions.html b/third_party/blink/web_tests/fast/css-grid-layout/crash-large-positions.html
index 5ae7d218..ec6f01f 100644
--- a/third_party/blink/web_tests/fast/css-grid-layout/crash-large-positions.html
+++ b/third_party/blink/web_tests/fast/css-grid-layout/crash-large-positions.html
@@ -11,7 +11,7 @@
 
 <script>
  test(function() {
-     testGridPositionDefinitionsValues(document.getElementById("item1"), "2.14748e+09", "-2.14748e+09", "2.14748e+09", "-2.14748e+09");
-     testGridPositionDefinitionsValues(document.getElementById("item2"), "span 5", "2.14748e+09", "2.14748e+09", "span 5");
+     testGridPositionDefinitionsValues(document.getElementById("item1"), "1e+07", "-1e+07", "1e+07", "-1e+07");
+     testGridPositionDefinitionsValues(document.getElementById("item2"), "span 5", "1e+07", "1e+07", "span 5");
  }, "Test that setting and getting grid-column|row-start|end to huge values is properly clamped and does not make the renderer crash.");
 </script>
diff --git a/third_party/blink/web_tests/http/tests/devtools/bindings/navigator-multiple-frames.js b/third_party/blink/web_tests/http/tests/devtools/bindings/navigator-multiple-frames.js
index edca4eb..8880222 100644
--- a/third_party/blink/web_tests/http/tests/devtools/bindings/navigator-multiple-frames.js
+++ b/third_party/blink/web_tests/http/tests/devtools/bindings/navigator-multiple-frames.js
@@ -22,12 +22,12 @@
 
   TestRunner.markStep('detachFrame1');
   await BindingsTestRunner.detachFrame('frame1');
-  await TestRunner.evaluateInPageAnonymously('GCController.collectAll()');
+  await BindingsTestRunner.GC();
   SourcesTestRunner.dumpNavigatorView(sourcesNavigator, false);
 
   TestRunner.markStep('detachFrame2');
   await BindingsTestRunner.detachFrame('frame2');
-  await TestRunner.evaluateInPageAnonymously('GCController.collectAll()');
+  await BindingsTestRunner.GC();
   SourcesTestRunner.dumpNavigatorView(sourcesNavigator, false);
 
   TestRunner.completeTest();
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-source.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-source.js
new file mode 100644
index 0000000..e10a9d82
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-source.js
@@ -0,0 +1,18 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+(async function(testRunner) {
+  const {page, dp} = await testRunner.startBlank(
+      `Test that an attributionsrc that redirects to an insecure origin and tries to register a source triggers an issue.`);
+
+  await dp.Audits.enable();
+
+  await page.loadHTML(
+      `<img attributionsrc="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-source.php">`);
+
+  const issuePromise = dp.Audits.onceIssueAdded();
+  const issue = await issuePromise;
+  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  testRunner.completeTest();
+})
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-trigger.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-trigger.js
new file mode 100644
index 0000000..c9e6051a
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-trigger.js
@@ -0,0 +1,18 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+(async function(testRunner) {
+  const {page, dp} = await testRunner.startBlank(
+      `Test that an attributionsrc that redirects to an insecure origin and tries to register a trigger triggers an issue.`);
+
+  await dp.Audits.enable();
+
+  await page.loadHTML(
+      `<img attributionsrc="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-trigger.php">`);
+
+  const issuePromise = dp.Audits.onceIssueAdded();
+  const issue = await issuePromise;
+  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  testRunner.completeTest();
+})
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-source.php b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-source.php
new file mode 100644
index 0000000..ccd28e3
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-source.php
@@ -0,0 +1,3 @@
+<?php
+header('Location: http://devtools.test:8000/inspector-protocol/attribution-reporting/resources/register-source.php');
+?>
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-trigger.php b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-trigger.php
new file mode 100644
index 0000000..b6c2fe5f
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-trigger.php
@@ -0,0 +1,3 @@
+<?php
+header('Location: http://devtools.test:8000/inspector-protocol/attribution-reporting/resources/register-trigger.php');
+?>
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/register-source.php b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/register-source.php
new file mode 100644
index 0000000..f7edb71
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/register-source.php
@@ -0,0 +1,3 @@
+<?php
+header('Attribution-Reporting-Register-Source: {"source_event_id":"0","destination":"https://a.example"}');
+?>
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/sleep.php b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/sleep.php
new file mode 100644
index 0000000..7f96f84
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/resources/sleep.php
@@ -0,0 +1,3 @@
+<?php
+sleep(60);
+?>
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/too-many-concurrent-requests.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/too-many-concurrent-requests.js
new file mode 100644
index 0000000..b676273
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/too-many-concurrent-requests.js
@@ -0,0 +1,26 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+(async function(testRunner) {
+  const {page, dp} = await testRunner.startBlank(
+      `Test that initiating too many concurrent attributionsrc requests triggers an issue.`);
+
+  await dp.Audits.enable();
+  await page.navigate(
+      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/impression.html');
+  await page.loadHTML(`<body>`);
+
+  const issuePromise = dp.Audits.onceIssueAdded();
+
+  const maxConcurrentRequests = 30;
+  for (let i = 0; i < maxConcurrentRequests + 1; i++) {
+    await dp.Runtime.evaluate({
+      expression:
+          `document.createElement('img').attributionSrc='/inspector-protocol/attribution-reporting/resources/sleep.php'`,
+    });
+  }
+  const issue = await issuePromise;
+  testRunner.log(issue.params.issue, 'Issue reported: ', ['violatingNodeId']);
+  testRunner.completeTest();
+})
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/fenced-frame/security-protocols-fenced-frame.js b/third_party/blink/web_tests/http/tests/inspector-protocol/fenced-frame/security-protocols-fenced-frame.js
new file mode 100644
index 0000000..f9ed082
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/fenced-frame/security-protocols-fenced-frame.js
@@ -0,0 +1,31 @@
+(async function(testRunner) {
+  const {session, dp} = await testRunner.startURL(
+      'resources/page-with-fenced-frame.php',
+      'Tests that Security.enable() doesn\'t work with a fenced frame page.');
+  await dp.Page.enable();
+  await dp.Runtime.enable();
+
+  dp.Target.setAutoAttach(
+      {autoAttach: true, waitForDebuggerOnStart: false, flatten: true});
+  let {sessionId} = (await dp.Target.onceAttachedToTarget()).params;
+  let childSession = session.createChild(sessionId);
+  let ffdp = childSession.protocol;
+
+  // Wait for FF to finish loading.
+  ffdp.Page.enable();
+  ffdp.Runtime.enable();
+  ffdp.Page.setLifecycleEventsEnabled({enabled: true});
+  await ffdp.Page.onceLifecycleEvent(event => event.params.name === 'load');
+
+  let result = await ffdp.Security.enable();
+  testRunner.log(
+    'Security.enable() from a fenced frame:\n' +
+    (result.error ? 'PASS: ' + result.error.message : 'FAIL: no error'));
+
+  result = await dp.Page.bringToFront();
+  testRunner.log(
+      'Security.enable() from a top level frame:\n' +
+      (result.error ? 'FAIL: ' + result.error.message : 'PASS: no error'));
+
+  testRunner.completeTest()
+})
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/same-site-issue-warn-cookie-lax-subresource-context-downgrade.js b/third_party/blink/web_tests/http/tests/inspector-protocol/network/same-site-issue-warn-cookie-lax-subresource-context-downgrade.js
index 183974a1..e383f28 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/network/same-site-issue-warn-cookie-lax-subresource-context-downgrade.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/same-site-issue-warn-cookie-lax-subresource-context-downgrade.js
@@ -2,15 +2,31 @@
   const {page, session, dp} = await testRunner.startBlank(
       `Verifies that a subresource accessing a SameSite=Lax cookie across schemes triggers a context downgrade inspector issue.\n`);
 
+  const protocolMessages = [];
+  const originalDispatchMessage = DevToolsAPI.dispatchMessage;
+  DevToolsAPI.dispatchMessage = (message) => {
+    protocolMessages.push(message);
+    originalDispatchMessage(message);
+  };
+  window.onerror = (msg) => testRunner.log('onerror: ' + msg);
+  window.onunhandledrejection = (e) => testRunner.log('onunhandledrejection: ' + e.reason);
+  let errorForLog = new Error();
+  setTimeout(() => {
+    testRunner.log(protocolMessages);
+    testRunner.die('Timeout', errorForLog);
+  }, 28000);
   await dp.Network.enable();
   await dp.Audits.enable();
 
   await session.navigate('http://cookie.test:8000/inspector-protocol/resources/empty.html');
+  errorForLog = new Error();
 
   const setCookieUrl = 'https://cookie.test:8443/inspector-protocol/network/resources/set-cookie.php?cookie='
       + encodeURIComponent('name=value; SameSite=Lax');
   session.evaluate(`fetch('${setCookieUrl}', {method: 'POST', credentials: 'include'})`);
+  errorForLog = new Error();
   const issue = await dp.Audits.onceIssueAdded();
+  errorForLog = new Error();
   testRunner.log(issue.params, 'Inspector issue:');
 
   testRunner.completeTest();
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched.sub-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched.sub-expected.txt
deleted file mode 100644
index a256bb2..0000000
--- a/third_party/blink/web_tests/platform/generic/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched.sub-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Make sure that resources fetched by cross origin CSS are not in the timeline. assert_equals: Import should not be in timeline expected 0 but got 1
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-source-expected.txt b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-source-expected.txt
new file mode 100644
index 0000000..133e31f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-source-expected.txt
@@ -0,0 +1,12 @@
+Test that an attributionsrc that redirects to an insecure origin and tries to register a source triggers an issue.
+Issue reported: {
+    code : AttributionReportingIssue
+    details : {
+        attributionReportingIssueDetails : {
+            invalidParameter : http://devtools.test:8000
+            request : <object>
+            violationType : UntrustworthyReportingOrigin
+        }
+    }
+}
+
diff --git a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-trigger-expected.txt b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-trigger-expected.txt
new file mode 100644
index 0000000..baf285f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-trigger-expected.txt
@@ -0,0 +1,12 @@
+Test that an attributionsrc that redirects to an insecure origin and tries to register a trigger triggers an issue.
+Issue reported: {
+    code : AttributionReportingIssue
+    details : {
+        attributionReportingIssueDetails : {
+            invalidParameter : http://devtools.test:8000
+            request : <object>
+            violationType : UntrustworthyReportingOrigin
+        }
+    }
+}
+
diff --git a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/too-many-concurrent-requests-expected.txt b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/too-many-concurrent-requests-expected.txt
new file mode 100644
index 0000000..0e9a95b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/too-many-concurrent-requests-expected.txt
@@ -0,0 +1,12 @@
+Test that initiating too many concurrent attributionsrc requests triggers an issue.
+Issue reported: {
+    code : AttributionReportingIssue
+    details : {
+        attributionReportingIssueDetails : {
+            invalidParameter : 30
+            violatingNodeId : <number>
+            violationType : TooManyConcurrentRequests
+        }
+    }
+}
+
diff --git a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fenced-frame/security-protocols-fenced-frame-expected.txt b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fenced-frame/security-protocols-fenced-frame-expected.txt
new file mode 100644
index 0000000..3ae52a9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fenced-frame/security-protocols-fenced-frame-expected.txt
@@ -0,0 +1,6 @@
+Tests that Security.enable() doesn't work with a fenced frame page.
+Security.enable() from a fenced frame:
+PASS: Command can only be executed on top-level targets
+Security.enable() from a top level frame:
+PASS: no error
+
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/add-fencedframe-to-detached-iframe.https.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/add-fencedframe-to-detached-iframe.https.html
new file mode 100644
index 0000000..37c0cd6
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/add-fencedframe-to-detached-iframe.https.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>Test Add Fenced Frame to Detached Iframe</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/utils.js"></script>
+
+<body>
+<script>
+promise_test(async (t) => {
+  const iframe = attachIFrame("resources/dummy.html");
+
+  const doc = document.querySelector("iframe").contentDocument;
+  iframe.remove();
+
+  const ff = doc.createElement("fencedframe");
+  doc.body.append(ff);
+}, 'Add fenced frame to detached iframe test');
+
+promise_test(async (t) => {
+  const iframe = attachIFrame("resources/dummy.html");
+  const doc = document.querySelector("iframe").contentDocument;
+
+  const nested_iframe = doc.createElement('iframe');
+  nested_iframe.src = "resources/dummy.html";
+  doc.body.append(nested_iframe);
+  const nested_doc = doc.querySelector("iframe").contentDocument;
+
+  iframe.remove();
+
+  const ff = nested_doc.createElement("fencedframe");
+  nested_doc.body.append(ff);
+}, 'Add fenced frame to nested iframe in detached frame test');
+
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/wpt_internal/task-tracking/soft-navigation-heuristics/soft-navigation-detection-web-component-lifecycle.html b/third_party/blink/web_tests/wpt_internal/task-tracking/soft-navigation-heuristics/soft-navigation-detection-web-component-lifecycle.html
new file mode 100644
index 0000000..e93ffaa
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/task-tracking/soft-navigation-heuristics/soft-navigation-detection-web-component-lifecycle.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Detect simple soft navigation.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+</head>
+<body>
+  <script>
+    // Define a custom element
+    class SPAContent extends HTMLDivElement {
+      constructor() {
+        super();
+      }
+      connectedCallback() {
+        // Change the URL
+        history.pushState({}, '', "/foobar.html");
+      }
+    }
+    customElements.define("spa-content", SPAContent, { extends: "div"});
+
+  </script>
+  <main id=main>
+  <a id=link>Click me!</a>
+  </main>
+  <script>
+    promise_test(async t => {
+      const link = document.getElementById("link");
+      const clicked = new Promise(resolve => {
+        link.addEventListener("click", async e => {
+          // Jump through a task, to ensure task tracking is working properly.
+          await new Promise(r => setTimeout(r, 0));
+
+          // Fetch some content
+          const response = await fetch("../resources/content.json");
+          const json = await response.json();
+
+          // Add the content to the main element
+          const main = document.getElementById("main");
+          const spa_content = document.createElement("div", {is: "spa-content"});
+          const content = document.createTextNode(json["content"]);
+          spa_content.appendChild(content);
+          main.appendChild(spa_content);
+
+          resolve();
+        });
+      });
+      if (test_driver) {
+        test_driver.click(link);
+      }
+      await clicked;
+      assert_equals(document.softNavigations, 1);
+    }, "Test that a soft navigation is detected");
+  </script>
+</body>
+</html>
+
diff --git a/third_party/closure_compiler/externs/file_manager_private.js b/third_party/closure_compiler/externs/file_manager_private.js
index b454aab..7091906 100644
--- a/third_party/closure_compiler/externs/file_manager_private.js
+++ b/third_party/closure_compiler/externs/file_manager_private.js
@@ -981,6 +981,13 @@
 chrome.fileManagerPrivate.getDlpMetadata = function(entries, callback) {};
 
 /**
+ * Shows a modal containing Data Leak Prevention (DLP) Restriction Details.
+ * @param {string} sourceUrl Source URL of the Entry for which the details
+ *     should be shown.
+ */
+chrome.fileManagerPrivate.showDlpRestrictionDetails = function(sourceUrl) {};
+
+/**
  * Starts to copy an entry. If the source is a directory, the copy is done
  * recursively. |entry| Entry of the source entry to be copied. |parent| Entry
  * of the destination directory. |newName| Name of the new entry. It must not
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium
index f4ea274..9a2f04a2a 100644
--- a/third_party/freetype/README.chromium
+++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@
 Name: FreeType
 URL: http://www.freetype.org/
-Version: VER-2-12-1-60-g284956b5b
-Revision: 284956b5b123125c814bb3841c6871ddfb0694a3
+Version: VER-2-12-1-68-g9de432f7f
+Revision: 9de432f7f2989a6ad13024404b2290c529a82858
 CPEPrefix: cpe:/a:freetype:freetype:2.11.1
 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent
          JPEG Group) licenses"
diff --git a/third_party/zlib/contrib/optimizations/inflate.c b/third_party/zlib/contrib/optimizations/inflate.c
index e746dfa..9e4c086 100644
--- a/third_party/zlib/contrib/optimizations/inflate.c
+++ b/third_party/zlib/contrib/optimizations/inflate.c
@@ -1287,16 +1287,29 @@
        Note: a memory error from inflate() is non-recoverable.
      */
   inf_leave:
-   /* We write a defined value in the unused space to help mark
+#if defined(ZLIB_DEBUG)
+   /* XXX(cavalcantii): I put this in place back in 2017 to help debug faulty
+    * client code relying on undefined behavior when chunk_copy first landed.
+    *
+    * It is save to say after all these years that Chromium code is well
+    * behaved and works fine with the optimization, therefore we can enable
+    * this only for DEBUG builds.
+    *
+    * We write a defined value in the unused space to help mark
     * where the stream has ended. We don't use zeros as that can
     * mislead clients relying on undefined behavior (i.e. assuming
     * that the data is over when the buffer has a zero/null value).
+    *
+    * The basic idea is that if client code is not relying on the zlib context
+    * to inform the amount of decompressed data, but instead reads the output
+    * buffer until a zero/null is found, it will fail faster and harder
+    * when the remaining of the buffer is marked with a symbol (e.g. 0x55).
     */
    if (left >= CHUNKCOPY_CHUNK_SIZE)
       memset(put, 0x55, CHUNKCOPY_CHUNK_SIZE);
    else
       memset(put, 0x55, left);
-
+#endif
     RESTORE();
     if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
             (state->mode < CHECK || flush != Z_FINISH)))
diff --git a/tools/android/avd/proto/creation/generic_playstore_android33.textpb b/tools/android/avd/proto/creation/generic_playstore_android33.textpb
index 5390f61..ccda526 100644
--- a/tools/android/avd/proto/creation/generic_playstore_android33.textpb
+++ b/tools/android/avd/proto/creation/generic_playstore_android33.textpb
@@ -7,7 +7,7 @@
 emulator_package {
   package_name: "chromium/third_party/android_sdk/public/emulator"
   version: "9lGp8nTUCRRWGMnI_96HcKfzjnxEJKUcfvfwmA3wXNkC"  # 31.2.10
-  dest_path: "generic_android33"
+  dest_path: "generic_playstore_android33"
 }
 
 system_image_package {
diff --git a/tools/cast3p/runtime.version b/tools/cast3p/runtime.version
index 6cb7b8f1..8dcca9fd 100644
--- a/tools/cast3p/runtime.version
+++ b/tools/cast3p/runtime.version
@@ -1 +1 @@
-304500
+311537
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 901f2fc..fa9f0de 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -29391,6 +29391,13 @@
   <int value="11" label="SCRIPT_EVALUATION"/>
 </enum>
 
+<enum name="EmbeddedWorkerStatus">
+  <int value="0" label="STOPPED"/>
+  <int value="1" label="STARTING"/>
+  <int value="2" label="RUNNING"/>
+  <int value="3" label="STOPPING"/>
+</enum>
+
 <enum name="EmeApiType">
   <int value="0" label="Not expected"/>
   <int value="1" label="MediaKeySystemAccess.createMediaKeys()"/>
@@ -35193,6 +35200,7 @@
   <int value="1691" label="AUTOTESTPRIVATE_GETDESKCOUNT"/>
   <int value="1692" label="METRICSPRIVATE_RECORDSPARSEVALUEWITHPERSISTENTHASH"/>
   <int value="1693" label="METRICSPRIVATE_RECORDSPARSEVALUEWITHHASHMETRICNAME"/>
+  <int value="1694" label="FILEMANAGERPRIVATE_SHOWDLPRESTRICTIONDETAILS"/>
 </enum>
 
 <enum name="ExtensionIconState">
@@ -56186,6 +56194,8 @@
   <int value="-1669727073"
       label="HandwritingLegacyRecognitionAllLang:disabled"/>
   <int value="-1669486359" label="ImportantSitesInCBD:enabled"/>
+  <int value="-1669172326"
+      label="AutofillEnableDependentLocalityParsing:disabled"/>
   <int value="-1668306615" label="CrostiniUseDlc:enabled"/>
   <int value="-1667822423" label="ContextMenuGoogleLensChip:disabled"/>
   <int value="-1666652919" label="MagnifierPanningImprovements:disabled"/>
@@ -57356,6 +57366,8 @@
   <int value="-972945109" label="NtpRealbox:disabled"/>
   <int value="-972737445" label="ArcUseAuthEndpoint:disabled"/>
   <int value="-972425050" label="gesture-editing"/>
+  <int value="-970201112"
+      label="AutofillEnableDependentLocalityParsing:enabled"/>
   <int value="-970067535" label="BackgroundTaskComponentUpdate:disabled"/>
   <int value="-969332901" label="stop-non-timers-in-background:disabled"/>
   <int value="-969028093" label="FullRestore:disabled"/>
@@ -61963,6 +61975,7 @@
   <int value="1996125159" label="AutoplayMutedVideos:enabled"/>
   <int value="1997047666" label="NTPSnippetsIncreasedVisibility:disabled"/>
   <int value="1997931863" label="OmniboxContextMenuShowFullUrls:enabled"/>
+  <int value="1998568354" label="DocumentPictureInPictureAPI:enabled"/>
   <int value="1998917160" label="AppServiceAdaptiveIcon:enabled"/>
   <int value="2000091128" label="enable-touch-hover"/>
   <int value="2000291475"
@@ -62106,6 +62119,7 @@
   <int value="2096736155" label="BrowsingDataLifetimeManager:enabled"/>
   <int value="2097048479" label="disable-auto-hiding-toolbar-threshold"/>
   <int value="2098059607" label="WifiSyncAllowDeletes:disabled"/>
+  <int value="2098114768" label="DocumentPictureInPictureAPI:disabled"/>
   <int value="2098597721"
       label="WebAuthenticationPasskeysUIExperiment:disabled"/>
   <int value="2098714203" label="enable-generic-sensors"/>
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml
index 8f3e2e61..f186633 100644
--- a/tools/metrics/histograms/metadata/apps/histograms.xml
+++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -1664,7 +1664,13 @@
 </histogram>
 
 <histogram name="Apps.AppListSearchQueryLength" units="characters"
-    expires_after="2022-12-01">
+    expires_after="2022-08-01">
+  <obsolete>
+    Deprecated in July 2022. Replaced with Apps.AppListSearchQueryLenghtV2,
+    which, unlike this histogram, only records query length for results from
+    launcher search results UI. Apps.AppListSearchQueryLength was recording
+    query length when launching results from continue section.
+  </obsolete>
 <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" -->
 
   <owner>yulunwu@chromium.org</owner>
@@ -1675,6 +1681,17 @@
   </summary>
 </histogram>
 
+<histogram name="Apps.AppListSearchQueryLengthV2{TabletOrClamshell}"
+    units="characters" expires_after="2022-12-01">
+  <owner>yulunwu@chromium.org</owner>
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The length of the app list search query when a result is opened. This is
+    gathered per click of a search result in launcher search results UI.
+  </summary>
+  <token key="TabletOrClamshell" variants="TabletOrClamshellMode"/>
+</histogram>
+
 <histogram name="Apps.AppListSearchResultInternalApp.Open"
     enum="AppListInternalAppName" expires_after="2020-12-13">
   <owner>wutao@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/ash/histograms.xml b/tools/metrics/histograms/metadata/ash/histograms.xml
index 5e3d255..f3b9ca6 100644
--- a/tools/metrics/histograms/metadata/ash/histograms.xml
+++ b/tools/metrics/histograms/metadata/ash/histograms.xml
@@ -1054,7 +1054,7 @@
 
 <histogram
     name="Ash.CaptureModeController.EndRecordingReason.{TabletOrClamshell}"
-    enum="EndRecordingReason" expires_after="2022-09-09">
+    enum="EndRecordingReason" expires_after="2023-08-01">
   <owner>afakhry@chromium.org</owner>
   <owner>gzadina@google.com</owner>
   <summary>
@@ -1066,7 +1066,7 @@
 </histogram>
 
 <histogram name="Ash.CaptureModeController.EntryPoint.{TabletOrClamshell}"
-    enum="CaptureModeEntryType" expires_after="2022-09-09">
+    enum="CaptureModeEntryType" expires_after="2023-08-01">
   <owner>afakhry@chromium.org</owner>
   <owner>gzadina@google.com</owner>
   <summary>
@@ -1130,7 +1130,7 @@
 
 <histogram
     name="Ash.CaptureModeController.Projector.ScreenRecordingLength.{TabletOrClamshell}"
-    units="seconds" expires_after="2022-09-09">
+    units="seconds" expires_after="2023-08-01">
   <owner>afakhry@chromium.org</owner>
   <owner>michelefan@chromium.org</owner>
   <owner>gzadina@google.com</owner>
@@ -1216,7 +1216,7 @@
 
 <histogram
     name="Ash.CaptureModeController.ScreenRecordingLength.{TabletOrClamshell}"
-    units="seconds" expires_after="2022-09-09">
+    units="seconds" expires_after="2023-08-01">
   <owner>afakhry@chromium.org</owner>
   <owner>gzadina@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/content/histograms.xml b/tools/metrics/histograms/metadata/content/histograms.xml
index 7f9cc8f3..3dd10ab 100644
--- a/tools/metrics/histograms/metadata/content/histograms.xml
+++ b/tools/metrics/histograms/metadata/content/histograms.xml
@@ -615,6 +615,24 @@
   </summary>
 </histogram>
 
+<histogram name="ContentSuggestions.Feed.CanBeShown" enum="BooleanAllowed"
+    expires_after="2023-08-01">
+  <owner>harringtond@chromium.org</owner>
+  <owner>thegreenfrog@chromium.org</owner>
+  <owner>feed@chromium.org</owner>
+  <summary>
+    Whether showing the Feed is permitted. The Feed can be shown if (A) profile
+    policies allow this, (B) the FeedAblationEnabled feature is disabled, and
+    (C) the user has not turned it off in Settings.
+
+    Note that this does not denote (A) whether the Feed is visible at the time
+    the metric is emitted or (B) whether the Feed was ever visible during the
+    browser process lifetime.
+
+    iOS only. Emitted when building a MetricsLog for the current session.
+  </summary>
+</histogram>
+
 <histogram name="ContentSuggestions.Feed.CommitMutationCount"
     units="operations" expires_after="2020-10-01">
   <owner>carlosk@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index aa4d259..dd4b5203 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -2847,6 +2847,17 @@
   </summary>
 </histogram>
 
+<histogram name="PasswordManager.Settings.AuthenticationTime" units="ms"
+    expires_after="M111">
+  <owner>vsemeniuk@google.com</owner>
+  <owner>kazinova@google.com</owner>
+  <owner>sygiet@google.com</owner>
+  <summary>
+    Records the time it takes user to authenticate in settings when trying to
+    show/copy/edit/export passwords.
+  </summary>
+</histogram>
+
 <histogram name="PasswordManager.Settings.ToggleAutoSignIn"
     enum="BooleanEnabled" expires_after="2022-12-18">
   <owner>ioanap@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/permissions/histograms.xml b/tools/metrics/histograms/metadata/permissions/histograms.xml
index b24db3c2..f7d6f7b 100644
--- a/tools/metrics/histograms/metadata/permissions/histograms.xml
+++ b/tools/metrics/histograms/metadata/permissions/histograms.xml
@@ -152,6 +152,9 @@
 
 <histogram name="Permissions.BatteryLevel.Accepted.Geolocation" units="%"
     expires_after="M85">
+  <obsolete>
+    Removed in July 2022, as it's been unused for some time.
+  </obsolete>
   <owner>timloh@chromium.org</owner>
   <summary>
     Battery percentage when a geolocation permission prompt was accepted on
@@ -161,6 +164,9 @@
 
 <histogram name="Permissions.BatteryLevel.Accepted.LocationSettingsDialog"
     units="%" expires_after="2022-08-28">
+  <obsolete>
+    Removed in July 2022, as it's been unused for some time.
+  </obsolete>
   <owner>andypaicu@chromium.org</owner>
   <owner>engedy@chromium.org</owner>
   <owner>hkamila@chromium.org</owner>
@@ -173,6 +179,9 @@
 
 <histogram name="Permissions.BatteryLevel.Denied.Geolocation" units="%"
     expires_after="M85">
+  <obsolete>
+    Removed in July 2022, as it's been unused for some time.
+  </obsolete>
   <owner>timloh@chromium.org</owner>
   <summary>
     Battery percentage when a geolocation permission prompt was denied on
@@ -182,6 +191,9 @@
 
 <histogram name="Permissions.BatteryLevel.Denied.LocationSettingsDialog"
     units="%" expires_after="M77">
+  <obsolete>
+    Removed in July 2022, as it's been unused for some time.
+  </obsolete>
   <owner>timloh@chromium.org</owner>
   <summary>
     Battery percentage when a location settings dialog was denied.
@@ -190,6 +202,9 @@
 
 <histogram name="Permissions.BatteryLevel.Dismissed.Geolocation" units="%"
     expires_after="M85">
+  <obsolete>
+    Removed in July 2022, as it's been unused for some time.
+  </obsolete>
   <owner>timloh@chromium.org</owner>
   <summary>
     Battery percentage when a geolocation permission prompt was dismissed on
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml
index 499c167..c7b1befb 100644
--- a/tools/metrics/histograms/metadata/service/histograms.xml
+++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -616,6 +616,47 @@
   </summary>
 </histogram>
 
+<histogram name="ServiceWorker.MaybeStartWorker.Purpose"
+    enum="ServiceWorkerMetrics.EventType" expires_after="2023-06-30">
+  <owner>yyanagisawa@chromium.org</owner>
+  <owner>chrome-worker@google.com</owner>
+  <summary>
+    Records the purpose for potentially starting a service worker. This is
+    recorded every time a running worker is required whether it needs to be
+    started or not in the ServiceWorkerVersion::RunAfterStartWorker() method.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.MaybeStartWorker.RunningStatus"
+    enum="EmbeddedWorkerStatus" expires_after="2023-06-30">
+  <owner>yyanagisawa@chromium.org</owner>
+  <owner>chrome-worker@google.com</owner>
+  <summary>
+    Record the current status of a service worker when we need it to be running
+    for some purpose. If the status is STOPPED or STOPPING then the service
+    worker will be started. This is recorded from
+    ServiceWorkerVersion::RunAfterStartWorker().
+
+    See also ServiceWorker.MaybeStartWorker.RunningStatusByPurpose_* for the
+    breakdown by event type.
+  </summary>
+</histogram>
+
+<histogram
+    name="ServiceWorker.MaybeStartWorker.RunningStatusByPurpose_{ServiceWorkerEventType}"
+    enum="EmbeddedWorkerStatus" expires_after="2023-06-30">
+  <owner>yyanagisawa@chromium.org</owner>
+  <owner>chrome-worker@google.com</owner>
+  <summary>
+    Record the current status of a service worker when we need it to be running
+    broken down by the purpose for needing a worker. If the status is STOPPED or
+    STOPPING then the service worker will be started. This is recorded from
+    ServiceWorkerVersion::RunAfterStartWorker(). (see
+    ServiceWorker.MaybeStartWorker.RunningStatus for all attempts).
+  </summary>
+  <token key="ServiceWorkerEventType" variants="ServiceWorkerEventType"/>
+</histogram>
+
 <histogram name="ServiceWorker.NotificationClickEvent.Time" units="ms"
     expires_after="M96">
   <owner>peter@chromium.org</owner>
diff --git a/tools/perf/contrib/power/.gitignore b/tools/perf/contrib/power/.gitignore
deleted file mode 100644
index 3af0ccb..0000000
--- a/tools/perf/contrib/power/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/data
diff --git a/tools/perf/contrib/power/perf_benchmark_with_profiling_unittest.py b/tools/perf/contrib/power/perf_benchmark_with_profiling_unittest.py
index 7b9a6c5..023849c 100644
--- a/tools/perf/contrib/power/perf_benchmark_with_profiling_unittest.py
+++ b/tools/perf/contrib/power/perf_benchmark_with_profiling_unittest.py
@@ -51,7 +51,6 @@
     text_config = options.config.system_trace_config.GetTextConfig()
     self.assertNotIn('name: "linux.perf"', text_config)
 
-  # TODO(http://crbug/1338581): Re-enable this test.
   @unittest.skip("Temporary disabled to facilitate an API change in Telemetry.")
   def testWithAndroidBrowser(self):
     benchmark = PerfBenchmarkForTesting()
diff --git a/tools/perf/contrib/power/power_mobile.py b/tools/perf/contrib/power/power_mobile.py
deleted file mode 100644
index 7a593901b..0000000
--- a/tools/perf/contrib/power/power_mobile.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2022 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from core import perf_benchmark
-from core import platforms
-from contrib.power.top_sites_story import ContribPowerMobileTopSitesStorySet
-from telemetry import benchmark
-from telemetry import story
-from telemetry.timeline.chrome_trace_category_filter import ChromeTraceCategoryFilter
-from telemetry.web_perf import timeline_based_measurement
-
-
-@benchmark.Info(emails=['chrometto-team@google.com'])
-class ContribPowerMobile(perf_benchmark.PerfBenchmark):
-
-  SUPPORTED_PLATFORMS = [story.expectations.ALL_ANDROID]
-  SUPPORTED_PLATFORM_TAGS = [platforms.ANDROID]
-
-  def __init__(self):
-    super(ContribPowerMobile, self).__init__()
-    self._browser_package = None
-
-  def CreateStorySet(self, options):
-    return ContribPowerMobileTopSitesStorySet()
-
-  def CreateCoreTimelineBasedMeasurementOptions(self):
-    options = timeline_based_measurement.Options()
-    options.config.chrome_trace_config.SetCategoryFilter(
-        ChromeTraceCategoryFilter(''))
-    options.config.enable_experimental_system_tracing = True
-    options.config.system_trace_config.EnableProfiling(
-        '%s*' % self._browser_package, 300)
-    options.config.system_trace_config.EnableChrome(
-        chrome_trace_config=options.config.chrome_trace_config)
-    # options.config.system_trace_config.EnableProcessStats()
-    # options.config.system_trace_config.EnablePower()
-    # options.config.system_trace_config.EnableFtraceCpu()
-    options.config.system_trace_config.EnableFtraceSched()
-    return options
-
-  def CustomizeOptions(self, finder_options, possible_browser=None):
-    # We are not supposed to overwrite this method (see PerfBenchmark) but it is
-    # the only way to get to the possible_browser in time to set the parameters
-    # for stack sampling.
-    super(ContribPowerMobile, self).CustomizeOptions(finder_options,
-                                                     possible_browser)
-    self._browser_package = possible_browser.browser_package
-
-  @classmethod
-  def Name(cls):
-    return 'contrib.power.mobile'
diff --git a/tools/perf/contrib/power/process_results.py b/tools/perf/contrib/power/process_results.py
deleted file mode 100755
index e97feaa..0000000
--- a/tools/perf/contrib/power/process_results.py
+++ /dev/null
@@ -1,284 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2022 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import subprocess
-import argparse
-import os
-import sys
-
-SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-
-sys.path.append(
-    os.path.join(SCRIPT_DIR, os.pardir, os.pardir, os.pardir, os.pardir,
-                 'third_party', 'perfetto', 'python'))
-
-sys.path.append(
-    os.path.join(SCRIPT_DIR, os.pardir, os.pardir, os.pardir, 'mac', 'power',
-                 'protos', 'third_party', 'pprof'))
-
-PERFETTO_DIR = os.path.normpath(
-    os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir,
-                 os.pardir, 'third_party', 'perfetto'))
-
-TRACECONV_PATH = os.path.join(PERFETTO_DIR, 'tools', 'traceconv')
-
-ARTIFACTS_DIR = os.path.normpath(
-    os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, 'artifacts'))
-
-_DESCRIPTION = ("""
-Symbolizes and deobfuscates the traces generated by a run of the benchmark for
-the contrib power stories. This script will automatically find all the runs and
-only generate results if needed.
-""")
-
-_USAGE = """
-process_results --out-dir=<out/Release>
-"""
-
-_POWER_STORIES = ['power_scroll_top']
-
-
-def _CreateArgumentParser():
-  parser = argparse.ArgumentParser(description=_DESCRIPTION, usage=_USAGE)
-
-  parser.add_argument('--out-dir', action='store', dest='out_dir')
-  parser.add_argument('-v',
-                      '--verbose',
-                      action='count',
-                      dest='verbosity',
-                      default=0,
-                      help='Increase verbosity level (repeat as needed)')
-
-  return parser
-
-
-def _GetTraceEventProto(story_results_path):
-  for f in os.scandir(os.path.join(story_results_path, 'trace', 'traceEvents')):
-    if not f.is_file():
-      continue
-    if f.name.endswith('.pb') and f.name.count('.') == 1:
-      return f.path
-  return None
-
-
-def _GetProcessNameMapping(trace_path):
-  # We can not have it at the top level as perfetto is not checked out in some
-  # bots and this file is loaded in some tests to look for benchmarks
-  from perfetto.trace_processor import TraceProcessor  # pylint: disable=import-error,import-outside-toplevel
-  mappings = {}
-  logging.info("Getting prcess mappings from: %s ",
-               trace_path[len(ARTIFACTS_DIR) + 1:])
-  tp = TraceProcessor(file_path=trace_path)
-  res = tp.query('SELECT pid, name FROM process')
-  for r in res:
-    mappings[r.pid] = (r.name if r.name is not None else 'null')
-  return mappings
-
-
-def _AddProcessNameToProfile(input_path, output_path, process_name):
-  # We can not have it at the top level as perfetto is not checked out in some
-  # bots and this file is loaded in some tests to look for benchmarks
-  import profile_pb2  # pylint: disable=import-error,import-outside-toplevel
-  profile = profile_pb2.Profile()
-  with open(input_path, "rb") as f:
-    profile.ParseFromString(f.read())
-
-  process_name_id = len(profile.string_table)
-  profile.string_table.append(process_name)
-
-  new_function = profile_pb2.Function()
-  new_function.id = max([a.id for a in profile.function]) + 1
-  new_function.name = process_name_id
-  profile.function.append(new_function)
-
-  new_location = profile_pb2.Location()
-  new_location.id = max([a.id for a in profile.location]) + 1
-  new_line = new_location.line.add()
-  new_line.function_id = new_function.id
-  profile.location.append(new_location)
-
-  for sample in profile.sample:
-    sample.location_id.append(new_location.id)
-
-  with open(output_path, "wb") as f:
-    f.write(profile.SerializeToString())
-
-
-def _ProcessProfile(input_path, output_path, trace_path):
-  logging.info('Processing profile: %s', input_path[len(ARTIFACTS_DIR) + 1:])
-  pid_map = _GetProcessNameMapping(trace_path)
-
-  if not os.path.exists(output_path):
-    os.mkdir(output_path)
-
-  for p in os.scandir(input_path):
-    processed_profile_path = os.path.join(output_path, p.name)
-    parts = p.name.split('.')
-    if (len(parts) != 5 or not parts[3].isnumeric() or len(parts[3]) == 0):
-      logging.warning('Unexpected profile file: %s', p.name)
-      continue
-    pid = int(parts[3])
-    _AddProcessNameToProfile(p.path, processed_profile_path,
-                             pid_map.get(pid, '(unknown)'))
-
-
-def _RunTraceConv(command, build_out_path):
-  traceconv_env = os.environ.copy()
-  traceconv_env['PERFETTO_SYMBOLIZER_MODE'] = 'index'
-  traceconv_env['PERFETTO_BINARY_PATH'] = os.path.join(build_out_path,
-                                                       'lib.unstripped')
-  traceconv_env['PERFETTO_PROGUARD_MAP'] = 'org.chromium.*=' + os.path.join(
-      build_out_path, 'apks', 'ChromePublic.apk.mapping')
-
-  return subprocess.run([TRACECONV_PATH] + command,
-                        env=traceconv_env,
-                        check=True,
-                        capture_output=True)
-
-
-def _Symbolize(input_path, output_path, build_out_path):
-  logging.info('Symbolizing: %s', input_path[len(ARTIFACTS_DIR) + 1:])
-  cmd = ['symbolize', input_path, output_path]
-  return _RunTraceConv(cmd, build_out_path)
-
-
-def _Deobfuscate(input_path, output_path, build_out_path):
-  logging.info('Deobfuscating: %s', input_path[len(ARTIFACTS_DIR) + 1:])
-  cmd = ['deobfuscate', input_path, output_path]
-  return _RunTraceConv(cmd, build_out_path)
-
-
-def _Profile(input_path, output_path, build_out_path):
-  logging.info('Profiling: %s', input_path[len(ARTIFACTS_DIR) + 1:])
-  cmd = ['profile', "--perf", input_path]
-  run = _RunTraceConv(cmd, build_out_path)
-  if len(run.stdout) == 0:
-    os.mkdir(output_path)
-    return
-  profile_out_dir = run.stdout.split()[-1]
-  os.rename(profile_out_dir, output_path)
-
-
-def _Cat(input_paths, out_path):
-  logging.info('Concatenating: %s', ", ".join(input_paths))
-  with open(out_path, "wb") as out_f:
-    for input_path in input_paths:
-      with open(input_path, "rb") as in_f:
-        out_f.write(in_f.read())
-
-
-def _ProcessStory(story_results_path, build_out_path):
-  if not _HasTraceEvents(story_results_path):
-    logging.info('Skipping results with no traceEvents: %s',
-                 story_results_path[len(ARTIFACTS_DIR) + 1:])
-    return
-  logging.info('Processing results: %s',
-               story_results_path[len(ARTIFACTS_DIR) + 1:])
-
-  traceconv_env = os.environ.copy()
-  traceconv_env['PERFETTO_SYMBOLIZER_MODE'] = 'index'
-  traceconv_env['PERFETTO_BINARY_PATH'] = os.path.join(build_out_path,
-                                                       'lib.unstripped')
-  traceconv_env['PERFETTO_PROGUARD_MAP'] = 'org.chromium.*=' + os.path.join(
-      build_out_path, 'apks', 'ChromePublic.apk.mapping')
-
-  trace_file = _GetTraceEventProto(story_results_path)
-  if trace_file is None:
-    raise Exception('Did not find trace file in %s' % story_results_path)
-
-  base_path = os.path.splitext(trace_file)[0]
-  symbols_path = base_path + '.symbols.pb'
-  mappings_path = base_path + '.mappings.pb'
-  combined_path = base_path + '.combined.pb'
-  profile_path = os.path.join(os.path.dirname(combined_path), 'profile')
-  processed_profile_path = os.path.join(os.path.dirname(combined_path),
-                                        'processed_profile')
-
-  if not os.path.isfile(symbols_path):
-    _Symbolize(trace_file, symbols_path, build_out_path)
-
-  if not os.path.isfile(mappings_path):
-    _Deobfuscate(trace_file, mappings_path, build_out_path)
-
-  if not os.path.isfile(combined_path):
-    _Cat([trace_file, symbols_path, mappings_path], combined_path)
-
-  if not os.path.isdir(profile_path):
-    _Profile(combined_path, profile_path, build_out_path)
-
-  if not os.path.isdir(processed_profile_path):
-    _ProcessProfile(profile_path, processed_profile_path, trace_file)
-
-
-def _IsPowerStory(name):
-  name_without_repetition_count = '_'.join(name.split('_')[:-1])
-  return name_without_repetition_count in _POWER_STORIES
-
-
-def _IterateRunPaths():
-  for r in os.scandir(ARTIFACTS_DIR):
-    if not r.is_dir() or not r.name.startswith('run'):
-      continue
-    yield r.path
-
-
-def _IterateStoryPaths(run_path):
-  for s in os.scandir(run_path):
-    if s.is_dir() and _IsPowerStory(s.name):
-      yield s.path
-
-
-def _HasTraceEvents(story_results_path):
-  return os.path.isdir(os.path.join(story_results_path, 'trace', 'traceEvents'))
-
-
-def _ProcessRun(run_path):
-  combined_profile_path = os.path.join(run_path, 'combined_profile.pb.gz')
-  if os.path.exists(combined_profile_path):
-    return
-  logging.info('Generating combined profile: %s',
-               combined_profile_path[len(ARTIFACTS_DIR) + 1:])
-  profiles = []
-  for s in _IterateStoryPaths(run_path):
-    for p in os.scandir(
-        os.path.join(s, 'trace', 'traceEvents', 'processed_profile')):
-      profiles.append(p.path)
-  if len(profiles) == 0:
-    return
-  subprocess.run(['pprof', '-proto', '-output', combined_profile_path] +
-                 profiles,
-                 check=True,
-                 capture_output=True)
-
-
-def main():
-  parser = _CreateArgumentParser()
-  args = parser.parse_args()
-
-  if args.verbosity >= 2:
-    logging.getLogger().setLevel(logging.DEBUG)
-  elif args.verbosity == 1:
-    logging.getLogger().setLevel(logging.INFO)
-  else:
-    logging.getLogger().setLevel(logging.WARNING)
-
-  if not args.out_dir:
-    raise Exception('--out_dir missing')
-
-  build_out_path = os.path.abspath(os.path.expanduser(args.out_dir))
-
-  if not os.path.isdir(build_out_path):
-    raise Exception('Unable to find out_dir %s' % build_out_path)
-
-  for run_path in _IterateRunPaths():
-    for s in _IterateStoryPaths(run_path):
-      _ProcessStory(s, build_out_path)
-    _ProcessRun(run_path)
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/tools/perf/contrib/power/top_sites_story.py b/tools/perf/contrib/power/top_sites_story.py
deleted file mode 100644
index 3849458..0000000
--- a/tools/perf/contrib/power/top_sites_story.py
+++ /dev/null
@@ -1,234 +0,0 @@
-# Copyright 2022 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-import inspect
-import os
-
-from telemetry.page.page import Page
-from telemetry.story.story_set import StorySet
-from telemetry.page.shared_page_state import SharedPageState
-import py_utils
-
-
-class _GenericPage(object):
-  def __init__(self,
-               url,
-               scroll_repeat_count=6,
-               accept_cookies_button_selector=None):
-    self._url = url
-    self._scroll_repeat_count = scroll_repeat_count
-    self._accept_cookies_button_selector = accept_cookies_button_selector
-
-  @property
-  def url(self):
-    return self._url
-
-  def RunNavigateSteps(self, action_runner):
-    action_runner.Navigate(self._url)
-    action_runner.tab.WaitForDocumentReadyStateToBeComplete()
-    action_runner.Wait(5)
-
-  def RunPageInteractions(self, action_runner):
-    self.AllowCookies(action_runner)
-    action_runner.Wait(2)
-    self.Scroll(action_runner)
-
-  def Scroll(self, action_runner):
-    for _ in range(self._scroll_repeat_count):
-      action_runner.ScrollPage(distance=800, use_touch=True)
-      action_runner.Wait(0.4)
-
-  def AllowCookies(self, action_runner):
-    if self._accept_cookies_button_selector is not None:
-      self.MaybeTapElement(action_runner,
-                           selector=self._accept_cookies_button_selector)
-
-  def IsElementPresent(self, action_runner, text=None, selector=None):
-    try:
-      action_runner.WaitForElement(text=text,
-                                   selector=selector,
-                                   timeout_in_seconds=5)
-    except py_utils.TimeoutException:
-      return False
-    return True
-
-  def MaybeTapElement(self, action_runner, text=None, selector=None):
-    if self.IsElementPresent(action_runner, text=text, selector=selector):
-      action_runner.TapElement(text=text, selector=selector)
-
-
-class _AmazonPage(_GenericPage):
-  def __init__(self):
-    super(_AmazonPage, self).__init__(url='https://amazon.com')
-
-
-#class _AmazonSearchResultsPage(_GenericPage):
-#  def __init__(self):
-#    super(_AmazonSearchResultsPage,
-#          self).__init__(url='https://amazon.com/s?k=performance')
-
-
-class _BbcPage(_GenericPage):
-  def __init__(self):
-    super(_BbcPage, self).__init__(
-        url='https://bbc.co.uk',
-        accept_cookies_button_selector='button[id=bbccookies-continue-button]',
-        scroll_repeat_count=10)
-
-
-class _CnnPage(_GenericPage):
-  def __init__(self):
-    super(_CnnPage, self).__init__(
-        url='https://www.cnn.com',
-        scroll_repeat_count=10,
-        accept_cookies_button_selector='button[id=onetrust-accept-btn-handler]')
-
-
-class _EspnPage(_GenericPage):
-  def __init__(self):
-    super(_EspnPage, self).__init__(
-        url='https://www.espn.com',
-        accept_cookies_button_selector='button[id=onetrust-accept-btn-handler]')
-
-
-class _EtsyPage(_GenericPage):
-  def __init__(self):
-    super(_EtsyPage,
-          self).__init__(url='https://www.etsy.com',
-                         accept_cookies_button_selector=
-                         'button[data-gdpr-single-choice-accept=true]')
-
-
-class _GoogleSearchResultsPage(_GenericPage):
-  def __init__(self):
-    super(_GoogleSearchResultsPage,
-          self).__init__(url='https://google.com/search?q=performance')
-
-
-class _IkeaPage(_GenericPage):
-  def __init__(self):
-    super(_IkeaPage, self).__init__(
-        url='https://www.ikea.com/gb/en',
-        accept_cookies_button_selector='button[id=onetrust-accept-btn-handler]')
-
-
-class _ImdbPage(_GenericPage):
-  def __init__(self):
-    super(_ImdbPage, self).__init__(url='https://m.imdb.com')
-
-
-class _NYTimesPage(_GenericPage):
-  def __init__(self):
-    super(_NYTimesPage, self).__init__(url='https://www.nytimes.com')
-
-  # A popup shows for a while and automatically goes away. Wait for it to go
-  # # away before clicking the cookie
-  def AllowCookies(self, action_runner):
-    action_runner.Wait(5)
-    super(_NYTimesPage, self).AllowCookies(action_runner)
-
-
-#class _RedditPage(_GenericPage):
-#  def __init__(self):
-#    super(_RedditPage, self).__init__(url='https://reddit.com')
-
-#  def AllowCookies(self, action_runner):
-#    action_runner.TapElement(selector='button[class=XPromoPopup__actionButton]')
-
-#  Does not work because cookie accept is in an iframe and TapElement does not
-# go into iframes (See BusinessInsiderMobile2021)
-# class _TheGuardianPage(_GenericPage):
-#   def __init__(self):
-#     super(_TheGuardianPage, self).__init__(
-#         url='https://www.theguardian.com')
-
-#   def AllowCookies(self, action_runner):
-#     self.MaybeTapElement(action_runner, text='Yes, I’m happy')
-
-
-class _TwitterProfilePage(_GenericPage):
-  def __init__(self):
-    super(_TwitterProfilePage,
-          self).__init__(url='https://mobile.twitter.com/nasa',
-                         scroll_repeat_count=10)
-
-  def AllowCookies(self, action_runner):
-    self.MaybeTapElement(action_runner, text='Not now')
-    self.MaybeTapElement(action_runner, text='Accept all cookies')
-
-
-class _WikipediaArticlePage(_GenericPage):
-  def __init__(self):
-    super(_WikipediaArticlePage,
-          self).__init__(url='https://en.m.wikipedia.org/wiki/Computer_program')
-
-
-class _YahooNewsPage(_GenericPage):
-  def __init__(self):
-    super(_YahooNewsPage, self).__init__(url='https://news.yahoo.com/',
-                                         scroll_repeat_count=10)
-
-  def AllowCookies(self, action_runner):
-    selector = 'button[name=agree]'
-    if not self.IsElementPresent(action_runner, selector=selector):
-      return
-    action_runner.ScrollPage(distance=800, use_touch=True)
-    action_runner.Wait(1)
-    action_runner.TapElement(selector=selector)
-
-
-class _YoutubePage(_GenericPage):
-  def __init__(self):
-    super(_YoutubePage, self).__init__(url='https://youtube.com')
-
-
-# TODO: Add Amazon search results, Instagram, Facebook, Reddit, levi.com, theguardian
-
-
-def _GetAllPages():
-  classes = []
-  for _, obj in inspect.getmembers(sys.modules[__name__]):
-    if not inspect.isclass(obj):
-      continue
-    if not issubclass(obj, _GenericPage):
-      continue
-    # Exclude the _GenericPage itself.
-    if obj is _GenericPage:
-      continue
-    classes.append(obj)
-  return classes
-
-
-class _PowerSharedState(SharedPageState):
-  def ShouldReuseBrowserForAllStoryRuns(self):
-    return True
-
-
-class TopSitesStory(Page):
-  def __init__(self, story_set, name='power:scroll:top'):
-    super(TopSitesStory,
-          self).__init__(page_set=story_set,
-                         shared_page_state_class=_PowerSharedState,
-                         name=name,
-                         url="about:blank")
-
-    self._pages = [c() for c in _GetAllPages()]
-
-  def RunNavigateSteps(self, action_runner):
-    for page in self._pages:
-      page.RunNavigateSteps(action_runner)
-      page.RunPageInteractions(action_runner)
-      action_runner.Wait(10)
-
-  def RunPageInteractions(self, action_runner):
-    pass
-
-
-class ContribPowerMobileTopSitesStorySet(StorySet):
-  def __init__(self):
-    super(ContribPowerMobileTopSitesStorySet,
-          self).__init__(archive_data_file='data/contrib_power_mobile.json',
-                         base_dir=os.path.dirname(os.path.abspath(__file__)))
-    self.AddStory(TopSitesStory(self))
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml
index efc22c8..45d8d63 100644
--- a/tools/traffic_annotation/summary/annotations.xml
+++ b/tools/traffic_annotation/summary/annotations.xml
@@ -382,4 +382,5 @@
  <item id="quick_answers_loader" added_in_milestone="105" content_hash_code="070b3239" os_list="chromeos" file_path="chromeos/components/quick_answers/result_loader.cc" />
  <item id="chrome_search_suggest_service" added_in_milestone="105" content_hash_code="04d973c6" os_list="linux,windows,android,chromeos" file_path="components/search/start_suggest_service.cc" />
  <item id="coupon_persisted_tab_data" added_in_milestone="105" content_hash_code="006dcd97" os_list="android" file_path="chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CouponPersistedTabData.java" />
+ <item id="speculation_rules_prefetch_probe" added_in_milestone="105" content_hash_code="04341e21" os_list="linux,windows,android,chromeos" file_path="content/browser/preloading/prefetch/prefetch_origin_prober.cc" />
 </annotations>
diff --git a/tools/traffic_annotation/summary/grouping.xml b/tools/traffic_annotation/summary/grouping.xml
index 5718720..b46a3b5 100644
--- a/tools/traffic_annotation/summary/grouping.xml
+++ b/tools/traffic_annotation/summary/grouping.xml
@@ -423,6 +423,7 @@
       <annotation id="predictive_prefetch"/>
       <annotation id="prefetch_proxy_probe"/>
       <annotation id="speculation_rules_prefetch"/>
+      <annotation id="speculation_rules_prefetch_probe"/>
     </sender>
   </group>
   <group name="Updates, Recovery, and Crash Reports" hidden="true">
diff --git a/ui/accessibility/ax_node.cc b/ui/accessibility/ax_node.cc
index 860d0ba8..870e686 100644
--- a/ui/accessibility/ax_node.cc
+++ b/ui/accessibility/ax_node.cc
@@ -4,12 +4,8 @@
 
 #include "ui/accessibility/ax_node.h"
 
-#include <string.h>
-
 #include <algorithm>
 
-#include "base/debug/crash_logging.h"
-#include "base/debug/dump_without_crashing.h"
 #include "base/no_destructor.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
@@ -50,7 +46,6 @@
 AXNode::~AXNode() = default;
 
 AXNodeData&& AXNode::TakeData() {
-  has_data_been_taken_ = true;
   return std::move(data_);
 }
 
@@ -166,28 +161,10 @@
 }
 
 AXNode* AXNode::GetUnignoredParent() const {
-  // TODO(crbug.com/1237353): The following bailout is to test a hypothesis that
-  // this function is sometimes called while a tree update is in progress or
-  // when data_ isn't valid, which may be the cause of the crash detailed in
-  // crbug.com/1237353. Once this hypothesis has been verified, replace the
-  // bailout with a fix, which ideally should not call this function under
-  // the circumstances hypothesized. Also, add back in the following line:
-  // DCHECK(!tree_->GetTreeUpdateInProgressState());
-  if (tree_->GetTreeUpdateInProgressState() || !IsDataValid()) {
-    static auto* const crash_key = base::debug::AllocateCrashKeyString(
-        "ax_node_err", base::debug::CrashKeySize::Size64);
-    std::ostringstream error;
-    error << "dataUninitialized=" << is_data_still_uninitialized_
-          << " dataTaken=" << has_data_been_taken_
-          << " treeUpdating=" << tree_->GetTreeUpdateInProgressState();
-    base::debug::SetCrashKeyString(crash_key, error.str());
-    base::debug::DumpWithoutCrashing();
-    return nullptr;
-  }
+  DCHECK(!tree_->GetTreeUpdateInProgressState());
   AXNode* unignored_parent = GetParent();
   while (unignored_parent && unignored_parent->IsIgnored())
     unignored_parent = unignored_parent->GetParent();
-
   return unignored_parent;
 }
 
@@ -722,8 +699,6 @@
 
 void AXNode::SetData(const AXNodeData& src) {
   data_ = src;
-  is_data_still_uninitialized_ = false;
-  has_data_been_taken_ = false;
 }
 
 void AXNode::SetLocation(AXNodeID offset_container_id,
@@ -1618,10 +1593,6 @@
   return result;
 }
 
-bool AXNode::IsDataValid() const {
-  return !is_data_still_uninitialized_ && !has_data_been_taken_;
-}
-
 bool AXNode::IsReadOnlySupported() const {
   // Grid cells and headers can't be derived solely from the role (need to check
   // the ancestor chain) so check this first.
diff --git a/ui/accessibility/ax_node.h b/ui/accessibility/ax_node.h
index be45812..f922cd5 100644
--- a/ui/accessibility/ax_node.h
+++ b/ui/accessibility/ax_node.h
@@ -262,6 +262,8 @@
   // be before (logically less) the node we visit later.
   absl::optional<int> CompareTo(const AXNode& other) const;
 
+  bool IsDataValid() const { return data_.id != kInvalidAXNodeID; }
+
   // Returns true if the node has any of the text related roles, including
   // kStaticText, kInlineTextBox and kListMarker (for Legacy Layout). Does not
   // include any text field roles.
@@ -732,10 +734,6 @@
   // Finds and returns a pointer to ordered set containing node.
   AXNode* GetOrderedSet() const;
 
-  // Returns false if the |data_| is uninitialized or has been taken. Returns
-  // true otherwise.
-  bool IsDataValid() const;
-
   // Returns true if the node supports the read-only attribute.
   bool IsReadOnlySupported() const;
 
@@ -775,13 +773,6 @@
   // computed by the tree's source, such as `content::BlinkAXTreeSource`.
   AXNodeData data_;
 
-  // Used to track when this object's data_ is valid. If either of these are
-  // true, and data is accessed, there will be a crash.
-  // TODO(crbug.com/1237353): Wrap this inside of an `#if DCHECK_IS_ON()` after
-  // removing `DumpWithoutCrashing`.
-  bool is_data_still_uninitialized_ = true;
-  bool has_data_been_taken_ = false;
-
   // See the class comment in "ax_hypertext.h" for an explanation of this
   // member.
   mutable AXHypertext hypertext_;
diff --git a/ui/accessibility/ax_node_data.cc b/ui/accessibility/ax_node_data.cc
index fb5dc8a9..342bdc45 100644
--- a/ui/accessibility/ax_node_data.cc
+++ b/ui/accessibility/ax_node_data.cc
@@ -257,9 +257,14 @@
   html_attributes.swap(other.html_attributes);
   child_ids.swap(other.child_ids);
   relative_bounds = other.relative_bounds;
+
+  other.id = kInvalidAXNodeID;
+  other.role = ax::mojom::Role::kUnknown;
+  other.state = 0U;
+  other.actions = 0ULL;
 }
 
-AXNodeData& AXNodeData::operator=(AXNodeData other) {
+AXNodeData& AXNodeData::operator=(const AXNodeData& other) {
   id = other.id;
   role = other.role;
   state = other.state;
diff --git a/ui/accessibility/ax_node_data.h b/ui/accessibility/ax_node_data.h
index 2e6dfddf..6504ead 100644
--- a/ui/accessibility/ax_node_data.h
+++ b/ui/accessibility/ax_node_data.h
@@ -49,7 +49,7 @@
 
   AXNodeData(const AXNodeData& other);
   AXNodeData(AXNodeData&& other);
-  AXNodeData& operator=(AXNodeData other);
+  AXNodeData& operator=(const AXNodeData& other);
 
   // Accessing accessibility attributes:
   //
diff --git a/ui/base/ime/ash/input_method_manager.h b/ui/base/ime/ash/input_method_manager.h
index 66623e0..2f8c64b 100644
--- a/ui/base/ime/ash/input_method_manager.h
+++ b/ui/base/ime/ash/input_method_manager.h
@@ -242,6 +242,8 @@
     // Sets the currently allowed input methods due to policy. Invalid
     // input method ids are ignored. Passing an empty vector means that all
     // input methods are allowed, which is the default.
+    // Automatically enables allowed methods in Kiosk sessions if the vector is
+    // non-empty.
     virtual bool SetAllowedInputMethods(
         const std::vector<std::string>& allowed_input_method_ids) = 0;
 
diff --git a/ui/base/wayland/wayland_input_types_unittest.cc b/ui/base/wayland/wayland_input_types_unittest.cc
index c967320..93fa339 100644
--- a/ui/base/wayland/wayland_input_types_unittest.cc
+++ b/ui/base/wayland/wayland_input_types_unittest.cc
@@ -17,7 +17,7 @@
   }
 
   // Passing the invalid value returns nullopt.
-  constexpr auto kInvalidValue =
+  auto kInvalidValue =
       static_cast<zcr_extended_text_input_v1_input_type>(0xFFFFFFFF);
   EXPECT_FALSE(ConvertToTextInputType(kInvalidValue).has_value());
 }
@@ -31,7 +31,7 @@
   }
 
   // Passing the invalid value returns nullopt.
-  constexpr auto kInvalidValue =
+  auto kInvalidValue =
       static_cast<zcr_extended_text_input_v1_input_mode>(0xFFFFFFFF);
   EXPECT_FALSE(ConvertToTextInputMode(kInvalidValue).has_value());
 }
diff --git a/ui/compositor/layer_owner.cc b/ui/compositor/layer_owner.cc
index 80ae0aa..aa5cd871 100644
--- a/ui/compositor/layer_owner.cc
+++ b/ui/compositor/layer_owner.cc
@@ -7,7 +7,7 @@
 // layer_owner.h is a widely included header and its size impacts build
 // time. Try not to raise this limit unless necessary. See
 // https://chromium.googlesource.com/chromium/src/+/HEAD/docs/wmax_tokens.md
-#pragma clang max_tokens_here 550000
+#pragma clang max_tokens_here 551000
 
 #include <utility>
 
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate.cc b/ui/views/accessibility/view_ax_platform_node_delegate.cc
index f6318482..a3cca9d7 100644
--- a/ui/views/accessibility/view_ax_platform_node_delegate.cc
+++ b/ui/views/accessibility/view_ax_platform_node_delegate.cc
@@ -154,7 +154,9 @@
       ax_platform_node_->GetNativeViewAccessible()) {
     ui::AXPlatformNode::SetPopupFocusOverride(nullptr);
   }
-  ax_platform_node_->Destroy();
+  // Call ExtractAsDangling() first to clear the underlying pointer and return
+  // another raw_ptr instance that is allowed to dangle.
+  ax_platform_node_.ExtractAsDangling()->Destroy();
 }
 
 bool ViewAXPlatformNodeDelegate::IsAccessibilityFocusable() const {
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate.h b/ui/views/accessibility/view_ax_platform_node_delegate.h
index 6b2b918..947de76 100644
--- a/ui/views/accessibility/view_ax_platform_node_delegate.h
+++ b/ui/views/accessibility/view_ax_platform_node_delegate.h
@@ -166,7 +166,7 @@
 
   // We own this, but it is reference-counted on some platforms so we can't use
   // a unique_ptr. It is destroyed in the destructor.
-  raw_ptr<ui::AXPlatformNode, DanglingUntriaged> ax_platform_node_ = nullptr;
+  raw_ptr<ui::AXPlatformNode> ax_platform_node_ = nullptr;
 
   mutable ui::AXNodeData data_;
 };
diff --git a/ui/views/examples/BUILD.gn b/ui/views/examples/BUILD.gn
index cdccb2c..18932a0 100644
--- a/ui/views/examples/BUILD.gn
+++ b/ui/views/examples/BUILD.gn
@@ -262,6 +262,7 @@
     "//content",
     "//content:sandbox_helper_win",
     "//sandbox",
+    "//ui/color:mixers",
     "//ui/views_content_client",
   ]
 
diff --git a/ui/views/examples/examples_with_content_main.cc b/ui/views/examples/examples_with_content_main.cc
index 1052d5bf..b184188 100644
--- a/ui/views/examples/examples_with_content_main.cc
+++ b/ui/views/examples/examples_with_content_main.cc
@@ -9,12 +9,14 @@
 #include "build/build_config.h"
 #include "content/public/browser/browser_context.h"
 #include "ui/base/resource/resource_bundle.h"
+#include "ui/views/examples/examples_color_mixer.h"
 #include "ui/views/examples/examples_window.h"
 #include "ui/views/examples/examples_window_with_content.h"
 #include "ui/views_content_client/views_content_client.h"
 
 #if BUILDFLAG(IS_MAC)
 #include "sandbox/mac/seatbelt_exec.h"
+#include "ui/display/screen.h"
 #endif
 
 #if BUILDFLAG(IS_WIN)
@@ -65,6 +67,13 @@
 #else
 int main(int argc, const char** argv) {
   base::CommandLine::Init(argc, argv);
+
+#if BUILDFLAG(IS_MAC)
+  display::ScopedNativeScreen desktop_screen;
+#endif
+  ui::ColorProviderManager::Get().AppendColorProviderInitializer(
+      base::BindRepeating(&views::examples::AddExamplesColorMixers));
+
   ui::ViewsContentClient views_content_client(argc, argv);
 #endif
 
diff --git a/weblayer/public/java/org/chromium/browserfragment/Browser.java b/weblayer/public/java/org/chromium/browserfragment/Browser.java
index a104e090..0f7d2de 100644
--- a/weblayer/public/java/org/chromium/browserfragment/Browser.java
+++ b/weblayer/public/java/org/chromium/browserfragment/Browser.java
@@ -103,4 +103,14 @@
             return null;
         }
     }
+
+    /**
+     * Enables or disables DevTools remote debugging.
+     */
+    public void setRemoteDebuggingEnabled(boolean enabled) {
+        try {
+            mBrowserSandboxService.setRemoteDebuggingEnabled(enabled);
+        } catch (RemoteException e) {
+        }
+    }
 }
diff --git a/weblayer/public/java/org/chromium/browserfragment/interfaces/IBrowserSandboxService.aidl b/weblayer/public/java/org/chromium/browserfragment/interfaces/IBrowserSandboxService.aidl
index 064ab04..60fe239 100644
--- a/weblayer/public/java/org/chromium/browserfragment/interfaces/IBrowserSandboxService.aidl
+++ b/weblayer/public/java/org/chromium/browserfragment/interfaces/IBrowserSandboxService.aidl
@@ -12,4 +12,6 @@
 
     // TODO(rayankans): Pass fragment creation params (profile name, persistence ID, etc.)
     IBrowserFragmentDelegate createFragmentDelegate() = 2;
+
+    void setRemoteDebuggingEnabled(in boolean enabled) = 3;
 }
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/weblayer/BrowserSandboxService.java b/weblayer/public/java/org/chromium/weblayer/BrowserSandboxService.java
index 16f8f82a..965cef4d 100644
--- a/weblayer/public/java/org/chromium/weblayer/BrowserSandboxService.java
+++ b/weblayer/public/java/org/chromium/weblayer/BrowserSandboxService.java
@@ -47,6 +47,13 @@
 
             return new BrowserFragmentDelegate(mContext, mWebLayer);
         }
+
+        @Override
+        public void setRemoteDebuggingEnabled(boolean enabled) {
+            assert mWebLayer != null;
+            mWebLayer.setRemoteDebuggingEnabled(enabled);
+        }
+
     };
 
     @Override
diff --git a/weblayer/shell/android/browserfragment_shell_apk/src/org/chromium/browserfragment/shell/BrowserFragmentShellActivity.java b/weblayer/shell/android/browserfragment_shell_apk/src/org/chromium/browserfragment/shell/BrowserFragmentShellActivity.java
index 0744960a..8390eb6a 100644
--- a/weblayer/shell/android/browserfragment_shell_apk/src/org/chromium/browserfragment/shell/BrowserFragmentShellActivity.java
+++ b/weblayer/shell/android/browserfragment_shell_apk/src/org/chromium/browserfragment/shell/BrowserFragmentShellActivity.java
@@ -51,6 +51,8 @@
     }
 
     private void onBrowserReady(Browser browser) {
+        browser.setRemoteDebuggingEnabled(true);
+
         BrowserFragment fragment = browser.createFragment();
 
         fragment.registerTabObserver(new TabObserver() {